实验2
任务1:
#include <stdio.h> #include <stdlib.h> #include <time.h> #define N 5 int main() { int number; int i; srand(time(0)); // 以当前系统时间作为随机种子 for(i = 0; i < N; ++i) { number = rand() % 100 + 1; printf("202490042%04d\n", number); } return 0; }
问题1:这行代码的功能是将随机数进行取余操作并且加1,另所得数在1-100之间。
问题2:格式符 %04d
用于格式化输出整数,前面的 04
表示输出的整数至少占4个字符宽度,如果所得数的位数少于4位,会在前面填充0以达到4位宽度。
问题3:随机生成五个以202490042开头的13位学号。
任务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; } switch (choice) { case 1: case 2: total_price += 3 * quantity; break; case 3: total_price += 5 * quantity; break; case 4: total_price += 2 * quantity; break; } 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:重置total price为0,如果去掉,则下次输入时,total price的初始值不为0。
问题2:break语句作用是跳出循环执行下一条语句,continue语句作用是循环到判断条件,使用的时机不一样。
问题3:没有必要。choice不在1-4之内程序不会继续执行。
任务3:
#include <stdio.h> int main(){ char input; while(scanf("%c",&input)!=EOF){ getchar(); switch(input){ case 'y':printf("wait a minute\n");break; case 'r':printf("stop!\n");break; case 'g':printf("go go go\n");break; default:printf("something must be wrong...\n");break; } } return 0; }
任务4:
#include <stdio.h> int main(){ double x,sum,max,min; printf("输入今日开销,直到输入-1终止:\n"); scanf("%lf",&x); max=min=sum=x; while(x!=-1){ scanf("%lf",&x); getchar(); if(x==-1){ break; } sum+=x; if(x>max){ max=x; } if(x<min){ min=x; } } printf("今日累计消费总额:%.1lf\n",sum); printf("今日最高一笔开销:%.1lf\n",max); printf("今日最低一笔开销:%.1lf\n",min); return 0; }
任务5:
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(){ int lucky_day,input,chance; chance=3; srand(time(0)); lucky_day=rand()%30+1; printf("猜猜2025年4月哪一天是你的lucky day\n"); printf("开始咯,你有三次机会,猜吧(1~30):"); while(chance!=0){ scanf("%d",&input); if(input==lucky_day){ printf("哇,猜中了:-)"); break; } else{ if(input<lucky_day){ printf("你猜的日期早了,你的lucky day还没到呢\n"); } else if(input>lucky_day) { printf("你猜的日期晚了,你的lucky day在前面呢\n"); } chance-=1; } if(chance>0){ printf("再猜(1~30):"); } } if(chance==0){ printf("次数用完啦。偷偷告诉你,4月你的lucky day是%d号",lucky_day); } return 0; }
任务6:
#include <stdio.h> int main (){ int n,i,j,l,k; k = 0; printf("input n:"); scanf("%d",&n); l= n; for(i=0;i<n;i++){ for(j=0;j<k;j++)printf("\t"); for(j=0;j<2*l-1;j++)printf(" O \t"); printf("\n"); for(j=0;j<k;j++){ printf("\t"); } for(j=0;j<2*l-1;j++) { printf("<H>\t"); } printf("\n"); for(j=0;j<k;j++){ printf("\t"); } for(j=0;j<2*l-1;j++){ printf("I I\t"); } printf("\n"); k=k+1; l=l-1; printf("\n"); } return 0; }
实验总结:
在很多循环语句种,初始输入变量通常会发生变化,这时需要额外自定义一个变量用来储存变化值,比如任务6中,如果没有将n的值储存在l直接进行计算会导致程序提前结束,这是需要注意的。