题目:
输入全班某门课成绩,统计其最高分和平均分。(要求函数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;
}
这样我们就简单的把代码写完了,结果也大体上正确,结果如下:
那么,我们就对这个代码进行思考一下,这样的代码合理么?
有没有漏洞呢?
很显然是由问题的:
- 假如我输入的成绩有负数呢?是不是需要加判断?
- 假如我输入的成绩很大呢?是不是需要增加一个上限值?
- 假如我的学生不是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;
}
这样就较好的完成了本题代码开发,大家可以借鉴参考。
执行效果为: