task1:
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("20241350%04d\n", number); 15 } 16 17 return 0; 18 }
task2:
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. 雪碧"); 11 printf("3. 橙汁"); 12 printf("4. 矿泉水"); 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 }
问题一:line53代码(total_price = 0;)的用途是在每次购买流程结束后重置总价。如果去掉这行代码,total_price会持续累积之前所有购买的总金额,导致后续购买的总价计算错误。例如,客户第一次购买后总价为5元,第二次购买时总价会在此基础上继续累加,而非从零开始计算。
问题二:break:直接终止整个循环,跳出循环体。例如,当用户输入0时,break会结束while循环,程序退出购买流程。continue:跳过当前循环的剩余代码,直接进入下一次循环。例如,客户输入无效的饮料编号时,continue会跳过后续的数量输入和价格计算步骤,重新回到菜单选择。
问题三:不需要。因为程序在进入switch语句前,已经通过if (choice < 1 || choice > 4)的检查,确保choice只能是1到4之间的有效值。因此,switch的case已覆盖所有可能的分支,default子句在此场景下不会被执行到,增加它不会带来实际作用。
task3:
1 #include <stdio.h> 2 3 int main() 4 { 5 char light; 6 while(scanf("%c",&light) != EOF){ 7 8 getchar(); 9 switch(light) 10 { 11 case 'r': 12 printf("stop!\n"); 13 break; 14 case 'g': 15 printf("go go go\n"); 16 break; 17 case 'y': 18 printf("wait a minute\n"); 19 break; 20 default: 21 printf("something must be wrong...\n"); 22 break; 23 } 24 } 25 26 return 0; 27 28 }

task4:
#include <stdio.h> #include <math.h> int main() { double n; double sum,max,min; sum = 0, max = -INFINITY, min = INFINITY; printf("输入今日开销,直到输入-1终止:"); while(1){ scanf("%lf",&n); getchar(); if (n == -1) break; else { sum += n; if (n > max) max = n; if (n < min) min = n; } } printf("今日累计消费总额:%.1lf\n",sum); printf("今日最高一笔开销:%.1lf\n",max); printf("今日最低一笔开销:%.1lf\n",min); return 0; }

task5:
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <time.h> 4 5 int main() { 6 srand(time(0)); 7 int lucky_day = rand() % 30 + 1; 8 int guess, attempts = 0; 9 printf("猜猜2025年4月哪一天是你的lucky day\n\n"); 10 for (attempts = 0; attempts < 3; attempts++) { 11 printf("开始喽,你有三次机会,猜吧(1~30):"); 12 scanf("%d", &guess); 13 14 if (guess == lucky_day) { 15 printf("哇,猜中了!:-)\n\n"); 16 return 0; 17 } 18 else { 19 printf("%s\n", (guess < lucky_day) ? "你猜的日期早了,你的lucky day还没到呢\n" : "你猜的日期晚了,你的lucky day在前面哦\n"); 20 } 21 } 22 23 printf("次数用完啦。偷偷告诉你,4月你的lucky day是 %d 号\n", lucky_day); 24 return 0; 25 }

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


浙公网安备 33010602011771号