C语言经典编程练习题(1)
前言:编程不是“看”会的,是“练”会的
你是否也曾面对着一行行陌生的C语言代码感到无从下手?是否觉得变量、数据类型、分支语句这些概念明明听懂了,一写代码却错误百出?编程学习的最大陷阱,就是误以为“听懂了”等于“学会了”。
正如学骑自行车不能只看教程视频,编程能力的真正提升来自一次次动手实践。我们精心设计了这10道经典练习题,它们看似简单,却涵盖了初学者最需要掌握的四大核心:变量运用、数据类型理解、运算符掌握和逻辑分支构建。
每一道题都源于真实场景——从气象站的温度换算到校园的成绩评定,从健康管理的BMI计算到国际会议的时间转换。当你发现自己的代码能让“虚拟气象员”准确报温,能帮“数学评委”找出最高分,那种“我真的做到了”的成就感,是任何理论讲解都无法替代的。
别怕代码简单,所有复杂的程序都始于这些基础模块的搭建。现在,请暂时放下课本,打开你的编译器,跟随这10个渐进式挑战,用指尖的实践把理论知识真正“刻”进大脑里。从第一个“Hello World”到解决实际问题,你只差这一系列练习的距离。
准备好你的键盘了吗?让我们开始第一道练习——
1、温度转换器
描述:北方的冬天,天气预报常用摄氏温度(°C),而一些国际气象资料则使用华氏温度(°F)。作为一名气象数据分析员,你需要编写一个温度转换程序。输入一个摄氏温度值,程序应自动将其转换为华氏温度并显示结果。请确保结果保留两位小数,方便气象记录员准确记录。
提示:摄氏度与华氏度的转换公式为:F = C × 9/5 + 32。
输入样例:
25
输出样例:
摄氏温度:25.00°C
华氏温度:77.00°F
参考答案:
intmain(){ 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是偶数
参考答案:
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语句进行两两比较,也可以考虑使用逻辑运算符组合条件
参考答案:
方法一:使用多if语句比较
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);}
方法二:使用逻辑运算符
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:
10 5 *
输出样例1:
10*5=50
输入样例2:
10 0 /
输出样例2:
错误:除数不能为0
提示:可以使用多分支if语句,也可以使用switch case语句。
参考答案:
方法一:使用多分支if
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语句
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范围内,应给出"输入错误"的提示。
输入样例:
85
输出样例:
等级:B
参考答案:
intmain(){ 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.若能构成三角形,进一步判断三角形类型:
输入格式: 输入三个正整数,分别表示三角形的三条边长。
输入样例:
3 4 5
输出样例:
直角三角形
参考答案:
intmain(){ 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)
其他字符(如符号、空格等)
输入格式: 输入一个字符。
输入样例:
5
输出样例:
数字
参考答案:
方法一:判断字符类型时可以使用ASCII码值
intmain(){ 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码)。
intmain(){ 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、日历应用:天数判断
问题描述: 你正在开发一个日历应用,需要判断某一年的某个月有多少天。请编写一个程序,输入一个年份(整数)和一个月份(整数),计算这个月有多少天。
提示:判断是否为闰年:
能被4整除但不能被100整除的年份是闰年。
能被400整除的年份也是闰年。
输入格式: 输入两个整数,表示年份和月份。
输入样例 :
2020 2
输出样例 :
2020年2月有29天
参考答案:
intmain(){ 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为肥胖。
请确保结果保留两位小数。
输入样例:
1.75 70
输出样例:
身高:1.75米
体重:70.00千克
BMI:22.86
状态:正常
参考答案:
intmain(){ 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:
1430
输出样例1:
24小时制:14:30
12小时制:02:30PM
输入样例2:
0930
输出样例2:
24小时制:09:30
12小时制:09:30AM
提示:可以使用整数除法和取余运算分离小时和分钟部分,然后根据小时值判断是上午还是下午
参考答案:
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;}
恭喜你成功通关!这10道题是你编程路上最扎实的一步。知识已在指尖,保持练习,更多精彩正待开启。
欢迎在评论区留言讨论。