| 這個作業屬於哪個課程 | C語言程序設計II |
|---|---|
| 這個作業要求在哪里 | C語言I作業10 |
| 我在這個課程的目標是 | 學會編程,運用編程制作有趣的東西 |
| 這個作業在那個具體方面幫助我實現目標 | 多了解c語言的一些知識 |
| 參考文獻 | C語言程序設計I,百度 |
1.PTA作業
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,定義字符變量ch,令ch=‘A’,i,j為循環條件,n為輸入的數。**
**數據處理:偽代碼**
定義整形變量和字符變量
輸入n
for(i=0;i<n;i++)
{
for(j=0;j<n-i;j++)for循環
{
printf("%c ",ch);輸出字符
ch++;字符累加
}
printf("\n")輸出回車
end
1.1.2實驗代碼截圖

1.1.3造測試數據
| 輸入數據 | 輸出數據 | 說明 |
|---|---|---|
| 2 | ![]() |
1-7之間 |
| 3 | ![]() |
1-7之間 |
| 4 | ![]() |
1-7之間 |
| 6 | ![]() |
1-7之間 |
1.1.4PTA提交列表及說明

###提交列表說明:
**1.答案錯誤:我沒有使用循環嵌套,輸出不了多個行,字母沒有出來,后經改正運用循環嵌套**
**2.答案錯誤:我寫的是“i=1;i<=n和j=1;j<=n-i"顯示答案錯誤后改為i=0;i<n;j=0;j<=n-i**
1.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.2.1數據處理
**數據表達:定義整形變量i,j,sum,n,count=0 ,n為輸入的數 ,sum為輸出梅森數,i,j為循環條件 **
**數據處理:偽代碼**
輸入n
if n>=2&&n<20 then
for i=2 to n
把2的m次方減1賦值給sum
for j=2 to i-1
if i%j==0 then
count累加
if x==0 then
輸出i和換行
count=0;
else輸出None
1.2.2實驗代碼截圖


1.2.3造測試數據
| 輸入數據 | 輸出數據 | 說明 |
|---|---|---|
| 0 | ![]() |
沒有素數 |
| 8 | ![]() |
范圍內的隨機數 |
| 12 | ![]() |
范圍內的隨機數 |
| 19 | ![]() |
最大的數 |
1.2.4PTA提交列表及說明

**提交列表說明:**
**1.部分正確:在0的那種情況,答案錯誤,詢問大佬后,在23行中添加count=0**
**2.編譯錯誤是自己在devc++上出現的“;”忘記打,或者是將“;”輸入為“,”**
**3.不知道怎樣一個順序,后詢問同學,借鑒后完成**
1.3同構數
**內容:**一個數恰好出現在它的平方數的右端,這個數就稱為同構數。找出1~1000之間的全部同構數。
輸出格式:
在一行中輸出所有滿足條件的同構數,每個數輸出占6列。沒有其它任何附加格式和字符。
輸出樣例:
1 5 6 25 76 376 625
1.3.1數據處理
**數據表達:定義一個變量i,為循環條件。**
**數據處理:偽代碼**
定義變量
for i<-1;i<=1000;i++)
位數有個,十,百。
if(0<=i&&i<=9)個位數,即一位數
if(i==(i*i)%10)表示這些位數
輸出i
if(10<=i&&i<=99)十位數,即兩位數
if(i==(i*i)%100)
輸出i
if(100<=i&&i<=999)百位數,即三位數
if(i==(i*i)%1000)
輸出i
if(i==1000)
當i為1000時,顯然不是同構數,故不作判定
1.3.2實驗代碼截圖

1.3.3造測試數據
| 輸入數據 | 輸出數據 | 說明 |
|---|---|---|
![]() |
同構數 |
1.3.4PTA提交列表及說明

**提交列表說明:**
**1.格式錯誤:我將%d后面加了6個空格,在devc++上運行是正確的,比較懵,就將空格打在%d前面**
**2.格式錯誤:詢問同學,最終將%d改為了%6d,答案正確**
2.代碼互評
同學的代碼

自己的代碼

**1.1.她定義了整形變量n,i,a,b,c b=n-1;c=(1+n)*n/2;循環c次輸出字符 ,如果i==n-1,則輸出換行n+=b; b--;**
**1.2.我的定義整形變量i,j,n,定義字符變量ch,令ch=‘A’,i,j為循環條件,n為輸入的數。**
**2.1.她在for循環中輸入字符‘A’循環嵌套中為for與if兩種語句**
**2.2.我運用char ch字符變量,運用兩個for語句,對字符進行輸出**
同學的代碼

自己的代碼

**1.1.她用了整形變量i,y,digit,sum; i用來控制循環次數,即用戶給出的找同構數的范圍, y和n,digit用來判斷數i的位數,sum用來保存i的平方。**
**1.2.我只定義一個變量i,為循環條件。**
**2.1. 她運用for循環語句對digit初始化為0 ,將i的平方賦值給sum ,將i賦值給n , 將整形變量n/10賦值給y ,將整形變量n/10賦值給n ,digit累加,用 switch語句,分別判斷位數不同的數是否符合同構數的條件,如果符合則輸出該數,然后跳出循環。**
**2.2.我是對1000以內的數字進行分段求,有百位數,個位數等,整體感覺我的要簡潔些**
3.學習總結
3.1學習進度條
| 周/日期 | 這周所花的時間 | 代碼行 | 學到的知識點簡介 | 目前比較迷惑的問題 |
|---|---|---|---|---|
| 第四周 | 8h | 20 | 簡單輸出 | 無 |
| 第五周 | 10h | 40 | 學習輸入 | 無 |
| 第六周 | 20h | 60 | 用WinGW-w64來編譯C程序 | 文檔真的打不開,可能是電腦原因 |
| 第七周 | 10h | 90 | 關系運算,if-else語句,格式化輸入語句scanf() | 有的數學邏輯問題不太懂 |
| 第八周 | 8.5h | 80 | for的循環語句,指定次數的循環程序設計 | 不太會文字與數學的轉換 |
| 第九周 | 8h | 100 | 函數的調用和定義的初步認識 | 自定義函數不熟悉 |
| 第十周 | 10h | 170 | 多分支結構、字符型數據類型和邏輯運算符 | 多個數據輸出不熟練 |
| 第十一周 | 11h | 110 | 熟悉多分支結構switch語句的使用 | 邏輯思維能力差 |
| 第十二周 | 9h | 200 | 熟悉whlie和do-whlie結構 | 字符那方面不熟 |
| 第十三周 | 8h | 180 | 熟悉嵌套循環,break和continue的用法 | 當運用到真題方面還是會不太會 |
| 第十四周 | 8h | 110 | 選擇合適的算法、合理的循環結構,熟練的編寫程序 | 最大的問題是不懂題意 |
3.2累積代碼行和博客字數
| 時間 | 博客字數 | 代碼行數 |
|---|---|---|
| 第四周 | 441 | 20 |
| 第五周 | 441 | 20 |
| 第六周 | 1112 | 150 |
| 第七周 | 1800 | 190 |
| 第八周 | 2300 | 220 |
| 第九周 | 3100 | 220 |
| 第十周 | 4000 | 400 |
| 第十二周 | 4900 | 620 |
| 第十三周 | 6700 | 910 |
| 第十四周 | 7600 | 1020 |

3.3學習內容總結和感悟
3.3.1學習內容總結

3.3.2學習體會
1.感覺還是挺難得,剛開始題目都看不懂
2.學習之旅長路漫漫,還得慢慢來,不會的就要搞懂
3.期末也快要到了,努力復習,抓緊時間
4.有空就多多練習練習
**補充:**
一、輸入數字可以用scanf輸入。
如果輸入的是整型數據,可以用
int a;
scanf("%d",&a);
實現把輸入的數字賦值給a的效果。
類似的,如果是float, double,short,long等類型的數據,那么就要把變量定義成對應的類型,然后使用各自的格式字符%f,%lf,%hd,%ld等進行輸入。
二、輸入單個字符。
輸入單個字符可以用以下兩種函數。
定義char c;
1 scanf("%c", &c);
這種方法和輸入數字是類似的,%c僅讀入一個字符,並賦值給c。
2 c = getchar();
getchar函數的功能就是讀入一個字符,並以返回值形式返回。
三、輸入一串字符(以空白字符分隔)。
可以用scanf的%s格式。
char str[100];//空間要定義足夠大
scanf("%s", str);//將字符串讀入並存在str中
四,讀入一行數據。
可以用gets函數。gets的功能就是讀入一整行數據,以換行符為結束。
char str[100];//同樣要足夠大的空間
gets(str);
補充,無論哪種形式的輸入,都可以用getchar逐個輸入到字符串中,然后判斷結束符以結束輸入,再對字符串做處理。這種方法對編程水平要求比前幾種略高,代碼量也更大,但好處是完全自己控制,更加靈活。、輸入數字可以用scanf輸入。
如果輸入的是整型數據,可以用
int a;
scanf("%d",&a);
實現把輸入的數字賦值給a的效果。
類似的,如果是float, double,short,long等類型的數據,那么就要把變量定義成對應的類型,然后使用各自的格式字符%f,%lf,%hd,%ld等進行輸入。
二、輸入單個字符。
輸入單個字符可以用以下兩種函數。
定義char c;
1 scanf("%c", &c);
這種方法和輸入數字是類似的,%c僅讀入一個字符,並賦值給c。
2 c = getchar();
getchar函數的功能就是讀入一個字符,並以返回值形式返回。
三、輸入一串字符(以空白字符分隔)。
可以用scanf的%s格式。
char str[100];//空間要定義足夠大
scanf("%s", str);//將字符串讀入並存在str中
四,讀入一行數據。
可以用gets函數。gets的功能就是讀入一整行數據,以換行符為結束。
char str[100];//同樣要足夠大的空間
gets(str);
補充,無論哪種形式的輸入,都可以用getchar逐個輸入到字符串中,然后判斷結束符以結束輸入,再對字符串做處理。這種方法對編程水平要求比前幾種略高,代碼量也更大,但好處是完全自己控制,更加靈活。









