C语言经典编程练习题(1)

C语言经典编程练习题(1)

前言:编程不是"看"会的,是"练"会的

你是否也曾面对着一行行陌生的C语言代码感到无从下手?是否觉得变量、数据类型、分支语句这些概念明明听懂了,一写代码却错误百出?编程学习的最大陷阱,就是误以为"听懂了"等于"学会了"。

正如学骑自行车不能只看教程视频,编程能力的真正提升来自一次次动手实践。我们精心设计了这10道经典练习题,它们看似简单,却涵盖了初学者最需要掌握的四大核心:变量运用、数据类型理解、运算符掌握和逻辑分支构建

每一道题都源于真实场景------从气象站的温度换算到校园的成绩评定,从健康管理的BMI计算到国际会议的时间转换。当你发现自己的代码能让"虚拟气象员"准确报温,能帮"数学评委"找出最高分,那种"我真的做到了"的成就感,是任何理论讲解都无法替代的。

别怕代码简单,所有复杂的程序都始于这些基础模块的搭建。现在,请暂时放下课本,打开你的编译器,跟随这10个渐进式挑战,用指尖的实践把理论知识真正"刻"进大脑里。从第一个"Hello World"到解决实际问题,你只差这一系列练习的距离。

准备好你的键盘了吗?让我们开始第一道练习------

1、温度转换器

描述:北方的冬天,天气预报常用摄氏温度(°C),而一些国际气象资料则使用华氏温度(°F)。作为一名气象数据分析员,你需要编写一个温度转换程序。输入一个摄氏温度值,程序应自动将其转换为华氏温度并显示结果。请确保结果保留两位小数,方便气象记录员准确记录。

提示:摄氏度与华氏度的转换公式为:F = C × 9/5 + 32。

输入样例

c 复制代码
25

输出样例

c 复制代码
摄氏温度: 25.00°C
华氏温度: 77.00°F

参考答案

c 复制代码
int main(){
    double C;//摄氏温度
    double F;//华氏温度
    scanf("%lf",&C);//输入摄氏度
    //转换为华氏度
    // F = C * 9/5 +32;
    F = C*9/5+32;
    printf("摄氏温度:%.2lf°C\n",C);
    printf("华氏温度:%.2lf°F\n",F);
}

2、奇偶判断

描述:在编程竞赛中,经常需要对数据进行分类处理。现在需要你编写一个程序,判断输入的整数是奇数还是偶数。这个程序将用于自动化测试系统,帮助系统根据数字的奇偶性决定不同的处理流程。

输入样例

复制代码
17

输出样例

复制代码
17是奇数

输入样例

复制代码
10

输出样例

复制代码
10是偶数

参考答案

c 复制代码
int main(){
    int number ; 
    scanf("%d",&number);
    //判断是否为偶数:能被2整除的数
    if(number%2==0){//使用余数判断整除情况
        printf("%d是偶数",number);
    }else{
        printf("%d是奇数",number);
    }
    return 0;
}

3、三数最大

描述:在数学竞赛的评分系统中,三位评委给选手打分。为了确定选手的最终得分,需要取三位评委给出的最高分。需要你编写一个程序,输入三个整数(代表三位评委的评分),找出其中的最大值。请考虑评分可能相同的情况,并确保程序能够正确处理。

输入样例

复制代码
12 8 15

输出样例

复制代码
最大值是: 15

提示:可以尝试使用多个if语句进行两两比较,也可以考虑使用逻辑运算符组合条件

参考答案

方法1:使用多if语句比较

c 复制代码
int main(){
    int score1,score2,score3;
    scanf("%d %d %d",&score1,&score2,&score3);
    int max = score1;//最大值
    if(max < score2){//比较第一个分数和第二个分数,取出较大的一个
        max = score2;
    }
    if(max < score3){//再和第三个分数比较,取出较大的一个
        max = score3;
    }
    printf("最大值是:%d",max);
}

方法2:使用逻辑运算符

c 复制代码
int main(){
    int score1,score2,score3;
    scanf("%d %d %d",&score1,&score2,&score3);
    int max;
 	if(score1>=score2 && score1>=score3){
        max = score1;
    }else if(score3>=score2 && score1<=score3){
        max = score3;
    }else{
        max = score2;
    }
    printf("最大值是:%d",max);
}

4、简易计算器

描述 :设计一个简单的四则运算练习程序。程序需要接收两个整数和一个运算符(+, -, *, /),然后输出运算结果。考虑到除法的特殊性,当除数为零时,程序应给出明确的错误提示,而不是崩溃。

输入样例1

c 复制代码
10 5 *

输出样例1

c 复制代码
10 * 5 = 50

输入样例2

c 复制代码
10 0 /

输出样例2

c 复制代码
错误: 除数不能为0

提示:可以使用多分支if语句,也可以使用switch case语句。

参考答案

方法一:使用多分支if

c 复制代码
int main(){
    int num1,num2;
    char op;//运算符
    scanf("%d %d %c",&num1,&num2,&op);
    if(op=='+'){
        //加法运算
        printf("%d + %d = %d\n",num1,num2,num1+num2);
    }else if(op=='-'){
        //减法运算
        printf("%d - %d = %d\n",num1,num2,num1-num2);
    }else if(op=='*'){
        //乘法运算
        printf("%d * %d = %d\n",num1,num2,num1*num2);
    }else if(op=='/'){
        //除法运算
        if(num2==0){
            printf("错误,除数不能为0\n");
        }else{
            printf("%d / %d = %d\n",num1,num2,num1+num2);
        }
    }else{
        printf("不包含该运算符\n");
    }
    return 0;
}

方法二:使用switch case语句

c 复制代码
int main(){
    int num1,num2;
    char op;//运算符
    scanf("%d %d %c",&num1,&num2,&op);
    switch(op){
        case '+'://加法运算
        	printf("%d + %d = %d\n",num1,num2,num1+num2);
            break;
        case '-': //减法运算
        	printf("%d - %d = %d\n",num1,num2,num1-num2);
            break;
        case '*'://乘法运算
        	printf("%d * %d = %d\n",num1,num2,num1*num2);
            break;
        case '/'://除法运算
        	if(num2==0){
            	printf("错误,除数不能为0\n");
        	}else{
            	printf("%d / %d = %d\n",num1,num2,num1+num2);
        	}
            break;
        default:
            printf("不包含该运算符\n");
            
    }
    return 0;
}

5、成绩等级评定

问题描述 : 学期末,班主任需要根据学生的期末成绩快速评定等级,以便录入成绩单。编写一个程序,输入学生的整数成绩(0-100分),输出对应的等级。等级划分标准如下:

  • 90分及以上:A(优秀)
  • 80-89分:B(良好)
  • 70-79分:C(中等)
  • 60-69分:D(及格)
  • 60分以下:E(不及格)

输入格式 : 输入一个整数,表示学生的成绩(0-100)。如果输入的成绩不在0-100范围内,应给出"输入错误"的提示。

输入样例

c 复制代码
85

输出样例

c 复制代码
等级: B

参考答案

c 复制代码
int main(){
    int score;
    scanf("%d",&score);
    
    if(score>100 || score<0){
        printf("输入错误");
    }else if(score>=90 && score<=100){
        printf("等级:A");
    }else if(score>=80){
        printf("等级:B");
    }else if(score>=70){
        printf("等级:C");
    }else if(score>=60){
        printf("等级:D");
    }else{
        printf("等级:E");
    }
    
    return 0;
}

6、三角形类型判断

问题描述 : 现正在开发一个几何辅助工具,需要根据用户输入的三条边长,判断是否能构成三角形,并输出能构成三角形的类型。判断规则如下:

  1. 验证是否能构成三角形。
  2. 若能构成三角形,进一步判断三角形类型:
    • 等边三角形:三条边的长度相等。
    • 等腰三角形:有两条边的长度相等。
    • 直角三角形:满足勾股定理(a² + b² = c²)。
    • 普通三角形:其他情况。

输入格式 : 输入三个正整数,分别表示三角形的三条边长。

输入样例

复制代码
3 4 5

输出样例

复制代码
直角三角形

参考答案

c 复制代码
int main() {
	int x, y, z;
	scanf("%d %d %d", &x, &y, &z);
	//判断是否能构成三角形:任意两边之和大于第三边
	if (x + y > z && x + z > y && y + z > x) { //能构成三角形
		//判断三角形的类型
		if (x == y && y == z) { //等边三角形
			printf("等边三角形");
		} else if (x == y || y == z || x == z) { //等腰三角形
			printf("等腰三角形");
		} else if (x*x+y*y==z*z || x*x+z*z==y*y || y*y+z*z==x*x) {
			//直角三角形
			printf("直角三角形");
		} else {
			printf("普通三角形");
		}
	} else {
		printf("不能构成三角形");
	}

	return 0;
}

7、字符类型识别

问题描述 : 在设置新密码时,系统需要验证输入字符的类型以确保密码强度。编写一个程序,输入一个字符,判断其属于以下哪种类型:

  • 大写字母(A-Z)
  • 小写字母(a-z)
  • 数字(0-9)
  • 其他字符(如符号、空格等)

输入格式 : 输入一个字符。

输入样例

c 复制代码
5

输出样例

c 复制代码
数字

参考答案

方法一:判断字符类型时可以使用ASCII码

c 复制代码
int main(){
    char c;
    scanf("%c",&c);
    
    if(c>=48&&c<=57){
        //数字字符
        printf("数字");
    }else if(c>=65&&c<=90){
        //大写字母
        printf("大写字母");
    }else if(c>=97&&c<=122){
        //小写字母
        printf("小写字母");
    }else{
        printf("其他字符");
    }
    return 0;
}

方法二:字符可以直接比较大小(根据ASCII码)。

c 复制代码
int main(){
    char c;
    scanf("%c",&c);
    
    if(c>='0'&&c<='9'){
        //数字字符
        printf("数字");
    }else if(c>='A'&&c<='Z'){
        //大写字母
        printf("大写字母");
    }else if(c>='a'&&c<='z'){
        //小写字母
        printf("小写字母");
    }else{
        printf("其他字符");
    }
    return 0;
}

8、日历应用:天数判断

问题描述 : 你正在开发一个日历应用,需要判断某一年的某个月有多少天。请编写一个程序,输入一个年份(整数)和一个月份(整数),计算这个月有多少天。

提示:判断是否为闰年:

  1. 能被4整除但不能被100整除的年份是闰年。
  2. 能被400整除的年份也是闰年。

输入格式 : 输入两个整数,表示年份和月份。

输入样例 :

c 复制代码
2020 2

输出样例 :

c 复制代码
2020年2月有29天

参考答案

c 复制代码
int main() {
	int year, month, day = 0;
	scanf("%d %d", &year, &month);
    
	switch (month) {
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			day = 31;
			break;
		case 4:
		case 6:
		case 9:
		case 11:
			day = 30;
			break;
		case 2:
			//判断闰年
			if(year%4==0&&year%100!=0||year%400==0){
				day = 29;
			}else{
				day = 28;
			}
			break;
		default:
			printf("月份输入有误");
	}
    
	printf("%d年%d月有%d天",year,month,day);
    
	return 0;
}

9、BMI计算器

描述:健康管理应用需要计算用户的BMI指数并提供健康建议。编写程序,输入用户的身高(米)和体重(千克),计算BMI指数(BMI = 体重 / (身高 × 身高))。根据计算结果,判断健康状态:

  • BMI<18.5为偏瘦
  • 18.5≤BMI<24为正常
  • 24≤BMI<28为超重
  • BMI≥28为肥胖。

请确保结果保留两位小数。

输入样例

c 复制代码
1.75 70

输出样例

c 复制代码
身高: 1.75米
体重: 70.00千克
BMI: 22.86
状态: 正常
c 复制代码
int main(){
    double H,W;
    scanf("%lf %lf",&H,&W);
    double bmi = W/(H*H);
    printf("身高:%.2lf米\n体重:%.2lf千克\n",H,W);
    printf("BMI:%.2lf\n",bmi);
    printf("状态:");
    if(bmi<18.5){
        printf("偏瘦");
    }else if(bmi<24){
        printf("正常");
    }else if(bmi<28){
        printf("超重");
    }else{
        printf("肥胖");
    }
    return 0;
}

10、时间格式转换

描述:国际会议日程安排系统需要将24小时制时间转换为12小时制。编写程序,输入一个4位整数表示24小时制时间(如1430表示14:30),程序应将其转换为12小时制格式,并添加AM或PM后缀。注意特殊时间处理:00:00应转换为12:00 AM,12:00应转换为12:00 PM。同时,需要对输入的时间进行有效性验证(小时在0-23之间,分钟在0-59之间)。

输入样例1

c 复制代码
1430

输出样例1

c 复制代码
24小时制: 14:30
12小时制: 02:30 PM

输入样例2

c 复制代码
0930

输出样例2

c 复制代码
24小时制: 09:30
12小时制: 09:30 AM

提示:可以使用整数除法和取余运算分离小时和分钟部分,然后根据小时值判断是上午还是下午

参考答案

c 复制代码
#include <stdio.h>

int main() {
	int time24, hour24, minute, hour12;
	char p;//A表示上午,P表示下午

	printf("请输入24小时制时间(如1430): ");
	scanf("%d", &time24);

	hour24 = time24 / 100;
	minute = time24 % 100;

	// 处理输入有效性
	if (hour24 < 0 || hour24 > 23 || minute < 0 || minute > 59) {
		printf("无效的时间输入\n");
		printf("请确保小时在0-23之间,分钟在0-59之间\n");
		return 1;
	}

	// 转换为12小时制
	if (hour24 == 0) {
		hour12 = 12;
		p = 'A';
	} else if (hour24 == 12) {
		hour12 = 12;
		p = 'P';
	} else if (hour24 < 12) {
		hour12 = hour24;
		p = 'A';
	} else {
		hour12 = hour24 - 12;
		p = 'P';
	}

	printf("24小时制: %02d:%02d\n", hour24, minute);
	if (p == 'A') {
		printf("12小时制: %02d:%02d AM\n", hour12, minute);
	} else {
		printf("12小时制: %02d:%02d PM\n", hour12, minute);
	}

	return 0;
}
相关推荐
csdn_aspnet2 小时前
C语言常用算法深度解析:从基础到高级的实战艺术
c语言
结衣结衣.2 小时前
spdlog: 高性能C++日志库
开发语言·c++
それども2 小时前
线程池阻塞队列选择ArrayBlockingQueue与LinkedBlockingQueue区别
java·开发语言·网络协议
沛沛老爹2 小时前
从Web到AI:Agent Skills安全架构实战——权限控制与数据保护的Java+Vue全栈方案
java·开发语言·前端·人工智能·llm·安全架构·rag
Remember_9932 小时前
文件系统与IO操作:深入解析与Java实践
java·开发语言·数据结构·ide·python·算法
a3158238062 小时前
TCP/IP协议的概述和面试要点
开发语言·php
LYS_06182 小时前
RM专用赛事c型板IMU9轴解算(1)(对于IST8310和BMI088的直接使用)
c语言·开发语言
yubo05092 小时前
Python 包、模块、导入规则
开发语言·python
f狐0狸x2 小时前
C++ vector 从入门到上手:核心基本用法全解析
开发语言·c++