問題 | 回答 |
---|---|
這個作業屬於那個課程 | C語言程序設計II |
這個作業要求在哪里 | 作業要求 |
我在這個課程的目標是 | 自己設計一個小游戲 |
這個作業在那個具體方面幫助我實現目標 | 在PTA練習中多次使用自定義函數和庫函數 |
參考文獻 | C語言程序設計II,百度百科 |
1.PTA實驗作業(20分/題)
1.1統計某類完全平方數
本題要求實現一個函數,判斷任一給定整數N是否滿足條件:它是完全平方數,又至少有兩位數字相同,如144、676等。
函數接口定義:
int IsTheNumber ( const int N );
其中N是用戶傳入的參數。如果N滿足條件,則該函數必須返回1,否則返回0。
裁判測試程序樣例:
#include <stdio.h>
#include <math.h>
int IsTheNumber ( const int N );
int main()
{
int n1, n2, i, cnt;
scanf("%d %d", &n1, &n2);
cnt = 0;
for ( i=n1; i<=n2; i++ ) {
if ( IsTheNumber(i) )
cnt++;
}
printf("cnt = %d\n", cnt);
return 0;
}
/* 你的代碼將被嵌在這里 */
輸入樣例:
1.1.1數據處理
數據表達:定義了n接受N的平方根乘n的平方根,N是輸入的整數,定義一個10位的數組num用了收集n的值;n1,n2為輸入的取值范圍,i用於控制循環,cnt用於記數
數據處理:
int IsTheNumber ( const int N )
定義整形變量i循環終止條件,n是N的平方根乘n的平方根
定義數組num[10]並將數組初始化為0
n=(int)sqrt(N)*(int)sqrt(N) /*利用函數sqrt()進行判斷是否為完全平方數*/
if(n==N) /*在完全平方數的基礎上進行判斷第二步*/
while(n!=0) /*檢驗數字是否相同*/
for(i=0;i<10;i++)
if(n%10==i)
num[i]累加
if(num[i]==2) /*判斷是否有相同的數字*/
返回值為1
end if
end if
end for
n←n/10
end whlie
返回值為0
end if
else
返回值為0
1.1.2實驗代碼截圖
1.1.3 造測試數據
輸入數據 | 輸出數據 | 說明 |
---|---|---|
105 500 | cnt = 6 | 題中數據 |
0 100 | cnt = 1 | 題中數據左側 |
500 1000 | cnt = 2 | 題中數據右側 |
1.1.4 PTA提交列表及說明
提交列表說明:
編譯錯誤:開始忘了把數組初始化。
編譯錯誤:錯把num[i]==2打成num[i]=2
1.2統計各位數字之和是5的數
本題要求實現兩個函數:一個函數判斷給定正整數的各位數字之和是否等於5;另一個函數統計給定區間內有多少個滿足上述要求的整數,並計算這些整數的和。
函數接口定義:
int is( int number );
void count_sum( int a, int b );
函數is
判斷number
的各位數字之和是否等於5,是則返回1,否則返回0。
函數count_sum
利用函數is統計給定區間[a, b]
內有多少個滿足上述要求(即令is
返回1)的整數,並計算這些整數的和。最后按照格式
count = 滿足條件的整數個數, sum = 這些整數的和
進行輸出。題目保證0<a
≤b
≤10000。
裁判測試程序樣例:
#include <stdio.h>
int is( int number );
void count_sum( int a, int b );
int main()
{
int a, b;
scanf("%d %d", &a, &b);
if (is(a)) printf("%d is counted.\n", a);
if (is(b)) printf("%d is counted.\n", b);
count_sum(a, b);
return 0;
}
/* 你的代碼將被嵌在這里 */
1.2.1 數據處理
數據表達:定義了整形變量a,b為輸入的范圍,自定義函數is並定義了整形變量i,sum,其中sum為number的每一位相加的和,i為返回值;
自定義函數count_sum並定義了整形變量count,sum,i,其中count為記錄滿足要求的個數,sum為每一個滿足條件的數的和,i用來控制循環。
數據處理:
int is(int number)
定義整型變量c,d
定義整數變量sum並賦值為0
while(number!=0)/*number是否等於0*/
c←number%10
sum←sum+c
number←number/10
end while
if(sum==5) /*判斷各位數之和是否等於0*/
返回值為1
else
返回值為0
end if-else
end
void count_sum( int a, int b )
定義整型變量i為控制循環
定義整型count用於記錄滿足條件數的個數,sum1為滿足條件的每一個數累加的和
for(i=a; i<=b; i++) /*在區間a-b中循環尋找各位數字之和是5的數*/
if(is(i))
count累加
sum1←sum1+i
end if
end for
輸出count = , sum =
end
1.2.2 實驗代碼截圖
1.2.3 造測試數據
輸入數據 | 輸出數據 | 說明 |
---|---|---|
104 999 | 104 is counted. count = 15, sum = 3720 |
題中數據 |
0 103 | count = 6, sum = 165 | 題中數據左側 |
1000 9999 | count = 35, sum = 73885 | 題中數據右側 |
1.2.4 PTA提交列表及說明
提交列表說明:
編譯錯誤:錯把number=number/10;打成number=number%10;
2.代碼互評(5分)
同學代碼截圖
自己代碼截圖
同學代碼是用n代替N,我的n是兩個根號下N相乘,他用m等於根號下n,m乘m來代替我的n,我這樣少一個變量,我們算法差不多,就if語句中判斷條件有點不一樣。
同學代碼截圖
自己代碼截圖
1.他的代碼較亂,而且變量多一點,我的比較清晰。
2.在判斷N是否滿足條件上,他的判斷語句是(b[a[i]]1),而我的判斷語句是滿足s[i]2,返回1,滿足n/=10,返回0。
3.學習總結(15分)
3.1 學習進度條(5分)
周/日期 | 這周所花的時間 | 代碼行 | 學到的知識點簡介 | 目前比較迷惑的問題 |
---|---|---|---|---|
9.16~9.22 | 6h | 20 | 初步了解編程如何進行 | 編程開始的單詞有什么作用,編譯是如何進行的 |
9.23~10.6 | 30h | 30 | 學會運用markdown語法和了解博客園作業格式 | 如何在博客隨筆字體加顏色 |
10.7~10.11 | 48h | 235 | 學會了if語句和編程的數學函數怎么寫 | while語句如何使用和電腦上表格和why手機上順序不一樣 |
10.14~10.20 | 36h | 100 | 掌握使用for循環語句 | 對多種循環結構不夠了了解以及分支結構和循環結構同時使用的編程先后。 |
10.20~10.27 | 32h | 135 | 如何對函數的定義和調用,思維導圖 | 函數的調用和定義有沒有局限性。 |
10.28~11.3 | 36h | 512 | 熟悉多分支結構、字符型數據類型和邏輯運算符 | 四則運算和字符型變量 |
11.4~11.10 | 12h | 232 | 熟悉多分支結構switch語句的使用 | 在博客園中如何添加小掛飾 |
11.11~11.17 | 18h | 263 | 熟悉使用while和do-while結構 | 字符的實際使用 |
11.18~11.24 | 20h | 186 | 熟悉break、continue的使用,熟悉使用循環的嵌套解決問題 | 嵌套循環的邏輯 |
11.25~12.1 | 22h | 270 | 選擇合適的算法、合理的循環結構,熟練的編寫程序 | 數組的運用 |
12.2~12.8 | 30h | 215 | 掌握各種類型函數的定義、調用和申明,熟悉變量的作用域、生存周期和存儲類型 | 不太明白變量的生存周期 |
3.2 累積代碼行和博客字數(5分)
3.3 學習內容總結和感悟(5分)
3.3.1 學習內容總結
3.3.2 學習體會
本學期最后一次作業感覺有點難度啊,尤其是編程題,我第一題從3分到4分到5分,太難受了,一個虛數輸出問題,我就搞了半天,i無值,所以不能直接輸出,實數部分和虛數部分系數分開求才能實現,但還是只有5分,還有5個測試點錯誤,我打算在Dev上一個一個測試,看到底那錯了,回顧這一學期,其中有時候偏離了自己的目標,距離目標還是太遠了,在最后這一段時間我希望自己堅持學習,盡量考個好分數,我的博客各向指標也該提升點了畢竟分數不能總停在那里,沒進步就是退步,加油,奧利給。