#include<stdio.h>
struct score{
double chinese;
double math;
double eng;
double total;
double average;
};
struct std{
int num;
char name[20];
struct score cj;
};
void printfscore(int n,struct std s[]/*,struct score*/);
int Searchid(int xh,int n,struct std s[]/*,struct score*/);
void totalscore(int y,struct std s[]/*,struct score*/);
void mmave(int y,struct std s[]/*,struct score*/,double *MAX,double *MIN);
int main(){
struct std s[50];
int i=0;
int choice;
int n,j,xh;
int num_students = 0; // 记录学生数量
double *MAX,*MIN;
printf("**************************************\n");
printf("*********** 欢迎进入 ***********\n");
printf("*******某某小学学生信息管理系统*******\n");
printf("|------------------------------------|\n");
printf("| 1.录入学生信息 |\n");
printf("| 2.显示学生信息 |\n");
printf("| 3.查询学生信息 |\n");
printf("| 4.显示总成绩 |\n");
printf("| 5.显示平均分 |\n");
printf("| 6.显示成绩最大最小值 |\n");
printf("| 7.退出信息系统 |\n");
printf("**************************************\n");
do {
printf("请输入您的选择:");
scanf("%d",&choice);
switch (choice) {
case 1://录入学生信息
printf("请输入学生的总人数(不能超过2000人):");
scanf("%d",&n);
for (i=0;i<n;i++) {
printf("请输入第%d个学生的学号、姓名、语文成绩:", i + 1);
scanf("%d%s%lf",&s[i].num,s[i].name,&s[i].cj.chinese,&s[i].cj.math,&s[i].cj.eng);
}
num_students=n; // 更新学生数量
printf("学生信息已成功添加!\n");
break;
case 2://显示学生信息
if (num_students==0) {
printf("没有学生信息可以显示,请选择1录入信息\n");
break;
}
printf("请输入您想查询多少人:\n");
scanf("%d",&j);
printf("学生信息如下:\n");
for (i=0;i<j;i++) {
printf("学号:%d,姓名:%s,成绩:%.2lf\n",s[i].num,s[i].name,s[i].cj.chinese,s[i].cj.math,s[i].cj.eng);
}
break;
case 3:
// 查询学生信息
printf("请输入您想查找的学生的学号:\n");
scanf("%d",&xh);
if(Searchid(xh,n,s)==1)
printf("找到了!");
else
printf("没有找到该信息,请重新输入");
break;
case 4:
//显示总成绩
printf("请输入您想查询多少人:\n");
scanf("%d",&j);
totalscore(j,s/*,struct score*/);
break;
case 5:
//显示平均分
printf("请输入您想查询多少人:\n");
scanf("%d",&j);
for(i=0;i<j;i++)
{
printf("第%d个人的平均分是%lf",i+1,s[i].cj.average);
}
break;
case 6:
// 显示平均分最大最小及对应的人
/*if (num_students==0) {
printf("没有成绩信息可以显示,请选择1录入信息\n");
break;
}
printf("以下是成绩信息:\n");
printfscore(n,s);*/
mmave(j,s/*,struct score*/,*MAX,*MIN);
printf("%s的平均分最大,是:%.2lf\n",s[i].name,*MAX);
printf("%s的平均分最小值是:%.2lf\n",s[i].name,*MIN);
break;
case 7:
printf("感谢使用学生信息管理系统!\n");
break;
default:
printf("无效的选择,请重新输入\n");
break;
}
} while (choice!=7);
return 0;
}
int Searchid(int xh,int n,struct std s[]/*,struct score*/)
{
int i;
for (i=0;i<n;i++)
{
if (xh==s[i].num)
{
printf("num:%d\n",s[i].num);
printf("name:%s\n",s[i].name);
printf("chinese:%.2lf math:%.2lf eng:%.2lf\n",s[i].cj.chinese,s[i].cj.math,s[i].cj.eng);
}
return 1;
}
return 0;
}
void printfscore(int n,struct std s[]/*,struct score*/)
{ int i;
for(i=0;i<n;i++){
printf("chinese:%.2lf math:%.2lf eng:%.2lf\n",s[i].cj.chinese,s[i].cj.math,s[i].cj.eng);
}
printf("显示结束");
}
void totalscore(int j,struct std s[]/*,struct score*/)
{ int i;
for(i=0;i<j;j++){
s[i].cj.total=s[i].cj.chinese+s[i].cj.math+s[i].cj.eng;
printf("第%d个学生的总成绩如下%lf:\n",i+1,s[i].cj.total);
}
}
void mmave(int j,struct std s[]/*,struct score*/,double *MAX,double *MIN)
{ int i;
double max=0;
double min=0;
MAX=&max;
MIN=&min;
for(i=0;i<j;j++){
s[i].cj.average=(s[i].cj.chinese+s[i].cj.math+s[i].cj.eng)/3;
printf("第%d个学生的总成绩如下%lf:\n",i+1,s[i].cj.average);
}
for(i=0;i<j;i++){
if(s[i].cj.average>=max){
max=s[i].cj.average;
}
if(s[i].cj.average<=min){
min=s[i].cj.average;
}
}
}
```这个是显示的错误,我感觉可能是我形参指针的形式用错了吗?不知道怎么改,可以帮我看下吗

试看
void mmave(int j,struct std s[]/*,struct score*/,double *MAX,double *MIN)
{ int i;
for(i=0;i<j;j++){
s[i].cj.average=(s[i].cj.chinese+s[i].cj.math+s[i].cj.eng)/3;
printf("第%d个学生的总成绩如下%lf:\n",i+1,s[i].cj.average);
}
for(i=0;i<j;i++){
if(s[i].cj.average>=*MAX){
*MAX=s[i].cj.average;
}
if(s[i].cj.average<=*MIN){
*MIN=s[i].cj.average;
}
}
}
该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
根据您提供的代码和错误信息,我注意到在mmave
函数中存在一些问题。以下是需要更正的地方:
函数声明和定义中的指针参数类型不匹配:在mmave
函数的声明和定义中,指针参数*MAX
和*MIN
的类型应为double *
,而不是double * *
。将函数的声明和定义中的参数类型更正为double *MAX, double *MIN
。
mmave
函数中的循环条件错误:在mmave
函数中的循环条件中,您使用了j
作为循环条件,但应该是i
。将j
改为i
,以正确循环遍历学生。
mmave
函数中的指针赋值问题:在mmave
函数中,您尝试将max
和min
的地址分别赋值给MAX
和MIN
指针,但这样的赋值是无效的,因为max
和min
是自动变量,其地址是不可预测的。您可以直接使用max
和min
变量,并在需要时更新*MAX
和*MIN
的值。
修正后的mmave
函数代码如下所示:
void mmave(int j, struct std s[], double *MAX, double *MIN) {
int i;
double max = 0;
double min = 0;
for (i = 0; i < j; i++) {
s[i].cj.average = (s[i].cj.chinese + s[i].cj.math + s[i].cj.eng) / 3;
printf("第%d个学生的平均分如下%lf:\n", i + 1, s[i].cj.average);
}
for (i = 0; i < j; i++) {
if (s[i].cj.average >= max) {
max = s[i].cj.average;
}
if (s[i].cj.average <= min) {
min = s[i].cj.average;
}
}
*MAX = max;
*MIN = min;
}
请注意,此处只针对您提供的代码进行了修正,但仍需检查其他部分是否存在其他错误。此外,请确保在函数调用时传递正确的参数。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
【以下回答由 GPT 生成】
问题的描述不够具体,无法提供具体解决方案。请提供更多的细节或者具体的错误信息,以便我能够更好地帮助您解决问题。