我编的一个小程序,但是得不到预期的结果,想请教一下大家,谢谢....
#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;
}