实验二
任务1
task1.c
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <time.h> 4 5 #define N 5 6 7 int main() { 8 int number; 9 int i; 10 11 srand(time(0)); // 以当前系统时间作为随机种子 12 for (i = 0; i < N; ++i) { 13 number = rand() % 100 + 1; 14 printf("20490042%04d\n", number); 15 } 16 17 return 0; 18 }
运行截图
问题1:把随机生成的1-100赋值给number。
问题2:将number的值格式化为四位整数,不足四位前面补零。
问题3:随机抽取五个学号。
任务2
task2.c
1 #include <stdio.h> 2 3 int main() { 4 int choice, quantity; 5 float total_price = 0, amount_paid, change; 6 7 while (1) { 8 printf("\n自动饮料售卖机菜单:\n"); 9 printf("1. 可乐 - 3 元/瓶\n"); 10 printf("2. 雪碧 - 3 元/瓶\n"); 11 printf("3. 橙汁 - 5 元/瓶\n"); 12 printf("4. 矿泉水 - 2 元/瓶\n"); 13 printf("0. 退出购买流程\n"); 14 printf("请输入饮料编号: "); 15 scanf("%d", &choice); 16 17 if (choice == 0) 18 break; 19 20 if (choice < 1 || choice > 4) { 21 printf("无效的饮料编号,请重新输入。\n"); 22 continue; 23 } 24 25 printf("请输入购买的数量: "); 26 scanf("%d", &quantity); 27 28 if (quantity < 0) { 29 printf("购买数量不能为负数,请重新输入。\n"); 30 continue; 31 } 32 33 switch (choice) { 34 case 1: 35 case 2: 36 total_price += 3 * quantity; 37 break; 38 case 3: 39 total_price += 5 * quantity; 40 break; 41 case 4: 42 total_price += 2 * quantity; 43 break; 44 } 45 46 printf("请投入金额: "); 47 scanf("%f", &amount_paid); 48 49 change = amount_paid - total_price; 50 printf("本次购买总价: %.2f 元\n", total_price); 51 printf("找零: %.2f 元\n", change); 52 53 total_price = 0; 54 } 55 56 printf("感谢您的购买,欢迎下次光临!\n"); 57 return 0; 58 }
运行截图
问题1:付款后账单清零;如果去掉,下个人购买需要支付之前的人和自己的金额数(累加)。
问题2:break终止当前循环并跳出循环体;continue跳过当前循环的剩余部分,直接进入下一次循环。
问题3:没必要。输入数值有误,会在line20-22 line28-30提醒,重新输入正确的数值。
任务3
task3.c
1 #include<stdio.h> 2 3 int main() 4 { 5 char colour; 6 7 while ((colour=getchar()) != EOF){ 8 if (colour == '\n') { 9 continue; 10 } 11 if (colour == 'r') { 12 printf("stop!\n"); 13 } 14 else if (colour == 'g') { 15 printf("go go go\n"); 16 } 17 else if (colour == 'y') { 18 printf("wait a minute\n"); 19 } 20 else { 21 printf("something must be wrong...\n"); 22 } 23 24 } 25 return 0; 26 }
运行截图
任务4
task4.c
1 #include<stdio.h> 2 3 int main() 4 { 5 double n,s,max,min; 6 n = 0,s = 0; 7 min = 20000, max = 0; 8 printf("输入今日开销,直到输入-1终止:\n"); 9 10 while (1) { 11 scanf_s("%lf", &n); 12 if (n == -1) { 13 break; 14 } 15 s += n; 16 if (n > max) { 17 max = n; 18 } 19 if (n < min) { 20 min = n; 21 } 22 } 23 printf("今日累计消费总额:%.1f\n", s); 24 printf("今日最高一笔开销:%.1f\n",max); 25 printf("今日最低一笔开销:%.1f\n",min); 26 27 return 0; 28 }
运行截图
任务5
task5.c
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<time.h> 4 5 int main() 6 { 7 int day,n,i; 8 9 srand(time(0)); 10 day = rand() % 30 + 1; 11 12 printf("猜猜2025年4月哪一天是你的lucky day\n"); 13 printf("开始喽,你有三次机会,猜吧(1~30):"); 14 15 for (i = 0; i < 3; i++) { 16 scanf_s("%d", &n); 17 if (n == day) { 18 printf("哇,猜中了:-)\n"); 19 break; 20 } 21 if (n < day) { 22 printf("你猜的日期早了,你的lucky day还没到呢\n"); 23 } 24 if (n > day) { 25 printf("你猜的日期晚了,你的lucky day在前面哦\n"); 26 } 27 if (i < 2) { 28 printf("再猜(1~30):"); 29 } 30 else { 31 printf("次数用完啦。偷偷告诉你,4月你的lucky day是%d号", day); 32 } 33 } 34 return 0; 35 }
运行截图
任务6
task6.c
1 #include<stdio.h> 2 3 int main() 4 { 5 int n, i, j, k; //i行2(n-i)+1个 6 printf("input n:"); 7 scanf_s("%d", &n); 8 9 for (i = 1; i <= n; ++i) { 10 11 for (j = n - i + 1; j < n; ++j) 12 printf("\t"); 13 14 for (k = 0; k < 2 * (n - i) + 1; ++k) 15 printf(" O \t"); 16 printf("\n"); 17 18 for (j = n - i + 1; j < n; ++j) 19 printf("\t"); 20 21 for (k = 0; k < 2 * (n - i) + 1; ++k) 22 printf("<H>\t"); 23 printf("\n"); 24 25 for (j = n - i + 1; j < n; ++j) 26 printf("\t"); 27 28 for (k = 0; k < 2 * (n - i) + 1; ++k) 29 printf("I I\t"); 30 printf("\n"); 31 32 } 33 return 0; 34 }
运行截图