task1
#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; }
运行结果
问题1:解释lin13代码的功能。
A1:生成一个1~100的随机数。
问题2:解释line14使用格式符%04d起到什么作用。
A2:保留四位有效数字。
问题3:这个程序的功能是什么?
A3:在202400420001~202400420100间随机选出5个。
任务二
task2
#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:line53代码的用途?如果去掉,会有什么影响?
A1:使每次循环开始时价格初始值为0;去掉后会导致每次循环时价格会累加。
问题2:line17-18, 使用了break语句;line20-23, line28-31, 使用了continue语句。在循环中使用break和 continue有什么区别?
A2:break语句作用是跳出循环执行下一条语句,continue语句作用是循环到判断条件。
问题3:line33-44,使用了switch语句实现多分支。通常情况下,在switch语句中使用default子句有利于代码 运行时错误排查,这个程序中,是否有必要增加default子句?你的答案和原因
A3:没有必要,case子句已经包含所有情况。
任务三
task3
#include<stdio.h>
int main()
{
char zf;
while(scanf("%c",&zf) != EOF)
{
switch(zf)
{
case'g':printf("go go go\n");break;
case'r':printf("stop!\n");break;
case'y':printf("wait a minute\n");break;
default:printf("something must be wrong...\n");break;
}
zf = getchar();
}
return 0;
}
运行结果
任务四
task4
#include<stdio.h> int main() { double money, sum; double max, min; sum = 0; max = 0; min = 20000; while(1) { scanf("%lf", &money); if(money == -1) { break; } sum += money; if(max <= money) { max = money; } if(min >= money) { min = money; } } printf("今日累计消费总额:%.1f\n", sum); printf("今日最高一笔开销:%.1f\n", max); printf("今日最低一笔开销:%.1f\n", min); return 0; }
运行结果
任务五
task5
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int day, i, n; printf("猜猜2025年4月哪一天是你的lucky day\n"); srand(time(0)); day = rand()%30+1; printf("开始喽,你有三次机会,猜吧(1~30):"); for(i=1; i<=3; i++) { scanf("%d",&n); if(n > day) { printf("你猜的日期晚了,你的lucky day在前面哦\n"); } if(n < day) { printf("你猜的日期早了,你的lucky day还没到呢\n"); } if(n == day) { printf("哇,猜中了:-)\n"); break; } while(i < 3) { printf("再猜(1~30):");break; } } if(i == 4) { printf("次数用完啦。偷偷告诉你,4月你的lucky day是%d号",day); } return 0; }
运行结果
任务六
task6
#include<stdio.h> int main() { int n,i,j; printf("input n:"); scanf("%d",&n); for(i=0;i<n;++i) { for(j=0;j<2*i;j++) { printf(" "); } for(j=0;j<2*(n-i)-1;j++) { printf(" 0 "); } printf("\n"); for(j=0;j<2*i;j++) { printf(" "); } for(j=0;j<2*(n-i)-1;j++) { printf(" <H> "); } printf("\n"); for(j=0;j<2*i;j++) { printf(" "); } for(j=0;j<2*(n-i)-1;j++) { printf(" I I "); } printf("\n"); } return 0; }
运行结果