(一)改錯題
輸出三角形的面積和周長,輸入三角形的三條邊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條件語句之間是並列關系,所以這樣就增加了程序運行的時間,降低了運算效率。
(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語句運行速度更快些。
(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的博客:
對學習總結描述比較多,寫的很詳細,而且舉例較多,我要多多學習