实验二
实验任务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("20490042%04d\n", number); } return 0; system("pause"); }
运行截图:
Q1: line13:令随机数对100取余数+1,得到1~100的随机数
Q2: 限定取得的随机数为4位数,不够的位置用0补齐
Q3: 生成204900420001~204900420100之间的随机数
实验任务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; }
运行截图:
Q1:将0赋值给total_price,为下一次循环做准备。
Q2:break会跳出当前循环体,continue跳过当前循环内剩余语句,进行下一次循环。
Q3:有必要,当输入选择编号不为1,2,3,4,0时,应当输出提示信息,否则只会输出默认语句,不便于用户使用。
实验任务3
源代码:
#include <stdio.h> int main() { char n; while(1) { n = getchar(); getchar(); if (n=='y') printf("wait a minute\n"); else if (n=='g') printf("go go go\n"); else if (n=='r') printf("stop!\n"); else printf("something must be wrong\n"); } return 0; }
运行截图:
实验任务4
源代码:
#include <stdio.h> #include <stdlib.h> int main() { double money, max, min, average, count, sum; printf("输入今日开销,直到输入-1终止:\n"); money = 0; average = 0; count = 0; sum = 0; max=money; min=money; while (1) { scanf("%lf", &money); if(money!=-1) { if(count==0) { min=money; max=money; } else { if (money>max) max = money; if (money<min) min = money; } sum=sum+money; count+=1; } else break; } average = sum/ count; printf("今日累计消费总额:%.1lf", sum); printf("今日最高一笔开销:%.1lf", max); printf("今日最低一笔开销:%.1lf", min); system("pause"); return 0; }
运行截图:
实验任务5
源代码:
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int i, n=3,ans; int lucky_day; srand(time(0)); lucky_day=rand()%30+1; printf("猜猜2025年4月哪天是你的lucky day\n"); printf("开始喽,你有三次机会,猜吧(1~30):"); for(i=0;i<n;++i) { scanf("%d", &ans); if(ans <= lucky_day) { if(ans==lucky_day) { printf("哇,猜中了:-\n"); break; } else { printf("\n你猜的日期早了,你的lucky day还没到呢\n"); printf("再猜(1~30):"); } } else { printf("\n你猜的日期晚了,你的lucky day在前面哦\n"); printf("再猜(1~30):"); } } if(i==3 && ans!= lucky_day) printf("\n次数用完啦。偷偷告诉你,4月你的lucky day是%d号\n", lucky_day); system("pause"); return 0; }
运行截图:
实验任务6
源代码:
#include<stdio.h> #include<stdlib.h> int main() { int i,n,line; line=0; scanf("%d", &n); for(i=0;line<n;++line) { for(i=0;line<n; ) { while(i<2*n-1) { if(i>=line && i<2*n-1-line) { printf(" O "); ++i; } else { printf(" "); ++i; } } printf("\n"); i=0; while(i<2*n-1) { if(i>=line && i<2*n-1-line) { printf("<H> "); ++i; } else { printf(" "); ++i; } } printf("\n"); i=0; while(i<2*n-1) { if(i>=line && i<2*n-1-line) { printf("I I "); ++i; } else { printf(" "); ++i; } } printf("\n"); break; } } system("pause"); return 0; }
运行截图:
实验总结:
有时候会在循环判断语句中,把赋值符和等于逻辑符混淆,导致循环错误。
实验4中用count==0来对max和min进行初始化,为后续循环判断中的max和min赋值。
实验6将每行分离来看,先构建出n*(2n-1)的小人阵列,再在循环体系中添加条件,让每行输出的小人数量符合要求。