使用函数进行模块化设计

题目:
输入全班某门课成绩,统计其最高分和平均分。(要求函数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;
}

这样就较好的完成了本题代码开发,大家可以借鉴参考。
执行效果为:
这里写图片描述

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小材大用

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值