谁能帮我解释一下这道c语言题目啊 不懂

stryct w
{
char low;
char high;
};
union u
{
struct w byte;
int word;
}uu;
main()
{
uu.word=0x1234;
printf("wordvalue:%04x\n",uu.word);
printf("highvalue:%02x\n",byte.high);
printf("lowvalue:%02x\n",uu.byte.low);
uu.byte.low=0xff;
printf("wordvalue:%04x\n",uu.word);
}

1.转换说明符
%a(%A) 浮点数、十六进制数字和p-(P-)记数法(C99)
%c 字符
%d 有符号十进制整数
%f 浮点数(包括float和doulbe)
%e(%E) 浮点数指数输出[e-(E-)记数法]
%g(%G) 浮点数不显无意义的零"0"
%i 有符号十进制整数(与%d相同)
%u 无符号十进制整数
%o 八进制整数 e.g. 0123
%x(%X) 十六进制整数0f(0F) e.g. 0x1234
%p 指针
%s 字符串
%% "%"

2.标志
左对齐:"-" e.g. "%-20s"
右对齐:"+" e.g. "%+20s"
空格:若符号为正,则显示空格,负则显示"-" e.g. "% 6.2f"
#:对c,s,d,u类无影响;对o类,在输出时加前缀o;对x类,在输出时加前缀0x;
对e,g,f 类当结果有小数时才给出小数点。

3.格式字符串(格式)
〔标志〕〔输出最少宽度〕〔.精度〕〔长度〕类型
"%-md" :左对齐,若m比实际少时,按实际输出。
"%m.ns":输出m位,取字符串(左起)n位,左补空格,当n>m or m省略时m=n
e.g. "%7.2s" 输入CHINA
输出" CH"
"%m.nf":输出浮点数,m为宽度,n为小数点右边数位
e.g. "%3.1f" 输入3852.99
输出3853.0
长度:为h短整形量,l为长整形量

printf的格式控制的完整格式:
% - 0 m.n l或h 格式字符
下面对组成格式说明的各项加以说明:
①%:表示格式说明的起始符号,不可缺少。
②-:有-表示左对齐输出,如省略表示右对齐输出。
③0:有0表示指定空位填0,如省略表示指定空位不填。
④m.n:m指域宽,即对应的输出项在输出设备上所占的字符数。N指精度。用于说明输出的实型数的小数位数。为指定n时,隐含的精度为n=6位。
⑤l或h:l对整型指long型,对实型指double型。h用于将整型的格式字符修正为short型。

---------------------------------------
格式字符
格式字符用以指定输出项的数据类型和输出格式。
①d格式:用来输出十进制整数。有以下几种用法:
%d:按整型数据的实际长度输出。
%md:m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。
%ld:输出长整型数据。
②o格式:以无符号八进制形式输出整数。对长整型可以用"%lo"格式输出。同样也可以指定字段宽度用“%mo”格式输出。
例:
main()
{ int a = -1;
printf("%d, %o", a, a);
}
运行结果:-1,177777
程序解析:-1在内存单元中(以补码形式存放)为(1111111111111111)2,转换为八进制数为(177777)8。
③x格式:以无符号十六进制形式输出整数。对长整型可以用"%lx"格式输出。同样也可以指定字段宽度用"%mx"格式输出。
④u格式:以无符号十进制形式输出整数。对长整型可以用"%lu"格式输出。同样也可以指定字段宽度用“%mu”格式输出。
⑤c格式:输出一个字符。
⑥s格式:用来输出一个串。有几中用法
%s:例如:printf("%s", "CHINA")输出"CHINA"字符串(不包括双引号)。
%ms:输出的字符串占m列,如字符串本身长度大于m,则突破获m的限制,将字符串全部输出。若串长小于m,则左补空格。
%-ms:如果串长小于m,则在m列范围内,字符串向左靠,右补空格。
%m.ns:输出占m列,但只取字符串中左端n个字符。这n个字符输出在m列的右侧,左补空格。
%-m.ns:其中m、n含义同上,n个字符输出在m列范围的左侧,右补空格。如果n>m,则自动取n值,即保证n个字符正常输出。
⑦f格式:用来输出实数(包括单、双精度),以小数形式输出。有以下几种用法:
%f:不指定宽度,整数部分全部输出并输出6位小数。
%m.nf:输出共占m列,其中有n位小数,如数值宽度小于m左端补空格。
%-m.nf:输出共占n列,其中有n位小数,如数值宽度小于m右端补空格。
⑧e格式:以指数形式输出实数。可用以下形式:
%e:数字部分(又称尾数)输出6位小数,指数部分占5位或4位。
%m.ne和%-m.ne:m、n和”-”字符含义与前相同。此处n指数据的数字部分的小数位数,m表示整个输出数据所占的宽度。
⑨g格式:自动选f格式或e格式中较短的一种输出,且不输出无意义的零。

---------------------------------------
关于printf函数的进一步说明:
如果想输出字符"%",则应该在“格式控制”字符串中用连续两个%表示,如:
printf("%f%%", 1.0/3);
输出0.333333%。

---------------------------------------
对于单精度数,使用%f格式符输出时,仅前7位是有效数字,小数6位.
对于双精度数,使用%lf格式符输出时,前16位是有效数字,小数6位.

######################################拾遗 ########################################
由高手指点
对于m.n的格式还可以用如下方法表示(例)
char ch[20];
printf("%*.*s\n",m,n,ch);
前边的*定义的是总的宽度,后边的定义的是输出的个数。分别对应外面的参数m和n 。我想这种方法的好处是可以在语句之外对参数m和n赋值,从而控制输出格式。
--------------------------------------------------------------------------------
今天(06.6.9)又看到一种输出格式 %n 可以将所输出字符串的长度值赋绐一个变量, 见下例:

int slen;

printf("hello world%n", &slen);

执行后变量被赋值为11。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yuntongsf/archive/2009/08/29/4497335.aspx
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-07-30
这个是结构体跟共用体的关系
基本上是这样的
结构体是每个字节都有自己的内错空间
而共用体 是所有的功用一片没存空间
你现在给uu.word 赋值1234的话就是共用体整个是1234,因为整个共用体 都是在用word申请的内存,也就是4个字节,四个字节的前两个字节就是结构体所占有的,也就是说low和high各占一个,
打印结果是:word= 1234,high=03,low = 04,
最后的那个是12ff
希望对你有帮助
第2个回答  2012-07-30
union 共享内存段的 所以 byte 和 word 实际上指向同一个内存地址 对 uu.word==0x1234;的赋值
也会对byte进行赋值,由于在内存中 高低自己是反着存的 所以 low=32 high=12
结果如下
wordvalue:1234
highvalue:12
lowvalue:34
wordvalue:12ff本回答被提问者采纳
第3个回答  2012-07-30
不是stryct w,应该是struct w;不是printf("highvalue:%02x\n",byte.high);应该是printf("highvalue:%02x\n",uu.byte.high);这里重点要理解union的含义,union是联合,用它定义的时候所占空间的大小是按里面联合体最大的来算的。这里w是两个字节,word是整形四个字节。所以uu占四个字节,这四个字节到底什么意思,如果看成word那就是和普通int一样。如果看成w那就是两个字节了,而这两个字节又有low和high两个部分。
第4个回答  2012-07-30
程序有点问题
stryct w改为struct w

printf("highvalue:%02x\n",byte.high);
改为
printf("highvalue:%02x\n",uu.byte.high);

这个程序就是给一个地址附上值1234,然后输出这个这个值1234, 然后又按高位低位分别输出12和34
最后把这个值的低位改成ff,再输出这个值12ff本回答被网友采纳

谁能帮我解释一下这道c语言题目啊 不懂
①%:表示格式说明的起始符号,不可缺少。②-:有-表示左对齐输出,如省略表示右对齐输出。③0:有0表示指定空位填0,如省略表示指定空位不填。④m.n:m指域宽,即对应的输出项在输出设备上所占的字符数。N指精度。用于说明输出的实型数的小数位数。为指定n时,隐含的精度为n=6位。⑤l或h:l对...

能帮忙解释一下这道c语言题目吗?
题目要求与条件表达式等价,就是把这个选项替换掉条件表达中的(x-y)时,条件表达式的执行结果不变。条件表达式的需要:(x-y)如果等于true,需要x与y不相等,(x-y)如果等于false,需要x等于y 选项D结果如果为true,则x等于y,如果为false,则x不等于y。正好与要求相反。

哪位大神帮我看一下这道C语言的题
答案为:B 如果语句改成这样:struct S {int g ; char h;} T;,则可以用struct S定义结构体变量,此时的T是声明类型的同时定义了变量,在这种情况下选D 而加上typedef后等于为struct S取了一个新的名字——T,此时T等价于struct S,或者说T是struct S的另一种称呼。所以选B。

这道c语言怎么做,解析看不懂,谁能详细说一下
1、第一个scanf的函数,赋值的不是字符串,而是字符(%c),又因为它是for函数的执行语句,所以根据for函数,scanf函数一共要运行7次,分别给b字符串数组的前7位赋值,原b的前七位是:The空格shy。 而输入的语句的前七位是Fig空格flo。它将前者替换了,所以现在的:b[]="fig空格flo空格is空格blue....

C语言题目我看不懂
这个题的意思是统计字符串str里面0-9的数字有多少个 其中数组a的十个元素分别存储0-9的个数。难点在a[(*p-48)]这里。48是‘0’的ASCII码,‘1’是49,以此类推。p分别指向str里的每一个字符。当*p为0-9其中的一个的时候,比如*p='1'的话,那么*p-48='1'-48=49-48=1。那么就会执行a...

谁能帮我解决下面的C语言问题啊,最好能说明解析过程。
解析:道理同第1题,执行switch(a),满足条件进入switch(b),接着满足条件执行case 0后语句,break跳出switch(b),由于跳出后没有语句break,因此接着执行switch(a)。记住一点:break语句只能跳出一个switch;3、至于这题,估计是你输错了,如果题目真这样,就是题目错了。编译都不可能通过,在...

一题C语言看不懂题目,need help!
编译、链接的话你可以简单的理解为是从C的源文件到可执行的exe文件的必要步骤 arge和argv是main的两个参数(一般不用arge吧,至少我没见过,一般都是用argc的,随便吧,反正只是个名字而已)如果在cmd输入exam 123<回车> 的话 系统调用main时会传递相关参数的,arge是参数个数,argv是每个参数字符串的...

解出并解释一下C语言的这个题目(完美的代价)
x=j+'a';\/\/x是奇数字母(一个奇数字母的时候有用)} } if(k>=2)\/*如果有两个字母或者两个字母以上出现了奇数次,那么该字符串不能通过字符间的交替成为回文串。*\/ printf("Impossible\\n");else printf("%d\\n",changes(s,x,n));} int changes(char s[],char x,int n)\/\/统计交换...

我是初学C语言,看不懂你这题(看不懂的地方我标注了一下啊)
=!(3>4)因为(3>4)是错的,所以用0表示,又因为前面!,所以用1表示 (!c)因为c=5,不等于0,所以c是真值,前面加个!,就说明整体是假值,所以最后逻辑值为0 另外,扩展一下,对于这道题中的c,!!c的值应该为1。!!c=!(!c)=(!0)=1。这也是通过上述解释得到的。

这道C语言题怎么说?解释一下吧!
输出5 strcpy原函数:extern char *strcpy(char* dest, const char *src);返回的就是 dest指针 所以 strlen(strcpy(str,"China"));相当于 strcpy(str,"China");strlen(str);所以实际上就是"China"这个字符串的长度 5

相似回答