回 帖 发 新 帖 刷新版面

主题:求高手,改错!!

#include <stdio.h>
#include <stdlib.h>
int main()
{int highest(int array[x][y],int x,int y);
int a[4][5];
int i,j,t;
printf ("请输入每个学生各门课的成绩:"); 
for (i=0;i<4;i++)
    for (j=0;j<5;j++)
    scanf ("%d",&a[i][j]);
t=highest(a,4,5);
printf ("max=%d\n",t);
system("pause");
return 0;
}
int highest(int array[x][y],int x,int y)
{int i,j,max=0;
for (i=0;i<x;i++)
    for (j=0;j<y;j++)
    {if (a[i][j]>max) max=array[i][j];}
return (max);
}

回复列表 (共20个回复)

沙发

还有在自定义函数中怎么定义2维数组

板凳

自定义函数中的形参里不需要有两个维度的大小
但是如果你需要用这两个大小的值的话,得作为额外的参数传进来
传数组作为参数的时候只要传递数组名就可以了
自定义函数中本身声明二维数组的方式与主函数中声明方式相同

3 楼

针对你的程序来说,只要把int highest(int array[x][y],int x,int y)
改成int highest(int array[][],int x,int y)
就可以了,相应的声明也要改过来
另外,一般函数声明写在main函数前面而不是里面。

4 楼

不行,
还有在main函数前怎么定义

5 楼

额,我必须承认我又犯了想当然的错误
两维数组传参的时候必须至少指定一个维度的大小
不过这里我有个问题,你数组的两个维度的大小都是定值,为什么要去单独传递呢?如果你不知道怎么样传递多维数组的话,下面是一个简单的指导
对于你的程序,简单修改如下就可以通过编译:


楼主
#include <stdio.h>
#include <stdlib.h>
int highest(int[4][5]);
int main()
{int a[4][5];
int i,j,t;
printf ("请输入每个学生各门课的成绩:"); 
for (i=0;i<4;i++)
    for (j=0;j<5;j++)
    scanf ("%d",&a[i][j]);
t=highest(a);
printf ("max=%d\n",t);
system("pause");
return 0;
}
int highest(int array[4][5])
{int i,j,max=0;
for (i=0;i<4;i++)
    for (j=0;j<5;j++)
    {if (a[i][j]>max) max=array[i][j];}
return max;
}

6 楼

[quote]额,我必须承认我又犯了想当然的错误
两维数组传参的时候必须至少指定一个维度的大小
不过这里我有个问题,你数组的两个维度的大小都是定值,为什么要去单独传递呢?如果你不知道怎么样传递多维数组的话,下面是一个简单的指导
对于你的程序,简单修改如下就可以通过编译:


楼主
#include <stdio.h>
#include <stdlib.h>
int highest(int[4][5]);
int main()
{int a[4][5];
int i,j,t;
printf ("请输入每个学生各门课的成绩:"); 
for (i=0;i<4;i++)
    for (j=0;j<5;j++)
    scanf ("%d",&a[i][j]);
t=highest(a);
printf ("max=%d\n",t);
system("pause");
return 0;
}
int highest(int array[4][5])
{int i,j,max=0;
for (i=0;i<4;i++)
    for (j=0;j<5;j++)
    {if (a[i][j]>max) max=array[i][j];}
return max;
}[/quote]


如果要多维数组传值,建议用动态二维数组,传递时用 int **array等等.
效率比用整个二维维数组传值会高出不少。
注意:如果用整个二维数组传值,程序会先copy二维数组,所以效率低下。
用指针传不会copy.
切记切记!

7 楼

多维指针是对于规模较大的程序,效率高出不少。对于初学者,还是尽量避免使用多维指针,因为在取值的时候经常取乱……

8 楼

[quote]多维指针是对于规模较大的程序,效率高出不少。对于初学者,还是尽量避免使用多维指针,因为在取值的时候经常取乱……[/quote]



不同意这个....

越是初学者就越应该多用指针,特别是2维指针。

慢慢用就慢慢理解了。

不然永远停留在初学者阶段。


9 楼

[quote][quote]多维指针是对于规模较大的程序,效率高出不少。对于初学者,还是尽量避免使用多维指针,因为在取值的时候经常取乱……[/quote]



不同意这个....

越是初学者就越应该多用指针,特别是2维指针。

慢慢用就慢慢理解了。

不然永远停留在初学者阶段。


[/quote]
学习多维指针需要指导和虚拟机,以及大量的耐心,这是现在的初学者所不具备的
而且C++里基本上没有多维指针的必要了
C而言,合理地设计数据结构,也能用简单指针解决大量的学习问题
所以现在的书里也不认真讲多维指针了

当然你应用的环境比较特别,需要这么做,所以你这么推荐我们可以理解。但是对于多数新手来说,多维指针确实慎用为妙

10 楼

#include <stdio.h>
#include <stdlib.h>

int highest(const int *p,int x,int y);

int main()
{
    int a[4][5];
    int i,j,t;

    printf (" 请输入每个学生各门课的成绩:"); 

    for (i=0;i<4;i++)
        for (j=0;j<5;j++)
            scanf ("%d",&a[i][j]);

    t=highest(a[0]+0,4,5);

    printf ("max=%d\n",t);
    system("pause");
    return 0;
}

int highest(const int *p,int x,int y)
{
    int i,j,max=0;

    for (i=0;i<x;i++)
        for (j=0;j<y;j++)
            if (p[i*y+j]>max) max=p[i*y+j];

    return max;
}


不要说我把简单问题复杂化,因为楼主提出这样的问题表示对C已有基本了解
楼主如果能看懂上面的解决方案,那你对指针和数组的了解就更进一步了。

请注意书写规划
注意const的使用,这是避免指针不乱指,以及避免使用指针时产生
不可预料的结果的法宝之一

我来回复

您尚未登录,请登录后再回复。点此登录或注册