一、表格
問題 | 答案 |
---|---|
這個作業屬於那個課程 | C語言程序設計II |
這個作業要求在哪里 | 點擊此處查看本次作業要求 |
我在這個課程的目標是 | 深入了解C語言,爭取掌握更多的數據類型及結構,熟練地編譯有效代碼 |
這個作業在那個具體方面幫助我實現目標 | 學習到了循環的嵌套,深入學習了循環,更加提升使用循環的能力 |
參考文獻 | C語言程序設計、百度 |
二、本周作業
1. PTA實驗作業
1.1 題目名1
7-8 輸出三角形字符陣列 (15 分)
本題要求編寫程序,輸出n行由大寫字母A開始構成的三角形字符陣列。
輸入格式:
輸入在一行中給出一個正整數n(1≤n<7)。
輸出格式:
輸出n行由大寫字母A開始構成的三角形字符陣列。格式見輸出樣例,其中每個字母后面都有一個空格。
輸入樣例:
4
輸出樣例:
A B C D
E F G
H I
J
1.1.1 數據處理
定義整型變量(int)n,i,j,count=0。其中n是輸入的數,i、j是控制循環變量,count用來計數。
輸入變量
for(i=n;i>=1;i--){
表示行的循環
for(j=1;j<=i;j++){
表示列的循環
printf("%c ",'A'+count);
打印輸出字符串,從A開始輸出,往后每次加count的值
count++;
每輸出一次就加一
printf("\n")
一行輸出完后就打印換行
1.1.2 實驗代碼截圖
1.1.3 造測試數據
輸入 | 輸出 | 說明 |
---|---|---|
4 | A B C D\ E F G\H I\J | 驗證題目數據 |
1 | A | 最小情況 |
6 | A B C D E F\G H I J K \L M N O\P Q R \S T \U | 最大情況 |
1.1.4 PTA提交列表及說明
答案正確:這道題在DEV上做了很多遍,行與列的問題和上次作業乘法表的問題一樣,是可以解決的。對我來說難的是依次從A輸出,后來就利用'A'+count、count++來解決這個問題,第一次輸出A,以后就一直加即可。
1.2 題目名2
7-3 梅森數 (20 分)
形如2
n
−1的素數稱為梅森數(Mersenne Number)。例如2
2
−1=3、2
3
−1=7都是梅森數。1722年,雙目失明的瑞士數學大師歐拉證明了2
31
−1=2147483647是一個素數,堪稱當時世界上“已知最大素數”的一個記錄。
本題要求編寫程序,對任一正整數n(n<20),輸出所有不超過2
n
−1的梅森數。
輸入格式:
輸入在一行中給出正整數n(n<20)。
輸出格式:
按從小到大的順序輸出所有不超過2
n
−1的梅森數,每行一個。如果完全沒有,則輸出“None”。
輸入樣例:
6
輸出樣例:
3
7
31
1.2.1 數據處理
定義整型變量(int)n,i,num,a,count=0.其中n是輸入的值、i,a控制循環變量、num是存放關於n的表達式,count用於計數
輸入變量
for(i=2;i<=n;i++){
從2開始循環到n
num=pow(2,i)-1;
表示2的n次方-1
for(a=2;a<=num/2;a++){
次循環用於判斷num是否是素數
if(num%a==0) break;
滿足條件,則跳過
if(num%a!=0){
滿足素數的條件
printf("%d\n",num);
輸出素數,記得換行
count++;
計素數的個數
if(count==0)
printf("None");
滿足條件輸出
1.2.2 實驗代碼截圖
1.2.3 造測試數據
輸入 | 輸出 | 說明 |
---|---|---|
6 | 3\7\31 | 驗證題目數據 |
1 | None | 沒有素數的情況 |
19 | 3\7\31\127\8191\131071\524287 | 最大的情況 |
1.2.4 PTA提交列表及說明
答案正確:第一次正確是在判斷素數是用了if(a>sqrt(num))printf("%d\n",num),但是這個感覺理解的不是很透。
答案正確:這次答案正確用的是if(num%a!=0)printf("%d\n",num);感覺這個簡單好理解。
1.3 題目名3
7-4 同構數 (10 分)
一個數恰好出現在它的平方數的右端,這個數就稱為同構數。找出1~1000之間的全部同構數。
輸出格式:
在一行中輸出所有滿足條件的同構數,每個數輸出占6列。沒有其它任何附加格式和字符。
輸出樣例:
1 5 6 25 76 376 625
1.3.1 數據處理
定義變量i,用於控制循環
for(i=1;i<=1000;i++){
從1開始循環到1000
int a=i*i;
定義a=i*i
if(i%10==i){
if(i==a%10)
printf("%6d",i);
第一種情況i是個位數,滿足條件則輸出
else
if(i%100==i){
if(i==a%100)
printf("%6d",i);
第二種情況i是兩位數,滿足條件則輸出
else
if(i%1000==i){
if(i==a%1000)
printf("%6d",i);
第三種情況i是三位數,滿足條件則輸出
1.3.2 實驗代碼截圖
1.3.3 造測試數據
輸入 | 輸出 | 說明 |
---|---|---|
無 | 1 5 6 25 76 376 625 | 滿足題目的輸出樣例 |
1.3.4 PTA提交列表及說明
格式錯誤:在DEV上測試答案也一樣,不清楚是哪的問題
格式錯誤:沒注意題目的要求每個數輸出占6列,看到之后就改正了
答案正確:這里是三種情況分別在輸出前空了5格、4格、3格。
答案正確:想起來可以用%6d來自行空格
2. 代碼互評
自己代碼①
同學代碼①
評論:
- 這位同學用的方法和我第一次答案一樣,用的是sqrt這個數學函數做的。
- 這個數學函數表示開平方,這里用於判斷素數,感覺不是很好理解。
- 我感覺我現在的代碼更好,更簡單,更容易理解。
自己代碼②
同學代碼②
評論:
- 這道題我和這位同學的完全不一樣,同學的很簡單,可能是我把我問題復雜化了。
- 我的是一步一步按照慣性思路去計算判斷輸出什么,還具體分了三種情況(這里利用題目輸出數據不多)來判斷輸出。
- 同學的是直接利用題目中只有輸出樣例還是唯一的輸出樣例,像輸出Hello World那樣直接輸出
- 同學的更簡單直接,我的比較形式化.這應該具體情況具體分析吧
3. 學習總結
3.1 學習進度條
周/日期 | 這周所花的時間 | 代碼行 | 學到的知識點簡介 | 目前比較困惑的問題 |
---|---|---|---|---|
1/9-21 | 2天 | 30 | 初步接觸編程,學習編譯Hello,World! | 無 |
2/9-30 | 2天 | 20 | 學習了浮點型變量,及溫度轉換 | 無 |
3/9-15 | 3天 | 76 | 使用分段函數了解到if-else語句以及數據類型 | 對於定義數值還是不太清楚 |
4/10-16 | 3天 | 100 | for語句 | for循環進行中不清楚循環的細節 |
5/10-24 | 3 天 | 155 | 學習到了自定義函數 | 自定義函數的具體定義過程,實參形參有些迷惑 |
6/11-1 | 3天 | 250 | 學習使用if-else與for語句的嵌套,初步了解了字符型變量 | 對於字符型變量不是很懂,不明白其作用 |
7/11-7 | 2天 | 200 | 這周學習了新的分支結構switch結構,這也適用於選擇的情況,其作用類似於if-else。 | switch后面的變量表達式和case后的常量表達式弄不清。 |
8/11-15 | 3天 | 150 | 學習了新的循環結構while語句和do-while語句,和for語句有不一樣的地方,但其作用是一樣的,他們循環的條件不一樣。 | 不能熟練運用while語句去解決實際問題 |
9/11-22 | 3天 | 151 | 這周學習了循環的嵌套,可以多次循環。可以解決行與列這種類型的題、以及需要多次循環一個數一個數來的題型等等 | 感覺知識掌握的還行,但是運用的時候弄不清循環的次數和條件 |
10/11-27 | 2天 | 203 | 這周沒有學習新知識,在練習上周學的。更加熟練的運用循環嵌套了 | 知識上的疑惑沒有了,但是在刷題還是會遇到困難 |
3.2 累計代碼行和博客字數
3.3 學習內容總結
3.4 學習體會
- 上周主要學習了兩個知識點:① continue語句和break語句的使用和區別,continue只能用於循環結構中,其作用是跳出后面語句繼續循環;break可用於循環語句以及switch語句中,其作用是終止循環或終止語句。② 循環的嵌套,可用於多次循環,解決行與列的問題、以及依次輸入數等等較復雜的問題。
- 這周在復習上周學的內容,沒有加入新知識。在做題時會感覺到一些輕松,但還是有不能自己解決的題,就比如說這次作業的第一題,我是在室友的幫助下完成的,而且完成后還是不能完全理解。這讓我很苦惱。
- 隨着學習的知識越來越復雜,題目也越來越復雜,感覺到自己能力的確是不夠。有些題目不知道該怎末用學到的知識去表達、用程序的方式來表達計算的過程。感覺自己的思維太固化,不能以計算機所理解的方式去思考。通過這周和上周的兩次練習發現,刷題真的很有用,這周作業速度真的提升了,反應能力也提升了,除了個別題不會其他的可以自主理解並完成。快考試了,感覺知識運用的不是很熟練,所以我還要多加練習,爭取努力提高 有效代碼行。加油!