#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???
----------------解决方案--------------------------------------------------------
第二个输出前你做了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...........................
----------------解决方案--------------------------------------------------------
你先做了除啦,当然是五拉
----------------解决方案--------------------------------------------------------
首先我要说的的是: 哎~~~~ 你的程序风格真是糟透了! 不过看来你也是个新手, 也无可厚非 我帮你的程序整理了一下 看看 #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是局部变量, 不是全局变量
----------------解决方案--------------------------------------------------------