一、PTA實驗作業
題目1. 計算分段函數
注:可在頭文件中包含math.h,並調用sqrt函數求平方根,調用pow函數求冪。
1.代碼
double x,y;
scanf("%lf",&x);
if(x>=0)
{
y=sqrt(x);
}
else{
y=pow(x+1,2)+2*x+1/x;
}
printf("f(%.2f) = %.2f",x,y);
2.設計思路
- (1)定義兩個浮點型變量x,y。
- (2)當x>0時,輸出y=sqrt(x),不滿足時輸出y=pow(x+1,2)+2*x+1/x。
- (3)輸出y的值。
3.本題調試過程中碰到的問題及解決方法
第一次提交時出現了格式錯誤,后來通過檢查發現等號間沒取間距。
4.PTA提交列表
題目2.輸出三角形面積和周長(15 分)
本題要求編寫程序,根據輸入的三角形的三條邊a、b、c,計算並輸出面積和周長。注意:在一個三角形中, 任意兩邊之和大於第三邊。三角形面積計算公式:area=√
s(s−a)(s−b)(s−c),其中s=(a+b+c)/2。
1.代碼
int a,b,c;
(a>0,b>0,c>0);
double area,perimeter,s ;
scanf("%d%d%d",&a,&b,&c);
if(a+b>c&&a+c>b&&b+c>a){
perimeter = (a+b+c)*1.0;
s = (a+b+c)/2.0;
area = sqrt(s*(s-a)*(s-b)*(s-c));
printf("area = %.2f; perimeter = %.2f",area,perimeter);
}
else{
printf("These sides do not correspond to a valid triangle");
2.設計思路
- (1)定義三個整形變量a,b,c代表三條邊,定義兩個浮點型變量 area,perimeters代表面積和周長。
- (2)輸入a,b,c三個變量。
- (3)如果這三條邊能組成三角形,則 perimeter = (a+b+c)1.0, s = (a+b+c)/2.0,area = sqrt(s(s-a)(s-b)(s-c))。
- (4)滿足時輸出面積和周長,不滿足時輸出These sides do not correspond to a valid triangle的語句。
3本題調試過程中碰到的問題及解決方法
在判斷是否滿足三角形時的那三個表達式之間的&號寫少了一個,后來經過檢查改正了。
4.PTA提交列表
題目3.出租車計價(15 分)
本題要求根據某城市普通出租車收費標准編寫程序進行車費計算。具體標准如下:
起步里程為3公里,起步費10元;
超起步里程后10公里內,每公里2元;
超過10公里以上的部分加收50%的回空補貼費,即每公里3元;
營運過程中,因路阻及乘客要求臨時停車的,按每5分鍾2元計收(不足5分鍾則不收費)。
1.代碼
int minute;
double kilometre,money;
scanf("%lf %d",&kilometre,&minute);
if(kilometre<=3){
money=10+minute/5*2;
}
else if(kilometre>3&&kilometre<=10){
money=10+(kilometre-3)*2+minute/5*2;
}
else{
money=24+(kilometre-10)*3+minute/5*2;
}
printf("%.0f",money);
2.設計思路
- (1)定義一個整形變量minute表示時間,定義兩個浮點型變量kilometre,money分別表示里程和價錢。
- (2)輸入kilometre與minute。
- (3)當kilometre<=3時, money=10+minute/52;當3<kilometre<=10時, money=10+(kilometre-3)2+minute/52;其他情況時, money=24+(kilometre-10)3+minute/5*2。
- (4)輸出money的值。
3.本題調試過程中碰到的問題及解決方法
輸入里程大於10的數據檢查時發現得不到理論值,調試時總是執行第2種情況,后經過多次檢查發現我把第2種情況的取值寫成了3<kilometre<=10的錯誤形式。
4.PTA提交列表
題目4.程序設計聯考(5 分)
自從湖南農業大學、吉首大學和懷化學院組織程序設計課程聯考以后,舉辦聯考的經驗越來豐富。尤其是在使用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\n");
break;
case 2:
printf("Jishou University\n");
break;
case 3:
printf("Huaihua University\n");
break;
case 4:
printf("Aerospace University\n");
break;
case 5:
printf("Ocean University\n");
break;
default:
printf("Other University\n");
break;
2.設計思路
- (1)定義一個整形變量 account代表學生賬號。
- (2)把account/100000,當它取值為1時,輸出學校Hunan Agricultural University;當它取值為2時,輸出學校Jishou University;當它取值為3時,輸出學校Huaihua University;當它取值為4時,輸出學校Aerospace University;當它取值為5時,輸出Ocean University。
3.本題調試過程中碰到的問題及解決方法
調試過程中Other University這個語句間忘了取間隔。
4.PTA提交列表
二、截圖本周題目集的PTA最后排名
三、本周學習總結
1.你學會了什么?
- 學會了用else-if、swich這兩種語句來實現多分支結構,並了解了這兩種語句的異同。
- 學到了一種新的數據類型--字符型數據,它定義時要用類型名char。
- 學會了用for語句來設計循環類的編程。
- 了解到了幾種邏輯運算符,之前一直以為一個不等式如1<x<2可以直接表達,通過PTA的作業才發現計算機無法識別,要用&&這個運算符才可以。
- 兩種分支結構中swich含break語句,break可以提前結束程序,而不加時就會按順序執行到結束。
2.本周的內容,你還不會什么?
- 對swich語句還不夠熟練,有點陌生,不會區分一些多分支題目用哪種比較方便,感覺兩者沒什么區別。
- 對書本上提到的輸入函數getchar()、輸出函數putchar()不太了解,不知道它們和scanf()、printf()有什么區別。
3.你碰到什么困難,打算如何解決?
- 沒碰到太大困難,就是經常犯格式上的錯誤。爭取以后細心點。