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
请各位给出详细解决过程。我是新手不懂,在此麻烦各位了!谢谢!~~ 展开
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
请各位给出详细解决过程。我是新手不懂,在此麻烦各位了!谢谢!~~ 展开
展开全部
你的程序贴错了吧?应该把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.总结后输出就是以上的形式,不过我改了程序是为了你的理解!
这个程序中考了很多基础的东西,不过总结一点,最主要的就是一句话: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.总结后输出就是以上的形式,不过我改了程序是为了你的理解!
展开全部
其实你的程序是有很大问题的。如果按你的程序打印的话。就算第二个fun函数是fun2结果都会是:
i=5。因为调用函数时返回值你没有赋值给main函数中的i。所以就相当于空掉了函数。
因为这里边有个全局变量和局部变量的问题。
一开始的i=0;是一个全局变量:只要你的函数体内没有定义i,那么就用的是全局变量。
当然函数定义时的参数如:fun1(int i)中的i也是局部变量。意思是在本函数中有效。出了函数体以后无效。
又看了下,你的程序根本读不成。错的太厉害了。建议还是找本清华的书看看。
i=5。因为调用函数时返回值你没有赋值给main函数中的i。所以就相当于空掉了函数。
因为这里边有个全局变量和局部变量的问题。
一开始的i=0;是一个全局变量:只要你的函数体内没有定义i,那么就用的是全局变量。
当然函数定义时的参数如:fun1(int i)中的i也是局部变量。意思是在本函数中有效。出了函数体以后无效。
又看了下,你的程序根本读不成。错的太厉害了。建议还是找本清华的书看看。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询