這個作業屬於那個課程 | C語言程序設計II |
---|---|
這個作業要求在哪里 | C語言I博客作業10 |
我在這個課程的目標是 | 熟練掌握C語言 |
這個作業在哪個具體方面幫助我實現目標 | 熟練掌握了各種循環結構 |
參考文獻 | Markdown基本語法 集美大學林麗老師 |
一.PTA實驗作業
1. 梅森數
題目內容描述:形如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)數據處理
數據表達:
用了整形變量,t=0作為變量標記
當n=1時,輸出None
外層循環,從2開始,b=pow(2,a)-1
內層循環,從2開始,如果b%i=0,t=1,跳出循環
如果t=0,輸出b
t要重置為0
返回主函數
數據處理:偽代碼
#include<stdio.h>
#include<math.h>
int main()
{
int n,i,a,b=0,t=0;//輸入整形變量n,i,a,b,t
scanf("%d",&n);
if(n==1)//當n=1時
printf("None");//輸出None
for(a=2;a<=n;a++)//從2開始循環n次
{
b=pow(2,a)-1;
for(i=2;i<b;i++)//從2開始循環b次
{
if(b%i==0)//如果b%i=0
{
t=1;
break;//跳出循環
}
}
if(t==0)//如果t=0
printf("%d\n",b);//輸出b
t=0;//t重置為0
}
return 0;
}
(2)實驗代碼截圖
(3)造測試數據
輸入數據 | 輸出數據 | 說明 |
---|---|---|
4 | 3 7 | 從小到大的順序輸出所有不超過2的n次方−1的梅森數,每行一個有2個 |
5 | 3 7 31 | 從小到大的順序輸出所有不超過2的n次方−1的梅森數,每行一個有3個 |
6 | 3 7 31 | 從小到大的順序輸出所有不超過2的n次方−1的梅森數,每行一個有3個 |
(4)PTA提交列表及說明
提交列表說明
答案正確:在編譯器中提前編譯,其中有一次答案錯誤是因為沒有考慮到b%i=0的情況
2.輸出三角形字符陣列
題目內容描述:本題要求編寫程序,輸出n行由大寫字母A開始構成的三角形字符陣列。
輸入格式:
輸入在一行中給出一個正整數n(1≤n<7)。
輸出格式:
輸出n行由大寫字母A開始構成的三角形字符陣列。格式見輸出樣例,其中每個字母后面都有一個空格。
輸入樣例:
4
輸出樣例:
A B C D
E F G
H I
J
(1)數據處理
數據表達:用了整型變量n,i,a,b,c
表達式: b=n-1;c=(1+n)*n/2;循環c次輸出字符
如果如果i==n-1,則輸出換行n+=b; b--;
數據表達:偽代碼
#include <stdio.h>
int main()
{
int n,i,a,b,c;//輸入整形變量n,i,a,b,c
scanf("%d",&n);
b=n-1;//下一行的數目=上一行的數目-1
c=(1+n)*n/2;//數目的規律
for(i=0;i<c;i++)//循環c次
{
printf("%c ",'A'+i);//輸出'A'+i
if(i==n-1)//如果i==n-1
{
printf("\n");//輸出換行
n+=b;
b--;
}
}
}
(2)實驗代碼截圖
(3)造測試數據
輸入數據 | 輸出數據 | 說明 |
---|---|---|
1 | A | 輸出1行由大寫字母A開始構成的三角形字符陣列 |
2 | A B C | 輸出2行由大寫字母A開始構成的三角形字符陣列 |
3 | A B C D E F | 輸出3行由大寫字母A開始構成的三角形字符陣列 |
(4)PTA提交列表及說明
提交列表說明
1.格式錯誤:第13行中沒有輸出換行
2.答案正確:在第13行中輸出換行
3.同構數
題目內容描述:一個數恰好出現在它的平方數的右端,這個數就稱為同構數。找出1~1000之間的全部同構數。
####### 輸出格式:
在一行中輸出所有滿足條件的同構數,每個數輸出占6列。沒有其它任何附加格式和字符。
輸出樣例:
1 5 6 25 76 376 625
(1)數據處理
數據表達:
用了定義函數fun,用了整形變量
用了if結構選擇循環,后用了for結構循環
數據處理:偽代碼
#include<stdio.h>
int fun(int x)//定義fun函數
{
int k;//輸入整形變量k
k=x*x;
if((k%10==x)||(k%100==x)||k%1000==x)//如果k滿足(k%10==x)(k%100==x)(k%1000==x)其中一個或者多個
return 1;//返回值為1
else//否則
return 0;//返回值為0
}
int main(){
int i=0;//輸入整形變量i
for(i=1;i<=1000;i++)//從1開始,循環1000次
{
if(fun(i)){//如果fun函數i為真函數
printf("%6d",i);//輸出i
}
}
return 0;
}
(2)實驗代碼截圖
(3)造測試數據
輸入數據 | 輸出數據 | 說明 |
---|---|---|
無 | 1 5 6 25 76 376 625 | 1~1000之間的全部同構數。 |
(4)PTA提交列表及說明
提交列表說明
1.答案錯誤:第5行中少了k%1000==x
2.編譯錯誤:第13行中寫成了i<1000
3.答案正確:第5行中加上k%1000==x,在第13行中寫出i<=1000
二.代碼互評
同學代碼:
自己代碼:
比較
(1)第一份代碼用了char op字符型變量,結構上該同學的更加整潔美觀,也更容易懂。
(2)我的代碼直接定義整形變量,后面變為字符型輸出
(3)這位同學的比我的更簡單,更容易懂
同學代碼:
自己代碼:
比較
(1)第一份代碼用了自定義函數,然后先進行了for循環然后進行while結構,最后進行if判斷,結構上該同學的整潔美觀。
(2)我的代碼用了定義fun函數,先進行了if選擇,后進行for循環,最后輸出i
1.學習進度條
周/日期 | 這周所花的時間 | 代碼行 | 學到的知識點簡介 | 目前比較迷惑的問題 |
---|---|---|---|---|
第四周 | 7小時 | 100行 | 在屏幕上顯示Hello World! | 無 |
第五周 | 8小時 | 100行 | 求華氏溫度對應的攝氏溫度 | 無 |
第六周 | 21小時 | 400行 | 如何用 MinGW-w64 來編譯C程序 | 無 |
第七周 | 24小時 | 478行 | 運用if語句完成各種數學程序 | 對於&&的用法不了解,現在操作不熟練 |
第八周 | 20小時 | 349行 | 掌握使用for循環語句實現指定次數的循環程序設計 | 無 |
第九周 | 23小時 | 264行 | 學會使用自定義函數 | 目前不太熟練 |
第十周 | 22小時 | 167行 | 熟悉多分支結構、字符型數據類型和邏輯運算符 | 還沒有完全熟悉 |
第十一周 | 18小時 | 150行 | 熟悉多分支結構switch語句的使用 | 無 |
第十二周 | 16小時 | 130行 | 熟悉使用while和do-while結構解決問題 | 目前還不太熟練 |
第十三周 | 15小時 | 120行 | 熟悉使用for結構,了解並掌握了break語句和continue語句 | 目前還不太熟練continue語句 |
第十四周 | 15小時 | 180行 | 熟悉使用循環結構 | 目前還不太熟練 |
2. 累積代碼行和博客字數
時間 | 博客字數 | 代碼行數 |
---|---|---|
第四周 | 525 | 50 |
第五周 | 645 | 100 |
第六周 | 645 | 400 |
第七周 | 2659 | 478 |
第八周 | 3586 | 597 |
第九周 | 4769 | 698 |
第十周 | 5897 | 787 |
第十一周 | 6289 | 897 |
第十二周 | 7594 | 1056 |
第十三周 | 8679 | 1170 |
第十四周 | 9879 | 1278 |
3 .學習內容總結和感悟
(1)學習內容總結
(2) 學習體會
學習c語言有一段時間了,越是學到后面越難,上周學習了break語句和continue語句,這周總結了循環結構,並且知道了這兩個語句的區別,又增加了一項編碼技巧,又學到了新的C語言知識,現在編代碼時沒有以前那么吃力了,但是仍然不太熟練,而且題目也越來越難了,我還欠缺很多的鍛煉,也欠缺很多知識,我以后還需要更努力的去練習,花更多的時間在這里,朝着我的目標前進