实验二
任务1
源代码:
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<time.h> 4 5 #define N 5 6 int main() 7 { 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 18 return 0; 19 20 }
结果截图:

问题回答:
问题1:在编号202400420001~202400420100直接随机抽取5位学员编号。
问题2:rand()生成一个随机整数;一开始范围限定在【0,99】,+1后变为【1,100】;将生成的随机整数存放在number中。
问题3:格式化输出;d——十进制整数;4——占4位宽度;0——不足位补0。
问题4:以时间作为随机种子,保证每次生成的随机序列不一样。如果去掉,发现抽取结果完全一致。
任务2
源代码:
1 #include <stdio.h> 2 int main() { 3 int choice, quantity; 4 float total_price = 0, amount_paid, change; 5 while (1) { 6 printf("\n自动饮料售卖机菜单:\n"); 7 printf("1. 可乐 - 3 元/瓶\n"); 8 printf("2. 雪碧 - 3 元/瓶\n"); 9 printf("3. 橙汁 - 5 元/瓶\n"); 10 printf("4. 矿泉水 - 2 元/瓶\n"); 11 printf("0. 退出购买流程\n"); 12 printf("请输入饮料编号: "); 13 scanf("%d", &choice); 14 if (choice == 0) 15 break; 16 17 if (choice < 1 || choice > 4) { 18 printf("无效的饮料编号,请重新输入。\n"); 19 continue; 20 } 21 printf("请输入购买的数量: "); 22 scanf("%d", &quantity); 23 if (quantity < 0) { 24 printf("购买数量不能为负数,请重新输入。\n"); 25 continue; 26 } 27 if(choice == 1 || choice == 2) 28 total_price += 3 * quantity; 29 else if(choice == 3) 30 total_price += 5 * quantity; 31 else 32 total_price += 2 * quantity; 33 printf("请投入金额: "); 34 scanf("%f", &amount_paid); 35 change = amount_paid - total_price; 36 printf("本次购买总价: %.2f 元\n", total_price); 37 printf("找零: %.2f 元\n", change); 38 total_price = 0; 39 } 40 printf("感谢您的购买,欢迎下次光临!\n"); 41 return 0; 42 }
结果截图:

问题回答:
问题1:此代码是清空本次购买数据,为下一次购买做准备。如果去除,程序将持续累加。
问题2:第一次跳回循环开头,重新输入饮料编号;第二次跳过本次循环剩下计算,跳回循环开头重新输入饮料编号。
任务3
源代码:
1 #include<stdio.h> 2 #include<stdlib.h> 3 4 int main() 5 { 6 char colour; 7 printf("请输入交通信号灯颜色(r/g/y): "); 8 while(scanf(" %c", &colour)!= EOF){ 9 switch(colour){ 10 case 'r': 11 printf("stop!\n"); 12 break; 13 case 'g': 14 printf("go go go~\n"); 15 break; 16 case 'y': 17 printf("wait a minute\n"); 18 break; 19 default: 20 printf("something must be wrong...\n"); 21 break; 22 } 23 } 24 return 0; 25 26 }
结果截图:

任务4
源代码:
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<math.h> 4 5 int main(){ 6 double expense, total = 0.0; 7 double max_, min_; 8 int first = 1; 9 10 printf("输入今日开销,直到输入-1停止:\n"); 11 while(1){ 12 scanf("%lf", &expense); 13 if(expense == -1) 14 break; 15 16 if(expense <= 0 || expense >= 20000){ 17 printf("无效,请输入0-20000元以内的消费\n"); 18 continue; 19 } 20 if(first){ 21 max_ = expense; 22 min_ = expense; 23 first = 0; 24 } 25 else { 26 if(expense > max_) 27 max_ = expense; 28 if(expense < min_) 29 min_ = expense; 30 } 31 total += expense; 32 } 33 34 printf("今日累计消费总额:%.1f\n", total); 35 printf("今日最高一笔开销:%.1f\n", max_); 36 printf("今日最低一笔开销:%.1f\n", min_); 37 38 return 0; 39 }
结果截图:

任务5
源代码:
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<math.h> 4 5 int main(){ 6 int a, b, c; 7 printf("输入三角形三边长:\n"); 8 9 while(scanf("%d %d %d", &a, &b, &c)!= EOF){ 10 if(a + b <= c || a + c <= b || b + c <= a){ 11 printf("不能构成三角形\n"); 12 continue; 13 } 14 if(a == b && b == c) 15 printf("等边三角形\n"); 16 else if(a * a == b * b + c * c || b*b == c*c + a*a || c*c == b*b + a*a) 17 printf("直角三角形\n"); 18 else if( a == b || b == c || a == c) 19 printf("等腰三角形\n"); 20 else 21 printf("普通三角形\n"); 22 23 } 24 return 0; 25 }
结果截图:

任务6
源代码:
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<time.h> 4 5 int main(){ 6 int lucky, chance, ans; 7 srand((unsigned)time(NULL)); 8 9 lucky = rand()% 30 + 1; 10 chance = 3; 11 12 printf("猜猜2026年4月哪一天是你的Lucky Day?\n"); 13 14 while(chance > 0){ 15 printf("开始喽~你有%d次机会,猜吧(1~30):\n", chance); 16 scanf("%d", &ans); 17 18 if( ans == lucky){ 19 printf("哇!猜中啦:)\n"); 20 break; 21 } 22 else if(ans > lucky) 23 printf("你猜的日期晚了,你的lucky day 在前面哦~\n"); 24 else 25 printf("你猜的日期早了,你的lucky day 还没到呢~\n"); 26 27 chance--; 28 if (chance == 0){ 29 printf("次数用光啦。你的lucky day是%d号\n", lucky); 30 31 } 32 } 33 return 0; 34 }
结果截图:


实验总结(选)
同上次一样,总结出现的逻辑错误算法错误以长记性。
错误1:{} 数量总是无法对应,要么多打要么少打导致无法匹配语法错误。
**写代码过程中做到写一part检查一part,顺逻辑的同时检查是否手误**
错误2:写多组数据代码时重复打 scanf()和 while(scanf()!= EOF),导致输出结果重复两行。
**while()中写过scanf()就不必单独再写**
错误3:“%.1f\n”错打成“%.if\n”,嗯这属于低级错误了...
错误4:随机生成lucky day中 明明定义了类型却仍报错说未声明标识符。
**一定要先声明变量类型,再写执行语句e.g.随机生成函数等**

浙公网安备 33010602011771号