C語言第五次作業


(一)改錯題

1.輸出華氏攝氏溫度轉換表:輸入兩個整數lower和upper,輸出一張華氏攝氏溫度轉換表,華氏溫度的取值范圍是{lower,upper},每次增加2℉。計算公式如下:
c = 5×(f-32)/9
其中,c表示攝氏溫度,f表示華氏溫度。
1.錯誤信息:

  錯誤原因:for語句后面按不加分號
  改正方法:把for語句括號后面的分號;去掉。
2.錯誤信息:

  錯誤原因:for語句里面是用分號隔開,而不是逗號
  改正方法:把for語句里面的逗號改為分號
3.錯誤信息:for語句后面沒有跟着花括號{}的,導致程序錯誤
  錯誤原因:循環語句要用花括號把循環的量都包括起來
  改正方法:

  4.錯誤信息:

  錯誤原因:公式輸入錯誤
  改正方法:

  5.錯誤信息:

  錯誤原因:輸出是+2,而不是+1
  改正方法:

改完之后代碼如圖:

#include <stdio.h>
int main(void)
{    
int fahr , lower, upper;  /* fahr表示華氏度 */
double celsius;        /* celsius表示攝氏度 */ 
printf("Enter lower:");
scanf("%d",&lower);
printf("Enter upper:");
scanf("%d",&upper);
printf("fahr  celsius\n");             /* 顯示表頭 */
/* 溫度轉換 */
for (fahr = lower ; fahr <= upper; fahr =fahr+2) 
{
celsius = 5  * (fahr - 32.0) / 9; 
printf("%d %6.1f\n", fahr, celsius); 
}
return 0; 
}  

(二)學習總結

1.詳細描述程序的執行過程,即說明程序的每一步是執行的哪條代碼,執行順序如何。循環需描述前兩次循環和最后一次循環的詳細執行過程。最后說明程序實現的功能是什么。

答:①定義整形常量i,num,odd,even
②給odd和even賦值為0
③ 開始for循環語句,表達式1為i=1,表達式2為i<=10,表達式3為i++
④開始輸入變量數值num
⑤開始進入了選擇語句當num和2求余為0 時even的數值+1
⑥如果num和2 求余為0 時odd的值+1
⑦i<=10成立程序繼續循環
⑧再次輸入一次變量num
⑨重復上面的循環過程,如果num和2求余為0,even再次+1,如果num和2 求余為0 時odd的值再次+1
..........
⑩直到當i>10的時候跳出循環輸出even和odd,程序結束。

     程序實現的功能:輸入10個數據后,把奇數和偶數分開,分別統計奇數和偶數的個數,然后輸出。

2.增量運算符
(1)運行下面程序,結果是什么?增量運算符在單獨使用時,前綴和后綴形式有區別嗎?

答:結果為

有區別,++i是先加后使用,而i++是先使用后加。這兩者得出的答案不同。

(2)運行下面的程序,結果是什么?兩條輸出語句的執行過程是怎樣的?說明什么問題?這兩條輸出語句執行完后,i和j的值分別是多少?

答:結果為

第一條先i++是先使用后加,而++j是先加后使用。在單獨作為表達式的時候無影響,但是在語句中有影響。i=2,j=3。

3.有些循環語句后面有{},有些沒有,有些語句有縮進,運行下面的四個小程序,運行結果有什么不同?循環體的認定與縮格形式是否有關?與{}是否有關?那么,應該如何正確判斷一個循環語句中的循環體?下面的程序中,哪幾種格式是正確的縮進格式。

答:第一個如圖所示:


第二個如圖所示:


第三個如圖所示:


第四個如圖所示:

①先看第一個和第二個程序就只有兩個printf這個語句有區別,第二個有縮格,但是輸出的結果是一樣的,所以循環體的認定與縮格形式無關。
②再看第二個和第三個程序,區別在於多了一個花括號{},但是輸出結果不同,在比較一下第三個和第四個程序都有花括號{}但是括號的范圍不同,結果不同,當printf("\n")在花括號外面時,就不參與循環,結果就不會換行,所以與{}有關。
③正確判斷一個循環語句中的循環體是什么,我覺得是要看最后的輸出格式是什么,根據輸出格式和花括號{}括起來的范圍來看在括號外的語句便不參與循環。
循環體是什么。

4.對其他你認為需要進行總結的內容進行總結。

答:我認為本章的內容比較瑣碎,有加減運算符和for語句,判斷循環語句,學了這一節之后,類似於i=i+1這樣的式子可以簡寫成i++,但是一定要注意i++和++i的區別,加減的先后順序問題,for語句的格式不能寫錯,在花括號中正確的寫出循環語句,表達式123不能寫錯位置,每個表達式之間有分號隔開,不能用逗號隔開。

(三)實驗總結

1.統計學生平均成績與及格人數

(1)題目
本題要求編寫程序,計算學生們的平均成績,並統計及格(成績不低於60分)的人數。題目保證輸入與輸出均在整型范圍內。

(2)流程圖

(3)源代碼

#include<stdio.h>
int main()
{
int N,count,i,grade,t=0;
double average=0,sum=0;
scanf("%d",&N);	
if(N==0)
{
printf("average = %.1f\n",average);
printf("count = %d",t);
}
else
{
for(i=1;i<=N;i=i+1)
{
scanf("%d",&grade);
sum+=grade;
if(grade>=60)
{
t=t+1;
}
}
	
average=sum/N;
count=t;
printf("average = %.1f\n",average);
printf("count = %d",t);
}
return 0;
}

(4)實驗分析
本題沒有什么太大的問題,主要就是考慮到循環條件和語句准確性即可。
(5)本題PTA提交列表

2.到底是不是太胖了

(1)題目
據說一個人的標准體重應該是其身高(單位:厘米)減去100、再乘以0.9所得到的公斤數。真實體重與標准體重誤差在10%以內都是完美身材(即 | 真實體重 − 標准體重 | < 標准體重×10%)。已知市斤是公斤的兩倍。現給定一群人的身高和實際體重,請你告訴他們是否太胖或太瘦了。
(2)流程圖

(3)源代碼

#include <stdio.h>
#include <math.h>
int main()
{
int a=0,i = 0;
double SW = 0.0,H = 0.0,W = 0.0;
scanf("%d",&a);
for(i = 1;i <= a;i++)
{
scanf("%lf%lf",&H,&W);
SW=(H - 100) * 0.9 * 2;
if(fabs(SW - W) < SW * 0.1)
{
printf("You are wan mei!\n");
}
else if(SW - W < SW * 0.1)
{
printf("You are tai pang le!\n");
}
else
{
printf("You are tai shou le!\n");
}
}
return 0;	
}

(4)實驗分析:
問題1:對於完美身材的的判定有誤差
原因:運用公式的時候錯誤
解決辦法:加入fabs函數
問題2:結果在極值總是有誤差
原因:浮點型在等於時候總是有誤差
解決辦法:避免用浮點型的格式
(5)本題PTA提交列表

3.統計學生成績

(1)題目
本題要求編寫程序讀入N個學生的百分制成績,統計五分制成績的分布。百分制成績到五分制成績的轉換規則:
大於等於90分為A;
小於90且大於等於80為B;
小於80且大於等於70為C;
小於70且大於等於60為D;
小於60為E。
(2)流程圖

(3)源代碼

#include <stdio.h>
int main()
{
int N=0,m=0,i=0,A=0,B=0,C=0,D=0,E=0;
scanf("%d",&N);
for(i=1;i<=N;i++)
{
scanf("%d",&m);
switch(m/10)
{
case 10:
case 9:A++;break;
case 8:B++;break;
case 7:C++;break;
case 6:D++;break;
default :E++; 
} 
} 
printf("%d %d %d %d %d",A,B,C,D,E);
return 0;
}

(4)實驗分析
問題1:沒有用switch語句導致答案錯誤
原因:沒有考慮到switch的方便性
解決辦法:把循環語句換為switch語句
(5)本題PTA提交列表

4.找出最小值

(1)題目
本題要求編寫程序,找出給定一系列整數中的最小值。
(2)流程圖

(3)源代碼

#include <stdio.h>
#include <limits.h>
int main()
{
int n=0,i=0,a=0,min=0;
a=INT_MAX;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&min);
if(min<a)
{
a=min;
}
}
printf("min = %d",a);
return 0;
}

(4)實驗分析

問題1:頭文件limits.h沒有使用
原因:沒有考慮到最小值比較的簡潔方法
解決辦法:加上頭文件limits和INT_MAX
問題2:當即上頭文件時答案錯誤
原因:關於最小值的賦值錯誤
解決辦法:經過詢問同學幫助和老師的講課我解決了知道了應該先給一開始的輸入的輸定為最大值,然后跟以后輸入的數比較,把最小值賦給min。

(5)本題PTA提交列表

(四)博客互評

李曉曉http://www.cnblogs.com/Reloaded/p/7795161.html
賀雲濤http://www.cnblogs.com/zxh980818/p/7812974.html
胡展業http://www.cnblogs.com/SYDneyHZY/p/7803132.html


免責聲明!

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



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