答案是不会的;
因为下一个for(i = 0; i < n; i++)//这里会对变量i进行初始化=0;如果没有 i = 0; 这句代码,i的值会保留上一个for循环使用完后的值。
你这里之所以是打印结果是6,是因为max这个变量丢失了精度,#include<stdio.h>
#define SIZE 6
int a(double ar[], int n);
int main(void)
{
double num[SIZE] = { 2.3, 1.3, 6.3, 2.3, 8.6, 1.2 };
printf("最大的数值的索引为%2d\n", a(num, SIZE));
return 0;
}
int a(double ar[], int n)
{
int i;
double max;//int max 会丢失精度,只保留整数部分;
//楼主之所以得不到正确的结果就是max定义成int型的了;
//定义成double型或者float型的就可以了
for (i = 0, max = ar[0]; i<n; i++)
{
max = max>ar[i] ? max : ar[i];
}
printf("max = %.1lf\n", max);//这里可以打印验证下max的值是怎么样的;
//若int max 定义时用 printf("max = %d\n", max);
for (i = 0; i<n; i++)
{
if (max == ar[i])
{
return i;//为什么返回值是6呢,当你int max 定义时,max存储的值是8,
//与num里的任何一个元素都不同,所以i就一直++到i = 6咯
}//之所以会把这个当作返回值返回是因为这个函数没有第二个返回值可以返回的了,就只好返回i = 6咯
//(这个返回值纯属个人理解,我个人理解就是函数必须返回一个值但是又没得选择了就只好返回这里的i的值)
}
return 0;//在这里再返回一个值就不会出现返回6的情况了
}
|