问下几个c的输出

来源:百度知道 编辑:UC知道 时间:2024/05/14 20:00:15
1,#include<stdio.h>
main()
{char s1[10],s2[10],s3[10],s4[10];
scanf("%s%s",s1,s2);gets(s3);gets(s4);
puts(s1);puts(s2);puts(s3);puts(s4);}
输出为aaaa(换行)bbbb(换行)cccc dddd,怎么理解?

2,#include<stdio.h>
main()
{unsigned m=40000;
printf("%d %d\n",m);}输出-25536,是怎么转换的?

3,main()
{short n=-31;
printf("\nhex=%x,o=%o",n,n);}
输出是什么,为什么?

1、
s1为aaaa
s2为bbbb
s3为\r
s4为cccc dddd

2、
取的是二进制40000的后7位按位取反+1,第一位变为负号位
也就是将unsigned 40000的二进制变为signed补码,换算过来就是-25536

3、
输出分别是-31的16进制数和8进制数
至於为什麽,我不知道怎麽说,因为它是%x和%o

1.
这个程序是错的,当完成 scanf 输入后,再用 gets 输入是错的,这时候gets (s3)接受的是回车键,不是字符串,在gets 前面加上一个getchar();puts是输出字符串,当然是输出字符串后换行了

2.
这个程序有问题的两个%d 而只有一个m,还有%d你让他输出什么啊,会报错的

3.输出
hex=ffffffe1,o=37777777741
%x输出16进制,%o输出8进制,具体的转化关系,自己算一下