第4章 循環結構 4.1-4.2 熟悉使用while和do-while結構解決問題
這個作業屬於那個課程 | C語言程序設計II |
---|---|
這個作業要求在哪里 | https://edu.cnblogs.com/campus/zswxy/CST2019-4/homework/9979 |
我在這個課程的目標是 | 學習do-while,while語句。 |
這個作業在那個具體方面幫助我實現目標 | 使用循環語句處理循環的題目 |
參考文獻 | C語言程序設計,百度 |
1.PTA實驗作業
1.1 題目名1
7-3 jmu-c-二進制轉10進制
輸入一組二進制字符,輸出其對應的十進制數。當輸入回車鍵時,輸入結束。若輸入非二進制字符,輸出error input!
輸入樣例1:
11111111
輸出樣例1:
255
輸入樣例2:
34
輸出樣例2:
error input!
1.1.1數據處理
數據表達:char定義字符char ch
,int整型定義變量int sum=0
。
數據處理:
開始
sum←0
while ch=getchar()='\n'
do IF ch=='1' THEN
do sum←sum*2+1
ELSE ch=='0' THEN
sum←sum*2+0
ELSE 輸出error input!
END IF 結束
不滿足條件 輸出sum
結束
1.1.2實驗代碼截圖
1.1.3 造測試數據
輸入數據 | 輸出數據 | 說明 |
---|---|---|
-1 | error input! | 輸入值小於0 |
23 | error input! | 非二進制字符 |
101010 | 42 | 二進制字符 |
1.1.4 PTA提交列表及說明
個數/類型 | 出錯 | 改正 |
---|---|---|
1 | 沒有看清楚題目要求,題目要輸入字符型。 | 重新定義字符ch。 |
2 | while判斷輸入錯誤,不理解換行字符,導致進入死循環。 | 重新定義輸入字符。 |
3 | if語句賦值與等值比較理解不清楚. | 將賦值改為等值比較。 |
1.2 題目名1
7-3 整除光棍
這里所謂的“光棍”,並不是指單身汪啦~ 說的是全部由1組成的數字,比如1、11、111、1111等。傳說任何一個光棍都能被一個不以5結尾的奇數整除。比如,111111就可以被13整除。 現在,你的程序要讀入一個整數x,這個整數一定是奇數並且不以5結尾。然后,經過計算,輸出兩個數字:第一個數字s,表示x乘以s是一個光棍,第二個數字n是這個光棍的位數。這樣的解當然不是唯一的,題目要求你輸出最小的解。
*提示:一個顯然的辦法是逐漸增加光棍的位數,直到可以整除x為止。但難點在於,s可能是個非常大的數 —— 比如,程序輸入31,那么就輸出3584229390681和15,因為31乘以3584229390681的結果是111111111111111,一共15個1。
輸入格式:
輸入在一行中給出一個不以5結尾的正奇數x(<1000)。
輸出格式:
在一行中輸出相應的最小的s和n,其間以1個空格分隔。
輸入樣例:
31
輸出樣例:
3584229390681 15
1.2.1數據處理
數據表達:整型定義x,s,m,countx=0,s=0,m=0,count=0
數據處理:
開始
x←0,s←0,m←0,count←0
輸入 x
for i←1
do m←m*10+1
count←count+1
IF m>=x 跳出循環
while 真
輸出 m/x
m←m%x
IF m←0 跳出循環
m←m*10+1
count←count+1
輸出 count
結束
1.2.2實驗代碼截圖
1.2.3 造測試數據
輸入數據 | 輸出數據 | 說明 |
---|---|---|
1 | 1 1 | 最小光棍數 |
999 | 111222333444555666777889 27 | 輸入最大x |
-1 | -1 1 | x為負數 |
1.2.4 PTA提交列表及說明
個數/類型 | 出錯 | 改正 |
---|---|---|
1/部分正確 | 其實有蠻多錯誤的,都是運行超時。 | 不了解最小s,將while語句添加if語句判斷m>=x |
2/部分正確 | 最大s錯誤 | 我也想知道為什么錯誤了,通過調試也調不出個所以然。還沒有解決。 |
3/部分正確 | 最大s錯誤 | 通過百度,改正我的邏輯思維,不只用一個for語句循環計算第一位除數。解決 |
2.代碼互評
我的代碼
同學代碼
相同點:同樣使用 getchar 函數接收單個字符。 不同點:1.該同學使用switch語句而我使用if語句判斷,使用switch語句可以避免等值比較與賦值的錯誤。 2.同學代碼后使用 getchar 接收字符改為單個字符,不好理解。
3.學習總結
思維導圖
3.1 學習進度條
周 | 這周所花的時間 | 代碼行 | 學到的知識點簡介 |
---|---|---|---|
一周 | 4個小時 | 50行 | 簡單的打印字句 |
二周 | 5個小時 | 85行 | 提問的智慧 |
三周 | 12小時 | 132行 | if-else語句的使用,基本數字的定義,分段函數的計算 |
四周 | 6個小時 | 97行 | for循環語句的使用 |
五周 | 6個小時 | 190行 | 簡單函數的定義和調用,while語句,break終止語句 |
六周 | 6個小時 | 260行 | 鑲嵌型的for,if-else語句,邏輯運算,字節符的函數表達,switch語句的使用 |
七周 | 6個小時 | 300行 | 簡單的數組儲存問題,冒泡排序(目前還沒有學懂) |
八周 | 6個小時 | 310行 | 簡單的結構體 |
3.2 累積代碼行和博客字數
3.3 學習內容總結和感悟
3.3.1 學習內容總結
- 最近學習了一點點結構體大概內容如下:
struct 結構名
{
成員列表
};
調用方式與函數類似。
- 字符串的輸出為 %s 而不是 %c
3.3.2 學習體會
- 學習真的一點點的累計的事情,也希望我能夠堅持吧,在學習新的內容時沒有自己去實踐,所以之后我學習的內容我要自己去查找相關的知識內容,然后實踐自己寫代碼。 😀
- 感覺算法很神奇,雖然對一些知識不是很了解,但是我會努力的。 💪 💪 💪
- 學習也是一件很快樂的事情,學習了一些makedown的一些有趣的語法,比如這個笑臉。 😄 😄 😄