這個作業屬於那個課程 |
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的難度中看出,這次的題目好像是突然上了一個檔次,讓人應接不暇。第一道題目已經讓我力不從心,因為它用了數組,然而我並沒有學習過,於是代碼看的有點懵逼。從此次難度可以得出,在計算機這條路上我們還是太單純。以后要更努力學習了,不然快跟不上了。
