1.作業頭
這個作業屬於哪個課程 | https://edu.cnblogs.com/campus/zswxy/SE2020-2/ |
---|---|
這個作業要求在哪里 | <https://edu.cnblogs.com/campus/zswxy/SE2020-2/homework/11627 > |
這個作業的目標 | <回顧以往知識點,熟悉並運用各種語句(break,continue語句)的使用解決問題並學會進行學習總結,從別人的作業中吸取經驗> |
學號 | <20209124> |
一、本周教學內容&目標
第4章 循環結構 4.3熟悉break、continue的使用 4.4 熟悉使用循環的嵌套解決問題。
二、本周作業
1,PTA實驗作業
2,代碼互評
3,學習總結
三、作業格式
1.PTA實驗作業
排名圖片
1.1顯示指定范圍內的素數
輸入整數m,將所有大於1小於整數m的素數存入所指定的數組中(數組最多只存放100個素數,超過則提示“OVERFLOW”),輸出各素數——若輸入的m≤2,則提示“NO”,程序終止。注:素數(Prime Number),亦稱質數,指在一個大於1的自然數中,除了1和此整數自身外,沒法被其他自然數整除的數。
1.1.1數據處理
數據表達:使用整型函數進行定義素數prime並在其中包含定義了一個m,以便於進行后期的程序判斷,程序中包含了大量的if-else語句判斷,並將for語句嵌入其中,從而得出最后答案,其中程序中還含有"return 1"這個意思是跳回去
數據處理:多處使用了判斷加條件語句,雖未使用新教學的嵌套循環方法,但卻運用了新的知識"數組"(其中有了解到)進行一些必要處理,在本段程序中主函數並不和其他程序一樣位於最開始,而是位於程序的中間,但這樣處理更有利於對程序的理解,以便於得出最后答案
1.1.2實驗代碼截圖
1.1.3造測試數據
按照以下表格,輸出你的程序面向各種測試數據結果,除了題目給出的測試數據,可以自己再造其他臨界數據,越多越好,並加上必要說明
輸入數據 | 輸出數據 | 說明 |
---|---|---|
99 | 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 | 說明在0~99中含有如輸出數據所示的25個素數 |
330 | OVERFLOW | 一個數組中最多可存放100個素數,說明0~330中的素數不止100個 |
1 | NO | 由於0<2,導致程序終止出現NO |
1.1.4 PTA提交列表及說明
根據PTA提交列表,簡要描述調試程序碰到的問題及解決辦法
提交列表說明:
1.編譯錯誤:邏輯無錯誤,有些語句后面缺乏必要的符號,偶爾缺少必要的符號等還將scanf語句后的;錯誤打成了中文符號,造成了本題的編譯錯誤並且本題只有編譯錯誤,提交結果顯示無錯誤還不夠,不知道為啥只有9分,認真對比了其他同學的代碼也並未發現錯誤
2.解決方法:發現題目編譯錯誤后仔細檢查並在檢查過程中發現了符號的錯誤,詢問同學查詢c語言相關書籍確認並改正過來后編譯正確,並且在其他編譯器上輸入代碼時也顯示正確,思前想后我覺得可能是缺少了或者有更好的方法進行運算
1.2字符菱形
根據讀入的字符和邊長,勾畫字符菱形。
輸入格式:
輸入數據含有若干組的數據,每組數據包括一個可見字符c和一個整數n(1≤n≤30)。 以鍵盤輸入^Z或遇到文件結束符時結束數據輸入。
輸出格式:
輸出以c為填充字符,邊長為n的菱形,每個菱形之后都輸出一個換行符。
1.2.1數據處理
數據表達:使用整型函數定義i,j,k,n,使用字符型函數定義變量c,並且能利用嵌套循環作為程序的總體框架以得出最后的答案--字符菱形
數據處理:多處運用for循環進行嵌套處理,其中最重要的處理便是for循環中的判斷條件,必須對前面的條件有一個總的了解,才能保證不出錯誤
1.2.2實驗代碼截圖
1.2.3造測試數據
按照以下表格,輸出你的程序面向各種測試數據結果,除了題目給出的測試數據,可以自己再造其他臨界數據,越多越好,並加上必要說明
輸入數據 | 輸出數據 | 說明 |
---|---|---|
A 5 B 3 | <🔷🔶> | 輸入相應的數據可以得出與之對應的菱形 |
M 8 L 5 | <🔶🔷> | 輸入相應的數據可以得出與之對應的菱形 |
J 5 Q 2 | <🔷🔶> | 輸入相應的數據可以得出與之對應的菱形 |
1.2.4 PTA提交列表及說明
根據PTA提交列表,簡要描述調試程序碰到的問題及解決辦法
提交列表說明:
1.編譯錯誤:由於第一次前幾次都未正確找到錯誤地方,導致了多次編譯錯誤(一直將以為錯誤的地方改來改去,其實錯誤地方一直沒有找到)
2.解決方法:幾次編譯錯誤后心態有點崩看了一些其他同學和我用相同方法的同學,發現自己漏寫了一個重要語句(其實是沒想到這種情況),最后添加上去,顯示答案正確
2.代碼互評
找2份同學代碼,和自己代碼比較,建議互評代碼盡量找代碼風格差異較大。
同學代碼截圖
自己代碼截圖
不同地方
1.同學代碼和我的看起來整體相同,但仔細看,同學和我的代碼定義變量不一樣
2.同學代碼整體框架和我看起來差不多,但同學在代碼最后有一個getchar( )而我沒有
3.我只使用了整型進行定義,同學使用了整型,字符型,並且還是用了while 語句
4.整體看來,我的代碼更容易理解一些,但同學的方法也很值得我學習
同學代碼截圖
自己代碼截圖
不同地方
1.同學使用了多個頭文件,我也不是很理解,然后我只用了一個
2.我使用了整型和字符型,同學也使用了整型和字符型,但我和同學定義的變量不一樣,例如字符型我定義了兩個變量,同學只定義了一個t
3.我使用了switch 語句進行運算,同學使用的是數組進行運算,雖然我們還沒學過,但能看出這個同學的努力
4.同學使用的方法和我的也完全不一樣,例如gets,我不是太能看懂,但是可見一斑
3.學習總結
3.1 學習進度條
周/日期 | 這周所花的時間 | 代碼行 | 學到的知識點簡介 | 目前比較迷惑的問題 |
---|---|---|---|---|
8 | 17 | 120 | Hello world和其變形 | 無 |
9 | 18 | 300 | 選擇結構,求華攝溫度 | 判斷語句if else |
10 | 19 | 400 | 循環結構 | 循環結構和循環體的區分 |
11 | 17 | 420 | 定義和調用函數,生成乘方表與階乘表 | 學會定義函數,以及完整代碼的格式和語句的順序問題 |
12 | 18 | 400 | if-else語句結構,多分支結構,以及掌握字符型數據類型和邏輯運算符的使用 | 語句結構的運用選擇和程序的基本框架 |
13 | 27 | 430 | switch語句的使用 | 對於switch里其他程序的鑲嵌以及switch的靈活運用 |
14 | 30 | 450 | 熟運用while和do-while語句解決實際編程問題 | 對於判斷次數無法確定 |
16 | 40 | 500 | break語句和continue語句的使用以及熟練的使用嵌套循環解決實際問題 | 對於嵌套循環中語句的條件判斷不准確以及多重循環更容易搞不清楚 |
3.2 累積代碼行和博客字數
3.3 學習內容總結和感悟
3.3.1 學習內容總結
3.3.2 學習體會
請回顧自己的本周的學習過程,描述學習感受,也可以提出你不理解的地方、對教師教學建議等。如果你有新的想法或者新的方法,請及時記錄下來。
***1.上周沒有pta 作業固然開心,但這一周下來對於作業完成的情況感到了前所未有的難度,太難了叭,我感覺自己已經跟不上進度了,好像大多數人和我差不多的情況,但在我看來,他們可比我好多了,看來革命尚未成功,同志仍需努力(扶額)
***2.對於作業中出現的數組問題,看到題目時感到無能為力了(雖然后來也感到無能為力(狗頭))∪・ω・∪,自己查閱資料,在b站大學上學了很久,看了很久的網課才勉強搞懂了一丟丟皮毛,OMG 太難了
***3.這周完成作業的速度相比於之前顯著降低了,可能是看到提交時間為星期天20點,自己也有所放松,但是對於提交列表的分數扣了一分,思前想后很久也沒頭緒,想參考別人的代碼時發現別人和自己寫的不一樣,自己也不想改了,我總覺得是pta 上面bug 太多了
***4.一些以前存在的問題,目前感到明顯好轉,如以前是打字特別慢,現在只是慢了,有進步,就很棒,雖然以前問題有好轉,但是隨之而來的就是一連串的新問題,這個無可避免,因為一名合格的程序員就是在不斷改bug 中成長起來的
***5.自己對於一些沒解決的問題,有了一絲懈怠,明明自己知道這樣子做不好,但是總無可避免的犯一些錯誤,希望自己能夠改正過來,養成良好的打代碼習慣
***6.效率!效率!效率!為什么這么慢呢,都怪自己的速度太慢了,一道題目擺在眼前,總是想不到思緒,明明自己邏輯還可以(自我感覺),畢竟當我們踏入社會后,效率才是最重要的,決定了一切事情,以后以后拿到的工資哈哈
***7.新語句break ,continue ,適用於大多數循環但還是有所區別,比如continue 語句可用於for ,do while ,while ,switch 等語句,而break 可用了除這些以外的if else 語句等
***8.趁着年輕趁着歲月總該去做些什么,比如打代碼,加油吧大帥比!!!
***9.這次作業完成的還行吧,助教小姐姐手下留情哈
***10.菱形那一塊測試數據顯示不出來,主要是不知道該怎么顯示,懂的都懂哈哈哈哈,秋秋泥,放一馬叭 wink!!!
怎么跳出多重循環?
c語言的break語句只能跳出離它最近的一層循環,但是我們有時候需要跳出多層循環,以下有幾種跳出多重循環的方法:
- 使用goto
for (int i = 0; i < MAX1; i++)
{
for (int j = 0; j < MAX2; j++)
{
if (condition)
{
symbol = 1;
goto outloop;
}
}
}
outloop:
//somecode
- 寫成函數 return
for ()
{
for ()
{
for ()
{
if(condition)
{
symbol = 1;
return;
}
}
}
}
- 直接修改外層循環條件
for(int i = 0; i < MAX1; i++)
{
for(int j = 0; j < MAX2; j++)
{
if(condition1)
{
symbol = 1;
i = MAX1;
break;
}
}
}
- 在外層循環設置判斷條件
內層循環判斷滿足條件修改標志后 外層循環進行判斷:
for(;symbol != 1 && condition1;)
{
for(;symbol != 1 && condition2;)
{
for(;symbol != 1 && condition3;)
{
if(condition)
{
symbol = 1;
}
}
}
}
- 在大循環后面判斷標志加入break
for(;condition1;)
{
for(;condition2;)
{
for(;condition3;)
{
if(condition)
{
symbol = 1;
}
}
if (symbol == 1){
break;
}
}
if(symbol == 1){
break;
}
}