C語言I博客作業09


這個作業屬於哪個課程 https://edu.cnblogs.com/campus/zswxy/CST2020-1/
這個作業要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2020-1/homework/11634
這個作業的目標 學會使用函數
學號 20208936

1.PTA實驗作業

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;

}

/* 你的代碼將被嵌在這里 */
1.1.1數據處理

數據表達:使用變量M,N,i,j,x,將N賦值給M,定義了x,將N開根號后面又平方回來,判斷其是否是完全平方。
偽代碼如下: int M=N;
    int i,j=0,a[10];//定義i,j
    int x=sqrt(N);//取根號
    int m,n;
數據處理:使用while結構,for循環和if語句,先計算位數而后判斷其中相同的數。
偽代碼如下: while(M>=10)
    {
        a[j++]=M%10;
        M=M/10;//分別取余取整,判斷位數
    }
        a[j]=M;
    for(m=0; m<=j; m++)
    {
        for(n=m+1; n<=j; n++)
        {
            if(a[m]==a[n])
            {
                if(x*x==N)//判斷是否為完全平方
                    return 1;
            }
        }
    }
    return 0;
}

1.1.2實驗代碼截圖


.1.3 造測試數據

輸入數據 輸出數據 說明
105 500 cnt=6 兩數間有6個數符合條件
456 900 cnt=3 兩數間有3個數符合條件

1.1.4 PTA提交列表及說明

編譯錯誤:比較有兩個數相同時搞錯。
部分正確:沒有考慮到a[j]=M;

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。
1.2.1 數據處理

數據表達:定義了n=number,s,a,c,都為整型,判斷各位數字是否為5.
偽代碼如下:while (n != 0)
    {
        a = n % 10;
        n = n / 10;//取余取整判斷位數
        s = s + a;
    }
    if (s == 5)
    {
        return 1;
    }
    else
    {
        return 0;//判斷是否和為5
    }
數據處理:運用while語句,if語句,if-else語句和for循環,
統計給定區間[a, b]內有多少個滿足要求。
偽代碼如下:void count_sum(int a, int b)
{
    int c = 0;
    int sum = 0;
    for (int i = a; i <= b; i++)
    {
        if (is(i))
        {
            c++;
            sum =sum+i;//計算位數之和
        }
    }
    printf("count = %d, sum = %d\n", c, sum);
}

1.2.2 實驗代碼截圖


1.2.3 造測試數據

輸入數據 輸出數據 說明
104 999 104 is counted. count = 15, sum = 3720 有15個這樣的數,它們的和是3720
420 888 count = 1, sum = 500 有1個這樣的數,它們的和是500

1.2.4 PTA提交列表及說明

編譯錯誤:沒有將sum初始化。
部分正確:將i=0,沒有注意邊界問題。

2.代碼互評
找2份同學代碼,和自己代碼比較,建議互評代碼盡量找代碼風格差異較大。
同學代碼:


自己截圖:

對比:解題方法都差不多,運用的while語句if語句和for循環,只是用的變量符號不同。

3.學習總結

3.1 學習進度條

日期/周 這周所花時間 代碼行 學到的知識點簡介 目前比較迷惑的問題
第八周 10 60 程序設計語言功能與語法 沒有理解其中意義和用法
第九周 15 100 編寫簡單程序,學會數據類型 字符寬度的運用
第十周 23 200 for語句,if-else語句 格式問題,邊界范圍
第十一周 15 210 乘法和階乘 被調函數的使用
第十二周 20 240 分支結構和邏輯運算符 分支時有些情況考慮不到
第十三周 20 230 學會了switch結構,與if-else語句鑲嵌使用 使用的差別
第十四周 15 300 學了while和do-while結構 條件與循環體的順序
第十五周 22 400 學習break與continue的用法 多層循環
第十六周 27 520 學習函數 好多解題方式想不到,要與一些語句相鑲嵌

3.2 累積代碼行和博客字數

3.3 學習內容總結和感悟

3.3.1 學習內容總結

3.3.2 學習體會
這周學習了函數,學習了各種函數的用法,題目的難度也有逐級遞增了。
快要考試了,希望自己這周能好好復習,多寫點以前的習題,鞏固一下。


免責聲明!

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



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