1. 程式人生 > >使用函式進行模組化設計

使用函式進行模組化設計

題目:
輸入全班某門課成績,統計其最高分和平均分。(要求函式1負責輸入成績;函式2負責統計最高分和平均分;函式3負責輸出結果)

根據題意,我現在完成程式碼。
看到題目時首先要分析題目的要求,將其一步一步分解,這樣有助於我們對題意的理解和理清自己的思路,其次再去寫大概的輪廓程式碼,最後完善自己的程式碼。
思路:
1.某門成績,所以要想到以陣列的形式呈現出來,分數可能為小數麼?顯然可以,所以定義陣列時,需要注意:float score[20];
2.最高分和平均分,都可能是小數形式,因此需要以float的形式出現。
3.要寫三個子函式,要注意其每個函式所要完成的功能。
4.完成程式碼開發。

程式碼如下:

#include <stdio.h>
float a[5]={0};     //  宣告全域性變數
float max=0;        //  宣告全域性變數            
float avg=0;        //  宣告全域性變數

void main()
{
    void input();
    void output();
    void fun();

    input();
    fun();
    output();
}

/* 輸入成績 */
void input()
{
    int i;
    printf("請輸入學生成績:"
); for(i=0; i<5; i++) // 陣列的引用 { scanf("%f",&a[i]); } } /* 結果輸出 */ void output() { printf("最高分為:%.2f\n",max); printf("平均分為:%.2f\n",avg); } /* 最大值和平均值 */ void fun() { int i; float sum=0; max=a[0]; for(i=0; i<5; i++) { sum = sum + a[i]; if
(max<a[i]) { max = a[i]; } } avg = sum/5; }

這樣我們就簡單的把程式碼寫完了,結果也大體上正確,結果如下:
這裡寫圖片描述

那麼,我們就對這個程式碼進行思考一下,這樣的程式碼合理麼?
有沒有漏洞呢?
很顯然是由問題的:

  1. 假如我輸入的成績有負數呢?是不是需要加判斷?
  2. 假如我輸入的成績很大呢?是不是需要增加一個上限值?
  3. 假如我的學生不是5個人呢?我是不是設計一個可輸入學生人數的方案?
    。。。
    等等這樣的問題都是程式碼中隱藏的bug,需要初學開發的人儘量把所有可能的情況都考慮全,免得出現問題反覆定位,耗費時間。
    那我們現在講程式碼修改一下,能不能達到一個相對比較合理的情況。程式碼如下:
#include <stdio.h>
#define N 100



float score[N] = {0};     //  宣告全域性變數
float max  = 0;     //  宣告全域性變數            
float avg  = 0;     //  宣告全域性變數
int   n = 0;        //  宣告全域性變數

void main()
{
    void input();
    void output();
    void fun();

    input();
    fun();
    output();
}

/* 輸入成績 */
void input()
{
    int i;
    int flag=0;
    printf("請輸入學生個數:");
    scanf("%d",&n);
    while(1)
    {
        flag = 0;
        printf("請輸入%d個學生成績:",n);
        for(i=0; i<n; i++)    // 陣列的引用
        {
            scanf("%f",&score[i]);
        }

        /* 檢測是否有非法成績 */
        for(i=0; i<n; i++)
        {
            if(score[i]<0 || score[i]>100)
            {
                flag = 1;
                printf("輸入有非法值,請重新輸入!\n");
                break;
            }
        }
        if(flag == 0)
        {
            break;
        }
    }
}

/* 結果輸出 */
void output()
{
    printf("最高分為:%.2f\n",max);
    printf("平均分為:%.2f\n",avg);
}

/* 最大值和平均值 */
void fun()
{
    int i;
    float sum=0;
    max=score[0];

    for(i=0; i<n; i++)
    {
        sum = sum + score[i];
        if(max<score[i])
        {
            max = score[i];
        }
    }
    avg = sum/n;
}

這樣就較好的完成了本題程式碼開發,大家可以借鑑參考。
執行效果為:
這裡寫圖片描述