2308-循环结构 while + for + do while

发布时间 2023-08-10 13:03:46作者: 积分三换

循环结构

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 }