实验2
实验2
任务1
源代码:
#include <stdio.h> #include <stdlib.h> #include <time.h> #define N 100 #define CNT 5 int main() { int number; int i; srand(time(0)); // 以当前系统时间作为随机种子 for(i = 0; i < CNT; ++i) { number = rand() % N + 1; printf("20490042%04d\n", number); } return 0; }
运行结果截图:
回答1:随机生成学号
回答2:生成一个1-99的数字
回答3:补位输出总宽度4格的字符,前面不够补0
回答4:给一个随机数种子,没有的话就会一直是同一个数字,rand默认固定种子
任务2
源代码:
#include <stdio.h> int main() { int choice, quantity; float total_price = 0, amount_paid, change; while (1) { printf("\n自动饮料售卖机菜单:\n"); printf("1. 可乐 - 3 元/瓶\n"); printf("2. 雪碧 - 3 元/瓶\n"); printf("3. 橙汁 - 5 元/瓶\n"); printf("4. 矿泉水 - 2 元/瓶\n"); printf("0. 退出购买流程\n"); printf("请输入饮料编号: "); scanf("%d", &choice); if (choice == 0) break; if (choice < 1 || choice > 4) { printf("无效的饮料编号,请重新输入。\n"); continue; } printf("请输入购买的数量: "); scanf("%d", &quantity); if (quantity < 0) { printf("购买数量不能为负数,请重新输入。\n"); continue; } if(choice == 1 || choice == 2) total_price += 3 * quantity; else if(choice == 3) total_price += 5 * quantity; else total_price += 2 * quantity; printf("请投入金额: "); scanf("%f", &amount_paid); change = amount_paid - total_price; printf("本次购买总价: %.2f 元\n", total_price); printf("找零: %.2f 元\n", change); total_price = 0; } printf("感谢您的购买,欢迎下次光临!\n"); return 0; }
运行测试截图:
回答1:程序循环的时候总价不归零,会不断积累,导致错误
回答2:输入错误时跳过后面价格计算等内容直接回到循环开头,重新开始输入。
任务3
源代码:
#include <stdio.h> int main() { char n; int i=0; for(i=0;i<4;i++) { n=getchar(); getchar(); switch (n) { case 'r':printf("stop!\n");break; case 'g':printf("go go go\n");break; case 'y':printf("wait a minute\n");break; default:printf("something must be wrong...\n");break; } } return 0; }
运行截图:
任务4
源代码:
#include <stdio.h> int main() { double a,b,c,d; a=0; b=20000; c=0; d=0; printf("ÊäÈë½ñÈÕ¿ªÏú£¬Ö±µ½ÊäÈë-1ÖÕÖ¹£º\n"); while(1) { scanf("%lf",&d); if(d==-1) break; else { c=c+d; if(d>a) a=d; if(d<b) b=d; } } printf("½ñÈÕÀÛ¼ÆÏû·Ñ×ܶî%.1lf\n",c); printf("½ñÈÕ×î¸ßÒ»±Ê¿ªÏú%.1lf\n",a); printf("½ñÈÕ×îµÍÒ»±Ê¿ªÏú%.1lf\n",b); return 0; }
测试代码截图:
任务5
源代码:
#include <stdio.h> int main() { int a,b,c,n; n=1; for(n=1;n<=5;n++) { scanf("%d%d%d",&a,&b,&c); if(a+b<=c||a+c<=b||b+c<=a) printf("不能构成三角形\n"); else if(a*a+b*b==c*c||a*a==b*b+c*c||a*a+c*c==b*b) printf("直角三角形\n"); else if(a==b&&b==c) printf("等边三角形\n"); else if(a==c||a==b||b==c) printf("等腰三角形\n"); else printf("普通三角形\n"); } return 0; }
运行代码测试:
任务6
源代码:
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { srand((unsigned int)time(NULL)); int n,i,c; i= rand() % 30 + 1; c=3; printf("猜猜2026年11月哪一天是你的lucky day\n开始喽,你有%d次机会,猜吧(1~30);",c); scanf("%d",&n); for(c=2;c>0;c=c-1) { if(n==i) { printf("哇,猜中了:)"); return 0; } if(n>i) { printf("你猜的日期晚了,你的lucky day在前面哦\n再猜(11~30):"); scanf("%d",&n); } else { printf("你猜的日期早了,你的lucky day在还没到呢\n再猜(11~30):"); scanf("%d",&n); } } if(c==0&&n==i) { printf("哇,猜中了:)"); } else printf("次数用完啦。11月你的lucky day是%d号",i); return 0; }
测试运行:


浙公网安备 33010602011771号