C語言第二次做業---分支結構

1、PTA實驗做業

題目1計算分段函數[2]

輸入格式:算法

輸入在一行中給出實數x。ide

輸出格式:函數

在一行中按「f(x) = result」的格式輸出,其中x與result都保留兩位小數。學習

輸入樣例1:spa

10
輸出樣例1:設計

f(10.00) = 3.16
輸入樣例2:3d

-0.5
輸出樣例2:調試

f(-0.50) = -2.75code

1.實驗代碼

double x,y;
scanf("%lf",&x);
if(x>=0){
y=sqrt(x);
}
else{
y=pow(x+1,2)+2*x+pow(x,-1);
}
printf("f(%.2f) = %.2f",x,y);blog

2.設計思路

  • 第一步:定義倆個浮點型變量x,y
  • 第二步:輸入x
  • 第三步:運用if-else語句,若是x>=0,執行y=sqrt(x);不然,y=pow(x+1.2)+2*x+pow(x,-1)
  • 第四步:輸出f(x),注意輸出結果爲倆位小數點,利用%。2f實現

3.本題調試過程碰到問題及解決辦法

問題:格式錯誤
解決辦法:再次讀題後增添等號左右的空格,提交後答案正確

4.本題PTA提交列表

題目2輸出三角形面積和周長

本題要求編寫程序,根據輸入的三角形的三條邊a、b、c,計算並輸出面積和周長。注意:在一個三角形中, 任意兩邊之和大於第三邊。三角形面積計算公式:area=√
​s(s−a)(s−b)(s−c)

​​ ,其中s=(a+b+c)/2。

輸入格式:

輸入爲3個正整數,分別表明三角形的3條邊a、b、c。

輸出格式:

若是輸入的邊能構成一個三角形,則在一行內,按照

area = 面積; perimeter = 周長
的格式輸出,保留兩位小數。不然,輸出

These sides do not correspond to a valid triangle
輸入樣例1:

5 5 3
輸出樣例1:

area = 7.15; perimeter = 13.00
輸入樣例2:

1 4 1
輸出樣例2:

These sides do not correspond to a valid triangle

1.實驗代碼

int a,b,c;
double s,area,perimeter;
scanf("%d%d%d",&a,&b,&c);
s=(a+b+c)/2.0;
area=sqrt(s(s-a)(s-b)*(s-c));
perimeter=a+b+c;
if(a+b>c&&a+c>b&&b+c>a){
printf("area = %.2f; perimeter = %.2f",area,perimeter);
}
else{
printf("These sides do not correspond to a valid triangle");
}

2.設計思路

  • 第一步:定義整型變量a,b,c,分別表明三邊邊長
  • 第二步:定義浮點型變量s,area,perimeter
  • 第三步:輸入a,b,c
  • 第四步:計算s,s=(a+b+c)/2.0
  • 第五步:計算area,area=sqrt(s(s-a)(s-b)*(s-c)),
  • 第六步:計算perimeter,perimeter=a+b+c
  • 第七步:利用倆邊之和大於第三邊判斷a,b,c能不能組成三角形
  • 第八步:若是能,輸出area和perimeter,注意小數位數;若不能,輸出These sides do not correspond to a valid triangle

3.本題調試過程碰到問題及解決辦法

問題:(1)s=(a+b+c)/2.0 除數必定要用浮點數2.0,不然整型除整型獲得的結果是整型,可能會改變s的值,致使後面結果錯誤
(2)又忘記空格了致使格式錯誤
解決辦法:(1)將2改成2.0
(2)增長等號左右空格

4.本題PTA提交列表


題目3

出租車計價
本題要求根據某城市普通出租車收費標準編寫程序進行車費計算。具體標準以下:

起步里程爲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:

1.實驗代碼

double kilometre,price1,price;
    int time,price2;
scanf("%lf%d",&kilometre,&time);
if(kilometre<=3){
    price1=10;
}
else {
    if(kilometre<=10){
    price1=10+(kilometre-3)*2;
    }
   else{price1=24+(kilometre-10)*3;
    }
}
    price2=(time/5)*2;
    price=price1+price2;
    printf("%.0f",price);

2.設計思路

  • 第一步:定義浮點型變量kilometer,price1,price
  • 第二步:定義變量time,price2
  • 第三步:分三段範圍,求price1的值。當kilometer<=3時,price1=10,;kilometer>3&&kilometer<=10時,price2=10+(kilometre-3)2;kilometer>10時,price1=24+(kilometre-10)3
  • 第四步:利用price2=(time/5)*2 (用到整型除整型等於整型)
  • 第五步:計算: price=price1+price2
  • 第六步:輸出price,小數位爲0,這樣會自動對小數部分四捨五入

3.本題調試過程碰到問題及解決辦法

(1)題目中有:輸入行駛里程(單位爲千米,精確到小數點後1位)因此我在輸入時將%lf改爲了%.1f
結果:
運行時不能進入正確的if語句,price1計算結果不對,解決方法:%.nf是輸出時用來控制輸出位數的,用於printf語句中而不是scanf語句,因此我將%.0f改回%lf,再次運行就能正確執行相應if語句了

(2)我開始的算法是打算計算出小數部分,而後用if語句判斷與0.5的大小,大於0.5,price整數部分就加一,而後輸出,並且在計算price2時再次使用了if-else語句,算法看上去很麻煩,並且運行結果不對
如圖:
解決辦法:經過對price1,price2的輸出發現,由於我定義的變量都是浮點型,price2獲得的結果就不是整型的了,致使price數值可能變大,最終影響輸出結果。另外發現price2的計算不須要if結構,並且%.0f有四捨五入的做用,因此對代碼進行了刪減,最終運行獲得正確結果

4.本題PTA提交列表


題目4程序設計聯考

自從湖南農業大學、吉首大學和懷化學院組織程序設計課程聯考之後,舉辦聯考的經驗越來豐富。尤爲是在使用PTA系統做爲考試平臺以後,聯考工做獲得了不少學校的承認和支持。因此,如今參與聯考的學校比較多。爲了便於區分考生,考生帳號的第一位是學校代號。1表明Hunan Agricultural University,2表明Jishou University,3表明Huaihua University,4表明Aerospace University,5表明Ocean University。 請編寫程序根據考生的帳號區分考生的學校。

輸入格式:

在一行中給出1個6位的正整數account。

輸出格式:

在一行中輸出account的學校。注意:若是不清楚學校代號是哪一個學校,則輸出"OtherUniversity"。

輸入樣例:

123456
輸出樣例:

Hunan Agricultural University

1.實驗代碼

int account,number;
scanf("%d",&account);
number=account/100000;
switch(number){
    case 1:
        printf("Hunan Agricultural University");
        break;
       case 2:
                printf("Jishou University");
            break;
       case 3:
                printf("Huaihua University");
            break;
       case 4:
                printf("Aerospace University");
        break; 
       case 5:
        printf("Ocean University");
        break;
    default:
        printf("Other University");
        break;
}

2.設計思路

  • 第一步:定義浮點型變量account,number
  • 第二步:輸入account
  • 第三步:計算number,number=account/100000
  • 第四步:switch結構,根據number的值輸出相應語句,若number=1,輸出Hunan Agricultural University
  • 第五步:若number=2,輸出Jishou University
  • 第六步:若number=3,輸出Huaihua University
  • 第七步:若number=4,輸出Aerospace University
  • 第八步:若number=5,輸出Ocean University
  • 第九步:若number爲其餘數字,輸出Other University

3.本題調試過程碰到問題及解決辦法

這題沒有遇到什麼問題,以爲如何計算number是一個思考的地方,其餘都很簡單了,另外break是一個注意點,別漏了

4.本題PTA提交列表


2、截圖本週題目集的PTA最後排名

3、本週學習總結

1.你學會了什麼

  • 1.幾種分支結構

    (1)if-else語句,通常形式:
    if(表達式)
    語句1;
    else
    語句2;
    【也有省略else的if語句】
    (2)else-if語句,通常形式:
    if(表達式1)
    語句1;
    else if(表達式2)
    語句2;
    ···
    else if(表達式n-1)
    語句n-1;
    else
    語句n;
    (3)switch語句,通常形式:
    switch(表達式){
    case常量表達式1:語句段1;break;
    case常量表達式2:語句段2;break;
    ...
    case常量表達式n:語句段n;break;
    default: 語句段n+1;break;
    }
    注意 1.default可省略,當表達式與任意一個常量表達式的值不相等時,就什麼都不執行
    2.語句段後加break,若是沒有break,會繼續執行下去,直到能夠輸出

(4)嵌套的if語句,通常形式:
if(表達式1)
if(表達式2)語句1;
else 語句2;
else
if(表達式3)語句3;
else 語句4;
重點:else和if的匹配原則:else與最靠近它的,沒有與其餘else語句匹配的if匹配

  • 2.控制精度是在printf語句實現,不能用在scanf語句
  • 3.學會一個題目:
    int a=5;
    printf("%d",a=5);
    printf("%d",a==5);
    第一個是賦值,輸出結果爲5,第二個是判斷a==5是否是對的,是對的,輸出1,是錯的,輸出0
  • 4.字符型數據的輸入與輸出,注意:調用一次函數,只能輸入或輸出一個字符

2.本週的內容,你還不會什麼?

字符型數據的輸入和輸出還不熟練,沒有遇到涉及到的題目

3.你碰到什麼困難,打算如何解決?

寫的代碼太繁瑣了,慣性思惟,像車費那題不須要用if判斷的時候,我也用了,調試的時候找錯誤就很麻煩了。多練練,調試的時候修改代碼,對了,先寫算法很重要。

相關文章
相關標籤/搜索