一道这样的C语言题目,请问应该怎样改才正确?

一道这样的C语言题目,请问应该怎样改才正确,编译错误。
图片说明

#include<stdio.h>
struct books
{
  char name[30];
  double price;
};
int max(double x[])
{
    int i,j,max;
    max=x[0];
    for(i=0,j=0;i<3;i++)
    {
        if(x[i]>max) j=i;
    }
    return j;
}
int min(double x[])
{
    int i,j,min;
    min=x[0];
    for(i=0,j=0;i<3;i++)
    {
        if(x[i]<min) j=i;
    }
    return j;
}
int main()
{
    struct books b[3];
    int i;
    for(i=0;i<3;i++)
    {
        scanf("%f",&b[i].price);
        gets(b[i].name);
    }
    printf("%f, ",b[max(b.price,3)].price);
    puts(b[max(b.price,3)].name);
    printf("\n");
    printf("%f, ",b[min(b.price,3)].price);
    puts(b[min(b.price,3)].name);
    return 0;
}

问题解决的话,请点下采纳

int max(books x[], int n)
{
    int i,j;
    for(i=0,j=0;i<n;i++) //这里不一定是3,应该传入n
    {
        if(x[i].price>x[j].price) j=i;
    }
    return j;
}
min的改法类似

scanf("%f",&b[i].price);
->
scanf("%lf",&b[i].price);
因为你是double
下面类似

#include "stdafx.h"
#include
#define N

struct books
{
char name[30];
double price;
};

int max(struct books x[],int n)
{
int i,j,max;
max=x[0].price;
for(i=0,j=0;i {
if(x[i].price>max) j=i;

}
return j;

}

int min(struct books x[],int n)
{
int i,j,min;
min=x[0].price;
for(i=0,j=0;i<n;i++)
{
if(x[i].price<min) j=i;

}
return j;

}

int main()
{
struct books b[20];
int i;
int n;
printf("input n:");
scanf("%d",&n);
for(i=0;i<n;i++)
{ printf(" input price %d: ",i);
scanf("%lf",&b[i].price);
printf("\n input name %d: ",i);
scanf("%s",b[i].name);
printf("%f,%s\n",b[i].price,b[i].name);
}
getchar();
int minp=min(b,n);
int maxp=max(b,n);

printf("max: %f,%s\n",b[maxp].price,b[maxp].name);
printf("min: %f,%s\n",b[minp].price,b[minp].name);

getchar();
return 0;

}
这样完整的写一下,就可以了

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^