1.作業頭
這個作業屬於哪個課程 | 班級的鏈接 |
這個作業要求在哪里 | 作業要求鏈接 |
這個作業的目標 | 掌握自定義函數的各種用法 |
學號 | 20208945 |
1.PTA實驗作業
1.1 題目名1
PTA 6-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,b=一個數字每位上的數,m=一個數開根號后的值,並且定義了一個int型的大小為10的數組p,同時該數組所有的元素均被初始化為0。
偽代碼如下: int n=N;
int b;
int p[10]={0};
int m=sqrt(n);
數據處理:利用while循環將一個數的每位數字上的值求出來,並且相同的數值用數組p儲存,然后用for鑲套if語句判斷,最后解決問題。
偽代碼如下: if(m*m==n){
while(n!=0){
b=n%10;
p[b]++;
n/=10;
}
for(int i=0;i<=9;i++){
if(p[i]>1)
return 1;
}
}
1.1.2實驗代碼截圖
1.1.3 造測試數據
輸入數據 | 輸出數據 | 說明 |
---|---|---|
105 500 | cnt = 6 | 成功輸出 |
138 354 | cnt=2 | 成功輸出 |
1.1.4 PTA提交列表及說明
說明:1.答案錯誤:while語句判斷條件弄錯了,沒有處理題目后面的要求。
2.答案正確:進行了改正。
1.2 題目2
PTA作業6-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 數據處理
數據表達:int is(int number)中定義a為數的位數數值,s為各位數數值之和。
代碼如下:int a,s=0;a=number%10;s=a+s;
數據處理:函數is判斷number的各位數字之和是否等於5,是則返回1,否則返回0。函數count_sum利用函數is統計給定區間[a, b]內有多少個滿足上述要求(即令is返回1)的整數,並計算這些整數的和。
代碼如下:
int is(int number)
{
int a,s=0;
while(number!=0)
{
a=number%10;
number=number/10;
s=a+s;
}
if(s==5)
return 1;
else
return 0;
}
void count_sum(int a,int b)
{
int m=0,sum=0;
for(int i=a;i<=b;i++)
{
if(is(i)!=0)
{
m++;
sum=sum+i;
}
}
1.2.2 實驗代碼截圖
1.2.3 造測試數據
輸入數據 | 輸出數據 | 說明 |
---|---|---|
104 999 | 104 is counted. count = 15, sum = 3720 | 成功輸出正確結果 |
399 480 | count = 2, sum = 811 | 成功輸出正確結果 |
1.2.4 PTA提交列表及說明
說明:1.編譯錯誤:定義了兩個函數銜接有問題,int is(int number)中沒有定義a,void count_sum(int a,int b)中調用int is(int number)錯誤。
2.答案正確:改正后正確。
2.代碼互評
找2份同學代碼,和自己代碼比較,建議互評代碼盡量找代碼風格差異較大。
PTA作業6-1
同學代碼截圖
同學代碼截圖
自己代碼截圖
對比說明:同學的代碼和我的代碼都有共同之處都運用了for語句嵌套循環,都使用了數組計數的方法,雖然我做出來了,但我花費的時間非常多,我還是不能理解數組。
3.學習總結
3.1 學習進度條
周/日期 | 這周所花的時間 | 代碼行 | 學到的知識點簡介 | 目前比較迷惑的問題 |
---|---|---|---|---|
第八周10.19-10.25 | 8 | 5 | 如何打開編譯器 | 我該怎么學習c語言 |
第九周10.26-11.1 | 10 | 54 | 學會如何提問 | c語言怎么才能學好 |
第十周11.2-11.7 | 48 | 138 | for語句,數據的類型 | 為什么作業這么麻煩 |
第十一周11.8-11.14 | 51 | 256 | for語句的應用,如何自己定義函數 | 怎樣去理解題意,自己定義的函數如何符合題意去調用 |
第十二周11/15-11/21 | 49 | 528 | 學習了分支結構,switch語句,以及簡單數組定義 | 如何正確的理解題目意思,怎樣解讀問題 |
第十三周11/22-11/28 | 50 | 656 | 學習了分支結構,switch語句,以及簡單一維數組 | 怎樣用所學的知識更簡單的解決問題 |
第十四周11/29-12/5 | 56 | 689 | 學習了新的循環結構while語句 | 怎樣用所學的知識更簡單的解決問題 |
第十五周12/6-12/12 | 78 | 1026 | 學習了鑲套循環break,continue | 為什么老師布置的作業這么難 |
第十五周12/13-12/19 | 80 | 1268 | 學習了函數的各種定義及其用法 | 為什么老師布置的作業這么難 |
3.2 累積代碼行和博客字數
1.累積代碼行:4973
2.博客字數:26405
3.3 學習內容總結和感悟
3.3.1 學習內容總結
3.3.2 學習體會
這一周的學習體會,這一周學習真的累,臨近期末了,為什么作業這么難,考試這么難的話我真的不行了,平常作業還可以問問室友,查查資料,用時間慢慢把作業磨出來,可如果考試這樣的話……唉,c語言學習全在於努力碼代碼呀,用時間去堆積才能得到提升,繼續努力吧。