C语言的一道题。 这道题怎么算啊? x*=x+1怎么个运算过程。 还有for语句中i<x中的x会变
C语言的一道题。这道题怎么算啊?x*=x+1怎么个运算过程。还有for语句中i<x中的x会变化吗?...
C语言的一道题。
这道题怎么算啊?
x*=x+1怎么个运算过程。
还有for语句中i<x中的x会变化吗? 展开
这道题怎么算啊?
x*=x+1怎么个运算过程。
还有for语句中i<x中的x会变化吗? 展开
4个回答
展开全部
这个题对初学者还是有一定的难度。考察点应该就在 值域 的概念的考察。
代码第二行的int x=3;这里声明了一个全局变量x。
在main函数的范围内,使用的x,也就是第二行声明的x,这里x=3.
在incre函数中,这里声明了一个static的x,表示在incre函数的执行期间,x是一个静态变量,为了和第二行的x分别开,这里将其用另外一个名字x2代替,所以整个程序执行是这样的:
首先从main函数开始执行for循环,开始i=1,i小于x,即3,所以执行incre函数,在incre函数中,x2*=x2+1,展开就是 x2=x2*(x2+1),所以x2=1*(1+1)=2,下一行打印出x2的值2.
然后执行i++,继续循环,i=2,仍然小于x,即3,所以继续执行incre函数,执行时因为x2是static变量,仍然保持上次执行完incre函数后x2的值,所以x2=x2*(x2+1) = 2*(2+1)=6,所以结果是26,。
代码第二行的int x=3;这里声明了一个全局变量x。
在main函数的范围内,使用的x,也就是第二行声明的x,这里x=3.
在incre函数中,这里声明了一个static的x,表示在incre函数的执行期间,x是一个静态变量,为了和第二行的x分别开,这里将其用另外一个名字x2代替,所以整个程序执行是这样的:
首先从main函数开始执行for循环,开始i=1,i小于x,即3,所以执行incre函数,在incre函数中,x2*=x2+1,展开就是 x2=x2*(x2+1),所以x2=1*(1+1)=2,下一行打印出x2的值2.
然后执行i++,继续循环,i=2,仍然小于x,即3,所以继续执行incre函数,执行时因为x2是static变量,仍然保持上次执行完incre函数后x2的值,所以x2=x2*(x2+1) = 2*(2+1)=6,所以结果是26,。
追问
不能再赞,好人一生平安
展开全部
x *= x + 1 就是 x = x * (x + 1).
x 不会变化.
这道题主要考你, 全局变量和局部静态变量的作用域.
x 不会变化.
这道题主要考你, 全局变量和局部静态变量的作用域.
追问
算不出来正确答案啊,不会算
追答
for 循环中的x不会变化, 但是函数incre中的x会变化啊. 因为它是静态的.
incre 函数
第一次循环: i = 1 x =1 / 执行 x *= x+1后, x=2 输出2
第二次循环: i = 2 x = 2/ 执行 x *= x+1后, x=6 输出6
结果是26
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2015-02-28
展开全部
答案是26
x*=x+1先做等号右边的运算,然后乘上等号左边的变量的值,最后把结果付给等号左边的变量
x*=x+1先做等号右边的运算,然后乘上等号左边的变量的值,最后把结果付给等号左边的变量
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
结果为26
i<x中的x是全局变量的值x=3
而输出的x,则是static x=1中的x
这个有一个原因,默认最靠近代码定义的变量有效
i<x中的x是全局变量的值x=3
而输出的x,则是static x=1中的x
这个有一个原因,默认最靠近代码定义的变量有效
追问
26我咋算不出这个结果啊?
追答
void incre()
{
static int x=1;
x *= x+1;
printf("%d", x);
}
main函数里可以确认incre()会被调用两次
第一次调用incre()时,static int x=1;调用结束x=2,输出到屏幕上2
第二次调用incre()时,static int x=2;调用结束x=6,输出到屏幕上为6。因为输出中间没有其他输出,所以最终在屏幕上看到的是:26
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询