因为=比&&的优先级低,所以先执行逻辑与操作。a=2是非零,即为真,所以a&&1为真,真为1,则b=1。
int main()
{
int a=5,b=0,c=0;
if(a=b+c) printf("***\n");
else printf("$$$\n");
return 0;
}
先判断if语句。由于赋值语句a=b+c返回值为0,故执行else语句。
char *p="%d,a=%d,b=%d\n";
int a=11,b=10,c;
c=a%b; p+=3;
printf(p,c,a,b);
题中字符指针p指向了字符串“%d,a=%d,b=%d\n”,c=a%b=11%10=1,p+=3使指针p向后移动了3个字符的位置。printf(p,c,a,b)相当于printf(“a=%d,b=%d\n”,c,a,b);,格式控制串指明输出两个数据,输出项有3项,则最后一项不输出,所以最后结果是a=1,b=11。
main(){
printf("%f",2.5+1*7%2/4);
}
优先级“%”>“”和“/”>“+”和“-”,计算过程:2.5+17%2/4=2.5+1*1/4=2.5+1/4=2.5+0=2.5。
“%f”表示输出浮点型,保留6位小数,所以输出的结果为2.500000。
int main()
{
int i='\X80',j='\200';
printf("i=%d,j=%d",i,j);
return 0;
}
‘\X’开头代表十六进制的数,因此将’\X80’换算成十进制为128;
'\200’代表八进制数,转换成十进制为128。
程序语句int a,b,c,*p=&c;定义了3个整型变量a,b,c和一个整型指针变量p,并且把变量c的地址赋给p。scanf函数的一般形式为"scanf(“格式控制字符串”,地址列表)",其中的地址列表应当是存放输入数据变量的地址。
int a=3;
a+=--a*a;
a+=–aa;
等价于a=a-1; a=a+aa;
B中数组长度不够,D中数组未给出长度。
在C语言中,对于静态局部变量static,编译时会自动给数值型变量赋初值0或者给字符变量赋初值"\0"。
int N=3,a[N][N];int b[1][2]={{1}.{3}};int c[2][]={{1,2},{3,4}};int d[3][2]={{1,2}.{3,4}};A无法用变量定义数组大小;
B二维数组定义错误;
C二维数组缺少第二维大小。
