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

 

posted @ 2020-05-31 19:57  DaimaSi  阅读(157)  评论(0)    收藏  举报