首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

运行结果和实际结果不一样,请帮忙看一下。该如何处理

2012-02-27 
运行结果和实际结果不一样,请帮忙看一下。程序:voidmain(){inta,b322floatx,y8.88charc1 k ,c2ayx

运行结果和实际结果不一样,请帮忙看一下。
程序:
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);
}

热点排行