C語言I博客作業11


這個作業屬於那個課程 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,也無法深入與使用,只能通過百度去查看最基礎的使用.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM