实验2c语言分支与循环基础应用编程

任务一:
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <time.h>
 4 
 5 #define N 5
 6 
 7 int main() {
 8     int number;
 9     int i;
10 
11     srand(time(0));     // 以当前系统时间作为随机种子
12     for(i = 0; i < N; ++i) {
13         number = rand() % 100 + 1;
14         printf("20490042%04d\n", number);
15     }
16 
17     return 0;
18 }

问题一:随机生成(0,100】的整数。

问题二:在生成的数左边添加0,使得生成的数达到4位。

问题三:在学号尾号在(0,100】的学生中随机抽取四位学生。

 

任务二:

 1 #include <stdio.h>
 2 
 3 int main() {
 4     int choice, quantity;
 5     float total_price = 0, amount_paid, change;
 6 
 7     while (1) {
 8         printf("\n自动饮料售卖机菜单:\n");
 9         printf("1. 可乐 - 3 元/瓶\n");
10         printf("2. 雪碧 - 3 元/瓶\n");
11         printf("3. 橙汁 - 5 元/瓶\n");
12         printf("4. 矿泉水 - 2 元/瓶\n");
13         printf("0. 退出购买流程\n");
14         printf("请输入饮料编号: ");
15         scanf("%d", &choice);
16 
17         if (choice == 0)
18             break;
19 
20         if (choice < 1 || choice > 4) {
21             printf("无效的饮料编号,请重新输入。\n");
22             continue;
23         }
24 
25         printf("请输入购买的数量: ");
26         scanf("%d", &quantity);
27 
28         if (quantity < 0) {
29             printf("购买数量不能为负数,请重新输入。\n");
30             continue;
31         }
32 
33         switch (choice) {
34             case 1:
35             case 2:
36                 total_price += 3 * quantity;
37                 break;
38             case 3:
39                 total_price += 5 * quantity;
40                 break;
41             case 4:
42                 total_price += 2 * quantity;
43                 break;
44         }
45 
46         printf("请投入金额: ");
47         scanf("%f", &amount_paid);
48 
49         change = amount_paid - total_price;
50         printf("本次购买总价: %.2f 元\n", total_price);
51         printf("找零: %.2f 元\n", change);
52 
53         total_price = 0;
54     }
55 
56     printf("感谢您的购买,欢迎下次光临!\n");
57     return 0;
58 }

问题一:

问题一:用途是在每完成一次交易后将总价重新变为零,如果去掉,在多次购买时,总价会不断累加,将前一次的总价累加到下一次;
问题二:break语句会终止并跳出当前所在循环,继续执行循环体后面的代码,直接结束整个购买流程;continue语句会使程序跳过本次循环中continue后面的代码,直接回到循环的条件判断处,开始下一次循环;
问题三:没必要,因为:在进入 switch (choice) 语句之前,程序已经通过 if (choice < 1 || choice > 4) 对 choice 的值进行了有效性检查,只有当 choice 的值为1、2、3、4或者0时程序才会继续执行后续代码。而当 choice 为0时,会通过 break 语句跳出循环,不会进入 switch 语句。所以进入 switch 语句时, choice 的值必然是1、2、3、4中的一个,不存在其他可能的值,也就不会出现需要 default 子句来处理的意外情况,因此没必要增加 default 子句。

 

任务三:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 
 4 int main()
 5 {
 6     char color;
 7 
 8     while(scanf("%c",&color)!=EOF){
 9     
10     switch(color){
11     case 'r':printf("stop\n");break;
12     case 'g':printf("go go go\n");break;
13     case 'y':printf("waint a minute\n");break;
14     default:printf("illegal input\n");
15     }
16     while((getchar())!='\n');
17     }
18         system("pause");
19 
20         return 0;
21 }

 

 

任务四:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 
 4  int main()
 5  {
 6      float total_input=0.0,max_input=0.0,min_input=0.0;
 7      float input;
 8      printf("输入今日开销,直到输入-1为止:\n");
 9      scanf("%f",&input);
10      max_input=input;
11      min_input=input;
12      while(input> -1 && input<=20000 ){
13          total_input += input;
14          if(input>max_input) max_input = input;
15          if(input<min_input) min_input = input;
16          scanf("%f",&input);
17      }
18          printf("今日累计消费总额:%.1f\n",total_input);
19          printf("今日最高一笔开销:%.1f\n",max_input);
20          printf("今日最低一笔开销:%.1f\n",min_input);
21 
22          system("pause");
23          return 0;
24  }

 

 

 

任务五:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<time.h>
 4 
 5 int main()
 6 {
 7     int lucky_date;
 8     int date;
 9     int i=3;
10     srand((unsigned int )time(NULL));
11     lucky_date = rand() %30 +1;
12 
13     printf("猜猜2025年4月哪一天是你的lucky day\n");
14     printf("开始喽,你有三次机会,猜吧(1~30):");
15 
16     while(i>0){
17         scanf("%d",&date);
18         if (date == lucky_date){
19             printf("哇,猜中了:-)\n");
20             return 0;
21         }
22         else if(date < lucky_date){
23             printf("你猜的日期早了,你的lucky day还没到呢\n");
24         }
25         else
26         {
27             printf("你猜的日期晚了,你的lucky day 在前面哦\n");
28         }
29         i--;
30         if(i > 0){
31             printf("再猜(1~30):");
32         }
33 
34     }
35 
36     printf("次数用完啦,偷偷告诉你,4月你的lucky day是%d号\n",lucky_date);
37 
38     system("pause");
39     return 0;
40 
41     }

 

 

 

 

 

任务六:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 int main() {
 5     int n, i, j, k;
 6     printf("input n:");
 7     scanf("%d", &n);
 8     for (i = 2*n-1; i >= 1; i=i-2) {
 9         int tab_count = (2*n -1-i)/2;
10         for(k = 0; k < tab_count; k++){
11             printf("\t");
12         }
13         for (j = 0; j < i; j++) {
14             printf(" 0 ");
15             printf("     ");
16         }
17         printf("\n");
18         tab_count = (2*n -1-i)/2;
19         for(k = 0; k < tab_count; k++){
20             printf("\t");
21         }
22         for (j = 0; j < i; j++) {
23             printf("<H>");
24             printf("     ");
25         }
26         printf("\n");
27         tab_count = (2*n -1-i)/2;
28         for(k = 0; k < tab_count; k++){
29             printf("\t");
30         }
31         for (j = 0; j < i; j++) {
32             printf("I I");
33             printf("     ");
34         }
35         printf("\n");
36     }
37     system("pause");
38     return 0;
39 }

 

 

 

posted @ 2025-03-23 14:38  恐陈  阅读(5)  评论(0)    收藏  举报