当前位置: 代码迷 >> C语言 >> [求助]为什么会这样啊?菜鸟请教
  详细解决方案

[求助]为什么会这样啊?菜鸟请教

热度:178   发布时间:2005-05-12 12:16:00.0
[求助]为什么会这样啊?菜鸟请教
#define LOW 0
#define HIGH 5
#define CHANGE 2
int i=LOW;
main()
{
  int i=HIGH;
  reset(i/2);
  printf("i=%d\n",i);
  reset(i=i/2);
  printf("i=%d\n",i);
  i=reset(i/2);
  printf("i=%d\n",i);
  workover(i);
  printf("i=%d\n",i);
}
workover(i)
int i;
{
  i=(i%i)*((i*i)/(2*i)+4);
  printf("i=%d\n",i);
  return(i);
}
reset(i)
int i;
{
  i=i<=CHANGE?HIGH:LOW;
  return(i);
}
为什么这个程序输出的第二个i是2而不是5???
搜索更多相关的解决方案: return  

----------------解决方案--------------------------------------------------------
第二个输出前你做了i=i/2的运算, 因此, i=2.

你在两个涵数中对i的运算, 并没有改变main中i的内容,因此只到你执行i=reset(i/2)的时候, main中的i才会变化

在有,不要这样写程序, 以后你会看糊涂的
----------------解决方案--------------------------------------------------------
为什么这句reset(i=i/2);不是把2送到函数reset()处理之后再返回回5回来啊???


这里还是想不懂
----------------解决方案--------------------------------------------------------

首先我要说的的是: 哎~~~~ 你的程序风格真是糟透了! 不过看来你也是个新手, 也无可厚非 我帮你的程序整理了一下 看看 #include <stdio.h>

#define LOW 0 #define HIGH 5 #define CHANGE 2

int i=LOW;//注意这是全局变量

int reset(int); int workover(int);

void main() {

int i=HIGH; reset(i/2); printf("i=%d\n",i); reset(i=i/2); printf("i=%d\n",i); i=reset(i/2); printf("i=%d\n",i); workover(i); printf("i=%d\n",i); }

int reset(int i)//这是reset函数的形参 { i=i<=CHANGE?HIGH:LOW; return(i); }

int workover(int i)//这是workover的形参 { i=(i%i)*((i*i)/(2*i)+4); printf("i=%d\n",i); return(i); } 先看看我着重标出的三个参数, 它们三个的不同 我也注释在旁边 在main()函数中,当第二次执行reset(i=i/2)时,要注意 此时 i 是全局变量,它在做为实参传递之前,先做了一次运算,即i=5/2; 所以 全局变量i 的值现在变成2。而reset(int i),可知这是传值调用,虽然它的形参也是 i ,但是这个i 和全局的 i 是没有任何联系的,所以,在reset(int i)中,执行的操作,根本不会影响到全局变量i 的值。 所以全局变量i=2.


----------------解决方案--------------------------------------------------------
55555555555555555555555........................................ 偶们C都要学完了,,,可是偶还是看不懂你们的程序,,,,,,,,,,,,,主要是将函数的时候偶没有去听课啊,,,,,,,,,,,,,,,,,, 55555555555555...........................
----------------解决方案--------------------------------------------------------
你先做了除啦,当然是五拉
----------------解决方案--------------------------------------------------------
以下是引用musicml在2005-5-13 0:12:24的发言:

首先我要说的的是: 哎~~~~ 你的程序风格真是糟透了! 不过看来你也是个新手, 也无可厚非 我帮你的程序整理了一下 看看 #include <stdio.h>

#define LOW 0 #define HIGH 5 #define CHANGE 2

int i=LOW;//注意这是全局变量

int reset(int); int workover(int);

void main() {

int i=HIGH; reset(i/2); printf("i=%d\n",i); reset(i=i/2); printf("i=%d\n",i); i=reset(i/2); printf("i=%d\n",i); workover(i); printf("i=%d\n",i); }

int reset(int i)//这是reset函数的形参 { i=i<=CHANGE?HIGH:LOW; return(i); }

int workover(int i)//这是workover的形参 { i=(i%i)*((i*i)/(2*i)+4); printf("i=%d\n",i); return(i); } 先看看我着重标出的三个参数, 它们三个的不同 我也注释在旁边 在main()函数中,当第二次执行reset(i=i/2)时,要注意 此时 i 是全局变量,它在做为实参传递之前,先做了一次运算,即i=5/2; 所以 全局变量i 的值现在变成2。而reset(int i),可知这是传值调用,虽然它的形参也是 i ,但是这个i 和全局的 i 是没有任何联系的,所以,在reset(int i)中,执行的操作,根本不会影响到全局变量i 的值。 所以全局变量i=2.

注意, main中的i是局部变量, 不是全局变量


----------------解决方案--------------------------------------------------------
  相关解决方案