阶段一上机考试补题报告

                                      阶段一上机考试补题报告

1.得分情况

 2.(1)题目

 

 

最终提交代码:

#include<stdio.h>
int main(){
int excellent;
scanf("%d",&excellent);
int good;
scanf("%d",&good);
int medium;
scanf("%d",&medium);
int pass;
scanf("%d",&pass);
int fail;
scanf("%d",&fail);
printf("Rank Number\n");
printf("----------------\n");
printf("Excellent %2d\n",excellent);
printf("Good %3d\n",good);
printf("Medium %4d\n",medium);
printf("Pass %4d\n",pass);
printf("Fail %3d\n",fail);
printf("----------------\n");
printf("Total %4d\n",excellent+good+medium+pass+fail);

 

return 0;
}

补题完成代码:

#include<stdio.h>
int main(){
int excellent;
scanf("%d",&excellent);
int good;
scanf("%d",&good);
int medium;
scanf("%d",&medium);
int pass;
scanf("%d",&pass);
int fail;
scanf("%d",&fail);
printf("Rank Number\n");
printf("----------------\n");
printf("Excellent%7d\n",excellent);
printf("Good%12d\n",good);
printf("Medium%10d\n",medium);
printf("Pass%12d\n",pass);
printf("Fail%12d\n",fail);
printf("----------------\n");
printf("Total%11d\n",excellent+good+medium+pass+fail);
return 0;
}

出错原因:反复提示格式错误

解决办法:输出数字不一定与样例相同,所以就不能按错误的代码输出空格,输出的每行数字都是靠右对齐,前面的空格没办法数,就只能找每行的空格总数,让系统自动在输出数字前面自动补空格,输出每行所需的字符宽度(%nd)。

(2)题目

 

未通过代码:

#include<stdio.h>
int main(){
int year,month;

int tianshu;


while(scanf("%d %d",&year,&month)!=EOF){
if((year%4==0&&year%100!=0)||(year%400==0)){
switch(month){
case 1:tianshu=31;break;
case 2:tianshu=29;break;
case 3:tianshu=31;break;
case 4:tianshu=30;break;
case 5:tianshu=31;break;
case 6:tianshu=30;break;
case 7:tianshu=31;break;
case 8:tianshu=30;break;
case 9:tianshu=31;break;
case 10:tianshu=30;break;
case 11:tianshu=31;break;
case 12:tianshu=30;break;


}
}
else
{
switch(month){
case 1:tianshu=31;break;
case 2:tianshu=28;break;
case 3:tianshu=31;break;
case 4:tianshu=30;break;
case 5:tianshu=31;break;
case 6:tianshu=30;break;
case 7:tianshu=31;break;
case 8:tianshu=30;break;
case 9:tianshu=31;break;
case 10:tianshu=30;break;
case 11:tianshu=31;break;
case 12:tianshu=30;break;


}
}

printf("%d\n",tianshu);

}
return 0;
}

补题代码:

#include<stdio.h>
int main(){
int year,month;
int tianshu;
while(scanf("%d %d",&year,&month)!=EOF){
if((year%4==0&&year%100!=0)||(year%400==0)){
switch(month){
case 1:tianshu=31;break;
case 2:tianshu=29;break;
case 3:tianshu=31;break;
case 4:tianshu=30;break;
case 5:tianshu=31;break;
case 6:tianshu=30;break;
case 7:tianshu=31;break;
case 8:tianshu=31;break;
case 9:tianshu=30;break;
case 10:tianshu=31;break;
case 11:tianshu=30;break;
case 12:tianshu=31;break;
}
}
else
{
switch(month){
case 1:tianshu=31;break;
case 2:tianshu=28;break;
case 3:tianshu=31;break;
case 4:tianshu=30;break;
case 5:tianshu=31;break;
case 6:tianshu=30;break;
case 7:tianshu=31;break;
case 8:tianshu=31;break;
case 9:tianshu=30;break;
case 10:tianshu=31;break;
case 11:tianshu=30;break;
case 12:tianshu=31;break;
}
}
printf("%d\n",tianshu);
}
return 0;
}

 出错原因:每月具体多少天记不清楚

解决办法:查找每个月的具体天数并改正

(3)题目

 补题代码:

#include<stdio.h>
int main(){
unsigned int ua,ub,uc;
int tag;
scanf("%u %u %u",&ua,&ub,&uc);
scanf("%d",&tag);
if(tag<0||tag>95){
printf("Error");
return 0;
}
switch(tag/32){
case 0:uc|=(unsigned int)1<<tag%32;break;
case 1:ub|=(unsigned int)1<<tag%32;break;
case 2:ua|=(unsigned int)1<<tag%32;break;
}
printf("ua=%u,ub=%u,uc=%u",ua,ub,uc);

return 0;
}

解题思路:96个端口分成三部分,输出一个tag将tag位上置1,因为不能确定tag处于96个端口的哪一个位置,所以就要对tag/32(因为每个整数有32位),来确定对哪一个整数进行置1处理,用switch-case进行下一步运算,对确定的数做处理,tag%32表示在这个整数的哪一位置1,再与原数进行或运算,所得的数就是置1之后的数。

00000000 00000000 00000000 00000001表示数值1,若这是第二个无符号数,tag位在这个数的范围内,设tag=35,tag/32=1,表示置1的位置在此数上,tag%32=3,表示将这个数从右往左第三位置1,结果为00000000 00000000 00000000 000001000与00000000 00000000 00000000 00000001做或运算表示的就是置1后的置。

(4)题目

补题代码:

#include<stdio.h>
int main(){
int n;
while(scanf("%d",&n)!=EOF){
int i,a,b;
int t=n;
int j=n*2-1;
int kongge,zifu;
if(n%2!=0){
for(i=1;i<=2*n-1;i++){
if(i<=n){
a=2*t-1;
b=i-1;
}
else {
a=2*i-4*(n/2+1)+3;
b=j-1;
}
for(kongge=1;kongge<=b;kongge++){
printf(" ");
}
for(zifu=1;zifu<=a;zifu++){
printf("*");
}
printf("\n");
t--;
j--;
}
}
else{
for(i=1;i<=2*n;i++){
if(i<=n){
a=2*t-1;
b=i-1;
}
else {
a=2*i-4*(n/2+1)+3;
b=j-1;
}
if(i==n+1)continue;
for(kongge=1;kongge<=b;kongge++){
printf(" ");
}
for(zifu=1;zifu<=a;zifu++){
printf("*");
}
printf("\n");
t--;
j--;

}
}

}
return 0;
}

出现的问题:空格和输出字符找不到条件去控制 思路理不清

解决办法:找网站上找了相关类型的题去听,开始有点思路了。

解题思路:找出内循环输出空格k和字符j与外循环i输出行数的关系,对奇数和偶数做特殊处理

学习情况总结:这次考试让我清晰的认识到了我的问题所在,过于注重数量,而没有去思考背后的知识,陷入了费时又低效的循环,平时作业做的不是很踏实,学习方法不是很好,从这次的考试来讲,所考的题目基本都能在老师布置的作业上找到例子,尽管作业做对了,可能也只是想到哪写到哪,思路还是乱成一团。另外对于不会的题目就不管了,比如那个96个端口题,第一次听老师讲感觉听不明白,就放任不管了,考试考到也就只能跳过,之后再去听,一遍就懂了,对于听不懂的不会的还是要足够重视。

 

posted @ 2021-10-23 16:56  zhuhaizhuang  阅读(27)  评论(1编辑  收藏  举报