PAT練習中的錯誤


1.數據類型

(1)本題要求編寫程序,計算4個整數的和與平均值。題目保證輸入與輸出均在整型范圍內。

輸入格式:輸入在一行中給出4個整數,其間以空格分隔。

輸出格式:在一行中按照格式“Sum = 和; Average = 平均值”順序輸出和與平均值,其中平均值精確到小數點后一位。

輸入樣例:1 2 3 4

輸出樣例:Sum = 10; Average = 2.5

#include<stdio.h>
int main(){
    int a,b,c,d;
    scanf("%d %d %d %d",&a,&b,&c,&d);
    printf("Sum = %d; Average = %.1f",a+b+c+d,(a+b+c+d)/ 4.0);
    return 0;
}
//輸出整數用%d;輸出一位小數用%.1f,並且所計算的值記得乘保留一位小數點的值。

 

(2)對於輸入的兩個整數,按照要求輸出其和差積商。

輸入格式:在一行內輸入兩個不超過100的非負整數a和b,中間以一個空格間隔,且保證b不為0。

輸出格式:共四行,格式是:

[a] + [b] = [a+b]

[a] - [b] = [a-b]

[a] * [b] = [a*b]

[a] / [b] = [a/b]

其中,帶有方括號的內容(如[a][b][a+b]等)表示相應整數或運算結果的值,在輸出時要用實際的值代替。並且:如果a能夠被b整除,那么a/b應輸出為整數格式,否則a/b輸出為帶兩位小數的格式。提示:注意表達式中的空格。

輸入樣例1:

6 3

輸出樣例1:

6 + 3 = 9

6 - 3 = 3

6 * 3 = 18

6 / 3 = 2

輸入樣例2:

8 6

輸出樣例2:

8 + 6 = 14

8 - 6 = 2

8 * 6 = 48

8 / 6 = 1.33

#include<stdio.h>
int main()
{
int a,b;
scanf("%d %d",&a,&b);
printf("a + b = %d\na - b = %d\na * b = %d\n",a+b,a-b,a*b);
if(a%b==0){
printf("%d",a/b);
}else{
printf("a / b = %.2f",((double)a/(double)b));
}

return 0;
}

//前面定義了int,printf時要換成double。

//注意:printf中不是輸出a+b,而是所輸入的數值%d+%d!!!

 

(3)世界上不同國家有不同的寫日期的習慣。比如美國人習慣寫成“月-日-年”,而中國人習慣寫成“年-月-日”。下面請你寫個程序,自動把讀入的美國格式的日期改寫成中國習慣的日期。

輸入格式:輸入在一行中按照“mm-dd-yyyy”的格式給出月、日、年。題目保證給出的日期是1900年元旦至今合法的日期。

輸出格式:在一行中按照“yyyy-mm-dd”的格式給出年、月、日。

輸入樣例:03-15-2017

輸出樣例:2017-03-15

#include<stdio.h>
int main()
{
int a,b,c;
scanf("%d-%d-%d",&a,&b,&c);
printf("%04d-%02d-%02d",c,a,b);
return 0;
}

//輸出兩位數

 

(4)有時候人們用四位數字表示一個時間,比如1106表示11點零6分。現在,你的程序要根據起始時間和流逝的時間計算出終止時間。讀入兩個數字,第一個數字以這樣的四位數字表示當前時間,第二個數字表示分鍾數,計算當前時間經過那么多分鍾后是幾點,結果也表示為四位數字。當小時為個位數時,沒有前導的零,即5點30分表示為530。注意,第二個數字表示的分鍾數可能超過60,也可能是負數。

輸入格式:輸入在一行中給出2個整數,分別是四位數字表示的起始時間、以及流逝的分鍾數,其間以空格分隔。注意:在起始時間中,當小時為個位數時,沒有前導的零,即5點30分表示為530;流逝的分鍾數可能超過60,也可能是負數。

輸出格式:輸出四位數字表示的終止時間。題目保證起始時間和終止時間在同一天內。

輸入樣例:

1120 110

輸出樣例:

1310

我寫的錯誤代碼:

#include<stdio.h>
int main()
{
int a,b,c,d,h,m;
scanf("%d %d",&a,&b);
h=b/60;//要加的小時
m=b%60;//要加的分鍾
c=(m+a%100)/60+h+a/100;//最終總的小時
d=(m+a%100)%60;//最終剩下的分鍾
if(c>24){
printf("%d",(c-24)*100+d);
}else{
printf("%d",c*100+d);
}
return 0;
}

別人寫的正確代碼:

#include<stdio.h>

int main()
{
int hour,min,temp;
scanf("%d %d", &hour, &min);
temp = hour/100*60 + hour%100 + min;
temp = temp/60*100 + temp%60;
printf("%d", temp);
return 0;
}

(轉載於:github.com/MuziJin

//這道題其實轉變思路,不是把輸入的分鍾數加到時間上,而是把時間統統轉變成分鍾,對於分鍾的正負就不必再考慮,就簡單多了。

感覺我的腦子真的不好使,分析解決問題的能力差,其實很簡單的一道題,被我弄的那么復雜,而且經常想的很復雜,恐怕我是真的沒救了,嗷嗷嗷啊~

雖然條條大路通羅馬,我走的不僅是繞死的,而且還走錯了→→

簡直要了我的老命!

(5)本題要求根據某城市普通出租車收費標准編寫程序進行車費計算。具體標准如下:起步里程為3公里,起步費10元;超起步里程后10公里內,每公里2元;超過10公里以上的部分加收50%的回空補貼費,即每公里3元;營運過程中,因路阻及乘客要求臨時停車的,按每5分鍾2元計收(不足5分鍾則不收費)。

輸入格式:輸入在一行中給出輸入行駛里程(單位為公里,精確到小數點后1位)與等待時間(整數,單位為分鍾),其間以空格分隔。

輸出格式:在一行中輸出乘客應支付的車費(單位為元),結果四舍五入,保留到元。

輸入樣例1:2.6 2   輸出樣例1:10

輸入樣例2:5.1 4   輸出樣例2:14

輸入樣例3:12.5 9  輸出樣例3:34

#include<stdio.h>
int main()
{
    int t,M;
    double m;
    scanf("%lf %d",&m,&t);
    if(t<5){
        t=0;
    }else{
        t=t/5*2;
    }
    if(m<=3){
        m=10;
    }else{
        if(m>3,m<=10){
            m=10+(m-3)*2.0;
        }else{
            if(m>10){
                m=24+(m-10)*3.0;
            }
        }
    }
    M=m+0.5+t;
    printf("%d",M);
    return 0;
}
//這道題並不算太難,我都寫出來了(崩潰。。。)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM