考试成绩:
7-4:求某月的天数
#include <stdio.h> int main() { int year,month,i; for(i=1;i<=2;i++){ scanf("%d %d",&year,&month); if((year%4==0&&year%100!=0)||year%400==0){ switch(month){ case 12:month=31;break; case 11:month=30;break; case 10:month=31;break; case 9:month=30;break; case 8:month=31;break; case 7:month=31;break; case 6:month=30;break; case 5:month=31;break; case 4:month=30;break; case 3:month=31;break; case 1:month=31;break; default:month=29;break; } } else{ switch(month){ case 12:month=31;break; case 11:month=30;break; case 10:month=31;break; case 9:month=30;break; case 8:month=31;break; case 7:month=31;break; case 6:month=30;break; case 5:month=31;break; case 4:month=30;break; case 3:month=31;break; case 1:month=31;break; default:month=28;break; } } printf("%d\n",month); } return 0; }
因为数据是多组的,并不知道循环次数,所以不能使用for语句。
改正后:
#include <stdio.h> int main() { int year,month; while(scanf("%d %d\n",&year,&month)!=EOF){ if((year%4==0&&year%100!=0)||year%400==0){ switch(month){ case 12:month=31;break; case 11:month=30;break; case 10:month=31;break; case 9:month=30;break; case 8:month=31;break; case 7:month=31;break; case 6:month=30;break; case 5:month=31;break; case 4:month=30;break; case 3:month=31;break; case 1:month=31;break; default:month=29;break; } } else{ switch(month){ case 12:month=31;break; case 11:month=30;break; case 10:month=31;break; case 9:month=30;break; case 8:month=31;break; case 7:month=31;break; case 6:month=30;break; case 5:month=31;break; case 4:month=30;break; case 3:month=31;break; case 1:month=31;break; default:month=28;break; } } printf("%d\n",month); } return 0; }
使用scanf()!=EOF来结束循环。
7-5:位运算
#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; }
由于不知道tag位于那个端口,所以用tag/32来求出端口位置,再用tag%32来得出位于端口的哪个位置,最后进行或运算得出答案。
7-6:打印沙漏
在看到这题时我的思路比较混乱,想不出来解题思路,在考试完后参考别人的写法后写出以下代码:
#include <stdio.h> int main() { int n,i,j=1,y,h; char ch; while(scanf("%d %c",&n,&ch)!=EOF){ y=n-17; for(i=3;i>=1;i--){ for(h=3-i;h>0;h--){ printf(" "); } for(j=1;j<=2*i-1;j++){ printf("%c",ch); } printf("\n"); } for(i=2;i<=3;i++){ for(h=3-i;h>0;h--){ printf(" "); } for(j=1;j<=2*i-1;j++){ printf("%c",ch); } printf("\n"); } if(y>0){printf("%d",y);} } return 0; }
得出的答案如下
然而答案却是错误的,改了很多遍也不能通过,希望老师能帮我 指出错误。