wang815309286 发表于 2016-9-2 21:52:05

若果在一个函数中使用两个for语句,那么第一个for语句中的值会影响下一个for语句吗

#include<stdio.h>
#define SIZE 6
int a(double ar[],int n);
int main (void)
{
        double num={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,max;
        for(i=0,max=ar;i<n;i++)
        {
                max=max>ar?max:ar;
       }
              for(i=0;i<n;i++)
       {
               if (max==ar)
               return i;
       }
}
程序每次显示的都是6,不知道为什么,求帮忙....

千亩计者 发表于 2016-9-3 00:11:45

max应该是double型,帮你改了一下,{:10_264:}
max=max>ar?max:ar;也有问题

#include<stdio.h>
#define SIZE 6
double a(double ar[],double n);
int main (void)
{
        double num={2.3,1.3,6.3,2.3,8.6,1.2};
        printf("最大的数值的索引为%lf\n",a(num,SIZE));
        return 0;
}
double a(double ar[],double n)
{
        int i;
                       double max=ar,temp;
                       for(i=0;i<n;i++)
                       {
                               if(max<ar)
                               {
                                       temp= ar;
                                       ar = max;
                                       max = temp;
                               }
                       }
                       return max;      
}

iszhuangsha 发表于 2016-9-3 07:54:30

不会。for循环里的变量都是局部变量。

18813974736 发表于 2016-9-3 12:52:59

答案是不会的;
因为下一个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 = { 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; i<n; i++)
        {
                max = max>ar ? max : ar;
        }

        printf("max = %.1lf\n", max);//这里可以打印验证下max的值是怎么样的;
        //若int max 定义时用 printf("max = %d\n", max);

        for (i = 0; i<n; i++)
        {
                if (max == ar)
                {
                        return i;//为什么返回值是6呢,当你int max 定义时,max存储的值是8,
                                //与num里的任何一个元素都不同,所以i就一直++到i = 6咯
                }//之所以会把这个当作返回值返回是因为这个函数没有第二个返回值可以返回的了,就只好返回i = 6咯
//(这个返回值纯属个人理解,我个人理解就是函数必须返回一个值但是又没得选择了就只好返回这里的i的值)       
        }

        return 0;//在这里再返回一个值就不会出现返回6的情况了
       
}

wang815309286 发表于 2016-9-3 13:10:02

18813974736 发表于 2016-9-3 12:52
答案是不会的;
因为下一个for(i = 0; i < n; i++)//这里会对变量i进行初始化=0;如果没有 i = 0; 这句代 ...

非常感谢~~~~{:10_254:}

wang815309286 发表于 2016-9-3 13:14:06

千亩计者 发表于 2016-9-3 00:11
max应该是double型,帮你改了一下,
max=max>ar?max:ar;也有问题

感谢~~~{:10_254:}
页: [1]
查看完整版本: 若果在一个函数中使用两个for语句,那么第一个for语句中的值会影响下一个for语句吗