c语言问题,最高分输出是 0.000000

{
float zgf(float a[2][5],int i,int j);
float m[2][5];
int i,j;
printf("输入二维数组的元素:\n");
for(i=0;i<2;i++)
for(j=0;j<5;j++)
scanf("%f",&m[i][j]);
printf("最高分,学生,科目:");
zgf(m,2,5);
printf("%f,%d,%d",m[i][j],i,j);
printf("\n");
}
float zgf(float a[2][5],int i,int j)
{
int max=0,row,colum;
for(i=0;i<2;i++)
for(j=0;j<5;j++)
if(a[i][j]>max)
{
max=a[i][j];
row=i;
colum=j;
}
}

你函数里一定会循环到二维数组的最后一个数,也就是i一定是2,j一定是5,所以你输出的最大数一定是m[2][5],但是这个已经数组越界了!所以值为0或者不确定(是编译器而定)。所以无论你输什么数,结果都是零。后面两个数一定是2,5。可以将函数改为由返回值的,将最大值返回就行了。

#include "stdio.h"
float zgf(float a[2][5],int* row,int* colum)
int main()
{
float m[2][5];
int i,j;
float max = 0;
int row = 0,colum = 0;
printf("输入二维数组的元素:\n");
for(i=0;i<2;i++)
for(j=0;j<5;j++)
scanf("%f",&m[i][j]);

printf("最高分,学生,科目:");
max = zgf(m,&row,&colum);
printf("%f,%d,%d",max,row,colum);
printf("\n");

return 0;}
float zgf(float a[2][5],int* row,int* colum)
{
float max = 0;
int i = 0,j = 0;
for(i=0;i<2;i++)
for(j=0;j<5;j++)
if(a[i][j]>max)
{
max=a[i][j];
*row=i;
*colum=j;
}
return max;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-12-13
你的最高分没有带出函数体
正确代码:
#include<stdio.h>
#include<string.h>
int row,colum;
int main()
{
int i,j;
float zgf(float a[2][5],int i,int j);
float m[2][5];
printf("输入二维数组的元素:\n");
for(i=0;i<2;i++)
for(j=0;j<5;j++)
scanf("%f",&m[i][j]);
printf("最高分,学生,科目:");
zgf(m,2,5);
printf("%f,%d,%d",m[row][colum],row,colum);
printf("\n");
}
float zgf(float a[2][5],int i,int j)
{
int max=0;
for(i=0;i<2;i++)
for(j=0;j<5;j++)
if(a[i][j]>max)
{
max=a[i][j];
row=i+1;
colum=j+1;
}
}追问

对了对了!我是初学者,可不可以请你再具体解释一下我的怎么就不行呀?

第2个回答  2012-12-13
1 row,colum 这两个变量应在主函数外,定义为全局变量,用以在子程序
float zgf(float a[2][5],int i,int j) 中取回最高分所在的行列位置。

int row,colum; /*在主函数外,定义为全局变量*/

main()
{
}

2 输出语句 printf("%f,%d,%d",m[i][j],i,j);
应改为 printf("%f,%d,%d",m[row][jcolum],row,colum;
这才是存放最高分的单元。

改一下 ,试试吧。
第3个回答  2012-12-13
除了赞同459520690的答案外,也希望楼主把ZGF函数的参数或内部变量改一下,要不然会导致参数的值被本地(内部)变量覆盖的。
第4个回答  2012-12-13
函数内部加一个return max;
主函数中:float max = zgf(。。。);

c语言问题,最高分输出是 0.000000
你函数里一定会循环到二维数组的最后一个数,也就是i一定是2,j一定是5,所以你输出的最大数一定是m[2][5],但是这个已经数组越界了!所以值为0或者不确定(是编译器而定)。所以无论你输什么数,结果都是零。后面两个数一定是2,5。可以将函数改为由返回值的,将最大值返回就行了。include ...

c语言代码输出为0.000000
在C语言中,可以通过浮点数的运算和格式化输出,得到结果为0.000000的输出。一、浮点数的运算 在C语言中,浮点数是用来表示小数的一种数据类型。为了得到输出结果为0.000000,首先需要进行涉及到浮点数运算的表达式计算。这个表达式的结果应该是一个非常接近零的浮点数。二、格式化输出 在C语言中,使用prin...

C语言的结果为什么永远是0.00000,应该怎么改?挺急的。明天就要了!_百 ...
错误2:a=1\/i这里有点问题,在C里两个整数相除的结果还是整除,如果你要取得小数,可以改为比如a=1.0\/i;错误3:你的sum是一个小数,所以你的proc定义就要改为float proc(int n)建议改为double proc(int n),然后将proc中的float也改为double ...

c语言为什么输出始终为0.000000
c语言为什么输出始终为0.000000 森谂i 2018-11-21 C语言编程语言 |举报 答题抽奖 首次认真答题后 即可获得3次抽奖机会,100%中奖。 更多问题 可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。 c语言 搜索资料 本地图片 图片链接 代码 提交回答正在求助 查看更多问题 > 换...

C语言输出都是0.000000
int i=1,j,y;a=1;s1=0;scanf("%Lf",&x);\/\/\/ z=x;s2=x;\/\/s2 要初始化 y=1;while(fabs(s1-s2)*1000000>1)\/\/\/要用while 循环控制精度,{ s2=s1;for(j=i-1;j>0;j--)z=z*x;for(j=i;j>0;j--)a=a*j;if((y+1)%2==0)\/\/判断有问题,借用 y s1=s1+z\/a;el...

c语言为什么输出为0.000000?
scanf("%lf,%lf",&x,&y);double类型对应scanf格式说明符%lf

C语言问题求解!为什么答案等于0.000000
include<stdio.h>void main(){ int x,y;int z;x=2;y=10;z=x\/y;\/\/因为z是整数,2\/10=0.2 把0.2给z,小数部分会被舍弃,所以z=0printf("%f",z);\/\/将z已小数形式输出,由于z为0,最终输出结果为0.000000}\/\/望采纳!

C语言为什么总是显示0.00000?
程序中的第五行循环条件写错了,正确的循环条件应该是s<=100;因,所以导致1次循环也没有执行,所以就输出显示0.000000了。

c语言代码输出为0.000000
deo的值 你在前面定义了为整数 而后面你强制转化的是1\/deo的值 整数除整数结果就为整 1\/deo结果等于 0.几几几相当于等于0 float转化的就是0这个值所以等于0.000000 你应该把float(1\/deo)改成 float(1)\/deo或1\/(float(deo))或者sum = sum + 1.0\/deo ...

C语言编程中,为什么运行结果总是为0.000000
最后一句 printf("%lf,%lf\\n",&x1,&x2);改为:printf("%lf,%lf\\n", x1, x2);&为取地址符,用在scanf的参数前,printf不用。还要注意当方程无根或一个根时,虚根变量会出现浮点数异常,printf便不会将其打印出来

相似回答