c語言程序設計第四次作業——順序結構


(一)改錯題

輸出三角形的面積和周長,輸入三角形的三條邊a、b、c,如果能構成一個三角形,輸出面積area和周長perimeter(保留2位小數);否則,輸出“These sides do not correspond to a valid triangle”。

錯誤信息(1):

錯誤原因: area = sqrt( s * ( s - a ) * ( s - b ) * ( s - c )語句后面缺少一個“)”

改正方法: 把 area = sqrt( s * ( s - a ) * ( s - b ) * ( s - c ); 改為 area = sqrt( s * ( s - a ) * ( s - b ) * ( s - c ));

錯誤信息(2):

錯誤原因:if 語句后面沒有加大括號

改正方法: 在 if 語句后面加上大括號,使 if else 之間的所有語句都包含在大括號內

錯誤信息(3):

錯誤原因:if( a + b > c || b + c > a || a + c > b) 語句中三個關系式應該用 且 鏈接

改正方法:把 if( a + b > c || b + c > a || a + c > b) 改為 if( a + b > c && b + c > a && a + c > b)

正確的源代碼

正確運行結果

(二)學習總結

1.在編程解決問題的過程中,我們會用到多個if語句,if...else if... 語句以及switch語句,查閱資料,總結一下這三種情況的區別何在,並分別舉例加以說明。

格式與例子

多個if語句的一般格式為:

舉例PTA選擇結構(2)中的7-4題用多個if語句較好:

if...else if...語句的一般格式:

舉例PTA選擇結構(2)中的7-6題用if... else if...語句較好:

switch語句的一般形式為:

舉例PTA選擇結構(2)中的7-3題用swith case語句較好:

(1).多個if語句,if...else if... 語句的區別:if... else if...語句是一對判斷語句的組合;多個順序if語句是平行的運行判斷的語句。

具體分析:
if...else if...是當判斷到if語句中的條件成立時,則后面的else if條件語句就不再進行運行與判斷了,這樣就縮短了程序運行的時間,提高了運算效率; 而多個if語句是將所有if條件語句都要進行判斷,即使前面有滿足條件的if語句但后面未經過的if條件語句仍然要進行判斷,所以多個if條件語句之間是並列關系,所以這樣就增加了程序運行的時間,降低了運算效率。

多個if語句,if...else if... 語句資料鏈接

(2)if... else if...語句與switch語句區別: 兩者本質的區別是 if...else if...語句更加適合進行對於區間范圍的判斷;而switch語句更加適合進行對於離散值的判斷。

具體分析:所有的switch語句都可以用if...else if...語句來替換因為if...else if...語句只需對每個離散值分別做判斷即可;但並不是所有的if...else if...語句都可以用switch語句來替換因為區間范圍內值的個數是無限的,並且switch所接受的值只能是整型或枚舉型,所以不能用case來一一列舉。有時用switch看起來比較好理解。有時用if...else if...比較好,一般情況下變量用switch比較好,當變量不確定時用if...else if...就比較好,並且在多路分支時用switch語句比用if...else if
... 語句效率要高。

if... else if...語句與switch語句資料鏈接

(3).多個if語句與switch語句的區別:if和switch都是條件判斷語句,在效果上是沒有什么差別的,但我們可以從效率上比較

具體分析:例子: if(A>B) {A=B;} else {B=A; } 如果將這個例子放在switch 語句中,實現起來會比較麻煩一些,因為在switch語句中case要求的是常量,一般是不能進行邏輯判斷的;而在if語句中常常用於進行邏輯判斷,所以這也是if語句優於switch語句的地方。 但是如果判斷的都是幾個常量的數據,采用switch語句比較方便,清晰,明了。
多個if語句是將所有if條件語句都要進行判斷,即使前面有滿足條件的if語句但后面未經過的if條件語句仍然要進行判斷,所以多個if條件語句之間是並列關系,所以這樣就增加了程序運行的時間,降低了運算效率。而switch 語句中運行開始是從switch 后面的條件開始的,例如在 :“計算天數(1
本題要求編寫程序計算某年某月某日是該年中的第幾天”中用switch語句就比多個if語句運行速度更快些。

多個if語句與switch語句網址鏈接

(4).其它需要進行總結的內容總結:

1.一般情況下switch語句需要跳出時要有break;來結束,因為switch語句具有穿透性。

2.注意邏輯運算符的優先級,順序方向。

3.特別注意switch語句case與其后面常量需要空開一個

(三)實驗總結

(一)題目:

1.本題要求編寫程序將一個百分制成績轉換為五分制成績。轉換規則:
大於等於90分為A;
小於90且大於等於80為B;
小於80且大於等於70為C;
小於70且大於等於60為D;
小於60為E。

(1)流程圖:

(2)源代碼

(3)實驗分析:

問題1.對於百分制的數字怎么划分出十個等級

原因:不會使用除法取整來划出十個等級

解決方法:老師給出用除10的方法來划分,自己多次修改得出正確答案

(4)本題PTA提交列表:

二. 題目:

5.三角形判斷
(1)題目:給定平面上任意三個點的坐標(x1,y1)、(x2,y2)、(x3,y3),檢驗它們能否構成三角形。

(1)流程圖:

(2)源代碼:

(3)實驗分析:

問題1.S=(double)(a+b+c)/2語句中必須用double

原因:因為如果a+b+c為奇數則S為小數,所以必須用double類型

解決方法:多次實驗發現,如果沒有double則只有a+b+c為偶數時成立,加上double時則答案正確

問題2.一開始看着題目都懂是要干什么,但不會寫程序

原因:不會抽象思維,只要輸入六個數字,使它們倆倆配對,成為三個點的坐標即可運算

解決方法:通過問同學得到解題思路,自己細心編寫得出正確程序

(4)本題PTA提交列表:

三.題目

7.簡單的計算器
(1)題目:本題要求編寫一個簡單計算器程序,可根據輸入的運算符,對2個整數進行加、減、乘、除或求余運算。題目保證輸入和輸出均不超過整型范圍。
輸入格式:
輸入在一行中依次輸入操作數1、運算符、操作數2,其間以1個空格分隔。操作數的數據類型為整型,且保證除法和求余的分母非零。
輸出格式:
當運算符為+、-、*、/、%時,在一行輸出相應的運算結果。若輸入是非法符號(即除了加、減、乘、除和求余五種運算符以外的其他符號)則輸出ERROR。

(1)流程圖:

(2)源代碼

(3)實驗分析:
問題1.例如當運行除法語句時,如圖:
除數為零時會出現這種情況

原因:在 printf("除數不能為零\n");語句后面應該跟一條強制退出的語句exit(0),但須注意加exit(0)語句的同時要在代碼開頭加上#include <stdlib.h>這條語句

解決辦法:老師上課着重強調,寫代碼時細心即可

(4)本題PTA提交列表:

四.題目:

本題目要求一元二次方程的根,結果保留2位小數。

(1)流程圖:

(2)源代碼:

(3)實驗分析:

問題1.在編寫程序時輸出結果總是有點問題

原因:沒弄懂方程無解,也就是解為虛根時的問題

解決辦法:問同學,實驗課時老師給講解,上網查,最后終於答案正確了!

(4)本題PTA提交列表:

(四)博客互評

(1)李仁正的博客:

實驗總結第一題的框圖我認為在n<60z之后就不必要進行判斷了,直接輸出E就可以了,這樣運行會更快些。

博客鏈接:http://www.cnblogs.com/lrxlrz/p/7763680.html

范馬桶的博客:

學習總結中,貌似缺少對其它知識的總結,但對要求總結的三個語句總結的特別好,是我學習的榜樣!

博客鏈接:http://www.cnblogs.com/he111923/p/7772093.html

郭zx的博客:

對學習總結描述比較多,寫的很詳細,而且舉例較多,我要多多學習

博客地址:http://www.cnblogs.com/1234569ss/p/7754274.html


免責聲明!

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



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