問題 | 回答 |
---|---|
這個作業屬於那個課程 | C語言程序設計II |
這個作業要求在哪里 | 作業要求 |
我在這個課程的目標是 | 完成作業,學會編程 |
這個作業在那個具體方面幫助我實現目標 | 在PTA練習中學會運用 |
參考文獻 | 百度百科 |
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提交列表及說明
提交列表說明:
編譯錯誤:開始忘了把數組初始化。
編譯錯誤:中英文符號忘記換了
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提交列表及說明
提交列表說明:
Dvc++上調試編譯錯誤
編譯錯誤:錯把number=number/10;打成number=number%10;
2.代碼互評(5分)
同學代碼截圖
自己代碼截圖
算法大體相同,我的n是兩個根號下N相乘,他用m等於根號下n,m乘m來代替我的n,我這樣少一個變量。
同學代碼截圖
自己代碼截圖
該同學使用了自定義函數來判斷素數,而我用的常規方法,在for循環中判斷素數
在判斷N是否滿足條件上,他的判斷語句是(b[a[i]]1),而我的判斷語句是滿足s[i]2,返回1,滿足n/=10,返回0。
3.學習總結(15分)
3.1 學習進度條(5分)
周/日期 | 這周所花的時間 | 代碼行 | 學到的知識點簡介 | 目前比較迷惑的問題 |
---|---|---|---|---|
第四周 | 7 | 120 | 學會了基本結構 | 無 |
第五周 | 8 | 140 | 學會了scanf和printf | 無 |
第六周 | 10 | 170 | 如何用 MinGW-w64 來編譯C程序 | 無 |
第七周 | 17 | 240 | 運用if,else語句完成數學問題 | 不太熟練if-else語句 |
第八周 | 20 | 344 | 運用for循環語句 | 對char的用法還不怎么會 |
第九周 | 23 | 350 | 學習了如何使用自定義函數 | 自定義函數還不太會 |
第十周 | 24 | 410 | 熟悉並掌握多分支結構、字符型數據類型和邏輯運算符結構 | 各個運算符的意思還不太理解 |
第十一周 | 22 | 430 | 熟悉並掌握分支結構switch語句 | 對於&&和||的用法不熟練 |
第十二周 | 29 | 410 | 學會使用while和do-while結構解決問題 | 嵌套語句用不熟練 |
第十三周 | 24 | 455 | 嵌套循環 continue語句和break語句 | 新學的語句用不熟練 |
第十四周 | 26 | 480 | 了解了數組 | 數組不熟練 |
3.2 累積代碼行和博客字數(5分)
3.3 學習內容總結和感悟(5分)
3.3.1 學習內容總結
3.3.2 學習體會
作業難度依次再增加,自己的時間也木得安排好。學習了函數的用法,類型,變量的用法及類型,自學能力很重要,身邊優秀的同學很多,多向他們學習。