#include
int main(){
int x1 = 28.3%3.1;
printf("x1 = %d",x1);
return 0;
}
% 运算不能有double(float)
#include
int main(){
int i = 1, j = 1, k =2;
if ((j++||k++)&&i++){
printf("%d,%d,%d",i,j,k);
}
return 0;
}
结果:2,2,2
|| 或操作,|| 为界将表达式分为两部分,他会先算前一部分,如果前一部分为真,他将停止运算,如果为假,他才会算第二部分
&&且操作 ,&&为界将表达式分为两部分,他会先算前一部分,如果前一部分为假,他将停止运算,如果为真,他才会算第二部分
i= j = 6
i += j++
i = 12,j = 7
i++,表示先取i的值进行表达式计算或函数调用,最后加法再计算 i=i+1;
++i,表示先加法计算i=i+1,然后在进行表达式计算或函数调用。
a = 1,b = 2,c = 3
if(c>b>a)
= if(0)
c>b 为真,值为1
1>c 为假,值为0
if(0)
以下合法的C语言赋值语句是?
A.a=b=58 B.k=int(a+b) C.a=58,b=58 D.--i;3
A项 丢失分号
B.k=int(a+b) 改为 k=(int) (a+b); 才对
C. a=58,b=58 改为 int a=58,b=58; 声明加初始化才对
x=5*8, 6+9
先把 x 赋值为 40,表达式的值为 15
逗号表达式的优先级是最低的 (也就是说赋值运算符 ‘=’ 都比逗号表达式优先级高)。
int a=(2*6,4+8,55);
请问a=?
答:先计算括号内的逗号表达式的值,该逗号的值为55,再把55赋值给a,所以a=55
int a=5;
a=(a=2*3,a*4),a+10;
请问a=?
原来a=24已经完成了计算(此时表达式变成a+10),
之后又算了一步没用的操作。
int a=0,b=0,x=0,y=0;
//逗号表达式,结合顺序是从左至右,用来顺序求值,
//完毕之后整个表达式的值是最后一个表达式的值
a=(x=7,y=x%5,y+8);//7%5=2,此时y=2了,所以2+8=10 那么a=10
#include
int max(int a,int b)
{
if(a > b)
return a;
else
return b;
}
int main()
{
int a,b,c;
scanf("%d %d\n", &a, &b);
c = max(a, b);
printf("%d is max\n", c);
return 0;
}
这个程序是输入两个整数,然后经过比较之后输出最大的数字。但是输入数字后回车无效,并没有打印出结果,这时必须输入字符才能打印出结果。
出现这种情况的原因是,”\n“在scanf()中并不表示等待换行符,而是读取并放弃连续的空白字符。事实上,scanf()格式符中的任何空白字符都表示读取并放弃空白字符,而且诸如"%d"这样的格式也会自动人抛弃前面的空白。因此,”%d\n“中的”\n“会让scanf()读到非空白字符为止,只需要再输入一个非空字符即可。但是如果之后程序还需要读取其他数据进行处理,而程序的使用者并不知情的话,那么就会导致结果并非预想的那样。所以,这时去掉后面的”\n“即可使程序正常运行。
缓冲区虽然能够让输入更加方便,但有时也会引发奇怪的问题。例如:
#include
#include
int main()
{
int a=0, b=0;
scanf("a=%d", &a);
scanf("b=%d", &b);
printf("a=%d, b=%d\n", a, b);
system("pause");
return 0;
}
运行结果:
a=100↙
a=100, b=0
遇到第一个 scanf(),输入a=100并回车,就会将100赋值给a,并将a=100从缓冲区中删除。遇到第二个 scanf() 时,输入错误
当用户按下回车键时,回车换行符也会被保存到缓冲区,只是大多数情况下 scanf() 会忽略。但是当控制字符串不是以 %xxx
开头时
scanf("b=%d", &b);
回车换行符就起作用了,scanf() 会对它进行匹配,只是匹配失败而已。该例中第二个 scanf() 就是匹配回车换行符失败,所以既不等待用户输入,也不给b赋值。将第二个 scanf() 的控制字符串改成下面的样子:
scanf("%d", &b);
运行结果:
a=100↙
200↙
a=100, b=200
此时 scanf() 就会忽略缓冲区中的回车换行符,等待用户输入。
字符集为每个字符分配了唯一的编号,每个字符除了用它本身的实体表示外,还可以用转义字符来表示
2种转义字符:(转义字符的表述范围有限)
1、以"\x"开头(小写的x),后接16进制数(最多2位,即最大\xff)
2、以""开头,后接8进制数(最多3位,即最大\777)
\ddd ddd表示1~3个八进制的数字(例:\65–A)
\xddd ddd 表示3个十六进制数字(转换为十进制ASSIC码值对应的字符)
错误示例:’\0X41’、’\0x41’、’\X41’、’\c’