wml,

导航

阶段一上机考试补题报告

错题一

7-1 成绩统计表 (10 分)
 

某大学全校都开设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,则按实际位数输出。

错题二

7-2 求序列平方和 (10 分)
 

请编写程序,输入正整数 n,计算平方和 s=12+22+32++n2。

输入格式

n

输出格式

s

输入样例

9
 

输出样例

285
错误代码:

错误原因:对for循环掌握不够。

改正后代码:

 错题三

7-3 简单循环结构:输出所有鸡兔可能的数目。 (20 分)
 

鸡、兔的总数从键盘给出,显示所有可能的鸡兔数目组合。(设两种动物数都不为0)

输入格式:

输入1个100以内的整数作为鸡兔总数目。(不考虑非法输入)

输出格式:

分行显示所有鸡兔可能的数目组合。

输入样例:

4
 
结尾无空行

输出样例:

在这里给出相应的输出。例如:

rabbits=1,chickens=3
rabbits=2,chickens=2
rabbits=3,chickens=1
 
结尾无空行
错误代码:

错误原因:忘记题目需使用for使用循环。

改正后代码:注意i<n而不是i<=n。

 错题四

7-4 求某月的天数 (20 分)
 

输入年份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)

错题五

7-5 位运算应用 (20 分)
 

现有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来得出位于端口的哪个位置,最后进行或运算得出答案。

 错题六

7-7 打印沙漏 (20 分)
 

当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没有掌握熟练,主要是自己亲手敲的代码少了,下一段学习中要多看视频查漏补缺,作业独立完成,作业尽量自己亲手敲代码。

 

 

 


 






posted on 2021-10-24 23:21  wml,  阅读(501)  评论(0编辑  收藏  举报