c语言,题目如图。

来自:    更新日期:早些时候
c语言,题目如图~

是的答案错了。

float大小4,double大小8,char大小1

那么union成员大小分别为x=4,y=8,c=6。由于联合体大小按最大成员算。
所以union aa的变量大小就是8。
所以struct st结构体成员大小分别为v=8,w=24,ave=8。
考虑struct的对齐,实际对齐单位在windows下默认8字节,在Linux 32位下默认4字节对齐,在Linux 64位下默认8字节。
这里首成员大小是8,根据对齐规则:除第一个成员,偏移量必须为实际对齐单位或自身大小的整数倍(取两者中小的那个)。
所以这里对齐不需要额外浪费内存。
所以结构大小就是v+w+ave=40。

严格来讲A和D选项都是错的,因为
A.在没有说明环境的情况下,int型根本不能确定占几个字节。
D.就算假设int占4个字节,int型和float型其中数据的解释方式是不一样的,同样的4个字节用int型解释是99,用float型解释就完全是另一回事了。

填:______,3________
原因分析:
已知:c1=’d’,c2=‘g’
1、先看看c2-’a’是多少:两个字符相减,实质上是两个字符的asc码相减,而我们又知道从a到g,字母到asc码是按照字母表顺序逐个递增的,即:a的asc码+1—>b 的asc码,b的asc码+1—>c的asc码,……所以:
c2-’a’
=‘g’-‘a’
=字母g的asc码-字母a的asc码
=6
这个6,按%d格式打印时,输出6;按%c格式打印时,输出asc为6的字符,而由于asc 为6的字符是控制字符,一般不输出(也有的系统回输出一个乱码)。
2、再看看c2-c1是多少:
c2-c1
=‘g’-‘d’
=3
按%d的格式会打印3。
有什么问题请留言

首先来看下各个字母的ascii码:
a是97
d是100
g是103
c2-'a'=103-97=6
c2-c1=103-100=3
那么printf("%c,%d",c2-'a',c2-c1)中的%c是输出字符,那么这个字符的ascii码是6,这个ascii码字符将在屏幕上不显示,%d是输出数值,屏幕显示3,最终屏幕显示的是:,3

最后说下,这一题出得有毛病,不应该是%c,或者不应该是c2-'a',有疑问可以追问。

输出:口,3
解析: c2-'a',即'g'-'a',g的ASCII码为103,a的ASCII码为97,结果得6,6对应的ASCII码为 ACK,ACK是一个控制字符,不可显示,根据不同的运行平台输出也不同,这个输出结果为是运行在Microsoft Visual C++平台上的;而第二个结果的由来如下:
d的ASCII码为100,103-100=3。
所以最终结果为 口,3。


c语言,题目如图。视频

相关评论:
  • 13460903439c语言,题目如图。
    魏士达已知:c1=’d’,c2=‘g’1、先看看c2-’a’是多少:两个字符相减,实质上是两个字符的asc码相减,而我们又知道从a到g,字母到asc码是按照字母表顺序逐个递增的,即:a的asc码+1—>b 的asc码,b的asc码+1—>c的asc码,……所以:c2-’a’=‘g’-‘a’=字母g的asc码-字母a的asc码 ...

  • 13460903439C语言的题,如图,求解,为什么一个单个字母能用双引号表示呢?
    魏士达不仅一个单字母可以用双引号括起来成为一个单字母字符串,就是长度为1的字符串,而且双引号里还可以什么都没有写成"",表示一个空字符串!所以本题中选项A是字符串常量,是正确选项。选项B什么都不是。选项B是不报错的字符常量,相当于'a'。D是正宗的字符常量。

  • 13460903439关于C语言的一个题目,如图,请教详细解释,谢谢.
    魏士达这是联合体,共用一段内存,int是占2个字节,long占4个字节,char占1个字节。如题 s->i[0] = 0x39, s->i[0] = 0x38,假如内存地址如下,则:地址 0x0000 0x0001 0x0002 0x0003 i[2]: 9 3 8 3 而c[4]则对应这4个地址,c[0]当然是9,选B....

  • 13460903439c语言,题目如图。
    魏士达= '\\0'; ++i) { if (s1[i] == s2[i]) i ++; \/\/ 注意这个地方多加了一次 else { r = s1[i] - s2[i]; \/\/ 循环到这个地方得时候 i = 2,所以是's' - 'o' break; } } cout << r << endl;} ...

  • 13460903439C语言一道题。 如图。 &&不是比||优先级高吗?
    魏士达是的,&&的优先级比||的优先级高,但不表示他就先计算,比如 a+b+c*d这个式子里,*的优先级比+的优先级高,但是他会先计算a+b 题目里相同 d=!(a++\/b)||--c&&c+b--;可以理解为d=(!(a++\/b))||(--a&&c+b--)可以看出,他会先判断左面的(!(a++\/b)),只有他为假的时候,...

  • 13460903439c语言,题目如图
    魏士达逗号表达式的值是表达式从左至右依次运算,结果是最后一个表达式a++的值。先运算a=10,得a的值是10 接着是a+10,结果是20,但a的值仍为10 最后计算a++,表达式a++的值为10,最后a的值为11 所以最后逗号表达式的值为10。

  • 13460903439一道C语言的运算题,题目如图,请详细解答一下,谢谢!
    魏士达加0.5是为了算四舍五入的,这一点是首先要知道的。=是赋值语句,要从右往左看,因此B首先是将n小数点后移2位,方便对它进行四舍五入。并将最后的值赋入m,m类型为int整型,得到一个整数,再将m\/100.0 浮点型保留小数,得到2位。由此B对。A是保留3位小数 C和D明显错误。

  • 13460903439一道c语言的英文题目,题目如图,问题如下 1.write a c program for the...
    魏士达这个题目写的非常清楚了啊。流程图都画好了,换成程序语言就完成了。

  • 13460903439c语言,题目如图第22到27题。求解释不要只说答案,谢谢大家!
    魏士达22.\\x是转义字符代表转16进制,\\x4a代表ASCII码为16进制的4A的字符;\\\\\\n解释为"\\\\"+"\\n",是消除转义的'\\'符号再加转义字符'\\n';\\102代表ASCII码为102的字符,因此最后字符组成是'm'+'\\x4a'+'\\'+'\\n'+'p'+'\\102'+'q'一共7个字符(字符串长度不含结尾标识'\\0')。23.strlen...

  • 13460903439c语言,题目如图
    魏士达此应该是为了说明算式k- -,特意设计的一道题目。在C语言中,算式k- -单独使用时,表示k值减1,即k=k-1。而对于将算式k- -做为参数代入到其它语句,当被代入的语句在执行时,是先使用未曾减1的k值来执行操作,在被代入语句执行完成后,再将k值减1。所以在本题目中,whiⅠe(k- -)表示在k非...

  • 相关主题精彩

    版权声明:本网站为非赢利性站点,内容来自于网络投稿和网络,若有相关事宜,请联系管理员

    Copyright © 喜物网