這個作業屬於那個課程 | C語言程序設計II |
---|---|
這個作業要求在哪里 | C語言I博客作業11 |
我在這個課程的目標是 | 熟練掌握C語言 |
這個作業在哪個具體方面幫助我實現目標 | 熟練掌握了各種循環結構,並且學會了自定義函數 |
參考文獻 | Markdown基本語法 集美大學林麗老師 |
一.PTA實驗作業
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)數據處理
數據表達:
用了整形變量x,m;
用m來找完全平方數的范圍內的整數
使用了數組
數據處理:偽代碼
開始
int IsTheNumber ( const int N );//N是用戶傳入的參數。如果N滿足條件,則該函數必須返回1,否則返回0
int main()
{
int n1, n2, i, cnt;//定義整形變量n1,n2, i, cnt
scanf("%d %d", &n1, &n2);
cnt = 0;//cnt初始化為0
for ( i=n1; i<=n2; i++ ) {//循環n1到n2次
if ( IsTheNumber(i) )//自定義函數IsTheNumber(i)
cnt++;//cnt累加
}
printf("cnt = %d\n", cnt);//輸出cnt
return 0;//返回值為0
}
#include <stdio.h>
int IsTheNumber ( const int N )
{
int x,m;//定義x,m
x=(int)sqrt(N);//x定義為整形的根號N
m = x*x;
if (m == N)//如果m=N
{
int num[10]={0};//定義了一個int型的大小為10的數組nums,同時該數組所有的元素均被初始化為0
int i;
while(m>0)//當m>0時
{
for(i = 0;i<=9;i++)//循環9次
{
if (m%10 == i)//如果m除以10的余數=i
{
num[i]=num[i]+1;//
if (num[i]==2)//如果數組i=2
{
return 1;//返回值為1
}
}
}
m=m/10;//m等價於m/10
}
}
return 0;//返回值為0
}
(2)實驗代碼截圖
(3)造測試數據
輸入數據 | 輸出數據 | 說明 |
---|---|---|
144 225 | cnt = 2 | 有兩個完全平方數 |
105 500 | cnt = 6 | 有六個完全平方數 |
100 200 | cnt = 3 | 有三個完全平方數 |
(4)PTA提交列表及說明
提交列表說明
編譯錯誤:第9行中0那里沒有加{}
答案正確:在第9行中加上了{}
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;
}
/* 你的代碼將被嵌在這里 */
輸入樣例:
104 999
輸出樣例:
104 is counted.
count = 15, sum = 3720
(1)數據處理
數據表達:用了整型變量t, s = 0
運用了自定義函數,for循環結構和if結構
用sum表示和,count表示符合的個數
數據表達:偽代碼
開始
int is( int number );//is自定義函數
void count_sum( int a, int b );//定義整形變量a,b來接收主函數傳入的值
int main()
{
int a, b;//整形變量a,b
scanf("%d %d", &a, &b);
if (is(a)) printf("%d is counted.\n", a);//如果自定義函數is(a)返回來的值不為0
if (is(b)) printf("%d is counted.\n", b);//輸出b
count_sum(a, b);
return 0;//返回值為0
}
int is(int number)//is自定義函數
{
int t, s = 0;//整形變量t,s
while (number != 0)//當數值不等於0時
{
t = number % 10;//t的值為數值除以10取余
number = number / 10;//數值等於原數值除以10的商
s = s + t;//s的值為s和t的和
}
if (s == 5)//如果s等於5
{
return 1;//返回值為1
}
return 0;//返回值為0
}
void count_sum(int a, int b)//自定義函數void count_sum(定義整形變量a,b來接收主函數傳入的值)
{
int n,count = 0, sum = 0;//定義整形變量n,count=0,sum=0
scanf("%d%d", &a, &b);
for (n = a; n <= b; n++)//循環a到b次
{
if (is(n))//自定義函數is(定義整形變量n來接收主函數傳入的值)
{
count++;//累加
sum = sum + n;//sum的值為sum和n的和
}
}
printf("count = %d, sum = %d\n", count, sum);//輸出count,sum
}
(2)實驗代碼截圖
(3)造測試數據
輸入數據 | 輸出數據 | 說明 |
---|---|---|
104 203 | 104 is counted.203 is counted. count = 6, sum = 813 | 符合條件的整數有6個,整數和為813 |
104 104 | 104 is counted. count = 1, sum = 104 | 符合條件的整數有1個,整數和為104 |
104 999 | 104 is counted. count = 15, sum = 3720 | 符合條件的整數有15個,整數和為3720 |
(4)PTA提交列表及說明
提交列表說明
1.編譯錯誤:第10行中寫成了=
2.編譯錯誤:第12行中也寫成了return 0
3.答案正確:第10行寫成==,第12行寫成return 1
二.代碼互評
同學代碼:
同學代碼:
自己代碼:
比較
(1)第一份代碼用了自定義函數定義了5個變量,代碼行數38行,用數N的每一位數按1~9數字的個數一個個進行統計,
(2)第二份代碼先定義一個整型數組,使其初始化,用if語句中一數為另一數的平方數判斷是否為完全平方數,在利用數組的原理判斷是否有兩個相同的數
(3)第三份代碼定義了4個變量,同時也定義了整型數組,先使用了if語句后使用for語句
周/日期 | 這周所花的時間 | 代碼行 | 學到的知識點簡介 | 目前比較迷惑的問題 |
---|---|---|---|---|
第四周 | 7小時 | 100行 | 在屏幕上顯示Hello World! | 無 |
第五周 | 8小時 | 100行 | 求華氏溫度對應的攝氏溫度 | 無 |
第六周 | 21小時 | 400行 | 如何用 MinGW-w64 來編譯C程序 | 無 |
第七周 | 24小時 | 478行 | 運用if語句完成各種數學程序 | 對於&&的用法不了解,現在操作不熟練 |
第八周 | 20小時 | 349行 | 掌握使用for循環語句實現指定次數的循環程序設計 | 無 |
第九周 | 23小時 | 264行 | 學會使用自定義函數 | 目前不太熟練 |
第十周 | 22小時 | 167行 | 熟悉多分支結構、字符型數據類型和邏輯運算符 | 還沒有完全熟悉 |
第十一周 | 18小時 | 150行 | 熟悉多分支結構switch語句的使用 | 無 |
第十二周 | 16小時 | 130行 | 熟悉使用while和do-while結構解決問題 | 目前還不太熟練 |
第十三周 | 15小時 | 120行 | 熟悉使用for結構,了解並掌握了break語句和continue語句 | 目前還不太熟練continue語句 |
第十四周 | 15小時 | 180行 | 熟悉使用循環結構 | 目前還不太熟練 |
第十五周 | 14小時 | 260行 | 熟悉函數,學會使用自定義函數 | 對數組不太了解,對函數不太熟練 |
2. 累積代碼行和博客字數
時間 | 博客字數 | 代碼行數 |
---|---|---|
第四周 | 525 | 50 |
第五周 | 645 | 100 |
第六周 | 645 | 400 |
第七周 | 2659 | 478 |
第八周 | 3586 | 597 |
第九周 | 4769 | 698 |
第十周 | 5897 | 787 |
第十一周 | 6289 | 897 |
第十二周 | 7594 | 1056 |
第十三周 | 8679 | 1170 |
第十四周 | 9879 | 1278 |
第十五周 | 13547 | 1456 |
3 .學習內容總結和感悟
(1)學習內容總結
(2) 學習體會
學習c語言有一段時間了,越是學到后面越難,上周總結了循環結構,並且知道了這兩個語句的區別,增加了一項編碼技巧,這周學習了自定義函數,又學到了新的C語言知識,現在編代碼時沒有以前那么吃力了,但是仍然不太熟練,而且題目也越來越難了,我還欠缺很多的鍛煉,也欠缺很多知識,我以后還需要更努力的去練習,花更多的時間在這里,朝着我的目標前進