主题:求高手,改错!!
dinghao517 [专家分:20] 发布于 2010-03-07 13:59:00
#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个回复)
沙发
dinghao517 [专家分:20] 发布于 2010-03-07 14:01:00
还有在自定义函数中怎么定义2维数组
板凳
雪光风剑 [专家分:27190] 发布于 2010-03-07 14:09:00
自定义函数中的形参里不需要有两个维度的大小
但是如果你需要用这两个大小的值的话,得作为额外的参数传进来
传数组作为参数的时候只要传递数组名就可以了
自定义函数中本身声明二维数组的方式与主函数中声明方式相同
3 楼
雪光风剑 [专家分:27190] 发布于 2010-03-07 14:11:00
针对你的程序来说,只要把int highest(int array[x][y],int x,int y)
改成int highest(int array[][],int x,int y)
就可以了,相应的声明也要改过来
另外,一般函数声明写在main函数前面而不是里面。
4 楼
dinghao517 [专家分:20] 发布于 2010-03-07 14:27:00
不行,
还有在main函数前怎么定义
5 楼
雪光风剑 [专家分:27190] 发布于 2010-03-07 14:33:00
额,我必须承认我又犯了想当然的错误
两维数组传参的时候必须至少指定一个维度的大小
不过这里我有个问题,你数组的两个维度的大小都是定值,为什么要去单独传递呢?如果你不知道怎么样传递多维数组的话,下面是一个简单的指导
对于你的程序,简单修改如下就可以通过编译:
楼主
#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 楼
mywaylgh [专家分:210] 发布于 2010-03-09 11:49:00
[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 楼
雪光风剑 [专家分:27190] 发布于 2010-03-09 14:01:00
多维指针是对于规模较大的程序,效率高出不少。对于初学者,还是尽量避免使用多维指针,因为在取值的时候经常取乱……
8 楼
mywaylgh [专家分:210] 发布于 2010-03-09 14:31:00
[quote]多维指针是对于规模较大的程序,效率高出不少。对于初学者,还是尽量避免使用多维指针,因为在取值的时候经常取乱……[/quote]
不同意这个....
越是初学者就越应该多用指针,特别是2维指针。
慢慢用就慢慢理解了。
不然永远停留在初学者阶段。
9 楼
雪光风剑 [专家分:27190] 发布于 2010-03-09 14:45:00
[quote][quote]多维指针是对于规模较大的程序,效率高出不少。对于初学者,还是尽量避免使用多维指针,因为在取值的时候经常取乱……[/quote]
不同意这个....
越是初学者就越应该多用指针,特别是2维指针。
慢慢用就慢慢理解了。
不然永远停留在初学者阶段。
[/quote]
学习多维指针需要指导和虚拟机,以及大量的耐心,这是现在的初学者所不具备的
而且C++里基本上没有多维指针的必要了
C而言,合理地设计数据结构,也能用简单指针解决大量的学习问题
所以现在的书里也不认真讲多维指针了
当然你应用的环境比较特别,需要这么做,所以你这么推荐我们可以理解。但是对于多数新手来说,多维指针确实慎用为妙
10 楼
mywaylgh [专家分:210] 发布于 2010-03-09 16:09:00
#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的使用,这是避免指针不乱指,以及避免使用指针时产生
不可预料的结果的法宝之一
我来回复