1. 程式人生 > 其它 >第一次上機考試總結

第一次上機考試總結

考試成績:

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;
}

得出的答案如下

然而答案卻是錯誤的,改了很多遍也不能通過,希望老師能幫我 指出錯誤。