這個作業屬於哪個課程 | C語言程序設計II |
---|---|
這個作業要求在哪里 | C語言I博客作業10 |
我在這個課程的目標是 | 學習C語言並希望能夠有實用 |
這個作業在那個具體方面幫助我實現目標 | 熟練運用循環結構的程序設計 |
參考文獻 | C語言錯誤解釋1 2 PTA錯誤 偽代碼的規范 %c與%s C語言函數 同構數 |
1.PTA實驗作業
1.1輸出三角形字符陣列
本題要求編寫程序,輸出n行由大寫字母A開始構成的三角形字符陣列。
輸入格式:
輸入在一行中給出一個正整數n(1≤n<7)
輸出格式:
輸出n行由大寫字母A開始構成的三角形字符陣列。格式見輸出樣例,其中每個字母后面都有一個空格
輸入樣例:
4
輸出樣例:
A B C D
E F G
H I
J
1.1.1數據處理
數據表達:定義整形變量i,j,n,count。其中i,j為循環變量,n為正整行數,count是輸出的字母
數據處理:偽代碼
include<stdio.h> //頭文件
int main(void) //主函數
{
定義整形變量i,j,n,count,,其中n為代碼正整行數,count為輸出的字母。並將初始值0賦值給count;
輸入n
for int i=0 to n;
{
for int j=0 to i;
{
輸出字母count;
累加count;
}
end for
輸出字母
}
end for
return 0;
}
1.1.2實驗代碼截圖
1.1.3造測試數據
輸入數據 | 輸出數據 | 說明 |
---|---|---|
4 | A B C D E F G H I J | 滿足條件的一個偶數 |
3 | A B C D E F | 滿足條件的一個奇數 |
2 | A B C | 滿足條件的一個偶數 |
1 | A | 滿足條件的一個最小奇數 |
1.1.4 PTA提交列表及說明
1.格式錯誤:第5行未在%d后面加上空格,導致錯誤
2.格式錯誤:第10行未在%c后面加上空格,導致錯誤
3.格式錯誤:繼續在第5行或者是第10行找到位置加上空格
4.格式錯誤:在第5行或者是第10行嘗試需要將空格加在哪一行,其中一行又未加上空格
5.答案正確:在兩行輸出的語句中均加上了空格,答案正確
1.2梅森數
形如(2^n)−1的素數稱為梅森數(Mersenne Number)。例如(22)−1=3、(23)−1=7都是梅森數。1722年,雙目失明的瑞士數學大師歐拉證明了(231)−1=2147483647是一個素數,堪稱當時世界上“已知最大素數”的一個記錄。本題要求編寫程序,對任一正整數n(n<20),輸出所有不超過(2n)-1的梅森數。
輸入格式:
輸入在一行中給出正整數n(n<20)。
輸出格式:
按從小到大的順序輸出所有不超過(2^n)-1的梅森數,每行一個。如果完全沒有,則輸出“None”。
輸入樣例:
6
輸出樣例:
3
7
31
1.2.1 數據處理
數據表達:定義整形變量n,i,j,flag,m.其中i,j為循環變量,n為小於20的任一正整數,m為所有不超過(2^n)−1的梅森數,flag為梅森數的個數。
數據處理:偽代碼
include<stdio.h> //頭文件
include<math.h> //頭文件
int main() //主函數
{
定義整形變量n,i,j,flag,m;
輸入n
for int i=2 to n
{
m等於2的i次方減去1;
for int j=2 to sqrt(m)
{
if m除以j的余數等於0
跳出循環;
}
end for
if j>m的算術平方根
{
輸出m梅森數
將1賦值給flag
}
end if
}
end for
if flag等於0
輸出None
return 0;
}
1.2.2 實驗代碼截圖
1.2.3 造測試數據
輸入數據 | 輸出數據 | 說明 |
---|---|---|
10 | 3 7 31 127 | 輸入符合條件的偶數10 |
3 | 3 7 | 輸入符合條件的奇數3 |
19 | 3 7 31 127 8191 131071 524287 | 輸入符合條件的最大奇數 |
15 | 3 7 31 127 8191 | 輸入符合條件的奇數15 |
1.2.4PTA提交列表及說明
1.段錯誤:在第6行中未將符號&打出來導致段錯誤;
2.部分正確:將代碼中的初始值未賦值正確;
3.部分正確:於第7行中,未將整數2賦值給i,而是將1賦值給i;
4.部分正確:於第10行中,未將整數2賦值給j,而是將1賦值給j;
5.部分正確:未將頭文件中添加#include<math.h>,該頭文件;
6.部分正確:在第7行中的i<=n中未將其中的等於號添加進來;
7.編譯錯誤:由於PTA顯示第6行中scanf語句有錯誤,根據百度后的提示,將scanf語句直接全部刪除,導致編譯錯誤;
8.部分正確:由於上步中出現了編譯錯誤,即將原來的scanf語句添加進去了,然后導致和之前一樣的部分正確;
9.部分正確:將代碼粘貼在Dev-C++中測試輸出答案,答案正確,重新放回PTA中,繼續輸出部分正確;
10.部分正確:用上面的結束的代碼繼續提交,導致部分正確;
11.部分正確:當時將部分正確以格式錯誤來處理,將很多代碼按照格式錯誤的方式打出來;
12.部分正確:在Dev-C++中運行時,發現輸出梅森數均在同一行,所以在輸出語句中發現沒有打上“\n”,導致部分正確中的格式錯誤;
13.部分正確:於第5行代碼中未將0賦值給flag,導致部分正確;
14.部分正確:將13行中的“break;”刪除,導致了組后的部分正確,最后將"break;"添加進去;
15.部分正確:第18行中代碼未將flag=1 按題目要求打出來,導致部分正確;
16.編譯錯誤:一直部分正確,重新打出來,未添加23行return 0,導致編譯錯誤;
17.部分正確:添加return 0后,發現第6行輸入中將%d\n改為%d,導致部分正確;
18.答案正確:將所有錯誤終於全部改完,其中還包括用瀏覽器改正,找到錯誤,答案正確。
1.3 同構數
一個數恰好出現在它的平方數的右端,這個數就稱為同構數。找出1~1000之間的全部同構數。
輸出格式:
在一行中輸出所有滿足條件的同構數,每個數輸出占6列。沒有其它任何附加格式和字符。
輸出樣例:
1 5 6 25 76 376 625
1.3.1數據處理
數據表達:定義整形變量i,m,n;其中變量i為輸出的同構數
數據處理:偽代碼
include <stdio.h> //頭文件
int main(void) //主函數
{
定義整形變量i,m,n;其中變量i為輸出的同構數
for int i=1 to 1000
{
for 將需要輸出的i賦值給整形m,n=i*i;m;m/=10,n/=10)
{
if(m%10!=n%10)
{
break;
}
end if
}
end for
if(m==0)
{
輸出i(並列輸出6列同構數)
}
end if
}
end for
return 0;
}
1.3.2 實驗代碼截圖
1.3.3造測試數據
輸入數據 | 輸出數據 | 說明 |
---|---|---|
無輸入數據 | 1 5 6 25 76 376 625 | 1到1000以內的所有同構數 |
1.3.4PTA提交列表及說明
1.答案錯誤:將i的值起初賦值的2,導致答案錯誤;
2.答案錯誤:將i=2改為i=1后,並且同時將代碼中的m/=10,n/=10改為m%=10,n%=10,繼續答案錯誤;
3.運行超時:將代碼改回m/=10,n/=10后繼續提交,運行超時
4.運行超時:認為是網不好繼續提交,所以顯示和上面一樣
5.編譯錯誤:將7行中的全部逗號改為分號,錯誤更離譜
6.格式錯誤:將代碼中的符號恢復為和原來一樣,並將16行代碼中的"%d"改為"%d ",繼續格式錯誤
7.答案正確:將代碼中的"%d "改為"%6d",終於答案正確
2.代碼互評
同學代碼截圖
自己代碼截圖
1.同學代碼是先將需要輸出的None語句打出來,然后將梅森數輸出語句打出來;而我的代碼與他的代碼運行順序相反;
2.同學代碼中開始就給兩個整形變量賦值0,而我的代碼只給一個變量賦值了0;
3.我的代碼中用到了將變量m開方sqrt,而同學帶代碼中用的是直接將其值復制給b。
同學代碼截圖
自己代碼截圖
1.同學代碼運用了字符型變量char,而我的代碼僅僅用到了整形變量,並且;
2.同學代碼直接將字符'A'賦值給ch,而我的字符'A'是直接在需要輸出時將字符輸出;
3.同學代碼運用了i++,累加i,而我的代碼是用到了i--,循環減去1。
3.學習總結
3.1學習進度條
周 | 這周所花的時間 | 代碼行 | 學到的知識點簡介 | 目前比較困惑的問題 |
---|---|---|---|---|
第五周 | 3小時 | 17行 | 初期開始學習“Hello World!" | 不知道如何開始編譯 |
第六周 | 10小時 | 27行 | 提問的智慧及編譯器的下載 | 編譯格式問題 |
第七周 | 10小時 | 95行 | 流程結構類型及變量類型分類方法 | 代碼分析不明白以及編譯格式問題 |
第八周 | 13小時 | 115行 | 循環程序設計及Dev-C++編譯運行等方法 | 用專業術語將代碼解釋出來及各種賦值運用 |
第九周 | 15小時 | 165行 | 四種流程結構及主調,被調函數,實參與形參的識別 | PTA作業中題目的編寫 |
第十周 | 17小時 | 94行 | 分支結構的部分代碼 | PTA作業的編寫(真的好難) |
第十一周 | 14小時 | 76行 | switch語句的運用 | switch語句的靈活運用以及PTA作業的編寫 |
第十二周 | 18小時 | 147行 | 循環結構程序設計及運用字串符處理代碼題 | 有時候對於一些問題的意思很難懂,對於自己的解題速度也有很大問題 |
第十三周 | 11小時 | 113行 | 學習使用循環的嵌套及熟悉continue的使用 | PTA的題目,C語言知識點及考試的心態 |
第十四周 | 10小時 | 40行 | 熟練運用循環結構的程序設計 | 對於一些循環嵌套的代碼還是有很多不解 |
3.2累積代碼行和博客字數
3.3學習內容總結和感悟
3.3.1學習內容總結
3.3.2學習體會
1.在這周作業中學到了一些有關於C語言循環結構的知識,例如:for循環的運用等等;
2.在這周中調整了一下自己的作息,讓自己的學習規划得到了改變,對於學習的知識點也能夠運用到一點點(雖然總是運行錯誤);
3.在這周學習中竟然從熬夜中感受到了做C語言作業的喜悅感,通過在自我學習中強烈的感受到該專業知識是極其需要自主學習能力的,所以要多熟練才行。