這個作業屬於那個課程 |
C語言程序設計II |
這個作業要求在哪里 |
C語言I作業11 |
我在這個課程的目標是 |
將本學期所學好好復習匯總,期末考試爭取不掛科 |
這個作業在那個具體方面幫助我實現目標 |
理解老師上課講的變量的作用域和生存期,弄懂存儲類型 |
參考文獻 |
C語言 |
1.PTA實驗作業

1.1 題目名1: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;
}
/* 你的代碼將被嵌在這里 */
輸入樣例:
105 500
輸出樣例:
cnt = 6
1.1.1數據處理
- 數據表達:定義變量N,其中N是用戶傳入的參數。如果N滿足條件,則該函數必須返回1,否則返回0。定義變量i,k,m,temp用於輔助判斷累加。
開始
調用數學函數
int 定義變量IsTheNumber,N
{
int 定義變量n1, n2, i, cnt;
scanf(輸入顯示 n1,n2);
將cnt賦值為0;
for循環語句( i累加條件,i累加 ) {
if條件語句( IsTheNumber(i) )
cnt累加;
}
輸出顯示;
結束
}
題目要求函數接口定義
{
int定義變量i,k,m,temp
int 定義一個有100個元素的數組a並將其所有值初始化為0
int 定義一個有10個元素的數組b並將其所有值初始化為0
令temp=N
while條件語句(當temp/10>0) {
將k賦值;
temp = temp除以10;
}
if語句(N==(int)sqrt(N)*(int)sqrt(N))
{
for語句(將i賦值0;當i小於k;i累加)
{
數組a的第i+1個元素=N/m%10;
m*=10
if(數組b的第a數組的第i+1個元素個元素+1等於1) 返回1;
如果不等於1 數組b的第a數組的第i+1個元素個元素+1賦值為1;
}
返回0;
}
如果不是 返回0;
}
1.1.2實驗代碼截圖

1.1.3 造測試數據
輸入數據 |
輸出數據 |
說明 |
105 500 |
cnt = 6 |
有六個完全平方數 |
100 400 |
cnt = 4 |
有四個完全平方數 |
50 100 |
cnt = 1 |
有一個完全平方數 |
1.1.4 PTA提交列表及說明

- 編譯錯誤:第七行while語句后條件判斷錯誤,寫成了temp/100>0
- 編譯錯誤:第十八行將b[a[i]]=1打成了b[i]=1
1.2 題目2: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 = 這些整數的和
裁判測試程序樣例:
#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;
}
/* 你的代碼將被嵌在這里 */
輸入樣例:
104 999
輸出樣例:
104 is counted.
count = 15, sum = 3720
1.2.1數據處理
- 數據表達:①定義變量x,y,並將y初賦值為0,當y除以5等於0時,返回1,反之返回0②定義變量a,b,sum,count,a,b用於for語句輔助判斷,sum,count用於累加,最后輸出sum,count。
開始
int 定義is函數( int 定義變量number );
void count_sum( int 定義變量a,b );
int main()
{
int 定義變量a,b
scanf(顯示輸入兩個數a,b);
if語句 is函數 printf(輸出a);
if語句 is函數 printf(輸出 b);
范圍由a到b
返回 0;
}
int 定義is函數( int 定義變量number )
{
int 定義變量x,y並將y初賦值0;
do
{
x為number除以10的余數;
number為number/10所得結果;
y最后為x加y;
}
while(number不等於0);
如果(y等於5)
返回 1;
否則
返回 0;
}
void count_sum( 定義變量a,b )
{
int 依題意定義變量count,sum0並初賦值為0
int 定義變量i;
for玄幻語句(i等於a;i小於等於b;i累加)
{
if條件語句(is函數))
{
count累加;
sum等於sum+i;
}
}
printf(顯示輸出count和sum);
}
1.2.2實驗代碼截圖

1.2.3 造測試數據
輸入數據 |
輸出數據 |
說明 |
1 2 |
count=0,sum=0 |
滿足條件的整數個數為0,這些整數的和為0 |
5 10 |
5 is counted.count=1,sum=5 |
5的各個位數之和等於5,滿足條件的整數個數為1,這些整數的和為5 |
10 20 |
count=1,sum=14 |
滿足條件的整數個數為1,這些整數的和為14 |
1.2.4 PTA提交列表及說明

- 編譯錯誤:第七行將 number=number/10打成了 number=number%10;
- 編譯錯誤:第11行中將if(y5)打成了number(y5)
- 編譯錯誤:第16行一開始沒有按題目要求寫上函數接口定義void count_sum( int a, int b ),而是按我自己平常的定義打的。
- 編譯錯誤:第18行沒有將count,sum,初賦值
- 編譯錯誤:將22行if(is(i))打成if(is)
- 編譯錯誤:將25行sum=sum+i;打成了sum++
2.代碼互評


比較
- 1.他的代碼比我要簡潔很多,而且變量定義的更少,占的空間也小,顯然思路比我清晰很多。
- 2.在判斷N是否滿足條件上,我的判斷語句是(b[a[i]]1),而他的判斷語句是滿足s[i]2,返回1,滿足n/=10,返回0。
- 3.相比兩份代碼,毫無疑問他的代碼更好,更簡潔,思路更清晰,我的代碼很混亂,定義的變量也多,判斷語句也不簡潔,我要向他學習的地方很多。
同學代碼(袁思凡)

自己代碼

比較
- 1.他的代碼也比我的簡潔很多,我定義的變量很多,而且用了兩組數組,他不但變量定義的少,而且只用了一組數組
- 2.在if語句輸出判定條件上,他的語句為如果p[i]>1,返回1,否則返回0。
- 3.我的格式很亂,語句很復雜,他直接用一個for循環語句和一個if條件語句判斷輸出,而我用了兩個if條件語句,一個for循環語句判斷輸出,把思路理很亂。
- 4.相比之下,我認為他的思路非常值得我學習,還有他處理問題的語句和方法,我還要在格式上加以改進,以后把思路理清楚在打代碼。
3.學習總結
3.1 學習進度條
周/日期 |
這周所花的時間 |
代碼行 |
學到的知識點簡介 |
目前比較迷惑的問題 |
第四周 |
8小時 |
50行 |
簡單輸出 |
無 |
第五周 |
10小時 |
70行 |
學習輸入 |
無 |
第六周 |
20小時 |
150行 |
用WinGW-w64來編譯C程序 |
無 |
第七周 |
24小時 |
150行 |
運用if,else語句 |
對符號的意思不太理解 |
第八周 |
18小時 |
200行 |
運用for循環語句 |
無 |
第九周/10.25 |
8小時 |
200行 |
學習了自定義函數 |
符號容易弄混 |
第十周/11.1 |
26小時 |
250行 |
熟悉並掌握了多分支結構 |
各個運算符的意思還不太理解 |
第十一周/11.8 |
24小時 |
300行 |
熟悉唱我多分支結構switch語句 |
對空格的使用還比較疑惑 |
第十二周/11.15 |
20小時 |
300行 |
熟悉whlie和do-whlie結構 |
無 |
第十三周/11.21 |
16小時 |
280行 |
學會了break、continue的使用和循環的嵌套解決問題 |
對循環的嵌套還不怎么懂 |
第十四周/11.28 |
24小時 |
350行 |
對pow函數有了更深的理解,對循環嵌套語句的不懂得地方都弄懂了 |
不會將自己的語句用C語言表達出來 |
第十五周/12.4 |
24小時 |
300行 |
自學了一點數組的知識 |
對數組不完全了解,對自定義函數也不太懂 |
3.2 累積代碼行和博客字數
時間 |
博客字數 |
代碼行數 |
第四周 |
450 |
70 |
第五周 |
450 |
140 |
第六周 |
1200 |
290 |
第七周 |
2400 |
490 |
第八周 |
3600 |
740 |
第九周 |
4800 |
990 |
第十周 |
6000 |
1240 |
第十一周 |
7300 |
1740 |
第十二周 |
8700 |
2120 |
第十三周 |
10800 |
2800 |
第十四周 |
12500 |
3200 |
第十五周 |
14000 |
3500 |

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

3.3.2 學習體會
- 本周題目很難,難到自己有些題目已經無法解決,然后寫多了難題會慢慢發現以前的難題根本不算什么,我認為這應該也算是一種進步吧
- 對於自定義函數還不太熟練,還有很多不懂的地方,馬上就要考試了,得趕緊補知識漏洞了
- 剛認識數組,還沒完全懂,現在老師也沒教,走在老師教學進度前面的感覺很棒,可是又沒有完全弄懂又覺得有點遺憾,不管怎么說,感覺進步已經很大了,繼續加油吧!