循环控制语句
while循环
基本语法
while (循环条件表达式)
{
循环体语句;
}
流程图
案例——计数循环
实现计数循环要满足:
①必须初始化循环变量
②循环变量比较作为循环条件
③循环变量变化。
代码展示
1.循环输出数字 7~15
#include <stdio.h>
int main()
{
int i = 7;
while (i <= 15)
{
printf("%d \n", i);
i++;
}
printf("循环后变量的值为:%d \n", i);
return 0;
}
2.倒序输出数字 53 ~ 48
#include <stdio.h>
int main()
{
// 倒序输出53-48
int i = 53;
while (i >= 48)
{
printf("%d \n", i);
i--;
}
printf("循环结束后,循环变量的值:%d \n",i);
return 0;
}
3.输出10(包括10)以内所有的偶数
#include <stdio.h>
int main()
{
// 输出10以内的偶数
int i = 0;
while (i <= 10)
{
if (i % 2 == 0)
{
printf("%d \n", i);
}
i++;
}
printf("循环结束后,循环变量的值:%d \n", i);
// 方式2:
int j = 0;
while (j <= 10)
{
printf("%d \n", j);
j += 2;
}
printf("循环结束后,循环变量的值:%d \n", j);
return 0;
}
案例——不确定循环
不确定循环直到循环表达式不成立之前,不确定循环次数,不需要循环变量。
实现需求:输入5位数密码,直到密码匹配成功结束循环。
#include <stdio.h>
int main()
{
// 提示用户输入密码,只要不是12345,就一直提示
int pwd;
while (pwd != 12345)
{
printf("请输入密码:");
scanf("%d", &pwd);
}
printf("程序结束,您输入的密码是:12345");
return 0;
}
do...while循环
基本语法
do
{
循环体语句;
} while (循环条件表达式);
流程图
案例——计数循环
实现计数循环要满足:
①必须初始化循环变量
②循环变量比较作为循环条件
③循环变量变化。
代码展示
1.循环输出数字 7~15
#include <stdio.h>
int main()
{
// (2)循环输出数字7~15
int i = 7;
do
{
printf("%d \n", i);
i++;
} while (i <= 15);
printf("循环结束后,循环变量的值为:%d \n", i);
return 0;
}
2.计算100以内(包括100)所有数字的和
#include <stdio.h>
int main()
{
int i = 0;
int sum = 0;
do
{
sum += i;
i ++;
} while (i <= 100);
printf("计算100以内(包括100)所有数字的和:%d \n",sum);
printf("循环结束后,循环变量的值为:%d \n", i);
return 0;
}
3.计算10以内所有奇数的乘积
#include <stdio.h>
int main()
{
// 计算10以内所有奇数的乘积
int i = 1;
int result = 1;
do
{
result *= i;
i += 2;
} while (i < 10);
printf("10以内所有奇数的乘积:%d \n", result);
printf("循环结束后,循环变量的值为:%d \n", i);
return 0;
}
案例——不确定循环
实现需求:输入5位数密码,直到密码匹配成功结束循环。
#include <stdio.h>
int main()
{
// 输入5位数密码,直到密码匹配成功结束循环
int pwd;
do
{
printf("请输入密码 \n");
scanf("%d",&pwd);
} while (pwd!=12345);
printf("程序结束,输入的密码是:%d", pwd);
return 0;
}
while和do...while的差异
#include <stdio.h>
int main()
{
// while和do_while循环的区别
// 请输入密码
int pwd = 123;
while (pwd != 123)
{
printf("请输入密码 \n");
scanf("%d", &pwd);
}
printf("程序结束1 \n");
do
{
printf("请输入密码 \n");
scanf("%d", &pwd);
} while (pwd != 123);
printf("程序结束2 \n");
return 0;
}
总结: do_while循环至少执行一次,while循环有可能一次都不执行
for循环
基本语法
for (循环变量初始化; 循环条件表达式; 循环变量变化)
{
循环语句;
}
说明:
- 循环变量初化只执行一次,且循环开始前就执行。
- 循环条件表达式每次循环都执行,同while循环一样,每次先判断后执行循环体语句。
- 循环标记变量变化每次循环都执行,在大括号中循环体语句之后执行。
流程图
代码展示
1.循环输出数字 7~15
#include <stdio.h>
int main()
{
for (int i = 7; i <= 15; i++)
{
printf("%d \n", i);
}
return 0;
}
2.计算100以内(包括100)所有数字的和
#include <stdio.h>
int main()
{
// 1-100所有的和
int sum = 0;
for (int i = 0; i <= 100; i++)
{
sum += i;
}
printf("1-100所有数字和为:%d \n", sum);
return 0;
}
3.计算10以内所有奇数的乘积
#include <stdio.h>
int main()
{
// 10以内奇数的乘积
int result = 1;
for (int i = 1; i < 10; i += 2)
{
result *= i;
}
printf("10以内的奇数乘积为:%d \n", result);
return 0;
}
案例——不确定循环
实现需求:输入5位数密码,直到密码匹配成功结束循环。
#include <stdio.h>
int main()
{
// 不确定循环,输入密码
for (int pwd; pwd!=123; )
{
printf("请输入密码 \n");
scanf("%d",&pwd);
}
printf("程序结束");
return 0;
}
案例——特殊结构的for循环
#include <stdio.h>
int main()
{
// 特殊的一些写法
for (int i = 0; i < 5; i++)
{
printf("正常的写法 \n");
}
// 循环变量放在外面
int j = 0;
for (; j < 3; j++)
{
printf("循环变量放在外面 \n");
}
// 循环变量放在外面,标记变量放在大括号内部
int k = 0;
for (; k < 3;)
{
printf("循环变量放在外面,标记变量放在大括号里面 \n");
k++;
}
// 使用多个循环标记变量
for (int i = 0, y = 0; i < 5 && y < 3; i++, y++)
{
printf("%d,%d \n", i, y);
}
// 死循环
for (;;)
{
printf("死循环 \n");
}
return 0;
}
多重循环
介绍
- 将一个循环放在另一个循环体内,就形成了嵌套循环, 其中,for、while、do…while均可以作为外层循环和内层循环,建议一般使用两层,最多不要超过3层,如果嵌套循环过多,会造成可读性降低。
- 如果外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m*n次。
代码示例
#include <stdio.h>
int main()
{
// 多重循环
// 根据用户输入的行数和列数,遍历产生对应的行和列
int rows, cols;
printf("请输入行数 \n");
scanf("%d", &rows);
printf("请输入列数 \n");
scanf("%d", &cols);
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
printf("[%d,%d]", i, j);
}
printf("\n");
}
return 0;
}
如果输入的行数是4,列数是7,输出结果如下:
[0,0][0,1][0,2][0,3]
[1,0][1,1][1,2][1,3]
[2,0][2,1][2,2][2,3]
案例
分别打印出以下两种形式的九九乘法表。
#include <stdio.h>
int main()
{
// 第一种乘法表,外层循环控制行数,内层循环控制列数
for (int i = 1; i <= 9; i++)
{
for (int j = 1; j <= i; j++)
{
printf("%d*%d=%d \t", j, i, i * j);
}
printf("\n");
}
return 0;
}
#include <stdio.h>
int main()
{
// 第一种乘法表,外层循环控制行数,内层循环控制列数
for (int i = 1; i <= 9; i++)
{
// 随着行数的增加,空白符越来越少
for (int j = 1; j <= 9 - i; j++)
{
printf("\t");
}
for (int j = 1; j <= i; j++)
{
printf("%d*%d=%d\t", j, i, i * j);
}
printf("\n");
}
return 0;
}
跳转控制语句
break
介绍
break语句用于终止某个语句块的执行,用在switch语句或者循环语句中
流程图
案例
1.编写程序,要求输入一个数字,判断该数字是否是质数。
说明:质数指只能被1和自身整除且大于1的数字。
#include <stdio.h>
#include <stdbool.h>
int main()
{
// 输入一个数字判断是不是质数
int prime;
printf("请输入数字 \n");
scanf("%d", &prime);
_Bool isPrime = prime > 1 ? 1 : 0;
// 质数:只能被1和自身整除,但是如果和这个数字的一半都进行过取余,
// 并且没有整除,就没有必要向后继续的进行取余了
for (int i = 2; i <= prime / 2; i++)
{
if (prime % i == 0)
{
isPrime = 0; // 能够整除,说明不是质数
break;
}
}
if (isPrime)
{
printf("%d是质数", prime);
}
else
{
printf("%d不是质数", prime);
}
return 0;
}
continue
介绍
continue语句用于结束本次循环,继续执行下一次循环。
流程图
案例
1.输出100以内(包括100)的数字,跳过那些7的倍数或包含7的数字。
#include <stdio.h>
int main()
{
// 敲7游戏 跳转100以内所有7的倍数的数字,包含7的数字
for (int i = 0; i <= 100; i++)
{
// i % 7 判断 7 的倍数
// i % 10 判断个位上带7的数字
// i / 10 判断十位上带7的数字
if (i % 7 == 0 || i % 10 == 7 || i / 10 == 7)
{
continue;
}
printf("%d\n", i);
}
return 0;
}
goto
介绍
goto
语句是一种跳转语句,它允许程序控制流程在代码中跳转到带有标签(label)的语句处,标签(label)的名称可以自行设置,需要满足标识符规范。
注意,我们在开发中不建议使用goto语句,但我们需要掌握 goto 语句的执行流程,以能够看懂其他开发者的代码中可能出现的 goto 语句。
基本语法
goto 标签名 // 跳转到指定的标签(label)处
...
标签名: // 定义一个标签(label)
语句;
流程图
案例
使用goto语句实现循环输出数字1 ~ 5。
#include <stdio.h>
int main()
{
// 使用goto,实现循环1-5数字的显示
int i = 1;
start:
if(i<=5){
printf("%d\t",i);
i++;
goto start;
}
return 0;
}
标签:main,int,嵌入式,while,循环,printf,第五天,include,日记
From: https://blog.csdn.net/Find_tim/article/details/142641157