C语言的坑

文章目录

1.

#include<stdio.h>
int main(){
    
    
	int x1 = 28.3%3.1;
	printf("x1 = %d",x1);
	return 0;
} 

% 运算不能有double(float)

2.

#include<stdio.h>
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

|| 或操作,|| 为界将表达式分为两部分,他会先算前一部分,如果前一部分为真,他将停止运算,如果为假,他才会算第二部分

&&且操作 ,&&为界将表达式分为两部分,他会先算前一部分,如果前一部分为假,他将停止运算,如果为真,他才会算第二部分

3.

i= j = 6

i += j++

i = 12,j = 7

i++,表示先取i的值进行表达式计算或函数调用,最后加法再计算 i=i+1;

++i,表示先加法计算i=i+1,然后在进行表达式计算或函数调用。

4.

a = 1,b = 2,c = 3
if(c>b>a)

= if(0)

c>b 为真,值为1
1>c 为假,值为0
if0

5.

以下合法的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; 声明加初始化才对

6.逗号表达式

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

Guess you like

Origin blog.csdn.net/weixin_51552144/article/details/121076185