一、本周教學內容&目標
第5章 函數 要求學生掌握各種類型函數的定義、調用和申明,熟悉變量的作用域、生存周期和存儲類型。
二、本周作業頭
這個作業屬於那個課程 | C語言程序設計II |
---|---|
這個作業要求在哪里 | <C語言I作業011> |
我在這個課程的目標是 | <復習所學相關知識,准備期末考試> |
這個作業在那個具體方面幫助我實現目標 | <在PTA中多次使用嵌套循環,熟練運用> |
參考文獻 | <<集美大學林麗老師>> C語言程序設計(第三版);百度 |
三、本周作業
1.PTA實驗作業
2.代碼互評
3.學習總結
四、作業格式
1.PTA實驗作業(20分/題)
請再此處列出自己的排名圖片
從PTA題目集中選出2個你最滿意的題目完成以下內容,選擇題目難度越大,分值越高,每題20分(每項5分),內容要求如下:
1.1 題目名1 (6-1 統計某類完全平方數 (20分))
本題要求實現一個函數,判斷任一給定整數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數據處理
介紹實現本題過程中,你的數據表達、數據處理是怎么做的。注意:請務必按照以下方式書寫。
數據表達:使用了整型變量a,m,n;使用了數組表達
數據處理:
表達式:if(tmp*tmp==N)
結構式:用了for循環語句以及使用嵌套內循環
偽代碼:
開始
定義四個整型變量,n1和n2:完全平方數的范圍,i:for循環內的控制循環變量,cnt:[n1,n2]范圍內的完全平方數的數量;
輸入:n1,n2;
令cut=0;
for循環判斷n1到n2內的數是否為完全平方數;
自定義函數:IsTheNumber
定義四個整型變量tmp、flag、i,令tmp*tmp==N;flag用於判斷是否運行正確,做標記;tmp用於表示用戶輸入數的平
方;i用於控制for循環
當tmp==N時
則運用數組a[10]={0}
外循環while:當n大於零時執行內循環
若yes→a[i]=a[i]+1;
num=num/10
for循環輸入i=1-10,判斷n%10是否等於i
繼續判斷若a[i]=>2
則返回flag=1;
退出內循環
返回flag;
結束
1.1.2實驗代碼截圖
貼圖展示代碼,不要復制。請給出名字標識。
1.1.3 造測試數據
輸出你的程序面向各種測試數據結果,除了題目給出的測試數據,可以自己再造其他臨界數據,越多越好,並加上必要說明
輸入數據 | 輸出數據 | 說明 |
---|---|---|
105 500 | cnt = 6 | 有6個數滿足條件 |
100 500 | cnt = 7 | 有7個數滿足條件 |
200 880 | cnt = 5 | 有5個數滿足條件 |
500 1000 | cut=2 | 有2個數滿足條件 |
1.1.4 PTA提交列表及說明
根據PTA提交列表,簡要描述調試程序碰到的問題及解決辦法
1.部分正確:返回值寫成0,應該為flag。
1.2 題目2(6-2 統計各位數字之和是5的數 (20分)
本題要求實現兩個函數:一個函數判斷給定正整數的各位數字之和是否等於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.2.1 數據處理
介紹實現本題過程中,你的數據表達、數據處理是怎么做的。注意:請務必按照以下方式書寫。
數據表達:int is(int number)函數內,定義了兩個整型變量和sum和flag分別代表輸入的數的每一位數字和每一位數字加起來的和;在void count_sum( int a, int b )函數內,定義了三個整型變量i,count,sum分別代表滿足is函數的數和滿足is函數的數的個數,i用於控制循環。
數據結構:
結構式:函數int is(int number)使用了while循環結構和if語句;函數void count_sum( int a, int b )使用了for循環語句和if語句的嵌套結構。
偽代碼
開始 ;
定義sum,flag兩個整型變量,
若滿足is函數則相應的輸出數據;
自定義int is( int number )函數;
定義t和s分別代表輸入的數的每一位數字和每一位數字的和;
若該數不等於零
則循環將該數的每一位數字拿出且求和;
若是所求的和等於五
則返回1;
否返回0;
自定義void count_sum( int a, int b )函數
定義三個整型變量i,count,sum
使用for循環輸入[a,b]間的每一個數
如果輸入的數滿足is函數
則計數器+1;
且求滿足is函數的數的和;
結束 ;
1.2.2 實驗代碼截圖
1.2.3 造測試數據
輸入數據 | 輸出數據 | 說明 |
---|---|---|
100 500 | count = 15, sum = 3720 | 滿足條件的整數有15個,整數和為3720 |
104 999 | 104 is counted. count = 15, sum = 3720 | 滿足條件的整數有15個,整數和為3720 |
50 100 | count = 1, sum = 50 | 滿足條件的整數有1個,整數和為50 |
200 800 | count = 6, sum = 2244) | 滿足條件的整數有10個,整數和為3100 |
1.2.4 PTA提交列表及說明
根據PTA提交列表,簡要描述調試程序碰到的問題及解決辦法
1.答案錯誤: printf("count = %d, sum = %d\n",count,sum);寫成了printf("count = %d, sum = %d\n",count,sum);
第一張 (6-1 統計某類完全平方數 )
同學代碼截圖 |<C語言I作業11 sun-夢 >|
自己代碼截圖
答:我和同學的代碼有很大的不同
1.我用的代碼是先利用while循環語句再用for循環語句判斷並且進行循環,同學則是利用多個多個for循環以及利用pow函數求解。
第二張 (6-2 統計各位數字之和是5的數 )
同學代碼截圖 |<C語言I作業11 sun-夢 >|
自己代碼截圖
答:第二個同學
1.同學是先把void count_sum(int a, int b)函數下的情況先解決在解決int is(int number)的情況,而我剛好相反。
3.學習總結(15分)
$3.1 學習進度條(5分)
|周/日期 |這周所花的時間| |代碼行 |學到的知識點簡介 |目前比較迷惑的問題|
|-|-|-|-|-|
|第六周| 8小時 |300行 |常用的數學函數,if-else語句,for語句,自定義函數 |不會用自定義函數|
|第七周 |7小時 |400行 |二分支結構和用char輸入字符 |對於字符型的代碼有點看不懂|
|第八周| 10小時 |420行 |多分支結構,switch語句 |switch語句用得有點混亂|
|第九周 |13小時 |450行 |自定義函數的用法,怎樣用一個算法來運算多個式子 |if語句的嵌套不明白是怎樣分支的|
|第十周| 18小時 |500行 |多分支結構、字符型數據類型和邏輯運算符 |目前不太熟練並且字符型還沒熟悉|
|第十一周|12小時|600行|熟悉多分支結構switch語句的使用|switch后的表達式是否有要求|
|第十二周|8小時 |620 |do-while語句和while,for語句的區別 |continue不知道怎么去用|
|第十三周|10小時|650|break、continue的用法以及它們之間的關系|為什么在for循環前都要m=1;|
|第十四周|10|600|學習了窮舉算法(在一定限定范圍內可以先運算所有的可能)|對於窮舉算法的源程序2還是不太懂|
|第十五周|16|650|怎樣判斷素數,熟悉循環的嵌套|對數步數很不了解,對指針完全不了解,對於函數題沒什么思路|
3.2 累積代碼行和博客字數(5分)
時間 | 博客字數 | 代碼行數 |
---|---|---|
第4周 | 585 | 300 |
第6周 | 1366 | 400 |
第五周 2551 | 200 | |
第7周 | 2821 | 420 |
第8周 | 4100 | 400 |
第9周 | 6212 | 500 |
第10周 | 8133 | 550 |
第11周 | 10510 | 600 |
第12周 | 13031 | 620 |
第13周 | 15899 | 630 |
第14周 | 17000 | 600 |
第15周 | 19571 | 650 |
3.3 學習內容總結和感悟(5分)
3.3.1 學習內容總結
3.3.2 學習體會
請回顧自己的本周的學習過程,描述學習感受,也可以提出你不理解的地方、對教師教學建議等。如果你有新的想法或者新的方法,請及時記錄下來。
1.這周的pta作業難題感覺又變難了,做的時候老是沒思路,就算在devc++上敲了代碼。在PTA上還是會出現一些小毛病
2.pta上的練習大部分其實就是一些數學題,自己可以用數學思維解決他們,卻老是一下子不知道怎么用代碼的形式表示他們。
4.百度是個好東西,尤其是對於初學者來說!