C语言问题(简单)

来源:百度知道 编辑:UC知道 时间:2024/06/16 11:11:08
第一题:变量i、j、k已定义为int型并均有初值0,用以下语句进行输入时:
scanf("%d",&i);scanf("%d",%j);scanf('%d",&k);
从键盘输入:
12.3<CR>
则变量i、j、k的值分别是什么?

(答案是12,0,0,为什么?)

第二题:若变量已正确定义为float型,要通过输入语句:scanf("%f %f %f",&a,&b,&c);给a赋值11.0, 给b赋值22.0,给c赋值33.0,正确的输入形式是:
11 22 33

语句的要求不是输入float型的数据吗?为什么这里输入int型的数据也是成立的呢?

第一题:把第二个scanf("%d",%j)改成scanf("%d",&j).把第三个scanf('%d",&k)改成scanf("%d",&k).
至于答案是12,0,0.是因为scanf("%d",&i);scanf("%d",&j);scanf("%d",&k);的这种形式,要向电脑输入一个值后用回车分隔,你最后用一个回车,就等于只给第一个变量赋值,而为什么第一个是12,因为你定义i为整型,所以是这样。

第二题:这样好像也可以哦~~,因为定义的是浮点型,当输入的是整型那么就会强制转换成浮点型的。

scanf("%d",&i);scanf("%d",%j);scanf('%d",&k);
第二个scanf("%d",%j);改成scanf("%d",&j);
第三个scanf('%d",&k);改成scanf(“%d",&k);

至于你说的问题。因为小数点占两个数的存储位置。
所以你实际上输入的整数部分被i存起来。而小数点占用了后面第二个整型的存储空间了。
你把i换成float试一下。就OK。

第二个float型是第一个字节存整数,第二个字节存小数,你第二个字节没给它赋值,默认为零。

二个题均是编译器帮你完成了隐式转换,第一个是帮你把浮点转成了整型,所以小数点后的全没了,第二个是帮你把整型转成了浮点