实验2
task1.c
#include <stdio.h> #include <stdlib.h> #include <time.h> #define N 5 #define N1 80 #define N2 35 int main(){ int cnt; int random_major,random_no; srand(time(NULL)); cnt=0; while(cnt<N){ random_major=rand()%2; if(random_major){ random_no=rand()%N1+1; printf("20256343%04d\n",random_no); } else{ random_no=rand()%N2+1; printf("20256343%04d\n",random_no); } cnt++; } return 0; }


answer1:通过多次试验,我认为srand(time(NULL))的用途为生成随机数,且不会重复输出,而删除掉srand(time(NULL))之后会导致多次生成的数字相同,不会发生改变。
answer2:随机生成学号,用于抽签等
task2.c
#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; }


answer1:这一行为会使进行下一次,上一次购买东西所花费的钱数加到本次总价上,导致错误。
answer2:continue的使用可以直接结束这一循环并直接开始下一循环。
task3.c
#include <stdio.h> int main(){ char color; while(1){ scanf(" %c",&color); if(color=='r'){ printf("stop!\n"); } else if(color=='g'){ printf("go go go\n"); } else if(color=='y'){ printf("wait a minute\n"); } else printf("something must be wrong...\n"); } return 0; }

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

task5.c
#include <stdio.h> int main(){ int a,b,c; while(scanf("%d %d %d",&a,&b,&c)!=EOF) {if((a+b<=c)||(a+c<=b)||(b+c<=a)){ printf("不能构成三角形\n"); } else{ while(1){ if((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a)){ printf("直角三角形\n"); break; } else if(a==b&&b==c){ printf("等边三角形\n"); break; } else if(a==b||b==c||a==c){ printf("等腰三角形\n"); break; } else{ printf("普通三角形\n"); break; } } } } return 0; }

task6.c
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(){ int lucky_day,n,cnt; srand(time(NULL)); lucky_day=rand()%30+1; printf("猜猜2025年11月哪一天是你的lucky day\n"); printf("开始喽,你有三次机会,猜吧(1~30):"); for(cnt=0;cnt<3;++cnt){ scanf("%d",&n); if(n<1||n>30){ printf("猜猜2025年11月哪一天是你的lucky day\n"); continue; } if(cnt==2){ printf("次数用光啦。悄悄告诉你,11月你的lucky day是%d号\n",lucky_day); break; } if(n==lucky_day){ printf("哇,猜中了:)\n"); break; } else if(n<lucky_day){ printf("你猜的日期早了,你的lucky day还没到呢\n"); printf("再猜(1~30):"); } else{ printf("你猜的日期晚了,你的lucky day在前面哦\n"); printf("再猜(1~30):"); } } return 0; }

实验总结:通过这次实验,我对if语句,for语句的使用更加熟练,对于C语言要求也更加明确,可以更加迅速地完成代码的编写。
浙公网安备 33010602011771号