c易错题详解
一运算符与表达式
1.下列表达式,正确的C赋值表达式C
A a = 7 + b + c = a + 7;
B a = 7 + b++ = a + 7;
C a = (7 + b,b++,a + 7);
D a = 7 + b,c = a + 7;
//A、B连续赋值语句连等时不能给计算式赋值
//D是逗号表达式
2.设f是实型变量,下列表达式中不是逗号表达式的是D
A f = 3.2,1.0;
B f > 0,f < 10;
C f = 2.0,f > 0;
D f = (3.2,1.0);//赋值表达式
优先级:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符。
@@@单目运算符、sizeof、条件运算符?:、赋值运算符结合性从右到左
单目运算符 > 算术运算符 > 关系运算符 > 逻辑运算符 > 条件运算符 > 赋值运算符 > 逗号运算符
3.逻辑“真”是用 非0 表示的,逻辑“假”是用0表示的。
4.符号常量的定义方法**#define**
ps:#define p 3.14
5.c语言中signed与unsigned的本质区别最高bit位为符号位还是数据位
6.设float x = 2.5,y = 4.7;int a = 7;表达式的值为2.5
x + a%3*(int)(x+y)%2/4
//2/4为0
7.在c语言中,如下程序输出结果为
char c = 250;
unsigned char d;
char f;
d = c + 249;
f = c + 249;
printf("d = %d\n",d);243//c+249短变长,d=长变短且有符号数变成无符号数,%d输出再短变长,补0
printf("d = %u\n",d);243
printf("f = %d\n",f);//f=有符号数长变短,取反+1,%d输出再短变长,补符号位
printf("f = %u\n",f);
//溢出省去
//短变长,无符号数据补0
//有符号数据补符号位
8.不用第三变量交换两个变量的值
a = a ^ b;
b = a ^ b;==> b=a ^ b ^ b=a ^ 0=a
a = a ^ b;==> a=a ^ b ^ a=b ^ 0=b
按位异或
//
&(按位与),与0为0,与1不变
|(按位或),或1为1,或0不变
^(按位异或),异或1 取反,异或0不变
9.数学表达式a/(b*c)的c语言表达式
1.*a /1.0*(b*c)
10.若程序运行时从键盘输入48<回车>,则输出09
#include <stdio.h>
int main()
{
char c1, c2;
scanf("%d", &c1);
c2 = c1 + 9;
printf("%c%c\n", c1, c2);
}//字符0的ASCLL码值为48
持续更新中