作业2
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:生成0到100以内的随机数字
问题2:保证生成数字为4位不足的用0在前补足
问题3:生成一串可以当作学号的随机数字
task2:
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:确保多组输入时每次程序开始的 total_price归零,去掉会导致总金额在多次运行中叠加。
问题2:break语句使代码在这一步停止运行,continue使代码继续运行。
问题3:没有必要,已经进行过choice的判断。
task3:
1 int main(){ 2 char(colour); 3 colour = getchar(); 4 getchar(); 5 while (colour != EOF) 6 { 7 switch (colour) 8 { 9 case 'r':printf("stop!\n"); break; 10 case 'g':printf("go go go\n"); break; 11 case 'y':printf("wait a minute\n"); break; 12 default:printf("something must be wrong...\n"); break; 13 } 14 colour = getchar(); 15 getchar(); 16 } 17 return 0; 18 }
task4:
1 int main() 2 { 3 double x, all = 0, max, min; 4 printf("输入今日开销,直到输入-1终止:\n"); 5 scanf_s("%lf", &x); 6 getchar(); 7 max = x, min = x; 8 while (x != -1) 9 { 10 if (x > 0 && x < 20000) 11 { 12 all += x; 13 if (x > max) 14 max = x; 15 if (x < min) 16 min = x; 17 } 18 19 scanf_s("%lf", &x); 20 getchar(); 21 22 } 23 printf("今日累计消费总额:%.1lf\n今日最高一笔开销:%.1lf\n今日最低一笔开销:%.1lf", all, max, min); 24 return 0; 25 }
task5:
1 #define N 3 2 int main() 3 { 4 int day, i, gus; 5 6 printf("猜猜2025年4月哪一天是你的lucky day\n"); 7 8 srand(time(0)); 9 day = rand() % 30 + 1; 10 11 12 for (i = 0; i < N; i++) 13 { 14 if (i == 0) 15 printf("开始喽,你有三次机会,猜吧(1~30):"); 16 else 17 printf("再猜(1~30):"); 18 scanf_s("%d", &gus); 19 20 21 if (gus > day) 22 printf("你猜的日期晚了,你的lucky day在前面哦\n"); 23 else if (gus < day) 24 printf("你猜的日期早了,你的lucky day还没到呢\n"); 25 else 26 { 27 printf("哇,猜中了:-)\n"); 28 break; 29 } 30 } 31 32 33 34 if (i == 3) 35 printf("次数用完啦。悄悄告诉你,4月你的lucky day是%d号\n", day); 36 37 38 return 0; 39 }
task6:
1 int main() 2 { 3 4 int n,i,j; 5 printf("input n: "); 6 scanf_s("%d", &n); 7 8 for (i = n; i >0; i--) 9 { 10 for (j = 0; j < n-i; j++) 11 printf(" \t"); 12 13 for (j = 0; j < 2*i-1; j++) 14 printf(" O \t"); 15 16 for (j = 0; j < n - i; j++) 17 printf(" \t"); 18 19 printf("\n"); 20 21 for (j = 0; j < n - i; j++) 22 printf(" \t"); 23 24 for (j = 0; j < 2*i-1; j++) 25 printf("<H>\t"); 26 27 for (j = 0; j < n - i; j++) 28 printf(" \t"); 29 30 printf("\n"); 31 32 for (j = 0; j < n - i; j++) 33 printf(" \t"); 34 35 for (j = 0; j < 2*i-1; j++) 36 printf("I I\t"); 37 38 for (j = 0; j < n - i; j++) 39 printf(" \t"); 40 41 printf("\n"); 42 printf("\n"); 43 } 44 45 return 0;