問題 | 答案 |
---|---|
這個作業屬於那個課程 | C語言程序設計II |
這個作業要求在哪里 | C語言I博客作業10 |
我在這個課程的目標是 | 熟練掌握C語言 |
這個作業在哪個具體方面幫助我實現目標 | 已經可以熟練掌握字符型的輸入和輸出 |
參考文獻 | Markdown基本語法 |
一.PTA實驗作業
1. 編程打印空心字符菱形
題目內容描述:本題目要求讀入菱形起始字母和菱形的高度,然后輸出空心字符菱形。所謂“空心菱形”是指:每行由兩端為字母、中間為空格的字符串構成,每行的字符串中心對齊;上半部分相鄰兩行字符串長度差2,且字母從給定的起始字母逐一遞增;下半部分與上半部分對稱。
輸入格式:
輸入在一行中給出起始字母(范圍為英文大寫字母A-G)和菱形的高度(為不超過10的奇數)。
輸出格式:
輸出空心字符菱形。
輸入樣例:
B 5
輸出樣例:
B
C C
D D
C C
B
(1)數據處理
數據表達:
用了整形變量h,k,k1,v,v1=1,i,和字符型變量op
op和h是用戶傳入的字符和高度
k,k1用來控制每行首字母左邊的空格數
v,v1用來控制兩個字母間的空格數
i用來控制循環次數
數據處理:偽代碼
定義整型變量h,k,k1,v,v1=1,i; h是用戶傳入的高度,k,k1用來控制每行首字母左邊的空格數,v,v1用來控制兩個字母間的空格數,i用來控制循環次數
定義字符型變量op ,op是用戶傳入的字符
輸入字符op和高度h
對k1初始化為h/2
for i=0 to h/2+1
將k1賦值給k
while(k>0)
輸出一個空格
k累減
end while
k1累減
輸出字符op
if i>0 then
將v1賦值給v
while(v>0)
輸出一個空格
v累減
end while
對v1加2並賦值給v1
輸出字符op
op累加
換行
end for
對k1初始化為1
對v1減去4並賦值給v1
op累減;
for i=0 to h/2
op累減
將k1賦值給k
while(k>0)
輸出一個空格
k累減
end while
k1累加
輸出字符op
if i<h/2-1 then
將v1賦值給v
while(v>0)
輸出一個空格
v累減
end while
將v1減2賦值給v1
輸出字符op
換行
end for
(2)實驗代碼截圖
(3)造測試數據
輸入數據 | 輸出數據 | 說明 |
---|---|---|
A7 | ![]() |
隨機試驗 |
G9 | ![]() |
臨界點 |
F9 | ![]() |
隨機試驗 |
A1 | A | 臨界點 |
(4)PTA提交列表及說明
提交列表說明
1.一次性正確:開始在Dev-CA++上總是輸出不了正確答案,后來用調試發現k和v的值沒有更新,后來又定義了k1,v1兩個變量來接引,然后在第一個for中的兩個while前加k=k1,v=v1來更新每一行的空格數。我將這個題目分為兩截做的,先用一個for輸出上半截,然后在用一個for輸出下半截,然后定義了變量k,k1用來控制每行首字母左邊的空格數,定義了v,v1用來控制兩個字母間的空格數。
2. 梅森數
題目內容描述:形如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)數據處理
數據表達:
用了整形變量n,m,i,j,x=0
n是用戶輸入的數
i用來保存用戶要求輸出梅森數
j和m用來控制循環
數據處理:偽代碼
定義整形變量n,m,i,j,x=0 ,n用來保存用戶輸入的數 ,i用來保存用戶要求輸出梅森數,j和m用來控制循環
輸入n
if n<2 then
輸出None
for m=2 to n
將2的m次方減1賦值給i
for j=2 to i-1
if i%j==0 then
x累加
end for
if x==0 then
輸出i並換行
將x初始化為零
end for
(2)實驗代碼截圖
(3)造測試數據
輸入數據 | 輸出數據 | 說明 |
---|---|---|
19 | ![]() |
輸入最大n |
1 | None | 輸入最小n |
10 | 3 7 31 127 | 隨機試驗 |
(4)PTA提交列表及說明
提交列表說明
1.一次性正確:開始看錯題目了,以為只要滿足素數這個要求,后來運行發現i范圍內每一個素數都輸出來了與題目要求輸出的不同,才發現還有一個要求是滿足2的n次方-1這個條件。我將這個題目分為兩部分,當n<2時輸出None,當n>2時進入for循環內進行處理來尋找梅森數。
3.同構數
題目內容描述:一個數恰好出現在它的平方數的右端,這個數就稱為同構數。找出1~1000之間的全部同構數。
輸出格式:
在一行中輸出所有滿足條件的同構數,每個數輸出占6列。沒有其它任何附加格式和字符。
輸出樣例:
1 5 6 25 76 376 625
(1)數據處理
數據表達:
用了整形變量i,y,digit,sum,n;
i用來控制循環次數,即用戶給出的找同構數的范圍
y和n,digit用來判斷數i的位數
sum用來保存i的平方
數據處理:偽代碼
定義變量 i,y,digit,sum,n;i用來控制循環次數,即用戶給出的找同構數的范圍;y和n,digit用來判斷數i的位數 ;sum用來保存i的平方
for i=1 to 1000
對digit初始化為0
將i的平方賦值給sum
將i賦值給n
do{
將整形變量n/10賦值給y
將整形變量n/10賦值給n
digit累加
}while(!(y==0));
switch(digit)
case 1~4:分別判斷位數不同的數是否符合同構數的條件,如果符合則輸出該數,然后跳出循環。
end for
(2)實驗代碼截圖
(3)造測試數據
輸入數據 | 輸出數據 | 說明 |
---|---|---|
無 | 1 5 6 25 76 376 625 | 輸出1~1000內的同構數 |
(4)PTA提交列表及說明
提交列表說明
1.一次性正確:用了do-while語句用來判斷i的位數,然后用switch語句來區分位數不同的數所要取平方后幾位數,然后判斷是否符合同構數,如果符合就輸出該數
二.代碼互評
同學(柏朝暉)代碼 | 同學(楊宇)代碼 | 自己代碼 |
---|---|---|
![]() |
![]() |
![]() |
比較
(1)第一份代碼利用了絕對值abs()來做這個題目,因此只用了一個並列的for來做這個題目,而我用了兩個for並列來做這個題目。這個代碼輸入字符和高度后,首先進入第一層for循環內i=-n/2 to n/2,而我將輸出分為了兩截分別是for i=0 to h/2+1和for i=0 to h/2。
(2)第一份代碼只定義了3個變量,第二份定義了5個變量,而我定義了6個變量,第一份開辟的空間更少
(3)總的來說第一份的代碼最好,第一份開辟了更少的空間,占用了更少的內存
三.學習總結
1.學習進度條
周/日期 | 這周所花的時間 | 代碼行 | 學到的知識點簡介 | 目前比較迷惑的問題 |
---|---|---|---|---|
第四周 | 7小時 | 100行 | 在屏幕上顯示Hello World! | 暫無 |
第五周 | 8小時 | 100行 | 求華氏溫度對應的攝氏溫度 | 暫無 |
第六周 | 30小時 | 200行 | 如何用 MinGW-w64 來編譯C程序 | 暫無 |
第七周 | 24小時 | 300行 | 運用if語句完成各種數學程序 | 對於&&的用法不了解 |
第八周 | 24小時 | 300行 | 學會了for循環語句 | 暫無 |
第九周 | 24小時 | 300行 | 學會了如何去自定義一個函數 | 暫無 |
第十周 | 30小時 | 400行 | 學會了if-else語句的嵌入 | 對“(Y%100)這個表達式意味着當Y不能整除4時(Y%100的余數不等於0時)表達式為真”這句話不是很懂 |
第十一周 | 24小時 | 450行 | 學會了如何去使用switch語句來做編程題 | 暫無 |
第十二周 | 24小時 | 450行 | 學會了如何去使用while循環來做編程題 | 對字符型的輸入不太了解 |
第十三周 | 26小時 | 372行 | 學會了如何去使用for嵌套來做編程題,學會了continue的使用方法 | 對字符型的輸入和輸出不太了解,對數組完全不了解 |
第十四周 | 28小時 | 634行 | 學會了字符型的輸入和輸出 | 對數組完全不了解,對指針完全不了解 |
2. 累積代碼行和博客字數
時間 | 博客字數 | 代碼行數 |
---|---|---|
第四周 | 510 | 100 |
第五周 | 510 | 200 |
第六周 | 1149 | 400 |
第七周 | 2027 | 700 |
第八周 | 3791 | 1000 |
第九周 | 5294 | 1300 |
第十周 | 6900 | 1700 |
第十一周 | 8614 | 2150 |
第十二周 | 10495 | 2600 |
第十三周 | 13019 | 2972 |
第十四周 | 15893 | 3606 |
3 .學習內容總結和感悟
(1)學習內容總結
(2) 學習體會
感覺PTA好像越來越容易了,這次的四個題目是我唯一一次沒有借助百度就完成的,或許也有可能是我對題目的分析能力越來越強了,我已經沒有了最初的每次看到題目就一臉懵逼的感覺。雖然我在不斷的進步了,但是別人進步的更快,有的大佬已經將指針給自學完了,而我每次想着將數組自學一下卻總是沒有時間,臨近期末考試了其他的科目要復習現在根本沒有時間去搞其他事情。希望這周星期天能夠騰出時間去了解一下數組吧。