C语言相关问题求教~~

inti=0;fun1(inti){i=(i%i)*(i*i)/(2*i)+4;printf("i=%d\n",i);return(i);}fun(inti){i=i<=... int i=0;
fun1(int i)
{
i=(i%i)*(i*i)/(2*i)+4;
printf("i=%d\n",i);
return(i);
}
fun(int i)
{
i=i<=2?5:0;
return(i);
}
main()
{
int i=5;
fun2(i/2);printf("i=%d\n",i);
fun2(i=i/2);printf("i=%d\n",i);
fun2(i/2);printf("i=%d\n",i);
fun1(i/2);printf("i=%d\n",i);
}

答案为什么是
i=5
i=2
i=2
i=4
i=2

请各位给出详细解决过程。我是新手不懂,在此麻烦各位了!谢谢!~~
展开
 我来答
vincant566
2013-01-02 · TA获得超过902个赞
知道小有建树答主
回答量:470
采纳率:0%
帮助的人:297万
展开全部
你的程序贴错了吧?应该把fun改为fun2,不然没fun2;
这个程序中考了很多基础的东西,不过总结一点,最主要的就是一句话:c语言中的变量,所谓的变量就是它自身的值随时都可能改变的量,所以在使用变量的过程中要特别的认真仔细,否则就会出错!下面我来分析程序:
首先int i=0;定义的是一个全局变量,但是后面的main()中又定义了int i=5那么开头的全局变量i被屏蔽了,就不起作用了,此时的i和程序开头的i没有任何的关系,他们是不一样的,也就是说你完全可以把main函数中的i看做是其他的变量,比如j。完全可以把程序换成下面的形式:
int i=0;
fun1(int i)
{
i=(i%i)*(i*i)/(2*i)+4;
printf("i=%d\n",i);
return(i);
}
fun2(int i)
{
i=i<=2?5:0;
return(i);
}
main()
{
int j=5;
fun2(j/2);
printf("j=%d\n",j);
fun2(j=j/2);
printf("j=%d\n",j);
fun2(j/2);
printf("j=%d\n",j);
fun1(j/2);
printf("j=%d\n",j);
}

然后来分析fun1()的作用是求一个表达式的值然后赋给i,再输出i,再返回i;fun2()的作用是条件判断如果传递来的参数i<=2成立,那么把5赋值给i并返回i,否则把0赋值给i并返回i;

最后我们来分析main()函数:【为了便于你的理解,我给你换成j,然后分析】定义了一个int j=5,注意j是整形,所以j/2=2也是整形而不是2.5,所以fun2(j/2);相当于fun2(2),那么返回去看fun2(2)的结果是返回i=5,所以第一次输出的是j仍然为5,;继续分析,fun2(j=j/2);这时候要注意了,因为j/2=2但是同时又把2赋值给了自己,此时j=2,这就是前面所说的要随时注意变量的值!
printf("j=%d\n",j);就输出了j的值2;继续分析,fun2(j/2);注意此时的j=2,那么j/2=1了,所以fun2(1)的结果是返回i=0,但是 printf("j=%d\n",j);的作用仍然是输出现在的j的值,仍然输出2;继续分析,fun1(j/2);此时相当于fun1(1),带入1求的结果为4,并且输出4.最后分析printf("j=%d\n",j);注意现在的j值仍然是2,所以输出的为2.总结后输出就是以上的形式,不过我改了程序是为了你的理解!
bhd119
2013-01-02 · TA获得超过246个赞
知道小有建树答主
回答量:297
采纳率:66%
帮助的人:101万
展开全部
其实你的程序是有很大问题的。如果按你的程序打印的话。就算第二个fun函数是fun2结果都会是:
i=5。因为调用函数时返回值你没有赋值给main函数中的i。所以就相当于空掉了函数。
因为这里边有个全局变量和局部变量的问题。
一开始的i=0;是一个全局变量:只要你的函数体内没有定义i,那么就用的是全局变量。
当然函数定义时的参数如:fun1(int i)中的i也是局部变量。意思是在本函数中有效。出了函数体以后无效。
又看了下,你的程序根本读不成。错的太厉害了。建议还是找本清华的书看看。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
IT金蓥
2013-01-02
知道答主
回答量:7
采纳率:0%
帮助的人:1.1万
展开全部
没有函数fun2
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式