<>for循环

在while循环中打印1-10,代码如下
int main() { int i = 1;//初始化 while(i <= 10)//判断部分 { printf("%d",i); i++;//调整部分
} return 0; }
while循环中的初始化部分与判断部分和调整部分相离太远,而在for循环中语法如下:

语法
for(表达式1;表达式2;表达式3) { 循环语句; }
表达式1为初始化部分;表达式2为条件判断部分;表达式3为调整部分

for循环在屏幕上打印1-10
int main() { int i=0; for(i=1;i<=10;i++) { //初始化;判断;调整 printf("%d",i); } return
0; }

我们可以发现在while循环中依然存在循环的三个必须条件,但是由于风格的问题使得三个部分很可能偏离较远,这样查找修改就不够集中和方便。所以,for循环的风格更胜一筹。
for循环使用的频率也最高。

for循环中的break
int main() { int i=0; for(i=1;i<=10;i++) { if(i==5) break; printf("%d",i);
//1234 } return 0; }

break的作用与while循环一样,也是跳出整个循环。

for循环中的continue
int main() { int i=0; for(i=1;i<=10;i++) { if(i==5) continue; printf("%d",i);
//1234 678910 } return 0; }

在i=5时,continue,continue的作用跳过continue下面的语句,所以continue跳过了i=5时的打印,跳过后继续i++,所以有了后面的打印。

对于写for循环的建议

1.不要在调整循环体内修改循环变量的值,防止循环体失去控制

2.建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
int i = 0; //前闭后开的写法 for(i=0; i<10; i++) {} //两边都是闭区间 for(i=0; i<=9; i++) {}
int main() { int arr[10]={0}; int i=0; for(i=0;i<10;i++) { printf("%d",arr[i]);
} //两边都是闭区间 /*for(i=0;i<=9;i++) { printf("%d",arr[i]); }*/ return 0; }
一些for循环的变种

判断部分的省略 - 判断部分恒为真
int main() { for(;;) { printf("haha");//陷入死循环 } return 0; }
这是判断部分恒为真,所以陷入死循环

下面再看一个代码
int main() { int i=0; int j=0; for(i=0;i<3;i++) { for(j=0;j<3;j++) { printf(
"haha\n");//9个haha } } return 0; }

上面嵌套循环,当我们将i=0;j=0;初始化部分省略
int main() { int i=0; int j=0; for(;i<3;i++) { for(;j<3;j++) { printf("haha\n")
;//3个haha } } return 0; }

这里只执行了i=0时的三个haha,当i=1时,此时j=3,j不小于3,进不去循环,以此类推,后面都进不去循环

笔试题

请问循环要循环多少次?
int main() { int i=0; int k=0; for(i=0,k=0;k=0;i++,k++) k++; return 0; }
答案是0次,注意判断区域是赋值号,判断为假,所以循环进不去。

<>do……while循环
do 循环语句; whlie(表达式);
do语句的特点

循环至少执行一次,使用的场景有限,所以不是经常使用。

do while循环打印1-10:
int main() { int i=1; do { printf("%d ",i); i++; }while(i<=10); }
do while循环中的break和continue
int main() { int i=1; do { if(i==5) { break; } printf("%d ",i); i++; }while(i<=
10); }
打印1 2 3 4,i==5时,break跳出循环

int main() { int i=1; do { if(i==5) { continue; } printf("%d ",i); i++; }while(
i<=10); }
continue跳过之后的语句,跳过了i++,所以打印了1 2 3 4 后陷入了死循环

<>练习

1.计算n的阶乘
//计算n的阶乘 #include<stdio.h> int main() { int n = 0; scanf("%d", &n); int temp =
1; for (int i = 1; i <= n; i++) { temp = temp * i; } printf("%d", temp); return
0; }
2.计算1!+……+10!

方法一:
//计算1!+……+10! //方法一: #include<stdio.h> int main() { int n = 0; int temp = 1;
int sum = 0; for (n=1;n<=10; n++) { temp = 1;//计算n的阶乘之前,把temp置为1 for (int i = 1;
i<= n; i++) { temp = temp * i; } sum = sum + temp; } printf("%d", sum); return
0; }
方法二:
#include<stdio.h> int main() { int temp = 1; int sum = 0; for (int n = 1; n <=
3; n++) { temp = temp * n; //1*1 1*1*2 1*1*2*3// sum = sum + temp; } printf("%d"
, sum); return 0; }
* 折半查找算法 #include<stdio.h> int main() { int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int k = 7;//要查找的数字 //在arr这个有序的数组中查找k(7)的值 int sz = sizeof(arr) / sizeof(arr[0]);
int left = 0; int right = sz - 1; while (left<=right) { int mid = (left + right)
/ 2; if (arr[mid] < k) { left = mid + 1; } else if (arr[mid] > k) { right = mid
- 1; } else { printf("找到了,下标为:%d\n", arr[mid]); break; } } if (left > right) {
printf("找不到\n"); } return 0;
*
编写代码,演示多个字符从两端移动,向中间汇聚。
#include<stdio.h> #include<windows.h> #include<string.h> int main() { char arr1
[] = "welcome to bit!!!!!!"; char arr2[] = "####################"; int left = 0;
int right = strlen(arr1) - 1; while (left <= right) { arr2[left] = arr1[left];
arr2[right] = arr1[right]; printf("%s\n",arr2); Sleep(1000);//睡眠一秒 system("cls")
;//清空屏幕 left++; right--; } return 0; }
*
编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则提示登录成功,如果三次均输入错误,则退出程序。
#include<stdio.h> #include<string.h> int main() { int i = 0; //假设正确密码"123456"
char password[20] = { 0 }; for (i = 0; i < 3; i++) { printf("请输入密码:>"); scanf(
"%s", password); //if(password=="123456")//err-字符串比较不能使用==,需要使用strcmp if (strcmp
(password, "123456") == 0)//比较成功返回0 { printf("登陆成功\n"); } else { printf(
"密码错误,重新输入!\n"); } } if (i == 3) { printf("三次密码均错误,退出程序\n"); } return 0; }
6.猜数字游戏
//猜数字游戏 //1.自动产生一个1-100之间的随机数 //2.猜数字 // a.猜对了,就恭喜你,游戏结束 //
b.你猜错了,会告诉你猜大了,还是猜小了,继续猜,知道猜对 //3.游戏一个一直玩,除非退出游戏 #include<stdio.h> #include
<time.h> void menu() { printf("***************************\n"); printf(
"******** 1.play *********\n"); printf("******** 0.exit *********\n"); printf(
"***************************\n"); } void game() { //猜数字游戏的实现 //1.生成随机数
//rand函数返回了一个0-32767之间的数字 //一个时间对应一个时间戳 int ret = rand()%100+1;
//%100的余数是0-99,然后+1,就是0-100 //printf("%d\n", ret); //2.猜数字 int guess = 0; while
(1) { printf("请猜数字:>"); scanf("%d", &guess); if (guess < ret) { printf("猜小了\n");
} else if (guess > ret) { printf("猜大了\n"); } else { printf("恭喜你猜对了\n"); break; }
} } int main() { int input = 0; srand((unsigned int)time(NULL)); do { menu();
//打印菜单 printf("请选择:>"); scanf("%d", &input); switch (input) { case 1: game();
break; case 0: printf("退出游戏\n"); break; default: printf("选择错误,重新选择"); break; } }
while(input); return 0; }

技术
©2019-2020 Toolsou All rights reserved,
vue项目中使用本地静态JS数据文件利用克鲁斯卡尔算法求最小生成树C++ 移动构造函数和拷贝构造函数华为鸿蒙 HarmonyOS 2 正式发布VS添加动态链接库的两种方法python_樱花树Jmeter配置元件之HTTP授权管理器与 HTTP缓存管理器-19vue+element-ui里面table组件多选框实现批量操作RISC-V指令集架构特点及其总结js实现上下文菜单