這個作業屬於哪個課程 | C語言程序設計II |
---|---|
這個作業要求在哪里 | C語言I博客作業10 |
我在這個課程的目標是 | 熟悉代碼的編程,設計出一個小程序,能夠正常運行並且能夠擁有一定用戶 |
這個作業在哪個地方具體方面幫助我實現目標 | 選擇合適的算法、合理的循環結構,熟練的編寫程序 |
參考文獻 | 同構數 long函數 abs函數 時間復雜度和空間復雜度 |
1.PTA實驗作業
1.題目名(輸出三角形字符陣列 )
本題要求編寫程序,輸出n行由大寫字母A開始構成的三角形字符陣列。
輸入格式:
輸入在一行中給出一個正整數n(1≤n<7)。
輸出格式:
輸出n行由大寫字母A開始構成的三角形字符陣列。格式見輸出樣例,其中每個字母后面都有一個空格。
輸入樣例:
4
輸出樣例:
A B C D
E F G
H I
J
1.1.1數據處理
數據表達:用到了三個整型變量,n用來作為題目的輸入值,i代表行,j代表列;用到了字符型變量c,c用來賦值字符
數據處理:偽代碼
#include<stdio.h> //頭文件
int main() //函數名
{
int n,i,j; //定義三個整型變量
char c; //定義字符型變量 c
c = 'A'; //給變量c賦值A
scanf("%d", &n);
for(i=1;i<=n;i++) //進行行的循環
{
for(j=i;j<=n;j++) //進行列的循環
{
printf("%c ", c); //打印字符
c++; //字符自增
}
printf("\n"); //輸出換行
}
return 0;
}
1.1.2實驗截圖代碼
1.1.3造測試數據
輸入數據 | 輸出數據 | 說明 |
---|---|---|
4 | ![]() |
能形成三角形 |
3 | ![]() |
能形成三角形 |
5 | ![]() |
能形成三角形 |
1.1.4 PTA提交列表及說明
說明:
Q1:多種錯誤
A1:編譯代碼錯誤,格式錯誤,改用了字符型變量編寫代碼
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數據處理
數據表達:用到了四個整型變量 num用來表示素數,n表示輸入值次方,i,j用來循環,count用來計數梅森數
數據處理:偽代碼
#include<stdio.h> //頭文件
#include<math.h> //該編程中用到了數學
int main() //函數名
{
int num,n,i,j,count=0; //定義四個整型變量
scanf("%d",&n);
for(i=2;i<=n;i++) //進行循環
{
num=pow(2,i)-1; //表示素數
for(j=2;j<=sqrt(num);j++) //進行循環
if(num % j==0) break; //如果為假,則跳出循環
if(j>sqrt(num)) // 判斷是否為梅森數
{
printf("%d\n",num); //打印梅森數
count++; //梅森數自增
}
}
if(count==0) //沒有梅森數
printf("None"); //輸出 None
return 0;
}
1.2.2實驗截圖代碼
1.2.3造測試數據
輸入數據 | 輸出數據 | 說明 |
---|---|---|
4 | ![]() |
梅森數為3,7 |
5 | ![]() |
梅森數為3,7,31 |
6 | ![]() |
梅森數為3,7,31 |
1.2.4PTA提交列表及說明
說明:Q1:編譯錯誤
A1:代碼書寫不正確,循環的嵌套沒有使用好,處理素數開始直接寫的pow(2,i)-1,后來將pow(2,i)-1復制給了num
1.3題目名
一個數恰好出現在它的平方數的右端,這個數就稱為同構數。找出1~1000之間的全部同構數。
輸出格式:
在一行中輸出所有滿足條件的同構數,每個數輸出占6列。沒有其它任何附加格式和字符。
輸出樣例:
1 5 6 25 76 376 625
1.3.1數據處理
數據表達:用到了長整型變量a,b,for循環和if語句的嵌套
數據處理:偽代碼
#include<stdio.h> //頭文件
int main() //函數名
{
long a,b; //定義兩個長整型變量
for(a=1,b=0;a<1000;a++) //進行循環
{
b=a*a; // 判斷同構數(一個數恰好出現在它的平方數的右端)
if(b%10==a||b%100==a||b%1000==a) //找出1~1000中所有的同構數
printf("%6d",a); //打印所有的同構數並按照每個數輸出占六個空格的形式
}
return 0;
}
1.3.2實驗截圖代碼
1.3.3造測試數據
輸入數據 | 輸出數據 | 說明 |
---|---|---|
1 5 6 25 76 376 625 |
1.3.4 PTA提交列表及說明
說明:Q:編譯錯誤
A:沒有注意每個數輸出占6列,代碼思路也沒有弄清晰
2代碼互評
1.同學代碼截圖
2.自己代碼截圖
說明:1.他是先定義了整型變量最后轉換為字符型輸出,而我是從一開始就直接定義了字符型變量,並用字符型變量直接賦值
2.我的代碼比他的更加簡單
3.同學代碼截圖
4.自己代碼截圖
說明:1.該同學先寫出來當值為1時輸出None,然后進行初始輸入值為2的循環,而我是初始值賦為2進行循環判斷有無梅森數
2.我和他用的的判斷方法不同,他是用余數判斷,而我的用到了根式判斷
3.學習總結
3.1學習進度條
周/日期 | 這周所花的時間 | 代碼行 | 學到的知識簡介 | 目前比較迷惑的問題 |
---|---|---|---|---|
4/2019.9.21 | 7個小時 | 50 | 編程“hello word” | 初次接觸對代碼很迷惘,不知道表示的是什么意思 |
5/2019.10.2 | 8個小時 | 100 | 安裝gcc編譯器,將代碼建在自己的文件里 | 如何安裝的程序不明白 |
7/2019.10.11 | 10個小時 | 200 | 三種表達式,printf流程和scanf流程,if-else語句 | scanf流程還是不太明白 |
8/2019.10.17 | 20個小時 | 350 | 使用for循環語句數的循環程序設計 | for循環語句的結構還是有點困惑 |
9/2019.10.25 | 25個小時 | 550 | 使用while語句循環,自定義函數,參數 | 自定義函數還是·不太明白 |
10/2019.11.1 | 20個小時 | 700 | 熟悉多分支結構、字符型數據類型和邏輯運算符 | 關於字符型的代碼還是不太明白 |
11/2019.11.7 | 15個小時 | 1000 | 熟悉多分支結構switch語句的使用 | 對swith語句的使用還有一定的困惑 |
12/2019.11.15 | 14個小時 | 1200 | 熟悉使用while和do-while結構解決問題 | 對while語句的使用還有一定的疑惑 |
13/2019.11.21 | 15個小時 | 1450 | 熟悉break、continue的使用,熟悉使用循環的嵌套解決問題 | 對continue的使用不夠熟練,還有很大疑惑 |
14/2019.11.28 | 20個小時 | 1660 | 選擇合適的算法、合理的循環結構,熟練的編寫程序 | 對字符型函數和abs函數還不是太懂 |
3.2 累積代碼行和博客字數
3.3 學習內容總結和感悟
3.3.1 學習內容總結
請用思維導圖的形式將到目前為止所學的內容進行整理
3.3.2學習體會
代碼越來越難了,這次通過寫代碼,查閱資料,接觸到了新的函數,新的long函數和abs函數還需要自己多花點時間去琢磨琢磨,感覺代碼的世界越來越奧妙了,自己還有很多要學的地方;
感覺時間很不夠用,最近作業很多,事情也很多,有時候走在路上,腦子里面想的都是代碼,走路時候手機看的也是代碼,還是感覺自己的悟性還不夠,還需要加大自學的力度,抓住空閑的時間