C語言博客作業01--分支、順序結構


0.展示PTA總分

順序結構

分支結構

1.本章學習總結

1.1學習內容總結

1.學會了在程序有錯誤時進行調試(設置斷點並觀察變量,單步跟蹤)

2.明白了注釋文本應該用///**/

3.知道了多種數據類型及各自的格式控制字符

int型使用%d float型使用%f double型使用%lf char型使用%c
%.2f表示保留兩位小數 %f保留六位小數

4.了解了6種關系運算符

<小於 <=小於等於 >大於 >=大於等於 ==等於 !=不等於 (注:=表示賦值)

5.學會了使用if-else語句

6.明白了scanf語句中輸入變量時應該在變量名前加&

7.知道了調用數學函數時加入#include<math.h>,並且知道了一些常用的數學函數表示方法

8.了解了switch語句及其中break語句的三種使用方法,及與if-else語句的相同點和不同點

共同點:①都能實現多分支結構
不同點:
①if-else需要判斷過個分支。而switch只進入滿足條件分支,無需比較其他分支。switch語句效率更高。
②switch語句只能處理等值條件判斷的情況,case后只能是常量。而if選擇結構的限制,特別適合某個變量處於某個連續區間時的情況。
③switch語句判斷的值必須是整型,if判斷整型數和浮點數都可以。

9.知道了程序中用for語句實現循環,for語句中的fahr++相當於fahr=fahr+1,並且for語句中用兩個分號來分隔三個表達式,但for的后面沒有分號

10.了解了a'a'的區別

a是變量;
'a'是字符常量
變量放數據,常量不能變

11.認識了字符類型數據有字符型常量'A','a','9','*'等和字符型變量op之分

字符型變量在定義時用類型名char,例如:char op

12.知道了字符型數據的輸入輸出可以調用函數scanf()printf()getchar()putchar()

  • ch=getchar() 只能讀入一個字符,如果要輸入多個字符,需要多次調用該函數,一般采用循環調用的方式
    for(i = 0; i <= 10; i++)
        ch = getcher(); ```
* ```putchar(輸出參數)```可以輸出一個字符,輸出參數為字符型常量或者字符型變量

###13.記住了三種邏輯運算符,知道了邏輯運算符的運算對象可以是關系表達式或邏輯表達式,邏輯運算的結果是“真”或“假”,邏輯運算符&&和||的優先級低於關系運算符
```!```非          ```&&```與         ``` ||```或
![](https://img2018.cnblogs.com/blog/1774313/201909/1774313-20190928150708759-459872651.png)
###14.知道了在switch語句中,表達式和常量表達式的值一般是整型或字符型,所有的常量表達式的值都不能相等,在switch語句所有語句段的末尾使用break,可以簡單清晰地實現多分支選擇
![](https://img2018.cnblogs.com/blog/1774313/201910/1774313-20191001124235501-1257045485.png)
###15.明白了在嵌套的if-else語句中,如果內嵌的if省略了else部分,可能在語義上產生二義性,也明白了else和if的匹配標准是**else與最靠近它的,沒有與別的else匹配過的if相匹配**
![](https://img2018.cnblogs.com/blog/1774313/201910/1774313-20191001124912942-2118885525.png)
* 注:輸出結果:2

##1.2 本章學習體會
* 通過這兩三周時間的學習,我真正了解到了C語言的內容。剛開始的時候,因為學習內容比較簡單直白,再加上暑假有看慕課視頻,所以暑假看不懂的都有了解釋,那時的我欣喜若狂,十分激動,對於這門課程也**激發了極大的興趣**,覺得十分有趣,然而,隨着課程的繼續,我不明白的地方越來越多,所以開始常常問學長學姐,問明白的同學,在他們的幫助下,我也算是取得了些許的進步。
* PTA上的題目集讓我發現了許多不易引起我注意的問題,例如**空格問題**等等,這些問題我一定會**牢記於心,爭取不再重復**這些細節問題。
* 在**switch語句**上我還是運用不太熟練,但我一定會弄明白它。在這一段時間里,我了解到了許多的新知識,比如**駝峰命名法**,再比如**變量類型的區別**等等,對於vs我也更熟悉了,還學會了自己**調試**,找錯誤,我也在這些錯誤中取得了進步。
* 我的代碼量:(不包括重復寫)

|周|代碼量(行)|
|:---:|:--:|
|4|241|
|5|506|
|累計|747|

#2.PTA實驗作業
##2.1 題目名1

輸出三角形面積和周長 (15 分)
本題要求編寫程序,根據輸入的三角形的三條邊a、b、c,計算並輸出面積和周長。注意:在一個三角形中, 任意兩邊之和大於第三邊。三角形面積計算公式:area=√s(s−a)(s−b)(s−c),其中s=(a+b+c)/2。

###2.1.1 數據處理
  1. 定義三角形三邊長分別為a、b、c,面積為area,周長為perimeter ,公式中的s。邊長定義為整型,其余因為有小數,定義為浮點型。
  2. 輸入邊長a,b,c。
  3. 運用if-else語句判斷是否邊長能夠構成三角形,即判斷是否符合三角形法則(三角形任意兩邊和大於第三邊),並且要用邏輯運算符&&與。
  4. 如果符合if的條件,則進入if的表達式中,利用算術公式和數學函數算出s,area和perimeter,然后保留兩位小數輸出area和perimeter。
  5. 如果不符合if的條件,則進入else語句,即輸出“These sides do not correspond to a valid triangle”。
###2.1.2 代碼截圖
![](https://img2018.cnblogs.com/blog/1774313/201910/1774313-20191003090635993-1944305379.png)
###2.1.3 本題可擴展功能
* 判斷是否是直角三角形
![](https://img2018.cnblogs.com/blog/1774313/201910/1774313-20191003092934708-1442170865.png)

###2.1.4 PTA提交列表及說明
![](https://img2018.cnblogs.com/blog/1774313/201910/1774313-20191003093120907-189825292.png)
* 寫了s和area的公式后,**忘記寫perimeter的公式**,我通過**不斷對比題目**而找出問題
* ```scanf```在vs上用```scanf_s```寫,在復制到PTA上時忘記去掉```_s```,我**把程序完整看了一遍**后知道錯誤
* **數學函數運用不熟練**,**多看書**

##2.2 題目名2

判斷一個三位數是否為水仙花數 (15 分)
本題要求編寫程序,判斷一個給定的三位數是否為水仙花數。三位水仙花數,即其個位、十位、百位數字的立方和等於該數本身。

###2.2.1 數據處理
  1. 定義百位數字hundred, 十位數字ten, 個位數字bit,以及被輸入數字number。均為整型。
  2. 輸入一個數number。
  3. 利用表達式算出相應的百位hundred,十位ten,個位bit,注意運用基本運算和取余%。
  4. 利用if-else語句判斷number是否為三位數。
  5. 如果number不是三位數,則輸出Invalid Value!。
  6. 如果是三位數,則進入else-if語句判斷是否為水仙花數。
  7. 如果是水仙花數,則輸出Yes,否則輸出No。
###2.2.2 代碼截圖
![](https://img2018.cnblogs.com/blog/1774313/201910/1774313-20191003101456428-423303386.png)
###2.2.3 本題可擴展功能
* 獲得四位數(或者其他位數)的水仙花數
![](https://img2018.cnblogs.com/blog/1774313/201910/1774313-20191003112441416-1773806565.png)

###2.2.4 PTA提交列表及說明
![](https://img2018.cnblogs.com/blog/1774313/201910/1774313-20191003112553012-866296641.png)
* **hundred==0**並不代表一定不是三位數,兩位數和一位數的百位也是0,理解錯誤,我通過詢問同學一起互相討論,從而改正成number和1000與99進行大小對比,即```number>=1000||number<=99```

##2.3 題目名3

12-24小時制 (15 分)
編寫一個程序,要求用戶輸入24小時制的時間,然后顯示12小時制的時間。

###2.3.1 數據處理
  1. 定義小時hour,分鍾minute。均為整型。
  2. 輸入24小時制時間。
  3. 運用if-else語句判斷hour是否大於等於12。
  4. 如果hour>=12,進入嵌套的if-else語句中,再判斷hour是否等於12。
  5. 如果hour==12,因為中午12點被認為是下午,所以24小時制的12:00就是12小時制的12:00 PM。
  6. 如果hour>12,則令hour-12后再賦值給hour,然后按照格式輸出。
  7. 如果hour<12,則進入else語句,直接按照格式輸出即可。

###2.3.2 代碼截圖
![](https://img2018.cnblogs.com/blog/1774313/201910/1774313-20191003121929708-202227074.png)
###2.3.3 本題可擴展功能
* 輸入12小時制的時間,然后顯示24小時制的時間
![](https://img2018.cnblogs.com/blog/1774313/201910/1774313-20191003124546965-178534147.png)

###2.3.4 PTA提交列表及說明
![](https://img2018.cnblogs.com/blog/1774313/201910/1774313-20191003124710794-1012654119.png)
* 開始時不知道小時和分鍾之間的```:```應該怎么寫,於是用了char()字符型變量,可是事實上它是常量,后來問了同學發現**直接寫**就可以了
* 將hour分為兩段,在其中一段中需要**運用嵌套語句**
* 要學會多思考,在腦海中不斷重復過程,剛開始思路不清晰,被同學點撥后一下子就清楚了

#3.閱讀代碼
## ACM 題庫題解: poj 3750 小孩報數問題
題目截圖:
![](https://img2018.cnblogs.com/blog/1774313/201910/1774313-20191006144303286-1375295938.png)
代碼截圖:
![](https://img2018.cnblogs.com/blog/1774313/201910/1774313-20191006144319286-165179693.png)
代碼分析:
* 代碼功能:輸入n,w,s,以及n個小孩的名字(人名不超過15個字符),令n個小孩按順序從第w個開始報數,報到規定的第s個后出列,游戲直至小孩全部出列為止
* 代碼優點:定義變量名稱准確,容易讓人明白意思;運用for語句,while語句,if語句,其中相互嵌套,邏輯順序嚴謹;語句末尾使用break語句,節省了運算時間;作者考慮到了人數不到s時的情況並且寫出相關解決辦法,十分全面


免責聲明!

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



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