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

有网友解释相似的题目说老谭的书讲只要这类都是double型,可是我的这个答案怎么是float?

你好!!!
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
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-09-25
你定义C为float,最后c就是float
虽然b+d-c的结果是double型,
但最后赋值给c时都要强制转为float型
毕竟c(float)只占4个字节的空间,你怎么把8个字节的内容(double)直接放进去呢?
第2个回答  2010-09-25
高 double <--float
^ ^
| |
| long
| |
| unsignd
| |
低 int <-- char,short
由低到高!注意这个不是一层一层的变的(int->unsigned->long->long)
int->long,int->double都是可行的
第3个回答  2010-09-25
这个是肯定要发生隐式转换的,你小类型和大类型做运算,就会发生这样的情况
第4个回答  2010-09-25
这个c的类型肯定是double的
这是数字类型转换的基本规则,有double参与运算,则结果肯定是double的

...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...

1,若有以下定义,char a;int b;float c;double d;则表达式a*b+d-c值...
double dval;dval + fval + ival \/\/在计算加法前fval和ival都被转换成double 类似地,如果两个操作数都不是double型而其中一个操作float型 ,则另一个被转换成float型。例如:char cval;int ival;float fval;cval + ival + fval \/\/在计算加法前ival和cval都被转换成float 否则如果两个操作数...

C语言判断题和选择题,劳烦知道的帮帮我
y);}A. y=0B. y=-1C. y=1D. while构成无限循环14.下列变量定义中合法的是( )A. float _a=.1e-1;B. double b=1-5e2.5;

C语言习题,请高人指导解答!
3. 若有定义:intx=7;floata=2.5,b=4.7;则表达式a+x%3*(int)(a+b)%2\/4的值是(A)。A. 2.5 B. 2.75 C. 3.5 D. 0 满分:5 分 4. 下面四个选项中,均是C语言关键字的选项是(B)。A. auto enumin clude B. switch typedef continue C. signedunionscanf D. if...

C语言期末试库试题
A,int _int B、double int_ C、char For D、float US$答案:D一一知识点:常量、变量和标识符 2.以下不合法的用户标识符是--- A、j2_KEY B、DoubleC、4d D、_8 答案:C一知识点:常量、变量和标识符 3.以下4组用户定义标识符中,全部合法的一组是--- A、_main enclude sin B、If -max...

下半年计算机二级c语言基础试题
int i; char acNew[20]; for(i = 0; i < 10; i++) { acNew[i] = '0'; } printf("%d\/n", strlen(acNew)); return; } 的输出为( ) A 0 B 10 C 11 D不确定 答案:D 9.switch(c)中的c的数据类型可以是char、long、float、unsigned、bool. ( ) A. 正确 B. 错误 答案:B 10. 网络...

c语言 题目
C. 一个指向由N个double型元素组成的一维数组的指针。 D.具有N个指针元素的一维指针数组,每个元素都只能指向double型量。 8、在C程序中有如下语句:char *func(int x,int y);它是( )。 A. 对函数func的定义。 B. 对函数func的调用。 C.对函数func的原型说明。 D. 不合法的。 9、以下程序的输出结果...

c语言程序设计教程答案c语言程序设计练习题
一、C语言程序的基本结构 #include “stdio.h” void main() { 定义变量; 程序实现; 输出结果; printf } 二、变量的定义 1.整型:int a , b, s=0;(可以在定义的同时为变量进行赋值) 长整型:long 无符号整型(非负整数):unsigned 2.单精度实型:float x, y, z=1.0 ; 3.双精度实型:double l,m;...

c语言求教
详情请查看视频回答

几道简单的C语言选择题,帮忙做一下
1、为表示关系x≥y≥z,应使用C语言表达式 (A)2、执行下面程序段 (B)3、若有以下定义:float x;int a,b;则正确的switch 语句是 (C)4、能正确表示a和b同时为正或同时为负的逻辑表达式是(D)5、选择出合法的判断a和b是否相等的if语句(C)6、已知 int x=10,y=20,z=30,则执行(如果那些...

相似回答