第一次上機考試總結
阿新 • • 發佈:2021-10-23
考試成績:
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; }
得出的答案如下
然而答案卻是錯誤的,改了很多遍也不能通過,希望老師能幫我 指出錯誤。