读书人

小弟我编的一个小程序但是得不到预期

发布时间: 2013-04-26 16:27:53 作者: rapoo

我编的一个小程序,但是得不到预期的结果,想请教一下大家,谢谢....
#include <stdio.h>

int getSum(int len, int n);
void main()
{
int max;

int m;

int j;

int len = 9;

int result[9];


for(int n=0; n<len; n++)
{
result[n] = getSum(len,n);
}

for(int i=0; i<len; i++)
{
printf("%d",result[i]);

printf(" ");
}
max=result[0];

for(j=0;j<=9;j++)

if(max<result[j])
{
max=result[j];

m=j;
}
printf("下标:%d\n最大值:%d ", m, max);

}

int getSum(int len, int n)
{
int a[]={1,2,3,4,5,6,7,8,9};
int b[]={1,2,3,4,5,6,7,8,9};

int sum = 0;
for(int i=0; i<(len-n); i++)
{
sum += a[i]*b[i+n];
}
return sum;
}这个程序的下标总是出-858993460我不知道哪出错了,请指教一下..
还有这个代码能改的更简洁一点吗?
[解决办法]
你输出m的值,但是你只是声明了int m;并没有赋值。
max=result[0];
for(j=0;j<=9;j++)
if(max<result[j])
{
max=result[j];
m=j;
}
这段循环,其实并没有执行到if里面。所以m一直是未初始化的。所以就会输出意想不到的值。
[解决办法]
int m = 0;

m没有初始化。

这句多个等号,数组越界
for(j=0;j<=9;j++)


[解决办法]
max=result[0];
for(j=0;j<=9;j++)

错误在上面这个地方!修改如下:
max = result[0];
m = 0;
for (j=0; j<9; j++)
解释:记录下标的m应该赋初值0,循环结束条件j不能等于9,因为数组长度为9,下标最大只能到8。
[解决办法]
主要是数组访问越界和m没有初始化:


#include <stdio.h>

#define LEN(9)

int getsum(int len, int n)
{
int sum = 0;
int i;

for(i = 0; i < (len - n); i++)
sum += (i + 1) * (i + 1 + n);

return sum;
}

int main(int argc, char* argv[])
{
int max;
int m;
int i;
int result[LEN];

for(i = 0; i < LEN; i++)
{
result[i] = getsum(LEN, i);
printf("%d ", result[i]);
}
printf("\n");

max = result[0];
m = 0;
for(i = 0; i < LEN; i++)
if(max < result[i])
{
max = result[i];
m = i;
}

printf("下标:%d\n最大值:%d\n", m, max);
return 0;
}


读书人网 >C语言

热点推荐