C变量存储+循环小题(易出错)
//此题输出为“35745”
void fun(int *s) { static int j=0; do s[j]+=s[j+1]; while(++j<2); } main( ) { int k,a[10]={1,2,3,4,5}; for (k=1; k<3; k++) fun(a); for (k=0; k<5; k++) printf(“%d”,a[k] ); }
//首先j 是静态变量,总共会调用 两次 fun(),要注意:第一次调用,s[0] = s[1],然后while(1<2),此时 j = 1,接着s[1] = s[2],此时 j = 2 返回主函数
//开启第二次调用,这是do-while循环,调用就会执行,s[2] = s[3] ,然后while(3<2)不在循环,返回主函数
//于是,s[0]=1+2;
//s[1] = 2+3;
//s[2] = 3+4;
//其他的不变
#define ADD(x) x+x main( ) { int m=1,n=2,k=3,sum; sum=ADD(m+n)*k; printf(“sum=%d\n”,sum); }
//输出结果为:sum = 10,因为 m+n+m+n*3 = 10;
#define N 1 #define M N+2 #define NUM 2*M+1 main( ) { int i; for (i=1; i<=NUM; i++) printf(“%3d ”, i ); }
//和上面类似:NUM = 2*N+2 +1 的值为5,输出为:1 2 3 4 5
已知宏定义 #define N 3 #define Y(n) ((N+1)*n) 执行语句z=2*(N+Y(5+1));后,z的值是( )。
//值为 48 而不是 54
//#define Y(n) ((N+1)*n),里面的n用5+1直接替换,而不是6。
//z=2*(N+Y(5+1))
// =2*(3+(3+1)*5+1)
// =2*24
// =48
现在,我和你一样,还在路上。

浙公网安备 33010602011771号