一、PTA實驗作業
題目1:7-1 計算分段函數[2]:
本題目要求計算下列分段函數f(x)的值:
注:可在頭文件中包含math.h,並調用sqrt函數求平方根,調用pow函數求冪。
輸入格式:
輸入在一行中給出實數x。
輸出格式:
在一行中按“f(x) = result”的格式輸出,其中x與result都保留兩位小數。
1.實驗代碼
double x,fx;
scanf("%lf",&x);
if(x>=0){
fx=sqrt(x);
}
else{
fx=pow(x+1,2)+2*x+1/x;
}
printf("f(%.2f) = %.2f",x,fx);
return 0;
2 設計思路
- 第一步:調用數學函數,定義雙精度變量x、fx;
- 第二步:輸入x的值;
- 第三步:運用if-else結構,判斷x與0的關系,並根據對應關系輸出相應函數;
- 第四步:輸出答案,按“f(x) = result”的格式輸出,其中x與result都保留兩位小數;
3.本題調試過程碰到問題及解決辦法
- (1)多種錯誤,對根號sqrt、平方pow的用法一開始不熟悉,使用錯誤,在不同測試點產生錯誤,自己看書學習並進行多次使用后掌握;
- (2)編譯錯誤,對符號運用不懂,定義變量時把fx弄成f(x),致使無法完成編譯,老師上課提到f(x)不是一個變量名,且有演示過,就會了;
4.本題PTA提交列表
題目2:7-4 輸出三角形面積和周長
本題要求編寫程序,根據輸入的三角形的三條邊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.實驗代碼
int a,b,c;
float area,s,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 設計思路
- 第一步:調用數學函數,定義三角形邊長整型變量,面積周長用浮點型變量;
- 第二步:輸入三角形各邊長的值;
- 第三步:進行數學公式運用;
- 第五步:運用if-else結構,判斷是否滿足三角形條件任意兩邊之和大於第三邊,若滿足,則經數學公式計算后按題目要求格式輸出;
- 第六步:若不滿足,輸出These sides do not correspond to a valid triangle;
3.本題調試過程碰到問題及解決辦法
- (1)部分正確,只能輸出不滿足時答案,把三個運算的公式寫進了if的大括號里,因為一開始思路是如果滿足了條件就執行運算,然后就自然寫下去,后來同學指出解決;
- (2)printf()函數掌握不完全,用的還不是很自然,同學提出改正;
4.本題PTA提交列表
題目3:7-6 出租車計價
本題要求根據某城市普通出租車收費標准編寫程序進行車費計算。具體標准如下:
起步里程為3公里,起步費10元;
超起步里程后10公里內,每公里2元;
超過10公里以上的部分加收50%的回空補貼費,即每公里3元;
營運過程中,因路阻及乘客要求臨時停車的,按每5分鍾2元計收(不足5分鍾則不收費)。
1.實驗代碼
{
int time;
float distance,money,money1,money2;
scanf("%f%d",&distance,&time);
if(distance<=3){
money1= 10;
}
else if((distance>3&&distance<=10)){
money1=10+2*(distance-3);
}
else if(distance>10){
money1=24+3*(distance-10);
}
if(time<5){
money2=0;
}
else if(time>=5){
money2=(time/5)*2;
}
money=money1+money2;
printf("%.0f",money);
return 0;
}
2 設計思路(把時間跟車程分開)
- 第一步:調用數學函數,定義整型變量time,公里長度distance、費用money用浮點型變量;
- 第二步:輸入車程和等待時間;
- 第三步:運用if-else結構,判斷如果滿足車程distance<=3,輸出費用10;
- 第四步:如果distance>3&&distance<=10,輸出money1=10+2*(distance-3);
- 第五步:如果distance>10,輸出 money1=24+3*(distance-10);
- 第六步:重新使用if-else結構,判斷if(time>=5),就只等待的費用money2=0;
- 第七步: if(time>=5),等待有費用 ,按money2=(time/5)*2計算;
- 第八步:計算車程、等待費用和money=money1+money2;
- 第九步:輸出;
3.本題調試過程碰到問題及解決辦法
- (1)一開始思路是把兩個計費一起合起來計算,沒寫出來,在繼續嘗試,后來分開計算比較清晰;
- (2)在寫條件的時候寫不清楚,一下子把所有都羅列下來了,結果還不對,還有就是printf()的用法錯誤;
- (3)對四舍五入不懂,然后答案總不對,后來同學教直接在輸出時保留0位小數,解決;
4.本題PTA提交列表
題目4:7-8 程序設計聯考
為了便於區分考生,考生賬號的第一位是學校代號。1代表Hunan Agricultural University,2代表Jishou University,3代表Huaihua University,4代表Aerospace University,5代表Ocean University。 請編寫程序根據考生的賬號區分考生的學校。
輸入格式:
在一行中給出1個6位的正整數account。
輸出格式:
在一行中輸出account的學校。注意:如果不清楚學校代號是哪個學校,則輸出"OtherUniversity"。
1.實驗代碼
int account;
scanf("%d",&account);
int n;
n=account/100000;
switch(n)
{
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");
return 0;
2 設計思路
- 第一步:定義整型變量account存放六位數字,n存放代號;
- 第二步:輸入六位數account;
- 第三步:取六位數的首位表代號,用n=account/100000;
- 第四步:使用switch()語句,case從1開始到5,並分別對應學校;
- 第五步:當n>5時,default,printf("Other University");
3.本題調試過程碰到問題及解決辦法
- (1)一開始的思路就只想到用if結構,六位數取首位的表達不對;
- (2)老師要求用switch(),改過來后發現自己使用還很陌生,得對照書,多看幾次,多使用幾次就會了,像第9題就有嘗試,或者選簡單的題來訓練;
- (3)答案錯誤,輸出格式,題目中空格沒有,自己加上;
4.本題PTA提交列表
二、截圖本周題目集的PTA最后排名
三、本周學習總結
1.你學會了什么?
- (1)學了判斷語句if的多分支結構,if-else if-else形式;
- (2)新的字符型變量char的用法,既可以用%c輸入,也可以用函數getchar(),但getchar()只能讀入一個字符,輸出用%c或putchar();
- (3)學了邏輯運算符,&&表示與,||表示或,!表示非;
- (4)ASCII字符集,每個字符都有一個唯一的次序值,如:空格對應10;
2.本周的內容,你還不會什么?
- (1)PTA中7-5&7-8還不太明白,有些想的不是自己本來思路,特定的用法就不對了;
- (2)字符型變量char的用法和switch()使用不熟;
3.你碰到什么困難,打算如何解決?
- (1)在編碼時候不能自己獨立寫出題目,總要經過査書、問同學才能找出自己思路哪里錯了,語法哪里又不對了,打算在一次次的寫PTA,就是寫程序時慢慢學着自己編,不能一下子就寫出來,但可以一點點進步,否則容易形成一不會就問人的習慣;
- (2)平常除了代碼還有其他作業,時間上經常是不夠,導致不管是寫代碼還是別的科目平均分到去學習的就少了,代碼一缺少練習,就更糟,所以可能得抓緊別的課堂上的老師講解時間,尤其是高數、線代,這樣不懂的才會少,課外花的時間才會少,才有時間多打點代碼;