C语言编程实例解析
随机学号生成
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define NUM_COUNT 5
int main() {
srand((unsigned)time(NULL));
for(int idx = 0; idx < NUM_COUNT; idx++) {
int random_val = rand() % 100 + 1;
printf("20490042%04d\n", random_val);
}
return 0;
}
该程序生成5个格式为"20490042XXXX"的学号,其中XXXX是1-100的随机数。srand(time(NULL))确保每次运行产生不同序列。
自动售货机模拟
#include <stdio.h>
int main() {
int selection, qty;
float payment, balance, current_total = 0;
while(1) {
printf("\n饮料菜单:\n");
printf("1.可乐(3元)\n2.雪碧(3元)\n");
printf("3.橙汁(5元)\n4.矿泉水(2元)\n0.退出\n");
printf("请选择:");
scanf("%d", &selection);
if(selection == 0) break;
if(selection < 1 || selection > 4) {
printf("无效选择\n");
continue;
}
printf("输入数量:");
scanf("%d", &qty);
if(qty < 0) {
printf("数量无效\n");
continue;
}
switch(selection) {
case 1: case 2: current_total += 3 * qty; break;
case 3: current_total += 5 * qty; break;
case 4: current_total += 2 * qty; break;
}
printf("付款金额:");
scanf("%f", &payment);
balance = payment - current_total;
printf("总价:%.2f\n找零:%.2f\n", current_total, balance);
current_total = 0;
}
printf("感谢使用\n");
return 0;
}
current_total=0重置交易金额,避免多次购买金额累计。continue语句在无效输入时跳过当前循环剩余部分。
交通信号模拟
#include <stdio.h>
int main() {
char signal;
while(scanf("%c", &signal) != EOF) {
if(signal == '\n') continue;
switch(signal) {
case 'r': printf("停止!\n"); break;
case 'g': printf("通行\n"); break;
case 'y': printf("等待\n"); break;
default: printf("输入错误\n");
}
}
return 0;
}
消费统计程序
#include <stdio.h>
int main() {
float expense, total = 0, max_exp, min_exp;
printf("输入消费金额(-1结束):");
scanf("%f", &expense);
max_exp = min_exp = expense;
while(expense != -1) {
if(expense > 0 && expense < 20000) {
total += expense;
if(expense > max_exp) max_exp = expense;
if(expense < min_exp) min_exp = expense;
}
scanf("%f", &expense);
}
printf("总消费:%.1f\n最高:%.1f\n最低:%.1f\n", total, max_exp, min_exp);
return 0;
}
三角形类型判断
#include <stdio.h>
int main() {
int side1, side2, side3;
while(scanf("%d%d%d", &side1, &side2, &side3) == 3) {
if(side1+side2>side3 && side1+side3>side2 && side2+side3>side1) {
if(side1 == side2 && side2 == side3)
printf("等边三角形\n");
else if(side1==side2 || side1==side3 || side2==side3)
printf("等腰三角形\n");
else if(side1*side1+side2*side2==side3*side3 ||
side2*side2+side3*side3==side1*expense ||
side1*side1+side3*side3==side2*side2)
printf("直角三角形\n");
else
printf("普通三角形\n");
} else {
printf("非三角形\n");
}
}
return 0;
}
幸运日猜测游戏
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int lucky_date, guess, attempts = 3;
srand(time(0));
lucky_date = rand() % 30 + 1;
printf("猜2026年4月的幸运日(1-30):");
while(attempts--) {
scanf("%d", &guess);
if(guess == lucky_date) {
printf("猜中!\n");
return 0;
}
printf(guess > lucky_date ? "日期偏晚\n" : "日期偏早\n");
if(attempts > 0) printf("再猜:");
}
printf("幸运日是%d号\n", lucky_date);
return 0;
}
输入流处理说明
交通信号模拟中if(signal == '\n') continue;用于跳过回车符,防止将换行符作为有效输入处理。