1、变量a值是256,按十六进制输出结果是:100
2、结果是:46 ,由于输入的两个变量x,y,因为输入格式的限制“%2d%2ld”,前一个格式%2d,限制只能输入2位整型数据,后一个格式%2ld,限制只能输入2位长整型数据。当输入为1234567时,程序分别取x值为12,y值为34,二者相加,所以结果为46。
3、C, 由于输入格式"%3.2f%2.1f"的限制,第一个输入值是3列,2位小数点,第二个数值是2列,1位小数点。因为输入时没有输入逗号,所以限制格式里面没有逗号的符合要求。
4、A,这句判断是错误的:if(x+y=z),关系运算的相等是==,直接改过来就OK了,你的想法if(x==y+z)也不错!
************************************************
你提的疑问有一个对,有一个错!
第三个问题,scanf函数在输入数据时,可以指定域宽,是整数,例如:scanf("%3f,%3d"),百分号后面的数字就是指定数据输入的宽度,如果超宽,系统会自动截断,小数点是分隔符,输入时必须有.根据问题的实际输入情况,所以正确答案是B,那些域宽带小数点的肯定不对,A是中间有小数点的分隔符,要求在输入时必须有的,因为实际没有输,所以也不对. 而我以前关于第三个问题所说的,当然也不对,是我太粗心了!
第四个问题,书上的答案肯定有问题,要不就是你写错了.因为这个条件判断表达式 if(x+y=z)不是一个关系运算,当然括号内也可以是赋值运算表达式,在C中,真与假的判断就是零与非零,非零为真,零为假.但是赋值运算也不能象x+y=z这样赋值的,所以肯定会编译出错,实际上,你可以把=号改为==,或者改为z=x+y也可以,你实际测试一下就知道了.所以答案应该是A.
关于整型的概念,你可以看下面的内容:
一、整型数说明
加上不同的修饰符, 整型数有以下几种类型;
signed short int 有符号短整型数说明。简写为short或int, 字长为2字节共16位二进制数, 数的范围是-32768~32767。
signed long int 有符号长整型数说明。简写为long, 字长为4字节共32位二进制数, 数的范围是-2147483648~2147483647。
unsigned short int 无符号短整型数说明。简写为unsigned int, 字长为2字节共16位二进制数, 数的范围是0~65535。
unsigned long int 无符号长整型数说明。简写为unsigned long, 字长为4字节共32位二进制数, 数的范围是0~4294967295。
二、整型变量定义
可以用下列语句定义整型变量
int a, b; /*a、b被定义为有符号短整型变量*/
unsigned long c; /*c被定义为无符号长整型变量*/
三、整型常数表示
按不同的进制区分, 整型常数有三种表示方法:
十进制数: 以非0开始的数
如:220, -560, 45900
八进制数: 以0开始的数
如:06; 0106, 05788
十六进制数:以0X或0x开始的数
如:0X0D, 0XFF, 0x4e
另外, 可在整型常数后添加一个"L"或"l"字母表示该数为长整型数, 如22L,0773L, 0Xae4l。
(1)0x100(十六进制数)
(2)x=12,y=34 x+y=46,scanf中的%2d表示读取2位整型数,%2ld表示读取2位长整型数
(3)C(同上,自己参考scanf格式,看看格式字符串怎么定义)
(4)当然不可能通过编译,因为if语句里不是逻辑表达式。选A。所以为了在编译时期检查出错误,判断语句最好写成if(x+y==z)而不是if(z=x+y)
1、
256/16=16……0
16/16=1……0
输出结果是100(不带前面的0x)
2、
虽然C标准没具体规定整型各类型数据所占内存字节数,只要求long型不短于int型,short型不长于int型。
但是ANSI标准定义的整型类型里,基本整型int和长整型long的长度不同。int是16位,long是32位。
考试一般按ANSI标准定义的规则。Turbo C也是这样。
你这道题因为限定了两个输入数据所占的列数都为2,所以格式指定为%d还是%ld没有区别。
但没有指定列数、且后面的变量也是相应类型的话就有区别了。
比如:
int x;
scanf("%d",&x);
printf("%d",x);
和
long y;
scanf("%ld",&y);
printf("%ld",y);
你同样输入32768的话,第一段代码,由于x是int型,最大值是32767,造成值的溢出,输出结果是-32768;第二段代码,y是long型,32768这个数值没有超过long的范围,输出的结果仍是32768。
3、输入数据时可以指定输入数据所占的列数,但不能规定精度。
写成scanf("%3f%2f",&f1,&f2);可以,如果你输入4.52,系统自动截取4.5放到f1里,把2放到f2里。
但是像选项C这样是不合法的。
D就更不对了。A的话必须输入4.52,3.5回车。
B是对的。
4、这题我觉得答案错了。或者题出错了。
要是if(x=y)或者if(x=y+z)这样的话,其实是没错的,不见得括号里必须是==连接的关系运算式。if(x=y+z)相当于把y+z的值赋给x,再判断x是否大于0,如果大于0,执行if的,否则执行else的。
现在if括号里的式子按照运算符优先级结合成(x+y)=z,z无法给x+y赋值吧。。我用VC试验了,编译有个error。难不成TC能通过??
==============
哦,忘了二,八,十六进制转化为十进制数这个了。
原来是二进制数就以2为底数,八进制以8为底数,十六进制以16为底数。
从右边一位起,以0、1、2、3……作为指数。
再以各位上实际的数值作为系数。
列出一个加法算式,结果就是十进制数数值。
嗯,用书上的例子好了:
八进制整数:以0开头的数是八进制数。如0123,其值为1*8²+2*8¹+3*8º=64+16+3=83
十六进制整数:以0x开头的数是十六进制数。如0x123,其值为1*16²+2*16¹+3*16º=256+32+3=291
二进制,有符号数和无符号数稍微有点不一样,最好你找本书好好看看。
==============
啊!平方的符号复制过来还是好好的,显示出来就不是那么回事了。。
²是2次方
¹是1次方
º是0次方