鱼C论坛

 找回密码
 立即注册
查看: 2406|回复: 5

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

[复制链接]
发表于 2016-9-2 21:52:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include<stdio.h>
  2. #define SIZE 6
  3. int a(double ar[],int n);
  4. int main (void)
  5. {
  6.         double num[SIZE]={2.3,1.3,6.3,2.3,8.6,1.2};
  7.         printf("最大的数值的索引为%2d\n",a(num,SIZE));
  8.         return 0;
  9. }
  10. int a(double ar[],int n)
  11. {
  12.         int i,max;
  13.         for(i=0,max=ar[0];i<n;i++)
  14.         {
  15.                 max=max>ar[i]?max:ar[i];
  16.          }
  17.                   for(i=0;i<n;i++)
  18.          {
  19.                  if (max==ar[i])
  20.                  return i;
  21.          }
  22. }
复制代码

程序每次显示的都是6,不知道为什么,求帮忙....
最佳答案
2016-9-3 12:52:59
答案是不会的;
因为下一个for(i = 0; i < n; i++)//这里会对变量i进行初始化=0;如果没有 i = 0; 这句代码,i的值会保留上一个for循环使用完后的值。

你这里之所以是打印结果是6,是因为max这个变量丢失了精度,
  1. #include<stdio.h>
  2. #define SIZE 6


  3. int a(double ar[], int n);


  4. int main(void)
  5. {
  6.         double num[SIZE] = { 2.3, 1.3, 6.3, 2.3, 8.6, 1.2 };
  7.        
  8.         printf("最大的数值的索引为%2d\n", a(num, SIZE));
  9.         return 0;
  10. }


  11. int a(double ar[], int n)
  12. {
  13.         int i;

  14.         double max;//int max 会丢失精度,只保留整数部分;
  15.         //楼主之所以得不到正确的结果就是max定义成int型的了;
  16.         //定义成double型或者float型的就可以了
  17.        
  18.         for (i = 0, max = ar[0]; i<n; i++)
  19.         {
  20.                 max = max>ar[i] ? max : ar[i];
  21.         }

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

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

  33.         return 0;//在这里再返回一个值就不会出现返回6的情况了
  34.        
  35. }
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-9-3 00:11:45 | 显示全部楼层
max应该是double型,帮你改了一下,
max=max>ar[i]?max:ar[i];也有问题

  1. #include<stdio.h>
  2. #define SIZE 6
  3. double a(double ar[],double n);
  4. int main (void)
  5. {
  6.         double num[SIZE]={2.3,1.3,6.3,2.3,8.6,1.2};
  7.         printf("最大的数值的索引为%lf\n",a(num,SIZE));
  8.         return 0;
  9. }
  10. double a(double ar[],double n)
  11. {
  12.         int i;
  13.                          double max=ar[0],temp;
  14.                          for(i=0;i<n;i++)
  15.                          {  
  16.                                  if(max<ar[i+1])
  17.                                  {
  18.                                          temp  = ar[i+1];
  19.                                          ar[i+1] = max;
  20.                                          max = temp;
  21.                                  }
  22.                          }
  23.                          return max;      
  24. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-3 07:54:30 | 显示全部楼层
不会。for循环里的变量都是局部变量。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-3 12:52:59 | 显示全部楼层    本楼为最佳答案   
答案是不会的;
因为下一个for(i = 0; i < n; i++)//这里会对变量i进行初始化=0;如果没有 i = 0; 这句代码,i的值会保留上一个for循环使用完后的值。

你这里之所以是打印结果是6,是因为max这个变量丢失了精度,
  1. #include<stdio.h>
  2. #define SIZE 6


  3. int a(double ar[], int n);


  4. int main(void)
  5. {
  6.         double num[SIZE] = { 2.3, 1.3, 6.3, 2.3, 8.6, 1.2 };
  7.        
  8.         printf("最大的数值的索引为%2d\n", a(num, SIZE));
  9.         return 0;
  10. }


  11. int a(double ar[], int n)
  12. {
  13.         int i;

  14.         double max;//int max 会丢失精度,只保留整数部分;
  15.         //楼主之所以得不到正确的结果就是max定义成int型的了;
  16.         //定义成double型或者float型的就可以了
  17.        
  18.         for (i = 0, max = ar[0]; i<n; i++)
  19.         {
  20.                 max = max>ar[i] ? max : ar[i];
  21.         }

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

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

  33.         return 0;//在这里再返回一个值就不会出现返回6的情况了
  34.        
  35. }
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

非常感谢~~~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-3 13:14:06 | 显示全部楼层
千亩计者 发表于 2016-9-3 00:11
max应该是double型,帮你改了一下,
max=max>ar?max:ar;也有问题

感谢~~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-12 21:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表