C語言I博客作業08


這個作業屬於哪個課程 C語言程序設計II
這個作業要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2020-1/homework/11610
我在這個課程的目標是 掌握break、continue語句的使用,以及他們的區別,了解多層循環結構如何跳出多層循環,使用循環輸出乘法表,了解循環嵌套的循環次數,簡化代碼
這個作業在那個具體方面幫助我實現目標 pta實驗作業、同學代碼互評。
參考文獻 C語言程序設計(3)、C primer plus
學號 <20208956>

1.PTA實驗作業(20分/題)
請再此處列出自己的排名圖片。

從PTA題目集中選出2個你最滿意的題目完成以下內容,選擇題目難度越大,分值越高,每題20分(每項5分),內容要求如下:

1.1 題目名1 字符菱形

題目內容描述
輸入數據含有若干組的數據,每組數據包括一個可見字符c和一個整數n(1≤n≤30)。 以鍵盤輸入^Z或遇到文件結束符時結束數據輸入。
輸出以c為填充字符,邊長為n的菱形,每個菱形之后都輸出一個換行符。

1.1.1數據處理

數據表達:定義字符型變量c,整型變量n,c、n分別為輸入的字符和邊長。用i、j分別表示行列。
數據處理:先使用一個for(i=1;i<=n;i++)確定從上至n行,再嵌套for(j=1;j<=n-i;j++)確定每行輸出的空格數(每行空格有多少列)for(j=1;j<=2*i-1;j++)表示字符所在的列,用來循環輸出字符。當循環輸出字符結束后輸出換行。
for(i=1;i<=n-1;i++)表示下半部分的行數與上部分一樣的思路,只不過算出行列的算式不一樣,for(j=1;j<=i;j++)用來輸出空格的循環,for(j=1;j<=2*n-1-2*i;j++)輸出字符的循環,字符數量與上部分剛好成相反的變化,

1.1.2實驗代碼截圖

1.1.3 造測試數據

輸入樣例 輸出樣例 說明
A 5 B 3 A\B為填充字符 邊長分別為5、3
A 3 B 3 A\B為填充字符 邊長分別為3、3

根據PTA提交列表,簡要描述調試程序碰到的問題及解決辦法。

提交列表說明:


1.編譯錯誤主要是修改的時候不小心刪掉了一些符號。
2.運行超時:但是使用while循環的時候跳出循環的條件是scanf("%c %d",&c,&n)=='EOF',跳不出while語句,死循環了。后來將''去掉了但答案錯誤。
3.答案錯誤:輸出時A與B的菱形之間出現了一個與A邊長一樣的空格棱形,意味着輸入多了什么,從提交列表也看得出來,這里卡了很久,我最終還是沒找到原因,后來去問助教才知道在scanf中的%d后面還需加一個空格,因為如果沒有這表示A 5 B 3中5后面的空格被當作字符輸入了但是沒有得到新的n所以會出現一個與A邊長一樣的棱形。

1.2 題目2 Wifi密碼

A-1;B-2;C-3;D-4;把一系列題目的答案按照卷子上給出的對應關系翻譯成 wifi 的密碼。這里簡單假設每道選擇題都有 4 個選項,有且只有 1 個正確答案。

1.2.1 數據處理

數據表達:首先定義了mn兩個整型變量,n表示行數,n是用來表示數組中的第幾個數,再接着定義了啊,a,b兩個字符型變量用來輸入選項和對錯。最后定義了一個數組(t[n])。用來保存得到的密碼的每位數。用i表示行數,用j表示輸入字符數。
數據處理:使用兩層for循環對行數和列數進行計算,輸入完后判斷答案是否正確,對應到相應的密碼並存入數組。
最后使用for循環依次將存入的數從數組中輸出。用if語句簡化問題。

1.2.2 實驗代碼截圖

1.2.3 造測試數據

輸入樣例 輸出樣例 說明
132 三位密碼
130 無輸入時輸出0
13224143 8位

1.2.4 PTA提交列表及說明


1.之前我的第二層循環j是小於等於4,因為我覺得我用scanf輸入的是兩個,一行只有四個,但是輸出的結果卻超過了n位。調試后發現在if語句時一次只判斷一個,每行一共四次輸入,每次輸入兩個,所以循環次數為8.
2.在最后輸出數組的時候出了錯誤。漏了一位。

2.代碼互評(5分)

同學代碼截圖

1

2


自己代碼截圖


1.第一位同學的代碼使用了數組,函數、自定義函數,系統性很強。我目前水平還不夠,還寫不出。
2.第二位同學與第一位的風格相似,但有很多細節的處理方式不同,都非常值得學習。
3.我沒有用到數組,按照平常的思路來,在判斷素數是否達一百的這個地方,因為我沒想出來怎么計數(每輸出15個將計數變量初始化)於是就用另一段代碼算出當輸出100個素數時輸入m的值,然后就判斷輸入值與m的大小即可。要是題目換了就得改代碼,沒有系統性。

3.學習總結(15分)

3.1 學習進度條(5分)

周/日期 這周所花的時間 代碼行 學到的知識點簡介 目前比較迷惑的問題
第八周 18 220 printf,scanf的使用,以及int類型
第九周 22 231 if語句分支結構、調用數學函數
第十周: 25 255 for、while、do...while語句、字符型數據的使用 switch語句多分支結構、break語句和continue語句
第十一周 28 600左右 switch語句,邏輯運算符,數組,自定義函數 多個循環結構的嵌套使用容易出錯
第十二周 27 680左右 無新的知識點 排序問題
第十三周 25 400左右 鞏固switch語句、const限定符、short int、long int、long long int、unsigned整數類型
第十四周 20 500 宏定義、多種循環結構的使用 for循環與while循環之間的轉換
第十五周 19 700 break,continue語句的使用,九九乘法表,水仙花數··· 數組的使用,菱形字符···

3.2 累積代碼行和博客字數(5分)

3.3 學習內容總結和感悟(5分)

3.3.1 學習內容總結

3.3.2 學習體會

這周學習了break、和continue語句。
continue語句和break語句的區別是:break語句只用於循環體和switch語句中,continue只能用於循環語句。continue語句只結束本次循環,而不終止整個循環的執行。而break語句則是結束整個循環過程。break語句用來跳出循環時遇到多層循環嵌套時,break只能跳出離它最近的循環體,所以多層循環使用break跳出時得一層一層的來。
我查閱相關資料找到多層循環跳出可以使用使用goto語句;借用c++異常處理中的throw拋出異常從多重循環出來;把嵌套循環寫成函數,使用return語句結束函數。后面兩個方法還不太懂。
goto語句想跳哪里都可以。


免責聲明!

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



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