实验二
task1
源代码
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <time.h> 4 5 #define N 100 6 #define CNT 5 7 8 int main() { 9 int number; 10 int i; 11 12 srand(time(0)); // 以当前系统时间作为随机种子 13 for(i = 0; i < CNT; ++i) { 14 number = rand() % N + 1; 15 printf("20490042%04d\n", number); 16 } 17 18 return 0; 19 }
运行结果截图

回答问题
1. 程序功能:循环生成 5 个 1~100 的随机整数,输出格式为`20490042xxxx`的编号,xxxx 固定 4 位,不足补 0。
2. line14:`number = rand() % N + 1;``rand()`产生随机整数,`rand()%N`得到 0~99,加 1 后得到 1~100 的随机整数,赋值给 number。
3. `%04d`:设置输出宽度为 4 位,如果数字不足 4 位,左边自动补 0,保证编号格式统一。
4. `srand(time(0));`:以当前系统时间作为随机数种子。去掉这行,每次运行程序产生的随机数都相同;加上之后每次运行随机结果不同。
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. 雪碧 - 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 if(choice == 1 || choice == 2) 34 total_price += 3 * quantity; 35 else if(choice == 3) 36 total_price += 5 * quantity; 37 else 38 total_price += 2 * quantity; 39 40 printf("请投入金额: "); 41 scanf("%f", &amount_paid); 42 43 change = amount_paid - total_price; 44 printf("本次购买总价: %.2f 元\n", total_price); 45 printf("找零: %.2f 元\n", change); 46 47 total_price = 0; 48 } 49 50 printf("感谢您的购买,欢迎下次光临!\n"); 51 return 0; 52 }
运行结果截图

回答问题
1. 如果去掉`total_price = 0;`:变量 total_price 不会在每次结算后清零,多次购买时价格会不断累加,导致总价、找零计算错误。
2. continue 语句:结束本轮循环中后续代码的执行,直接跳到循环条件判断位置,开启下一轮循环。本题用于输入非法时,跳过购买结算流程,重新输入。
task3
源代码
1 #include<stdio.h> 2 int main(){ 3 int i; 4 char a; 5 6 for(i=1;i<=4;i++) 7 { 8 printf("请输入信号灯字符\n"); 9 scanf(" %c",&a); 10 switch(a) 11 { 12 case('r'): 13 printf("stop!\n"); 14 break; 15 case('g'): 16 printf("go go go\n"); 17 break; 18 case('y'): 19 printf("wait a minute\n"); 20 break; 21 default: 22 printf("something must be wrong\n"); 23 break; 24 25 } 26 27 } 28 29 return 0; 30 }
运行结果截图

task4
源代码
#include<stdio.h> int main(){ printf("输入今日开销,直到输入-1终止\n"); double sum=0; double max,min,money; int first=1; do{ scanf("%lf",&money); if(money==-1) break; if (money>0&&money<=20000) { sum+=money; if(first==1) { max=money; min=money; first=0; } else { if(money>max) max=money; if(money<min) min=money; } } else { printf("输入不合法\n"); } } while(1); printf("今日累计消费总额:%.1f\n",sum); printf("今日最高一笔开销:%.1f\n",max); printf("今日最低一笔开销:%.1f\n",min); return 0; }
运行结果截图

task5
源代码
#include<stdio.h> int main(){ int a,b,c,i; for(i=0;i<=4;i++) { scanf("%d %d %d",&a,&b,&c); if(a+b>c&&a+c>b&&b+c>a) { if(a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a) printf("直角三角形"); else if(a==b&&a==c) printf("等边三角形"); else if(a==b&&a!=c||a==c&&a!=b||b==c&&b!=a) printf("等腰三角形"); else printf("普通三角形"); } else { printf("不能构成三角形"); continue; } } return 0; }
运行截图

task6
源代码
#include<stdio.h> #include<stdlib.h> #include<time.h> int main() { int lucky, guess, i; srand((unsigned)time(NULL)); lucky = rand() % 30 + 1; printf("猜11月Lucky Day游戏\n"); printf("你一共有3次机会\n"); for(i = 1; i <= 3; i++) { printf("第%d次猜测,请输入日期(1~30):", i); scanf("%d", &guess); if(guess == lucky) { printf("恭喜你,猜中了!\n"); break; } else if(guess < lucky) { printf("猜早啦,你的lucky day 还没到呢!\n"); } else { printf("猜晚啦,你的lucky day在前面哦!\n"); } if(i == 3) { printf("次数用完啦!11月的lucky day是:%d\n", lucky); } } return 0; }
运行截图

浙公网安备 33010602011771号