运行结果和实际结果不一样,请帮忙看一下。
程序:
void main(){
int a,b=322;
float x,y=8.88;
char c1= 'k ',c2;
a=y;
x=b;
a=c1;
c2=b;
printf( "%d,%f,%d,%c ",a,x,a,c2);
}
运行结果如下:
107,322.000000,107,B
请问出错在哪里?
[解决办法]
void main(){
int a,b=322;
float x,y=8.88;
char c1= 'k ',c2;
a=y;//强制类型转换 去掉实数的小数位 a=8;
x=b;//整型转化为实型 小数点后面补零 显示几个零 根据你显示的格式
a=c1;//C1虽为字符 但他又ASCII 的值 因此赋给a的值是k的ASCII值
c2=b;//将322转化为二进制 取低八位值 应为字符B的ASCII值 因此输出结果应为B
printf( "%d,%f,%d,%c ",a,x,a,c2);
}
[解决办法]
c语言允许对整型变量赋以字符值,反之也可以。
我问题是:实际的结果怎么和运行得到的结果不一样?比如把,最后a应=8。
------------------------------
首先结果肯定是正确的
a 肯定不为 8,因为有这条语句 a=c1;
各类数值型数据间运算时首先都会有类型的转换,其中字符型的和float的型的会在运算之前强制转换成int型和double型,
还有不要忘了 "= "也是运算符
void main(){
int a,b=322;
float x,y=8.88;
char c1= 'k ',c2;
a=y; // 这条语句是多余的,因为后面还有一个a=c1,这个把前面的覆盖掉了
x=b; // 这里其实得到了有一个double型的数
a=c1; // c1先转换为整形,k的ASCII码为107,所以a等于107
c2=b; // char型所能表示的数据的范围是0-255。参考一下xuebingsong说的吧。
printf( "%d,%f,%d,%c ",a,x,a,c2);
}