实验2
task 1
#include <stdio.h> #include <stdlib.h> #include <time.h> #define N 100 #define CNT 5 int main() { int number; int i; srand(time(0)); // 以当前系统时间作为随机种子 for(i = 0; i < CNT; ++i) { number = rand() % N + 1; printf("20490042%04d\n", number); } return 0; }

问题1: 生成100个学员编号(格式为20490042+4位数字,即204900420001~204900420100范围内的随机学号)并打印
问题2: rand() % 100 + 1 产生 1~100 之间的随机整数,赋值给number。
问题3: %04d 表示以十进制输出整数,宽度至少4位,不足4位时前面补0(如7→0007),保证编号固定为4位。
问题4: srand(time(0)) 用当前系统时间作为随机种子,使每次运行程序产生的随机数序列不同;若去掉该行,每次运行程序输出的结果完全相同(因为rand默认种子固定)。
task 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; } 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; }

问题1: 去掉 total_price = 0; 后,每次购买的总价会不断累加(不清零),导致后续总价越来越大、找零计算错误(变成负数或不符实际)。
问题2: continue 语义:立即结束本次循环,跳过循环体内 continue 之后的所有语句,直接进入下一次循环的条件判断(继续下一轮)。与 break (结束整个循环)不同
task3
#include<stdio.h> int main() { char c; for (int i=0;i<4;i++) { scanf(" %c",&c); switch(c){ case 'r':printf("stop!\n");break; case 'g':printf("go go go\n");break; case 'y':printf("wait a minute");break; default:printf("something must be wrong"); } } return 0; }

task 4
#include <stdio.h>
int main()
{
double x;
double sum = 0;
double max, min;
printf("ÊäÈë½ñÈÕ¿ªÏú£º\n");
scanf("%lf", &x);
if (x == -1)
{
printf("ÎÞ¿ªÏú\n");
return 0;
}
max = min = x;
sum = x;
while (1)
{
scanf("%lf", &x);
if (x == -1)
break;
sum += x;
if (x > max) max = x;
if (x < min) min = x;
}
printf("½ñÈÕÏû·Ñ×ܶî:%.1f\n", sum);
printf("½ñÈÕ×î¸ßÒ»±Ê¿ªÏú:%.1f\n", max);
printf("½ñÈÕ×îµÍÒ»±Ê¿ªÏú:%.1f\n", min);
return 0;
}

task 5
#include<stdio.h> int main() { int a,b,c; int i; for(i=1;i<6;i++) { printf("第%d组,请输入三边 a b c:",i); scanf("%d %d %d", &a , &b , &c); if (a+b>c && a+c>b && b+c>a && a>0&&b>0&&c>0) { if (a==b && b==c) { printf("等边三角形\n"); } else if (a==b ||b==c||c==a) { printf("等腰三角形\n"); } else if (a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a) { printf("直角三角形\n"); } else {printf("一般三角形\n"); } } else{ printf("不能构成三角形\n"); } } return 0; }

task 6
#include<stdio.h> #include<stdlib.h> #include<time.h> int main() {int lucky,guess; int i; srand((unsigned int)time(NULL)); lucky=rand()%30+1; printf("²Â²Â2026Äê11ÔÂÄÄÒ»ÌìÊÇÄãµÄlucky day\n"); printf("¿ªÊ¼à¶£¬ÄãÓÐÈý´Î»ú»á£¬²Â°É£¨1~30£©"); for(i=0;i<3;i++) { scanf("%d", &guess); if(guess==lucky){ printf("ÍÛ£¬²ÂÖÐÁË\n"); return 0; } else if(guess<lucky){ printf("Äã²ÂµÄÈÕÆÚÔçÁË,ÄãµÄlucky day»¹Ã»µ½ÄØ\n"); } else { printf("Äã²ÂµÄÈÕÆÚÍíÁË,ÄãµÄlucky dayÔÚÇ°ÃæÄØ\n"); } if (i < 2) { printf("ÔÙ²Â(1~30):"); } } printf("´ÎÊýÓùâÁË£¬11ÔÂÄãµÄlucky dayÊÇ%dºÅ\n", lucky); return 0; }

浙公网安备 33010602011771号