导航菜单
首页 >  » 正文

4.执行下列语句后a的值为( ),b的值为( C ). int a, b, c; a=b=c=1; ++a|| ++b && 已有如下定义和输入语句,若要求a1,a2,c1,c2的值分别为10,20,A和B,当从第一列开始输入数据时,正确的数

4.执行下列语句后a的值为( ),b的值为( C ). int a, b, c; a=b=c=1; ++a|| ++b &&

1
2
3
4
5
6
7
8
9
10
    // 定义3个变量a、b、c
    inta, b, c;
    // 给3个变量赋初值,a=1 b=1 c=1
    a=b=c=1;
    // 逻辑与的优先级高于逻辑或,相当于++a || (++b && ++c)
    // 所以先判断++a是否为真,++a,前置自增后a为2,为真
    // 而此时,由于是逻辑或运算,只要有一个为真,结果就为真,已经可以判定这个表达式的值为真
    // 所以,后面括号中的表达式就不会运算,b为1,c为1
    // 这个行为通常称为“短路求值”
    ++a || ++b && ++c;

已有如下定义和输入语句,若要求a1,a2,c1,c2的值分别为10,20,A和B,当从第一列开始输入数据时,正确的数

A
整形和字符型一起输入时中间不能连有空格,因为空格也是字符,所以BC错,D有逗号,那么在输入的格式控制也应该有逗号scanf(“%d,%d,%c,%c”,&a1,&a2,&c1,&c2);
这样才对。。

c语言题目:若有下列定义:char a;int b;float c;double d;c*=b+d c,则c的类型为?

你好!!!
char a;int b;float c;double d;
c*=b+d-c这个表达式中含有不同的数据类型,那么编译器就会自动把低级类型向高级类型转换(当然这个转换是自动转换的)即编译器会把char ,int, float 转换成double的类型,
c*=b+d-c但是我们定义变量c是float类型的,那么这个计算结果就会强制转换成float,然后把转化后float类型的数据在赋值给变量c.
总结:在有不同类型的计算中,都会把低级运算想高级运算自动转化,要是表达式中都float,那么其他低于float类型的都会转化成float,要是有double也是如此。
但是注意一点:编译器在计算的时候是按等级最高的类型计算的,计算的只是表达式结果的类型,那要是把高级类型的几个赋值给低级类型,会发出自动转换。比如:
char a;int b;float c;double d;
表达式a+b+c+d,那么这个表达式中最高的类型就是double,那么表达结果的类型就是double,但是我们可把double类型赋值给int 类型:int x=a+b+c+d,那么此时x的类型还是int

相关推荐: