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、三角形类型判断
问题描述 : 现正在开发一个几何辅助工具,需要根据用户输入的三条边长,判断是否能构成三角形,并输出能构成三角形的类型。判断规则如下:
- 验证是否能构成三角形。
- 若能构成三角形,进一步判断三角形类型:
- 等边三角形:三条边的长度相等。
- 等腰三角形:有两条边的长度相等。
- 直角三角形:满足勾股定理(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、日历应用:天数判断
问题描述 : 你正在开发一个日历应用,需要判断某一年的某个月有多少天。请编写一个程序,输入一个年份(整数)和一个月份(整数),计算这个月有多少天。
提示:判断是否为闰年:
- 能被4整除但不能被100整除的年份是闰年。
- 能被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;
}