考试成绩最高分、最低分、平均分(c++)_循环、数组、函数、指针

本文展示了四个C++程序,分别通过循环和函数处理不同场景下的考试成绩统计,包括最高分、最低分、平均分的计算,并在最后一个程序中引入了方差的计算。程序使用了动态数组来适配不同人数的考试,解决了固定数组可能带来的空间浪费问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设计一统计某班级考试成绩中的最高分、最低分和平均分的程序

一、简单一版的成绩管理,循环语句,并未要求保留每位学生的成绩(这就应该需要用数组了)。

1.已知人数,for循环:

#include <iostream>
using namespace std;

int main()
{
    int num, value, max, min, all;//value存放当前输入成绩
    double ave;
    //变量的初始化
    max = 0;
    min = 100;
    all = 0;
    cout << "请输入学生人数:";
    cin >> num;
    for (int i = 0; i < num; ++i)//num次循环
    {
        cout << "请输入第"<<i+1<<"个人的成绩:";
        cin >> value;
        max = value > max ? value : max;
         // if(value > max) max = value;
        min = value < min ? value : min;
         //if(value < min) min = value;
        all += value;
    }
    ave = (double)all / num;
    cout << "最高分:" << max << endl;
    cout << "最低分:" << min << endl;
    cout << "平均分:" << ave << endl;
    return 0;
}

最后运行结果:
最后结果
2.不知人数,while循环(-1作为结束标志):

#include <iostream>
using namespace std;

int main()
{
    int num, value, max, min, all;//value存放当前输入成绩,num为学生人数
    double ave;
    //变量的初始化
    max = 0;
    min = 100;
    all = 0;
    num = 0;

    cout << "请输入第1位同学的成绩:";
    cin >> value;
    while(value != -1)
    {
        ++num;
        max = value > max ? value : max;
        // if(value > max) max = value;
        min = value < min ? value : min;
        //if(value < min) min = value;
        all += value;
        cout << "请输入第" << num + 1 << "位同学的成绩:";
        cin >> value;
    }
    ave = (double)all / num;
    cout << "最高分:" << max << endl;
    cout << "最低分:" << min << endl;
    cout << "平均分:" << ave << endl;
    return 0;
}

运行结果:
在这里插入图片描述

二、利用数组存储每位同学的成绩

题目:统计某次考试的最高分、最低分、平均成绩和方差(要求方差,就必须保存每一位同学的成绩)

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    const int nummax = 100; //定义一个班同学的最大人数
    int score[nummax], num;
    double max = 0, min = 100, ave, total = 0, var = 0;//var表示方差

    cout << "请输入本次考试的人数:";
    cin >> num;
    for (int i = 0; i < num; ++i)
    {
        cout << "请输入第" << i + 1 << "位同学的成绩:";
        cin >> score[i];
        total += score[i];
        if (max < score[i]) max = score[i];
        if (min > score[i]) min = score[i];
    }
    ave = total / num;
    for (int i = 0; i < num; ++i)
    {
        var += (score[i] - ave) * (score[i] - ave);
    }
    
    cout << "此次考试的最高分为:" << max << endl;
    cout << "此次考试的最低分为:" << min << endl;
    cout << "此次考试的平均分为:" << ave << endl;
    cout << "此次考试的方差为:" << var << endl;

    return 0;
}

运行结果:
在这里插入图片描述

三、利用函数进行计算

函数将不同的计算模块进行封装,可以使程序较容易理解
题目(同上):统计某次考试的最高分、最低分、平均成绩和方差
运行代码如下:

#include <iostream>
using namespace std;

//函数原型声明
double ave(int n,double array[]); //求平均值
double max(int n, double array[]);     //求最大值
double min(int n, double array[]);     //求最小值
double var(double ave, int n, double array[]);     //求方差

//主函数
int main()
{
	const int nummax = 100; //定义一个班同学的最大人数
	double score[nummax];
    double num;
    double average;

    cout << "请输入本次考试的人数:";
    cin >> num;
    for (int i = 0; i < num; ++i)
    {
        cout << "请输入第" << i + 1 << "位同学的成绩:";
        cin >> score[i];
    }
    average = ave(num, score);
    //当数组作为函数参数时,要注意只需写入数组名(本质上是数组首位的地址)
    cout << "此次考试的最高分为:" << max(num,score) << endl;
    cout << "此次考试的最低分为:" << min(num,score) << endl;
    cout << "此次考试的平均分为:" << ave(num,score) << endl;
    cout << "此次考试的方差为:" << var(average, num, score) << endl;

    return 0;
}

//函数定义
double ave(int n,double array[])
{
    int i;
    double sum = 0;
    for (i = 0; i < n; ++i)
    {
        sum += array[i];
    }
    return sum / n;
}

double max(int n, double array[])
{
    double max = 0;
    int i;
    //不断更新max值,若array[i]大于当前max值则进行max值的更新
    for (i = 0; i < n; ++i)
    {
        max = ( array[i] > max ? array[i] : max );
    }
    return max;
}

double min(int n, double array[])
{
    double min = 100;
    int i;
    for (i = 0; i < n; ++i)
    {
        min = ( array[i] < min ? array[i] : min );
    }
    return min;
}

double var(double ave, int n, double array[])
{
    double variance = 0;
    for (int i = 0; i < n; ++i)
    {
        variance += (array[i] - ave) * (array[i] - ave);
    }
    return variance;
}

运行结果:
运行结果

四、利用指针计算

题目:程序运行时,先输入学生数,然后输入每位同学的成绩,统计某次考试的最高分、最低分、平均成绩和方差(要求方差,就必须保存每一位同学的成绩)

在第二种数组和函数方法中,我们虽然实现了每个学生的成绩存储,但是对于学生人数做了限定,最多为100人,这有两个问题:

  1. 如果某次考试的人数超过100人,该程序将无法工作
  2. 如果参加考试的人数很少,如只有十个,该程序将造成90%空间的浪费

解决这两个问题的途径就是使用动态数组,我们可以根据实际参加考试的人数申请一个存放考试成绩的动态数组。

运行代码如下:

#include <iostream>
#include <cmath>
using namespace std;

int main()
{   

    int  num;
    double max = 0, min = 100, ave, total = 0, var = 0;//var表示方差

    cout << "请输入本次考试的人数:";
    cin >> num;
    int* score;//定义指针数组
    score = new int[num];//动态申请空间

    for (int i = 0; i < num; ++i)
    {
        cout << "请输入第" << i + 1 << "位同学的成绩:";
        cin >> score[i];
        total += score[i];
        if (max < score[i]) max = score[i];
        if (min > score[i]) min = score[i];
    }
    ave = total / num;
    for (int i = 0; i < num; ++i)
    {
        var += (score[i] - ave) * (score[i] - ave);
    }

    cout << "此次考试的最高分为:" << max << endl;
    cout << "此次考试的最低分为:" << min << endl;
    cout << "此次考试的平均分为:" << ave << endl;
    cout << "此次考试的方差为:" << var << endl;

    delete[]score;//动态回收空间
    return 0;
}

运行结果:
在这里插入图片描述

完结撒花!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值