一、PTA實驗作業
題目1:計算分段函數[2]
本題目要求計算下列分段函數f(x)的值:

注:可在頭文件中包含math.h,並調用sqrt函數求平方根,調用pow函數求冪。
1.實驗代碼
double x,y;
scanf("%lf",&x);
if(x>=0)
{
y=pow(x,0.5);
}
else
{
y=pow((x+1),2)+2*x+1/x;
}
printf("f(%.2f) = %.2f",x,y);
2 設計思路
- 第一步:定義兩個雙精度浮點型變量x,y
- 第二步:輸入x
- 第三步:判斷x是否大於等於0;如果是,執行第四步,否則執行第五步
- 第四步:運算表達式y=pow(x,0.5)得出y
- 第五步:運算表達式y=pow((x+1),2)+2*x+1/x得出y
- 第六步:按題目要求格式輸出x,y
3.本題調試過程碰到問題及解決辦法
- 1.在打y=pow((x+1),2)+2*x+1/x這個表達式時沒有在2與x之間打乘號;解決方法:編譯時出錯,重新瀏覽代碼發現沒打乘號,在兩者之間加上乘號
- 2.格式錯誤,沒有在輸出時按照題目要求打上空格;解決方法:提交時提示格式錯誤,根據經驗很快發現沒有加空格,加上空格
4.本題PTA提交列表

題目2: 輸出三角形面積和周長
本題要求編寫程序,根據輸入的三角形的三條邊a、b、c,計算並輸出面積和周長。注意:在一個三角形中, 任意兩邊之和大於第三邊。三角形面積計算公式:area=√
s(s−a)(s−b)(s−c),其中s=(a+b+c)/2。
1.實驗代碼
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(a+b>c&&a+c>b&&b+c>a)
{
double s,area,perimeter;
s=(a+b+c)/2.0;
area=sqrt(s*(s-a)*(s-b)*(s-c));
perimeter=a+b+c;
printf("area = %.2f; perimeter = %.2f",area,perimeter);
}
else
{
printf("These sides do not correspond to a valid triangle");
}
2 設計思路
- 第一步:定義三個整型變量a,b,c
- 第二步:輸入三角形的三條邊a,b,c
- 第三步:判斷任意兩邊是否大於第三邊,通過表達式a+b>c&&a+c>b&&b+c>a來判斷,如果條件成立,則執行第四,五,六步,否則執行第七步
- 第四步:定義三個雙精度浮點型變量s,area,perimerte
- 第五步:通過表達式s=(a+b+c)/2.0;area=sqrt(s(s-a)(s-b)*(s-c));perimeter=a+b+c;來計算出面積和周長
- 第六步:輸出面積和周長並保留兩位小數
- 第七步:輸出“These sides do not correspond to a valid triangle”
3.本題調試過程碰到問題及解決辦法
- 1.在s=(a+b+c)/2.0中的2.0打成2,導致答案錯誤;解決方法:反復調試,發現s的值一直為整數,找到問題所在,把2換成2.0
- 2.a+b>c&&a+c>b&&b+c>a中的&&用成了逗號;解決方法:調試后發現當連不成三角形時,答案錯誤,推測可能是條件出錯,瀏覽代碼后發現問題,把逗號改成&&
4.本題PTA提交列表

題目3:出租車計價
本題要求根據某城市普通出租車收費標准編寫程序進行車費計算。具體標准如下:
•起步里程為3公里,起步費10元;
•超起步里程后10公里內,每公里2元;
•超過10公里以上的部分加收50%的回空補貼費,即每公里3元;
•營運過程中,因路阻及乘客要求臨時停車的,按每5分鍾2元計收(不足5分鍾則不收費)。
1.實驗代碼
double mileage,money;
int time,a;
scanf("%lf %d",&mileage,&time);
a=time/5;
if(mileage<=3)
{
money=10+2*a;
}
else if(mileage>3&&mileage<=10)
{
money=10+(mileage-3)*2+2*a;
}
else
{
money=10+14+(mileage-10)*3+2*a;
}
printf("%.0f",money);
2 設計思路
- 第一步:定義兩個雙精度浮點型變量mileage,money,定義兩個整型變量time,a
- 第二步:輸入mileage,money的值
- 第三步:a=time/5
- 第四步:判斷mileage是否小於等於3,如果條件成立,執行第五步,否則執行第六步
- 第五步:money=10+2*a
- 第六步:判斷mileage是否既大於3又小於等於10,如果條件成立,則執行第七步,否則執行第八步
- 第七步:money=10+(mileage-3)2+2a
- 第八步:money=10+14+(mileage-10)3+2a
- 第九步:輸出money的值
3.本題調試過程碰到問題及解決辦法
- 1.題目沒弄清楚導致答案錯誤;解決方法:認真讀懂題目
- 2.在計算停車收費的公式a=time/5時,誤用了%號,導致答案錯誤;解決方法:反復調試后發現自己把%號給打成了/號,把%換成/
4.本題PTA提交列表

題目4:程序設計聯考
自從湖南農業大學、吉首大學和懷化學院組織程序設計課程聯考以后,舉辦聯考的經驗越來豐富。尤其是在使用PTA系統作為考試平台之后,聯考工作得到了很多學校的認可和支持。所以,現在參與聯考的學校比較多。為了便於區分考生,考生賬號的第一位是學校代號。1代表Hunan Agricultural University,2代表Jishou University,3代表Huaihua University,4代表Aerospace University,5代表Ocean University。 請編寫程序根據考生的賬號區分考生的學校。
1.實驗代碼
int account;
scanf("%d",&account);
switch(account/100000) {
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
- 第二步:輸入account的值
- 第三步:計算account/100000的值
- 第四步:當計算結果為1時,輸出Hunan Agricultural University
- 第五步:當結果為2時,輸出Jishou University
- 第六步:當結果為3時,輸出Huaihua University
- 第七步:當結果為4時,輸出Aerospace University
- 第八步:當結果為5時,輸出Ocean University
- 第九步:為其他結果時,輸出Other University
3.本題調試過程碰到問題及解決辦法
- 1.在default后忘了加:,導致編譯錯誤;解決方法:編譯器提示這條語句出錯,瀏覽后發現問題,在default后加上:
4.本題PTA提交列表

二、截圖本周題目集的PTA最后排名
PTA排名

三、本周學習總結
1.你學會了什么?
本周我學會了分支結構,學會了if語句和switch語句,它們都可以用來處理多分支問題,也了解了它們之間的不同點,還學會了else和if的匹配原則以及switch語句中沒有用break的情況;學會了字符型變量的定義,用char來定義,輸入輸出分別可以用getchar()和putchar(),在字符的兩邊要打單引號,而實型常量不需要;還學會了一些關於循環結構的知識,比如for語句的使用。
2.本周的內容,你還不會什么?
本周的內容基本上都學會了,可能還會有點不會靈活應用,還需加強練習。
3.你碰到什么困難,打算如何解決?
經過PTA的練習,我感覺我的數學能力還有欠缺,編程是和數學密切相關的,我需要去加強數學能力,平常多做些數學題目以及編程題來訓練自己的邏輯思維能力。
