2308-循环结构 while + for + do while
循环结构
1.while循环
while(表达式)
循环语句
若表达式为真,则执行
break:
1 int main() 2 { 3 int i = 1; 4 while (i <= 10) 5 { 6 if (i == 5) 7 break;//while循环永久终止 8 printf("%d\n", i); 9 i++; 10 } 11 return 0; 12 }
-------------------------
continue:
1 int main() 2 { 3 int i = 1; 4 while (i <= 10) 5 { 6 if (i == 5) 7 continue;//跳过本次循环,直接去if判断部分 8 printf("%d\n", i); 9 i++; 10 } 11 return 0;
-------------------------
getchar,putchar:
1 int main() 2 { 3 int ch = getchar();//getchar为读取字符 4 putchar(ch);//等效于printf("%c\n",ch); 5 6 int zh = 0; 7 while ((zh = getchar()) != EOF)//ctrl+z结束读取 8 { 9 putchar(zh); 10 } 11 return 0; 12 }
要注意不论是scanf还是getchar读入的字符都会含有\n,留存在缓冲区(buffer),在执行时要注意清除掉
1 #define _CRT_SECURE_NO_WARNINGS 1 2 #include <stdio.h> 3 int main() 4 { 5 char password[20] = { 0 }; 6 printf("请输入密码:>"); 7 scanf("%s", password);//字符串不用地址符,注意字符会读取到\n,因为回车结束scanf 8 printf("请确认密码(Y/N):>"); 9 //清理缓存区的多个字符 10 int temp = 0; 11 while ((temp = getchar()) != '\n') 12 { 13 ;//每个循环把非\n元素清除,直到遇到\n最后清理掉跳出循环 14 } 15 16 int ch = getchar();//getchar为读取字符 17 if (ch == 'Y') 18 printf("确认成功\n"); 19 else 20 printf("确认失败\n"); 21 return 0; 22 }
其他用法:
意思是输入的字符对应的ACSii值在'0'~'9'对应的值内才打印,否则继续重新输入
2.for循环
三个表达式均可省略,判断部分省略会导致判断条件恒为真陷入死循环
-------------------------------
---------------------------------
答:10个,因为i=0时, j 循环10次后,i=i+1=1,再次进入j 循环也为10,无法执行打印命令。
------------------------------------
三个表达式的执行顺序
-----------------------------------
3.do while
4.课堂练习
1. 计算 n的阶乘。
1 #define _CRT_SECURE_NO_WARNINGS 1 2 #include <stdio.h> 3 int main() 4 { 5 int i = 0; 6 long long result = 1; 7 int n = 0; 8 scanf("%d", &n); 9 for (i = 1; i < (n+1); i++) 10 { 11 result = result * i; 12 } 13 printf("n! = %d\n", result); 14 return 0; 15 }
---------------------------
2.计算 1!+2!+3!+……+10!
1 #include <stdio.h> 2 int main() 3 { 4 int i = 0; 5 long long fact = 1; 6 long long sum = 0; 7 for (i = 1; i < 11; i++) 8 { 9 fact = fact * i; 10 sum += fact; 11 } 12 printf("n! = %d\n", sum); 13 return 0; 14 }
3.在一个有序数组中查找具体的某个数字n的下标。(二分查找)
常常用 sizeof(arr)/sizeof(arr[0]) 来计算数组的长度。其中“sizeof(arr)“计算了整个数组arr占据了多少内存(字节为单位),”sizeof(arr[0])“计算了数组中第一个元素所占多少字节,两者相除就是数组的长度。当arr为char类型时,长度会多1,因为计算了终止符\n
4.编写代码,演示多个字符从两端移动,向中间汇聚。
1 #include <stdio.h> 2 #include <windows.h>//Sleep函数用到 3 #include <string.h>//strlen用到 4 int main() 5 { 6 char arr1[] = "welcome to the hell"; 7 char arr2[] = "###################"; 8 int i = 0; 9 int sz = strlen(arr1);//计算arr1长度 10 int left = 0; 11 int right = sz - 1;//右端下标为长度-1 12 printf("%s\n", arr2); 13 for (left = 0, right = sz - 1; left <= right; left++, right--) 14 { 15 arr2[left] = arr1[left]; 16 arr2[right] = arr1[right]; 17 Sleep(300);//休眠300ms 18 system("cls");//清空屏幕 19 printf("%s\n", arr2); 20 } 21 return 0; 22 }
5. 编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则
提示登录成,如果三次均输入错误,则退出程序。
1 #define _CRT_SECURE_NO_WARNINGS 1 2 #include <stdio.h> 3 #include <string.h> 4 int main() 5 { 6 char p[20] = { 0 }; 7 int i = 0; 8 for (i = 0; i < 3; i++) 9 { 10 printf("请输入密码\n"); 11 scanf("%s", p);//字符输入不加地址符& 12 if (strcmp(p, "123456") == 0)//strcmp为比较字符串,若匹配则为0 13 { 14 printf("密码正确,登录成功"); 15 break; 16 } 17 else 18 printf("密码错误\n"); 19 } 20 if (i == 3) 21 printf("三次密码均错误,退出程序\n"); 22 return 0; 23 }
--------------------------------------
6.写一个猜数字游戏
1,自动产生一个1-100之间的随机数
2,猜数字
a.猜对了,就恭喜你,游戏结束
b.你猜错了,会告诉猜大了,还是猜小了,继续猜,直到猜对游戏一个一直玩,除非退出游戏。
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <time.h> 4 void menu() 5 { 6 printf("**********************************\n"); 7 printf("*********** 1.play **********\n"); 8 printf("*********** 0.exit **********\n"); 9 printf("**********************************\n"); 10 } 11 //RAND_MAX--rand函数能返回随机数的最大值。 12 void game() 13 { 14 int random_num = rand() % 100 + 1; 15 int input = 0; 16 while (1) 17 { 18 printf("请输入猜的数字>:"); 19 scanf("%d", &input); 20 if (input > random_num) 21 { 22 printf("猜大了\n"); 23 } 24 else if (input < random_num) 25 { 26 printf("猜小了\n"); 27 } 28 else 29 { 30 printf("恭喜你,猜对了\n"); 31 break; 32 } 33 } 34 } 35 int main() 36 { 37 int input = 0; 38 srand((unsigned)time(NULL)); 39 do 40 { 41 menu(); 42 printf("请选择>:"); 43 scanf("%d", &input); 44 switch (input) 45 { 46 case 1: 47 game(); 48 break; 49 case 0: 50 break; 51 default: 52 printf("选择错误,请重新输入!\n"); 53 break; 54 } 55 } while (input); 56 return 0; 57 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律