|
发表于 2020-4-8 17:25:45
|
显示全部楼层
虽然没有拿到最佳答案,但还是要方便交流,下面是,逐行的注释及改编思路:
#include <cstdlib>
#include <iostream>
#include <stdio.h>
using namespace std;
struct student
{
char name[5]; //学该是5字符长度的char字符串组成的数组,意思就是名字不得超
//过2.5个中文长度,英文不得超过5个字符
int number; //应该是学号
//所以,没有存储成绩的 数据成员
double sc; //新建一个存成绩的,成绩会有0.5分的
//有计划,但暂时未用到的,比如不用每次都排名,记得排名的 数据成员
//不去专门使用外部变量,直接使用这个学生类(结构)中的前一位学生的成绩
int thenumber; //也新建一个用来排名次的整型变量,名次不会有1.5名的
double scdump; //新建一个,需要比对成绩的变量,用来和上一位学生的成绩相比
//}str[4];//虽说正确,我觉得不要这种写法,应当去主函数里使用时声明,要多少就声明多少
};
double max(const student &,const double); //既然主函数中有函数调用
//那就必须先要声明这个函数
//参数列表改你的int数组为一个"学生"
int main(int argc, char *argv[])
{
/*
int i;
printf("请输入学生的姓名和成绩:");
for (i = 0; i < 4; i++)
scanf("%s%d", str[i].name, &str[i].number);
printf("学生中成绩最高的是%d", max(str[i].number));
*/
int len=4; //需要4位学生
double higher=0.0;//用于临时记录更高一些的成绩
//同样是声明完毕后,及时初始化的习惯.
cout<<"请输入学生的姓名和成绩:"<<endl;
student persons[ len ]; //声明一个学生类型的变量:
//取名 个人们 且以数组存在,长度是4
for(int i=0;i<len;i++) //开始输入了
{
cout<<"输入第"<<i+1<<"位学生的姓名(回车键确认)"<<endl;
cin>>persons[i].name;
cout<<"输入"<<persons[i].name<<"的成绩(回车键确认)"<<endl;
cin>>persons[i].sc;
cin.get();
//计算最好成绩: 在输入的过程中
if(!i) //当第0个学生时,执行分支如下行:
higher=persons[i].sc; //备份首个学生的成绩,随后就不执行本行
else
higher = max( persons[i],higher );
//这个if else 分支,完成了最好成绩的排序:
//按顺序备份出来刚刚输入并存好的成绩
//第二个学生起直到最后一个,需要做:每次对比第前一次的成绩:
}
cout<<"成绩最高的得分是:"<<higher<<endl;
//准备工作,作完了,开始需求计算:
//平均成绩:
//average( persons ); //为了熟悉C++这个工具,留给你自己完成
system("PAUSE");
return EXIT_SUCCESS;
}
double max( const student &a,double h) //实现: 形参 的名称是a,我称呼它为学生a
//学生a是现有的,不能变动一切属性所以用const
//增加一个对比的临时变量也是const的,不能变
{
/*
int i,temp=a[0];
for (i = 1; i < 4;i++)
if (a[i]>temp)
temp = a[i];
return temp;
max是无意义的,也帮你改一改:
既然学生都进入来了,那就需要返回这个学生的成绩,只为是有一个学生进来,
所以作为函数名:max就是无义意的,如何得到最大数嘛?
*/
return a.sc>h? a.sc : h;
}//程序里没有错误,可是得不到正确的结果
|
|