C语言基础练习:随机数、循环与条件判断实战
实验1:随机数生成
本实验演示如何使用rand()函数结合时间种子生成随机数。
问题1:基于当前时间生成一个随机数。
问题2:生成一个以"20256136"开头、后4位随机的12位数字(不足位补0)。
实验2:循环与累加
本实验关注循环结构中变量累加的行为。
问题1:多次运行程序时,总价格会持续累积,原因是每次运行时未重置变量。
问题2:在while循环中重置相关变量,确保程序每次迭代从头开始计算。
实验3:字符输入与交通灯模拟
以下代码通过getchar()读取字符输入,模拟交通灯状态:
#include <stdio.h>
int main() {
char ch;
while (1) {
ch = getchar();
if (ch == EOF) break;
if (ch == 'r')
printf("stop!\n");
else if (ch == 'g')
printf("go go go\n");
else if (ch == 'y')
printf("wait a minute\n");
else
printf("something must be wrong...\n");
getchar(); // 消耗换行符
}
return 0;
}
编译运行后,输入'r'、'g'、'y'分别对应停止、通行、等待。
实验4:每日开销统计
该程序记录用户输入的开销,并输出总额、最高和最低值:
#include <stdio.h>
int main() {
double val, total = 0, min = 20001, max = 0;
printf("请输入今日开销,直到输入-1终止\n");
while (1) {
scanf("%lf", &val);
if (val == -1) break;
total += val;
if (val < min) min = val;
if (val > max) max = val;
}
printf("今日累计消费总额:%.1lf\n", total);
printf("今日最高一笔开销:%.1lf\n", max);
printf("今日最低一笔开销:%.1lf\n", min);
return 0;
}
输入多个数字后,以-1结束,程序自动计算统计结果。
实验5:三角形类型判断
本程序对三个整数排序后判断能否构成三角形及类型:
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
int nums[3], i, j, temp;
while (1) {
if (scanf("%d", &nums[0]) == EOF) break;
scanf(" %d %d", &nums[1], &nums[2]);
// 冒泡排序
for (i = 0; i < 2; i++)
for (j = 0; j < 2 - i; j++)
if (nums[j] > nums[j + 1]) {
temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
}
int a = nums[2], b = nums[1], c = nums[0];
if (a + c > b && a + b > c && c + b > a) {
if (pow(c, 2) + pow(b, 2) == pow(a, 2))
printf("直角三角形\n");
else if (a == b || a == c || b == c) {
if (a == b && b == c)
printf("等边三角形\n");
else
printf("等腰三角形\n");
} else
printf("普通三角形\n");
} else
printf("不能构成三角形\n");
}
return 0;
}
程序循环读取三边长度,输出三角形类别或错误信息。
实验6:猜日期游戏
以下代码生成1~30的随机幸运日,用户有3次猜测机会:
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int luckyDay, guess, i;
srand(time(NULL));
luckyDay = rand() % 30 + 1;
printf("猜猜2025年11月那一天是你的幸运日\n");
printf("开始喽,你有三次机会,猜吧(1~30):");
for (i = 0; i < 3; i++) {
scanf("%d", &guess);
if (guess == luckyDay) {
printf("哇,猜中了\n");
break;
} else if (guess > luckyDay)
printf("你猜的日期晚了,你的lucky day在前面哦\n");
else
printf("你猜的日期早了,你的lucky day还没到呢\n");
if (i < 2) printf("再猜(1~30):");
}
return 0;
}
运行后,程序给出提示,帮助用户逐步逼近正确答案。