這個作業屬於那個課程 | C語言程序設計II |
---|---|
這個作業要求在哪里 | https://edu.cnblogs.com/campus/zswxy/CST2019-1/homework/10132 |
我在這個課程的目標是 | 熟練地掌握運用C語言,鍛煉思維邏輯能力,為以后其他語言的學習打好基礎. |
這個作業在那個具體方面幫助我實現目標 | 學會定義函數,調用函數,區分定義函數和聲明函數的區別,掌握全局變量和局部變量的定義,作用域, |
參考文獻 | 《C語言程序設計》《C Primer Plus》百度百科 偽代碼基本寫法 C語言實數的負零問題和誤差問題 |
1.PTA實驗作業
1.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;
}
1.1.1數據處理
數據表達:用了變量a,b,n,c[10];數據全為整型,通過賦值得到.
數據處理:a表示N的平方根,b表示余數,n替代N,因為N定義時是const int N,是恆定不變的.const與int可以互換位置,二者等價.
所用表達式:a=sqrt(N);n=N;a*a==N;b=n%10;c[b]++;n/=10;.
流程結構:
Begin
int IsTheNumber ( const int N )
定義變量與數組
n←N
if(a*a==N)
{
while n!=0
do b←n%10
c[b]←c[b]+1
if(c[b]==2)
{
return 1
break
}
n/=10
}
1.1.2實驗代碼截圖
1.1.3 造測試數據
輸入數據 | 輸出數據 | 說明 |
---|---|---|
105 500 | cnt = 6 | 使用題目數據,全是三位數 |
1000 2500 | cnt = 10 | 全是四位數 |
-100 -50 | cnt = 0 | 全是負數 |
-100 100 | cnt = 1 | 一正一負 |
1.1.4 PTA提交列表及說明
1.編譯錯誤:題目N的定義為const int N,表示恆定不變,而我有N去取余.編譯錯誤,定義一個n,令n=N,解決問題.
1.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)的整數,並計算這些整數的和。最后按照格式進行輸出。題目保證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;
}
1.2.1數據處理
數據表達:自定義函數(1)定義了變量sum,item,類型全為整型,通過賦值得到.自定義函數(2)定義了變量i,sum,count,t.類型全為整型,通過賦值得到.
數據處理:(1)中sum表示各位數字之和,item表示各位數字的大小.(2)中sum表示滿足條件的整數和,i是循環控制變量,t是轉化系數,count表示滿足條件的整數的個數.
所用表達式:(1):sum=0;item=number%10;number=number/10;sum=sum+item;(2):sum=0;count=0;t=a;a=b;b=t;count++;sum=sum+i;
流程結構:
Begin
int is( int number )
{
定義變量
sum←0;
while number!=0 do
item←number%10;number←number/10;sum←sum+item;
if sum==5 then return 1;
else return 0;
}
void count_sum( int a, int b )
{
定義變量與賦值
if a>b then t=a;a=b;b=t;
else for i←a to b
if is(i) then count←count+1;sum←sum+i;
輸出count和sum
}
1.2.2試驗代碼截圖
1.2.3造測試數據
輸入數據 | 輸出數據 | 說明 |
---|---|---|
104 999 | 104 is counted. count = 15, sum = 3720 | 使用題目數據 |
5 14 | 5 is counted. 14 is counted. count = 2, sum = 19 | a和b都是,但之間沒有 |
6 13 | count = 0, sum = 0 | 區間內完全沒有 |
1 1 | count = 0, sum = 0 | 最小區間 |
1 10000 | count = 56, sum = 77770 | 最大區間 |
1.2.4PTA提交列表及說明
2.代碼互評
我的代碼:
同學(1)的代碼:
代碼差異:
1.變量命名不同,而且都沒有做到"見名知義",同學(1)的變量都是單獨分開定義的,比較雜亂.
2.在判定數組中的值是否為2時,同學(1)用了for語句去判定,而我用的if語句.
我的代碼:
同學(2)的代碼:
代碼差異:
1.在求每個數的各位數時,我用的while語句,而同學(2)用的for語句.
2.我的代碼表示出現重復數據的語句是if(c[b]==2);而同學(2)是if(temp[i%10]!=0).
3.學習總結
3.1學習進度條
周數/日期 | 這周所花的時間 | 代碼行 | 學到的知識點簡介 | 目前比較疑惑的問題 |
---|---|---|---|---|
第三周(10/08--10/12) | 12個小時 | 300行左右 | 定義函數,if-else,for循環語句 | 輸入與輸出格式,空語句 |
第四周(10/14--10/18) | 15個小時 | 250行左右 | for循環語句,基礎的循環程序設計,數據的輸出寬度 | 數據的輸出寬度概念不太清晰,表達式的定義,空語句的定義 |
第五周(10/23--10/26) | 12個小時 | 350行左右 | 自定義函數的聲明與調用,break跳出循環,while()循環語句 | 自定義函數的應用 |
第六周(10/30--11/01) | 18個小時 | 500行左右 | if-else的嵌套,學習邏輯運算,條件語句,字符類型以及字符型數據的輸入與輸出 | 對字符型數據的輸入與輸出了解太少,缺乏練習,沒有理解到getchar()字符輸入函數與putchar()字符輸出函數以及它們的運用 |
第七周(11/05--11/07) | 24個小時 | 720行左右 | 使用switch語句的三種情況,在switch語句中使用break語句,數組的定義與使用 | continue語句的使用,for語句的嵌套循環 |
第八周(11/12--11/15) | 19個小時 | 810行左右 | 學習使用while和do-while語句實現次數不確定的循環,使用break語句處理多循環條件,以及了解while,do-while,for三種語句的差異 | ASCII碼和char類型和int類型的轉換,進制數轉化的多種方式 |
第九周(11/19--11/21) | 16個小時 | 600行左右 | 學習了for循環的嵌套以及了解break語句和continue語句的用法和區別 | 靜態數組和動態數組的區別 |
第十周(11/26--11/28) | 17個小時 | 680行左右 | 使用窮舉法解決問題 | 當存在數據溢出情況時,數據的定義與取值范圍選取 |
第十一周(12/3--12/5) | 12個小時 | 800行左右 | 函數的定義與調用,局部變量和全局變量的區別 | 實數的負零問題和誤差問題 |
3.2累積代碼行和博客字數
3.3學習內容總結和感悟
3.3.1學習內容總結
3.3.2學習體會
在本次學習中,上課有點吃力,對於自定義函數沒有足夠深入地了解,存在着許多問題,需要不斷改進與努力.在作業中也遇見了一些之前沒見過的問題,例如const int N,我並不知道const是什么意思,經過百度之后才明白const的基本意義, const 定義的變量的值是不允許改變的,即不允許給它重新賦值,用 const 修飾的變量,無論是全局變量還是局部變量,生存周期都是程序運行的整個過程。也初步了解到了實數的負零問題和誤差問題,實數不能直接與0區比較,會存在一定誤差,第一次使用了宏定義#define EPS 0.000001,也無法深入與使用,只能通過百度去查看最基礎的使用.