| 這個作業屬於那個課程 | C語言程序設計II |
|---|---|
| 這個作業要求在哪里 | C語言I作業11 |
| 我在這個課程的目標是 | 學會使用函數,熟練函數類型 |
| 這個作業在那個具體方面幫助我實現目標 | 在PTA的練習中逐漸熟練語句用法,和對知識的自我總結上 |
| 參考文獻 | 集美大學林麗老師、百度文庫、C語言程序設計 |
1.PTA實驗作業

1.1 題目名1
統計某類完全平方數
本題要求實現一個函數,判斷任一給定整數N是否滿足條件:它是完全平方數,又至少有兩位數字相同,如144、676等。
輸入樣例:105 500
輸出樣例:cnt = 6
1.1.1數據處理
數據表達:b代表余數;i,j用於循環;a用於判斷i是否滿足條件,它們都是整型變量;
數據處理:
{
int n1, n2, i, cnt; 定義變量n1,n2,i,cnt的類型
scanf("%d %d", &n1, &n2); 輸入n1,n2
cnt = 0; 對cnt對進行賦值
for ( i=n1; i<=n2; i++ ) 進行循環直到n1等於n2為止
{
if ( IsTheNumber(i) ) 當滿足函數條件
cnt++; cnt累計
}
printf("cnt = %d\n", cnt); 輸出cnt
return 0; 結束
}
int IsTheNumber ( const int N ) 函數頭
{
int i,s[10],a,b=0,j; 定義變量i,a,b,i,j,數組s
i=N; 將i賦值給N
a=sqrt(i); a等於根號i
if(a*a==i) 當i等於a的平方
{
while(i>0) 當i>0時
{
s[b]=i%10; 用s[b]來存放i除以10的余數
i=i/10; i等於i除以10
for(j=0;j<b;j++) 進行循環
{
if(s[b]==s[j]) 當s[b]等於s[j]時
return 1; 返回1
}
b++; 累加b
}
}
return 0; 返回0
}
1.1.2實驗代碼截圖

1.1.3 造測試數據
| 輸入數據 | 輸出數據 | 說明 |
|---|---|---|
| 46 572 | 7 | 46和572之間滿足條件的數有7個 |
| 400 900 | 5 | 400和900之間滿足條件的數有5個 |
| 10 700 | 8 | 10和700之間滿足條件的數有10個 |
1.1.4 PTA提交列表及說明

* 編譯錯誤:忘記打分號,通過看錯誤提示發現錯誤並改正的;
* 編譯錯誤:忘記打分號,通過看錯誤提示發現錯誤並改正的;
1.2題目名2
統計各位數字之和是5的數
本題要求實現兩個函數:一個函數判斷給定正整數的各位數字之和是否等於5;另一個函數統計給定區間內有多少個滿足上述要求的整數,並計算這些整數的和。
函數is判斷number的各位數字之和是否等於5,是則返回1,否則返回0。
函數count_sum利用函數is統計給定區間[a, b]內有多少個滿足上述要求(即令is返回1)的整數,並計算這些整數的和。最后按照格式
輸入樣例:104 999
輸出樣例:104 is counted.count = 15, sum = 3720
1.2.1數據處理
*數據表達*:
s用來計算各數字之和是否等於5;t代表余數;n為輸入數;count為滿足條件的整數個數, sum為這些整數的和;
*數據處理*:
int is( int number );
void count_sum( int a, int b ); 自定義函數
int main()
{
int a, b; 定義a,b變量
scanf("%d %d", &a, &b); 輸入a,b
if (is(a)) printf("%d is counted.\n", a); 如果返回值不為0,則輸出a is counted.
if (is(b)) printf("%d is counted.\n", b); 如果返回值不為0,則輸出b is counted.
count_sum(a, b); 自定義函數
return 0; 結束
}
int is( int n)
{
int s=0,t=0; 定義s,t並對其賦值為0
while(n!=0) 當n不等於0時一直循環
{
t=n%10; t等於n除以10的余數
n/=10; n等於n除以10
s+=t; s等於s加t
}
if(s==5) 如果s等於5
return 1; 返回1
else 否則
return 0; 返回0
}
void count_sum( int a, int b )
{
int sum=0,count=0,i; 定義sum,count,i變量
for(i=a;i<=b;i++) 進行循環,直到i等於b為止
{
if(is(i)) 如果滿足函數is(i)
{
count++; count進行累加
sum+=i; sum等於sum加i
}
}
printf("count = %d, sum = %d\n",count,sum); 輸出count,sum
}
1.2.2實驗代碼截圖

1.2.3 造測試數據
| 輸入數據 | 輸出數據 | 說明 |
|---|---|---|
| 66 222 | count=8 sum=1246 | 在66到222之中count為8,sum為1246 |
| 77 999 | count=15 sum=3720 | 在77到999之中count為15,sum為3720 |
| 221 776 | 221 is counted count=8 sum=2695 | 在221到776之中count為8,sum為2695,221 is counted |
1.2.4 PTA提交列表及說明

*編譯錯誤:把雙引號打成中文版,通過調試發現的,並改正;
2.代碼互評
自己代碼:

同學代碼:

* 該同學定義的變量與我的不同;
* 該同學先用i計算余數,再存放到數組中;而我直接用數組存放余數;
* 我在取余后再次使用for循環來判斷是否滿足條件,該同學用s[i]=2來判斷;
自己代碼:

同學代碼

* 該同學定義的變量與我的不同;
* 該同學用了do-while語句來循環語句,而我用的是while循環語句和for循環語句;
3.學習總結
3.1 學習進度條
| 周/日期 | 這周所花的時間 | 代碼行 | 學到的知識點簡介 | 目前比較困惑的問題 |
|---|---|---|---|---|
| 第六周 | 4天 | 20 | 用 MinGW-w64 來編譯C程序,學習編程計算溫度的轉化 | 無 |
| 第七周 | 3天 | 99 | 學習用if,else等語句編譯程序 | 無 |
| 第八周 | 2天 | 75 | 學習使用循環語句,用for來編譯程序 | 無 |
| 第九周 | 3天 | 94 | 學習各種使用函數eg:fact(i) | for循環與while循環的區別 |
| 第十周 | 2天 | 213 | 學習使用多種分支結構 | 對分支結構中for循環有點迷糊不太能理解 |
| 第十一周 | 1天 | 135 | 學習使用switch語句 | 無 |
| 第十二周 | 1天 | 96 | 學習使用while語句 | 無 |
| 第十三周 | 1天 | 83 | 學習使用循環嵌套,continue語句 | 循環嵌套的順序 |
| 第十四周 | 1天 | 115 | 練習循環嵌套與if-else語句的結合 | 循環嵌套的順序 |
| 第十五周 | 2天 | 48 | 學習使用不同類型的函數 | 不知道函數應該怎么銜接 |
3.2 累積代碼行和博客字數
| 時間 | 博客字數 | 代碼行數 |
|---|---|---|
| 第四周 | 651 | 28 |
| 第六周 | 2041 | 48 |
| 第七周 | 4337 | 147 |
| 第八周 | 7005 | 222 |
| 第九周 | 9723 | 316 |
| 第十周 | 11911 | 529 |
| 第十一周 | 13872 | 664 |
| 第十二周 | 15759 | 760 |
| 第十三周 | 18111 | 843 |
| 第十四周 | 20009 | 958 |
| 第十五周 | 22007 | 1006 |

3.3 學習內容總結和感悟
3.3.1 學習內容總結

3.3.2 學習體會
本周學習了函數的用法,類型,變量的用法及類型。雖然以前就已經學了一次函數,但是這次的學習是更加的深入。可以從PTA的難度中看出,這次的題目好像是突然上了一個檔次,讓人應接不暇。第一道題目已經讓我力不從心,因為它用了數組,然而我並沒有學習過,於是代碼看的有點懵逼。從此次難度可以得出,在計算機這條路上我們還是太單純。以后要更努力學習了,不然快跟不上了。

