阶段一上机考试补题报告
错题一
某大学全校都开设C语言课程,每学年结束都按成绩进行统计。请编写程序,输入优秀、良好、中等、及格和不及格的人数,输出成绩统计表。
输入样例
36
275
1806
2194
101
输出样例
Rank Number
----------------
Excellent 36
Good 275
Medium 1806
Pass 2194
Fail 101
----------------
Total 4412
错误代码:
错误原因:1,忘记了printf中变量前不需要加&
2,没有注意到输出长度
改正后代码:
#include <stdio.h>
int main()
{ int a,b,c,d,e,f;
scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);
f = a+b+c+d+e;
printf("Rank Number\n----------------\nExcellent%7d\nGood%12d\nMedium%10d\nPass%12d\nFail%12d\n----------------\nTotal%11d\n",a,b,c,d,e,f);
return 0;
}
相关知识:%nd:n为指定的输出字段的宽度,如果数据的位数小于n,则左端补以空格,若大于n,则按实际位数输出。
错题二
请编写程序,输入正整数 n,计算平方和 s=12+22+32+⋯+n2。
输入格式
n
输出格式
s
输入样例
9
输出样例
285
错误代码:
错误原因:对for循环掌握不够。
改正后代码:
错题三
鸡、兔的总数从键盘给出,显示所有可能的鸡兔数目组合。(设两种动物数都不为0)
输入格式:
输入1个100以内的整数作为鸡兔总数目。(不考虑非法输入)
输出格式:
分行显示所有鸡兔可能的数目组合。
输入样例:
4
输出样例:
在这里给出相应的输出。例如:
rabbits=1,chickens=3
rabbits=2,chickens=2
rabbits=3,chickens=1
错误原因:忘记题目需使用for使用循环。
改正后代码:注意i<n而不是i<=n。
错题四
输入年份year、月份month,判断该月的天数。闰年:能被4整除但不能被100整除或者能被400整除的年份是闰年。
输入格式:
测试数据有多组,处理到文件尾。对于每组测试,输入两个整数,表示年份year和月份month。
输出格式:
对于每组测试,输出对应年月的天数。
输入样例:
2020 2
2020 4
输出样例:
29
30
错误原因:1,if else嵌套使用错误。
2,“测试数据有多组,处理到文件尾”不知道如何输入数据。
改正后代码:switch case分成三个部分,最后一部分用if else分成两部分
#include<stdio.h>
int main(){
int y,m;
while((scanf("%d %d",&y,&m))!=EOF)
switch(m)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
printf("31\n");
break;
case 4:
case 6:
case 9:
case 11:
printf("30\n");
break;
case 2:
if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)
{
printf("29\n");
}
else {
printf("28\n");
}
break;
}
return 0;
}
相关知识:如果if else结题麻烦时可以考虑使用switch case
while循环处理到文件尾格式while((scanf( ))!=EOF)
错题五
现有96个端口状态,用3个无符号整型ua(95~64),ub(63~32),uc(31~0)组合起来的96位二进制数来表示,每位二进制数的1、0表示其正常和故障状态。
输入一个tag位,将tag位上二进制数置1.
tag位表示其在96位中所处的位数(在96位中从低向高从0至95)
输入格式:
第一行输入三个无符号整数,表示ua,ub,uc
第二行输入一个整数tag。
输出格式:
若tag值不在0到95之间,则输出Error
,否则输出转换后的ua,ub,uc
输入样例:
1 2 3
-2
输出样例:
Error
输入样例:
1 2 3
10
输出样例:
ua=1,ub=2,uc=1027
错误原因:不会位运算
正确代码:先用tag/32来求出端口位置,再用tag%32来得出位于端口的哪个位置,最后进行或运算得出答案。
错题六
当n=5时,沙漏图形如输出样例所示。请观察并明确沙漏图形的规律。要求输入一个整数n,输出满足规律的沙漏图形。
输入:
测试数据有多组,处理到文件尾。每组测试输入一个整数n(1<n<20)。
输出:
对于每组测试,输出满足规律的沙漏图形。
输入样例:
5
输出样例:
********* ******* ***** *** * *** ***** ******* *********
错误代码:
错误原因:1,忘记输出空格。
2,for循环使用不熟练。
3,不会淑如处理到文件尾的数据。
正确代码:将图形分为上下两部分,先用for嵌套分别输出"*"和" ",同理再用for嵌套输出图形的下部分。
#include<stdio.h>
int main(){
int n,a,j,i;
while(scanf("%d",&n)!=EOF&&n<20&&n>1){
for(a=1;a<=n;a++){
for(i=1;i<a;i++){
printf(" ");
}
for(j=0;j<2*n-2*i+1;j++){
printf("*");
}
printf("\n");
}
for(a=0;a<n-1;a++){
for(i=1;i<n-a-1;i++){
printf(" ");
}
for(j=0;j<=2*n-2*i;j++){
printf("*");
}printf("\n");
}
}
}
考试总结:很多方面内容没有掌握,有些学到的内容如for,while没有掌握熟练,主要是自己亲手敲的代码少了,下一段学习中要多看视频查漏补缺,作业独立完成,作业尽量自己亲手敲代码。