实验2
实验任务1
1.源代码
#include <stdio.h> #include <stdlib.h> #include <time.h> #define N 5 int main1() { int number; int i; srand(time(0)); // 以当前系统时间作为随机种子 for (i = 0; i < N; ++i) { number = rand() % 100 + 1; printf("20490042%04d\n", number); } return 0; }
2.运行结果
问题 1:程序功能
生成5 个 1~100 之间的随机整数,并按固定前缀
20490042+4 位补零随机数的格式输出,模拟生成学员编号。问题 2:line13 代码功能
number = rand() % 100 + 1;rand()生成 0~RAND_MAX 的伪随机数%100将范围限定为0~99+1最终得到1~100的随机整数
问题 3:%04d作用
- 按4 位十进制整数输出
- 不足 4 位时左侧补 0,保证编号长度统一
- 例:随机数 5→输出
0005
问题 4:srand(time(0));作用
- 以当前系统时间为随机种子,初始化随机数发生器
- 去掉后:每次运行程序生成的随机数序列完全相同(固定伪随机序列)
-
实验任务2
1.源代码
#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; }
2.运行结果
问题 1:去掉
total_price = 0;的影响- 每次购买后总价不会清零,下一次购买会累加之前的总价
- 导致计算金额、找零错误,程序逻辑失效
问题 2:
continue语义- 立即结束本次循环,跳过循环体中
continue之后的所有代码 - 直接回到
while(1)循环开头,重新执行下一轮循环
实验任务3
1.源代码
#include <stdio.h> char signal; int main() { while (scanf(" %c", &signal) != EOF) { switch (signal) { case 'r': printf("stop!\n"); break; case 'g': printf("go go go\n"); break; case 'y': printf("wait a minute\n"); break; default: printf("something must be wrong...\n"); break; } } return 0; }
2.运行结果
实验任务4
1.源代码
#include <stdio.h> int main() { double expense; double total = 0.0; double max = 0.0, min = 0.0; int judge = 1; printf("输入今日开销,直到输入-1终止:\n"); while (1) { scanf("%lf", &expense); if (expense == -1.0) { break; } if (expense <= 0 || expense > 20000) { continue; } total += expense; if (judge) { max = expense; min = expense; judge = 0; } else { if (expense > max) { max = expense; } if (expense < min) { min = expense; } } } if (!judge) { printf("\n今日累计消费总额:%.1f\n", total); printf("今日最高一笔开销:%.1f\n", max); printf("今日最低一笔开销:%.1f\n", min); } return 0; }
2.运行结果
![image]()
实验任务5
1.源代码
#include <stdio.h> int a, b, c; int main() { while (scanf("%d %d %d", &a, &b, &c) != EOF) { if (a + b > c && a + c > b && b + c > a) { if (a == b && b == c) { printf("等边三角形\n"); } else if (a == b || a == c || b == c) { 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; }
2.运行结果
![image]()
实验任务6
1.源代码
#include <stdio.h> #include <stdlib.h> #include <time.h> int lucky_day, i, guess; int main() { srand(time(0)); lucky_day = rand() % 30 + 1; printf("猜猜2026年4月哪一天是你的lucky day\n"); printf("开始喽,你有3次机会,猜吧(1~30):"); for (i = 0; i < 3; i++) { if (i > 0) { printf("再猜(1~30):"); } scanf("%d", &guess); if (guess == lucky_day) { printf("\n哇,猜中了:)\n"); break; } else if (guess < lucky_day) { printf("\n你猜的日期早了,你的lucky day还没到呢\n"); } else { printf("\n你猜的日期晚了,你的lucky day在前面哦\n"); } } if (i == 3) { printf("\n次数用光啦。4月你的lucky day是%d号\n", lucky_day); } return 0; }
2.运行结果
![image]()
实验总结
本次 C 语言分支与循环基础应用编程实验,让我系统巩固了分支、循环、流程控制、随机数、多组输入等核心知识点,通过验证与编程结合的方式,切实提升了代码理解与问题解决能力。在验证性任务中,我掌握了rand()与srand()生成随机数的原理,理解了%04d格式化输出、continue与break的区别,以及循环变量清零的重要性,看懂了代码背后的逻辑设计思路。在编程任务里,我学会用if/switch处理多分支判断,用while/for实现循环与多组输入,能结合实际场景设计算法 —— 比如记账时统计最值与总和、判断三角形时先验证合法性再分类、猜数字时控制次数与提示逻辑。同时也遇到了输入处理、边界判断、格式输出等问题,通过调试逐步解决,加深了对语法细节的掌握。这次实验让我明白:先理清算法再写代码,能大幅减少错误;手动敲代码比复制更能熟悉语法;多组输入、边界条件、数据合法性是编程必须考虑的要点。整体收获很大,为后续更复杂的 C 语言编程打下了扎实基础。



浙公网安备 33010602011771号