C语言简单的c语言小游戏题目~~~

从一道简单的C语言笔试题谈起~
搜狐2016年招聘笔试中有这样一道选择题:
&在系统下,如下结构体的值是多少?
A.20&&&&&&&&&&&&&&&&&&
B.22&&&&&&&&&&&&&&&&&&
C.24&&&&&&&&&&&&&&&&&&&
该题目考查变量在内存中的分配。大多数学生看到这道题的第一感觉是很简单,是考查C语言中数据类型的基本概念题目,根据C语言教材中的理论,在x86系统中,char类型占用1B,int占用4B,short占用2B。本题结构体中有10个char类型,1个int类型和3个short类型,因此该结构体应该占用20B,即正确答案为选项A。而当我们在Windows环境的VC
6.0、VS和Dev
C下进行测试后会发现,用sizeof求上述结构所占内存的字节数均为24B(选项C),而不是20B。显然,这是一个典型的“理论”与实际不符的案例,要深入了解其原因,必须深入了解x86系统的体系结构、操作系统和编译等相关基本原理和知识。
题目中“在x86系统下”是关键。在x86-32(IA-32)系统中,机器的字长为32位,但一个字(word)为16位(在INTEL的体系中,这一点太别扭,简直无语了,初学者一定要注意),系统内存采用小端(Little
Endian)方式,在进行变量分配时,会按照其对应的数据类型在存储空间对变量的起始地址进行边界对齐。
& & 在x86-32(IA-32)机器上使用VC
6.0环境,int、long和float以及指针类型均占4B,在内存中为变量分配存储空间时,均要按4字节对齐(即变量在存储空间的起始地址为4的倍数);double型占8B,其对应的变量要按8字节对齐(即变量在存储空间的起始地址为8的倍数)。这些变量,不论它的存储类型是什么(自动auto、外部extern,还是静态static),均是按照数据类型的长度进行边界对齐。如果将上述数据类型作为结构struct中的成员,则每个成员同样要按上述规则进行边界对齐。
&&char和short类型的变量比较复杂。如果变量的存储类型为auto,char型变量在内存占1个字节,short型变量在内存中占2B,在程序运行过程中,这些auto存储类型的变量是在程序调用到变量所在函数时才动态产生,变量使用的空间是在栈空间中临时分配,此时,char和short型变量均是按4字节字进行边界对齐,即变量在存储空间的起始地址为4的倍数。如果变量的存储类型为静态或外部,则这些变量所占用的空间是由编译器在编译之时进行分配,占用的是程序数据区中永久性的空间。此时,为char和short类型变量分配的变量空间均是按数据类型的长度进行边界对齐,即char型按字节对齐,short型按双字节对齐(即short型变量在存储空间的起始地址为2的倍数)。如果将上述数据类型作为struct中的成员,则成员要按变量静态或外部存储类型的规则进行边界对齐。
对于复杂的数据类型,例如结构、联合等均要求按4字节对齐。
& & 本题中,结构成员a[10]为char类型,理论上占10B,因为要进行边界对齐,实际占12B;成员b为int类型,理论上占4B,实际也占4B;成员c[3]为short类型,理论上占6B,因为要进行边界对齐,实际占8B。这样总计占用24B。如果调整结构中成员的顺序,按照基本数据类型的长度从大到小排列,例如:
则此时用sizeof计算该结构占用的字节总数为20B。
编译器自动对齐的原因:为了提高程序的性能,数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;然而,对齐的内存访问仅需要一次访问。
&x86的硬件系统也有不同,最基本的分为32位字长和64为字长,这里仅针对一种情况以x86-32(IA-32)为背景进行了上述讨论。如果是x86-64系统中对齐方式另有不同。关于数据类型边界对齐的更深入的原理和讨论,请参见机械工业出版社,袁春风《计算机系统基础》,2014,或者请参见机械工业出版社,[美]RandalE.Bryant和DavidR.O’Hallaron著,龚奕利等译《深入理解计算机系统》,2011。如果进一步分析,本问题涉及的数据边界对齐问题不仅与操作系统相关,还与编译器密切相关,感兴趣的读者可以在不同的编译环境下分析下列程序的运行结果。
char a[10];
short c[3];
short &c[3];
char &a[10];
short s1, s2;
int main()
char& c3, c4;
short s3, s4;
int&& i3, i4;
&&&&&&&&&&
char a[10];
&&&&&&&&&&
&&&&&&&&&&
short c[3];
&&&&&&&&&&
&&&&&&&&&&
short c[3];
&&&&&&&&&&
char a[10];
&&&&&&&&&&
char a[10];
&&&&&&&&&&
short c[3];
&&&&&&&&&&
&&&&&&&&&&
short c[3];
&&&&&&&&&&
char a[10];
printf( "struct a1=-,%p\n", sizeof(a1), &a1 );
printf( "struct a2=-,%p\n", sizeof(a2), &a2 );
printf( "struct a3=-,%p\n", sizeof(a3), &a3 );
printf( "struct a4=-,%p\n", sizeof(a4), &a4 );
printf( "char&& c1=-,%p\n",
sizeof(c1), &c1 );
printf( "char&& c2=-,%p\n",
sizeof(c2), &c2 );
printf( "char&& c3=-,%p\n",
sizeof(c3), &c3 );
printf( "char &&c4=-,%p\n",
sizeof(c4), &c4 );
printf( "short& s1=-,%p\n", sizeof(s1), &s1
printf( "short& s2=-,%p\n", sizeof(s2), &s2
printf( "short& s3=-,%p\n", sizeof(s3), &s3
printf( "short& s4=-,%p\n", sizeof(s4), &s4
printf( "int&&&
i1=-,%p\n", sizeof(i1), &i1 );
printf( "int&&&
i2=-,%p\n", sizeof(i2), &i2 );
printf( "int&&&
i3=-,%p\n", sizeof(i3), &i3 );
printf( "int&&&
i4=-,%p\n", sizeof(i4), &i4 );
printf( "struct t3=-,%p\n", sizeof(t3), &t3 );
printf( "struct t4=-,%p\n", sizeof(t4), &t4 );
printf( "union& u1=-,%p\n", sizeof(u1), &u1
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。一个简单的c语言题目_c语言吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:527,870贴子:
一个简单的c语言题目收藏
#include&stdio.h&int a,b,c,d;void aa(){a=0;}void bb(){c=1;}void cc(){d=1;}void dd(){d=0;}void judge(){if a+b+c+d=1 {if a=1 thenprintf(&a&);if b=1 thenprintf(&b&);if c=1 thenprintf(&c&);if d=1 thenprintf(&d&);}else {a=0; b=0; c=0; d=0;};} int main(){return 0;}这个算我的一个想法吧,不能在Microsoft visualc++上运行,不知道能否有人给改改。题目见附图
上海工商外国语职业学院针对三校生低分注册200名,
能给个在软件上运行成功的截图再好不过,求大神支援
if要加括号
欢迎加入Hello world !,群号码:。C语言爱好,自学,请入
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或君,已阅读到文档的结尾了呢~~
广告剩余8秒
文档加载中
简单的C语言编程题例题
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
简单的C语言编程题例题
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口C语言基础笔试题
C语言基础笔试题
编辑:义俏&
  1、C语言程序的基本单位是____ A) 程序行 B) 语句 C) 函数 D) 字符、C、1
  2、C语言程序的三种基本结构是____ A、顺序结构,选择结构,循环结构 B、递归结构,循环结构,转移结构 C、嵌套结构,递归结构,顺序结构 D、循环结构,转移结构,顺序结构、A、1
  3、C语言规定,程序中各函数之间 A) 既允许直接递归调用也允许间接递归调用 B) 不允许直接递归调用也不允许间接递归调用 C) 允许直接递归调用不允许间接递归调用 D) 不允许直接递归调用允许间接递归调用、A、1
  4、C语言中可处理的文件类型是( ) A) 文本文件和数据文件 B)文本文件和二进制文件 C) 数据文件和二进制文件 D)数据代码文件、B、1
  5、C语言可执行程序的开始执行点是( ) A) 程序中第一条可执行语句 B) 程序中第一个函数 C) 程序中的main函数 D) 包含文件中的第一个函数、C、1
  6、C语言提供的合法的数据类型关键字是 A)double B) short C) integer D) char、B、1
  7、C语言中,运算对象必须是整型数的运算符是 A) % B) \ C) %和\ D) * *、A、1
  8、C语言中函数返回值的类型是由( )决定。 A) return语句中的表达式类型 B) 调用函数的主调函数类型 C) 调用函数时临时 D) 定义函数时所指定的函数类型、D、1
  9、C语言中数组名作为参数传递给函数,作为实在参数的数组名被处理为_____。 A、 该数组的长度。 B、 该数组的元素个数。 C、 该数组中各元素的值。 D、 该数组的首地址。、D、1
  10、C语言中数组下标的下限是________。 A、1 B、0 C、视具体情况 D、无固定下限、B、1
  11、C语言中提供的合法关键字是____ A、swith B、cher C、case D、default、D、1
  12、C语言中文件的存取方式是________。 A、顺序存取 B、随机存取 C、顺序存取、随机存取均可 D、顺序存取、随机存取均不可、C、1
  13、C语言中最简单的数据类型包括 A) 整型、实型、逻辑型 B) 整型、实型、字符型 C) 整型、字符型、逻辑型 D) 整型、实型、逻辑型、字符型、B、1
  14、sizeof(float)是( ) A) 一种函数调用 B) 一个不合法的表示形式 C) 一个整型表达式 D) 一个浮点表达式、C、1
  15、x、y、z被定义为int型变量,若从键盘给x、y、z输入数据,正确的输入语句是 A) input x,y,z; B) scanf(&%d%d%d&,&x,&y,&z); C) scanf(&%d%d%d&,x,y,z); D) read(&%d%d%d&,&x,&y,&z);、B、1
  16、表达式:10!=9的值是 A) true B) 非零值 C) 0 D) 1、D、1
  17、表示关系x&=y&=z的c语言表达式为 A) (X&=Y)&&(Y&=Z) B) (X&=Y)AND(Y&=Z) C) (X&=Y&=Z) D) (X&=Y)&(Y&=Z)、A、1
  18、程序片段:在TC20中, int i=65536; printf(&%d&,i);的输出结果是____ A) 65536 B) 0 C) 有语法错误,无输出结果 D) -1、B、1
  19、当调用函数时,实参是一个数组名,则向函数传送的是____ A) 数组的长度 B) 数组的首地址 C) 数组每一个元素的地址 D) 数组每个元素中的值、B、1
  20、对嵌套子程序调用说法正确的是____。 A、 外层子程序可以调用所有的内层子程序 B、 内层了程序只可以调用包含本身的外层子程序,不可以隔层调用 C、 外分程序必须能完全套住内分程序 D、 以上说法均不正确、C、1
  21、对于基类型相同的两个指针变量之间,不能进行的运算是 A) & B) = C) + D) -、C、1
  22、合法的C语言中,合法的长整型常数是 A) '\t' B) &A& C) 65 D) A、A、1
  23、假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是 A) 3 B) 6 C) 10 D) 20、D、1
  24、假定有以下变量定义: int k=7 ,x=12; 则能使值为3的表达式是 A x%=(k%=5) B x%=(k-k%5) C x%=k-k%5 D (x%=k)-(k%=5)、D、1
  25、请读程序片段(字符串内没有空格): printf(&%d&,strlen(&ATS012\1\\&));的输出结果是 A) 11 B) 10 C) 9 D) 8 、C、1
  26、请选出合法的C语言赋值语句 A) a=b=58 B) i++; C) a=58,b=58 D) k=int(a+b);、B、1
  27、若a为int类型,且其值为3,则执行完表达式a+=a-=a*a后,a的值是 A) -3 B) 9 C) -12 D) 6、C、1
  28、若int类型占两个字节,则以下语句输出为________。 int k=-1; printf(&%d,u%&,k,k); A、-1,-1 B、-1,65536 C、-1,32768 D、-1,65535、D、1
  29、若变量a是int类型,并执行了语句:a=&A'+1、6;,则正确的叙述是 A) a的值是字符C B) a的值是浮点型 C) 不允许字符型和浮点型相加 D) a的值是字符&A&的ASCII值加上1。、D、1
  30、若变量已正确说明为float类型,要通过语句scanf(&%f %f %f &,&a,&b,&c);给a赋于10、0,b赋予22、0,c赋予33、0,不正确的输入形式是: A) 10 B) 10、0,22、0,33、0 22 33 C) 10、0 D) 10 22 22、0 33、0 33、B、1
  31、若要求在if后一对圆括号中表示a不等于0的关系,则能正确表示这一关系的表达式为 A) a&&0 B) !a C) a=0 D) a、B、1
  32、若已定义x和y为double类型,则表达式:x=1,y=x+3/2的值是 A)1 B)2 C)2、0 D)2、5、C、1
  33、若有定义:int a=8,b=5,c;,执行语句c=a/b+0、4;后,c的值为 A) 1、4 B) 1 C) 2、0 D) 2、B、1
  34、若有定义:int x,y;char a,b,c;并有以下输入数据(此处& CR& 代表换行符,/u代表空格): 1u2 AuBuC 则能给x赋整数1,给y赋整数2,给a赋字符A,给b赋字符B,给c赋字符C 的正确程序段是 A) scanf(&x=%d y+%d&,&x,&y);a=getchar();b=getchar();c=getchar(); B) scanf(&%d %d&,&x,&y);a=getchar();b=getchar();c=getchar(); C) scanf(&%d%d%c%c%c,&x,&y,&a,&b,&c); D) scanf(&%d%d%c%c%c%c%c%c:&x,&y,&a,&a,&b,&b,&c,&c);、 D、1
  35、若有定义和语句: char s[10]:s=&abcd&;printf(&%s&,s); 则结果是(以下u代表空格) A) 输出abcd B) 输出a C) 输出abcduuuuu D) 编译不通过、D、1
  36、若有以下程序段, int c1=1,c2=2,c3; c3=1、0/c2*c1; 则执行后,c3中的值是 A) 0 B) 0、5 C) 1 D) 2、A、1
  37、若有以下定义: 则表达式a*b+d-c值的类型为 A) float B) int C) char D) double、D、1
  38、若有以下定义和语句 char c1=&b',c2=&e'; printf(&%d,%c&,c2-c1,c2-&a'+&A&); 则输出结果是: A)2,M B)3,E C)2,E D)输出项与对应的格式控制不一致,输出结果不确定、B、1
  39、若有以下函数调用语句: fun(a+b,(x,y),fun(n+k,d,(a,b)));在此函数调用语句中实参的个数是 A)3 B)4 C)5 D)6、A、1
  40、若执行下面的程序时从键盘上输入3和4,则输出是____ A) 14 B) 16 C) 18 D) 20 main( ) { int a,b,s; scanf(&%d %d&,&a,&b); s=a; if(a、B、1
  41、若执行下面的程序时从键盘上输入5,则输出是 A) 7 B) 6 C) 5 D) 4 main() { scanf(&%d&,&x); if(x++&5) printf(&%d&,x); else printf(&%d&,x&);}、B、1
  42、若执行以下程序时从键盘上输入9,则输出结果是 A) 11 B) 10 C) 9 D) 8 main( ) { scanf(&%d&,&n); if(n++、B、1
  43、设 a、b、c、d、m、n均为 int型变量,且 a=5、b=6、c=7、d=8、m=2、n=2,则逻辑表达式 (m=a&b)&&(n=c&d)运算后,n的值为____ A) 0 B) 1 C) 2 D) 3、C、1
  44、设 int a=12,则执行完语句 a+=a-=a*a后,a的值是 A) 552 B) 264 C) 144 D) -264、D、1
  45、设 int b=2;表达式(b&&2)/(b&&1)的值是 A) 0 B) 2 C) 4 D) 8、A、1
  46、设a,b和c都是int型变量,且a=3,b=4,c=5,则下列表达式中,值为0的表达式是________ A)&a'&&&b& B)a&=b C)a||b+c&&b-c D)!((a
  47、设x、y、z和k都是int型变量,则执行表达式:x=(y=4,z=16,k=32)后,x的值为 A 4 B 16 C 32 D 52、C、1
  48、设x=3,y=-4,z=6,写出表达式的结果。 !(x&y)+(y!=z)||(x+y)&&(y-z) A、0 B、1 C、-1 D、6、B、1
  49、设x和y均为int 型变量,则以下语句:x+=y;y=x-y;y=x-y;x-=y;的功能是 A、把x 和y按从大到小排列 B、把x和y按从小到大排列 C、无确定结果 D、交换x和y中的值、D、1
  50、设有 int x=11; 则表达式 (x++ * 1/3) 的值是 A) 3 B) 4 C) 11 D) 12、A、1
下页更精彩:1
本文已影响人
C语言基础笔试题相关推荐
[C语言基础笔试题]网友评论
<div class="ds-thread" data-thread-key="908210" data-title="C语言基础笔试题" data-image="">}

我要回帖

更多关于 简单的c语言程序 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信