C语言成绩登记问题(附带源码)
期中考试结束后,成绩单上的成绩都是整数型的百分制成绩,而现在学生档案中经常采用等级制评价。于是李老师想将百分制成绩转化为 A、B、C、D、E 五个等级,约定等级与百分制成绩之间的对应关系如下:
请编程将任意给定的百分制成绩转化为相应等级。
输出:对应等级(A、B、C、D、E)。
问题中的五个等级相当于五个分支,因此该问题应用 switch 开关语句来解决。
观察等级与百分制成绩之间的对应关系可以发现,每个等级段的百分制成绩划分都是以 10 分为一个分数段:
由此可见,如果百分制成绩为 x,则表达式 x/10 所得到的值(0~10)就可以对应各个分数段。
代码清单 1:将任意给定的 0~100 的整数转化为 A、B、C、D、E 五个等级
运行结果为:
给定年份和月份,求该月共有多少天。
某年是否为闰年可以依据“四年一闰,百年不闰,四百年闰”来进行判断。也就是说在能被 4 整除的年份当中,除了那些能被 100 整除但不能被 400 整除的年份外,其余的都是闰年(见图 1)。判断一个数能否被另一个数整除可以用 C 语言的求模运算符(%)来实现。

图 1:判断某年是否为闰年
用 xxxx 表示年份,则凡是不能被 4 整除(xxxx%4!=0)的年份都是平年;而在能被 4 整除的年份中,那些能被 100 整除但不能被 400 整除((xxxx%100==0)&&(xxxx%400!=0))的年份也是平年。
凡是能被 400 整除(xxxx%400==0)的年份都是闰年;能被 4 整除但不能被 100 整除((xxxx%4==0)&&(xxxx%100!=0))的年份也是闰年。
代码清单 2:给定年份和月份,求该月共有多少天
运行结果为:
声明:《C语言系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
- A:90~100
- B:80~89
- C:70~79
- D:60~69
- E:0~59
请编程将任意给定的百分制成绩转化为相应等级。
问题分析
输入:0~100的任意整数。输出:对应等级(A、B、C、D、E)。
问题中的五个等级相当于五个分支,因此该问题应用 switch 开关语句来解决。
观察等级与百分制成绩之间的对应关系可以发现,每个等级段的百分制成绩划分都是以 10 分为一个分数段:
- A 等级段的每个分数整除 10 以后结果为 9 或 10;
- B 等级段的每个分数整除 10 以后结果为 8;
- C 等级段的每个分数整除 10 以后结果为 7;
- D 等级段的每个分数整除 10 以后结果为 6;
- E 等级段的每个分数整除 10 以后结果为 0~5。
由此可见,如果百分制成绩为 x,则表达式 x/10 所得到的值(0~10)就可以对应各个分数段。
算法描述
1) 定义整型变量 x 用于存储任意百分制成绩;
2) 用 scanf( ) 从键盘输入整数给 x;
3) 按 x/10 的结果分情况执行:
值为 9、10,则输出 A;
值为 8,则输出 B;
值为 7,则输出 C;
值为 6,则输出 D;
值为 0、1、2、3、4、5,则输出 E;
4) 结束。
代码清单 1:将任意给定的 0~100 的整数转化为 A、B、C、D、E 五个等级
#include <stdio.h> #include <stdlib.h> int main( ) { int x; printf("输入一个百分制成绩(0~100的整数):\n"); scanf("%d",&x); switch (x/10) { case 10: case 9: printf("A\n"); break; case 8: printf("B\n"); break; case 7: printf("C\n"); break; case 6: printf("D\n"); break; default:printf("E\n"); break; } system("pause"); return 0; }
运行结果为:
输入一个百分制成绩(0~100的整数):
98
A
给定年份和月份,求该月共有多少天。
问题分析
一年有 12 个月,其中一、三、五、七、八、十、十二月各有 31 天,四、六、九、十一月各有 30 天。二月比较特殊,闰年的二月有 29 天,平年的二月有 28 天,要确定二月的天数,就要先判断当年是否为闰年。某年是否为闰年可以依据“四年一闰,百年不闰,四百年闰”来进行判断。也就是说在能被 4 整除的年份当中,除了那些能被 100 整除但不能被 400 整除的年份外,其余的都是闰年(见图 1)。判断一个数能否被另一个数整除可以用 C 语言的求模运算符(%)来实现。

图 1:判断某年是否为闰年
用 xxxx 表示年份,则凡是不能被 4 整除(xxxx%4!=0)的年份都是平年;而在能被 4 整除的年份中,那些能被 100 整除但不能被 400 整除((xxxx%100==0)&&(xxxx%400!=0))的年份也是平年。
(xxxx%4 != 0) || ((xxxx%100 == 0) && (xxxx%400 != 0))
凡是能被 400 整除(xxxx%400==0)的年份都是闰年;能被 4 整除但不能被 100 整除((xxxx%4==0)&&(xxxx%100!=0))的年份也是闰年。
(xxxx%400 == 0) || ((xxxx%4 == 0) && (xxxx%100 != 0))
算法描述
1) 定义两个整型变量 year 和 month 用于存储年份和月份;
2) 用 scanf( ) 从键盘输入年份和月份;
3) 根据月份的数值,分情况处理:
月份为 4、6、9、11 中的一个,则输出 30;
月份为 1、3、5、7、8、10、12 中的一个,则输出 31;
月份为 2,则判断该年是否为闰年:是闰年,则输出 29;是平年,则输出 28;
4) 结束。
代码清单 2:给定年份和月份,求该月共有多少天
#include <stdio.h> #include <stdlib.h> int main( ) { int year,month; printf("请输入年份和月份(两个整数,空格分隔):\n"); scanf("%d %d",&year,&month); switch (month) { case 4:case 6:case 9: case 11:printf("%d年%d月有30天。\n",year,month); break; case 1: case 3: case 5: case 7: case 8: case 10: case 12:printf("%d年%d月有31天。\n",year,month); break; case 2:if((year%400==0)||((year%4==0)&&(year%100!=0))) printf("%d年%d月有29天。\n",year,month); else printf("%d年%d月有28天。\n",year,month); break; default:printf("输入有误!\n"); } system("pause"); return 0; }
运行结果为:
请输入年份和月份(两个整数,空格分隔):
2020 5
2020年5月有31天。
声明:《C语言系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。