标准c语言笔试题_第1页
标准c语言笔试题_第2页
标准c语言笔试题_第3页
标准c语言笔试题_第4页
标准c语言笔试题_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

标准C语言笔试题

引导语:在应聘与c语言相关岗位的工作时会要求进行笔试,以

下是我整理的标准c语言笔试题,欢迎参考阅读!

1.局部变量能否和全局变量重名?(华为)

解析:能,局部会屏蔽全局。要用全局变量,需要使用::

局部变量可以与全局变量同名,在函数内引用这个变量时,会用

到同名的局部变量,而不会用到全局变量。对于有些编译器而言,

在同一个函数内可以定义多个同名的局部变量.比如在两个循环体

内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循

环体内。

3.如何引用一个已经定义过的全局变量?(华为)

解析:extern

可以用引用头文件的方式,也可以用extern关键字,假如用引

用头文件方式来引用某个在头文件中声明的全局变理,假定你将那

个编写错了,那么在编译期间会报错,假如你用exte门)方式引用时,

假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报

错。

4.static全局变量与一般的全局变量有什么区分?

解析:1)全局变量(外部变量)的说明之前再冠以static就构

成了静态的全局变量。全局变量本身就是静态存储方式,静态全局

千里之行,始于足下。

变量当然也是静态存储方式从以上分析可以看出,

static全局变量与一般的全局变量有什么区分:

static全局变量只初使化一次,防止在其他文件单元中被引用;

static局部变量和一般局部变量有什么区分:

static局部变量只被初始化一次,下一次依据上一次结果值;

static函数与一般函数有什么区分:static函数在内存中只有一份,

一般函数在每个被调用中维持一份拷贝

5.进程和线程的差别(微软亚洲)

解析:答:线程是指进程内的一个执行单元,也是进程内的可调度

实体,与进程的区分:

(1)调度:线程作为调度和安排的基本单位,进程作为拥有资源

的基本单位

(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线

程之间也可并发执行

(3)拥有资源:进程是拥有资源的独立单位,线程不拥有系统资

源,但可以访问隶属于进程的资源.

(4)系统开销:在创建或撤消进程时,由于系统都要为之安排和

回收资源,导致系统的开销明显大于创建或撤消线程时的开销

6.用宏定义写出swap(x,y)(思科)

解析:Sdefineswap(x,y)x=x+y;y=x-y;x=x-y

第2页/共13页

7.什么是预编译,何时需要预编译:(思科)

解析:就是指程序执行前的一些预处理工作,主要指并表示的.何

时需要预编译?1)、总是使用不常常改动的大型代码体。

2)、程序由多个模块组成,全部模块都使用一组标准的包含文

件和相同的编译选项。在这种状况下,可以将全部包含文件预编译

为一个预编译头。

8.下述三个有什么区分?char*constp;charconst*p,const

char*p;(慧通)

解:constchar*p和charconst*p修饰的是p所指向的变量,

不行以用*P='a'等这样的方式修转变量区的内容.指针本身

是可以修改的,比如说

charx,y;const*p=x,p=y,修改指针本身是可以的,*p=

'b,就不行。

Char*constp;中const修饰的是指针,表明指针在操作过程中

不行以修改,

而指针所指向的内容是可以修改的,比如说charx,y;char*

constp=x;*p='b'是可以的,但p=y;是不行以的,const修

饰的是指针,不行以修改指针的指向,

只可以修改指针所捆绑的变量

9.int(*s[10])(int)表示的是什么啊?(慧通)

13.Heap和Stack的区分?

解析:Heap是堆,Stack是栈。

栈的空间由操作系统自动安排和回收:而堆上的空间由程序员申

请和释放。

栈的空间大小较小,而堆的空间较大。

栈的地址空间往低地址方向生长,而难向高地址方向生长。

栈的存取效率更高。

程序在编译期间对变量和函数的内存安排都在栈上,

且程序运行过程中对函数调用中参数的内存安排也是在栈上。

14.sizeof和strlen之间的区分?

解析:(1)sizeof操作符的结果类型是size_t,它在头文件中

的typedef为

unsignedint类型,该类型保证能容纳实现所建立的最大对象

的字节大小。

(2)sizeof是运算符,strlen是函数

(3)sizeof可以用类型做参数,strlen只能用char*做参数,

且必需是以''结尾的。

千里之行,始于足下。

(4)数组做sizeof的参数不退化,传递给strlen就退化为指

针。

(5)大部分编译程序在编译的时候就把sizeof计算过了

是类型或是变量的长度。

(6)strlen的结果要在运行的时候才能计算出来,用来计算字

符串的长度,

而不是类型占用内存的大小。

(7)sizeof后假如是类型必需加括号,假如是变量名可以不加

括号。

(8)当使用了一个结构类型或变量时,sizeof返回实际的大小。

(9)数组作为参数传递给函数时传的'是指针而不是数组,

传递的是数组的首地址。

(10)计算结构变量的大小就必需争论数组对齐问题。

(11)sizeof操作符不能用于函数类型,不完全类型或位字段。

15.^defineDOUBLE(x)x+x,i=5*D0UBLE(5);i是多少?

解析:i为30。

16.unsignedshorthash(unsignedshortkey){return

(key)%256}

第6页/共13页

解析请问hash(16),hash(256)的值分别是:

A.1.16;B.8.32;C.4.16;D.1.32

17.booldoubleintfloat.各种类型与0值的比较(概率较大)

解析:请写出BOOLflag与“零值”比较的if语句。if(flag)

或者if(!flag)

如下写法均属不良风格,不得分。if(flag=TRUE)

if(flag==1)if(flag==FALSE)if(flag==0)

请写出floatx与“零值”比较的if语句。(4分)标准答

案示例:

constfloatEPSINON=0.00001;

if((x=-EPSTNON)(x=EPSTNON)

不行将浮点变量用“二二”或“!二,,与数字比较,

应当设法转化成“二”或“二”此类形式

如下是错误的写法,不得分。if(x=0.0)if(x!=0.0)

请写出char*p与“零值”比较的if语句。(3分)标准答

案:

if(p二二NULL)或者if(p!=NULL)

千里之行,始于足下。

如下写法均属不良风格,不得分。if(P二二0)if(p!=0)if

(p)if(!)

18.结构与联合有和区分?

解析:

1.结构和联合都是由多个不同的数据类型成员组成,但在任何

同一时刻,联合中只存放了一个被选中的成员(全部成员共用一块

地址空间),而结构的全部成员都存在(不同成员的存放地址不同)。

2.对于联合的不同成员赋值,将会对其它成员重写,原来成

员的值就不存在了,

而对于结构的不同成员赋值是互不影响的

19.简述数组与指针的区分?

解析:数组要么在静态存储区被创建(如全局数组),要么在栈

上被创建。

指针可以随时指向任意类型的内存块。

(1)修改内容上的差别

chara[]="hello”;a[0]='X’;

char*p="world”;〃留意p指向常量字符串

p[0]='X';//编译器不能发觉该错误,运行时错误

第8页/共13页

(2)用运算符sizeof可以计算出数组的容量(字节数)。

sizeof(p),p为指针得到的是一个指针变量的字节数,而不是

P所指的内存容量。

C++/C语言没有方法知道指针所指的内存容量,除非在申请内存

时记住它。

留意当数组作为函数的参数进行传递时,该数组自动退化为同类

型的指针。

chara[]=helloworld;char*p=a;coutsizeof(a)endl;

//12字节

coutsizeof(p)endl;//4字节计算数组和指针的内存容量

voidFunc(chara[100]){coutsizeof(a)endl;//4字节

不是100字节}

20.如何推断一段程序是由C编译程序还是由C++编译程序编译

的?

解析:#ifdef_cpluspluscoutc++;#elsecoutc;Sendif

21.main主函数执行完毕后,是否可能会再执行一段代码,给出

说明?

解析:可以,可以用_onexit注册一个函数,它会在main之后

执行

intfnl(void),fn2(void),fn3(void),fn4(void);

千里之行,始于足下。

voidmain(void){

Stringstr(zhanglin);_onexit(fnl);_onexit(fn2);

onexit(fn3);_onexit(fn4);

printf(Thisisexecutedfirst.);}

intfnl(){printf(next.);return0;}

intfn2(){printf(executed);return0;}

intfn3(){printf(is);return0;}

intfn4(){printf(This);return0;)

22.intid[sizeof(unsignedlong)]:这个对吗?为什么??

解析:对,这个sizeof是编译时运算符,编译时就确定了可以看

成和机器有关的常量°

23.如何打印出当前源文件的文件名以及源文件的当前行号?

解析:coutFILE_;cout_LINE__;_FILE和LINE

是系统预定义宏,这种宏并不是在某个文件中定义的

而是由编译器定义的

解析:不能,数组作为参数传递给函数时,数组名被退化为指针,

因此函数中的sizeof(str)实际是在求一个指针的sizeof,答案

为4,

第10页/共13页

因此不能计算出数组的长度。

24.以下函数能求出数组的长度吗?voidfun(charstr[]){int

len=sizeof(str)/sizeof(str[0]);}

25.输出的结果是多少,并分析过程?

unsignedshortA=10;

printf(〜A);

charch=128;

printf(,ch);

答:~A=4294967285,首先将A转化为int类型,即对应的二进

制数值为:00000000000000000000000000001010,

^=11111111111111111111111111110101,

其实这种状况最高位是1,认为是负数,但是在输出中指定以无

符号数输出,于是结果为4294967285=4294967295(四字节表示的

最大数)-10.

ch=128对应的二进制为:10000000,在输出中以整数形式输

出,由于最高位是1,于是就是负数,10000000是该负数的补码,

依据求补码的反步骤计算,先T,得到01111111,在取反得

10000000=128,由于本身是负数,即为T28.

26.New与mallocfree的联系与区分?

千里之行,始于足下。

解析:都是在堆(heap)上进行动态的内存操作。用malloc函数

需要指定内存安排的字

节数并且不能初始化对象,new会自动调用对象的构造函数。会

调用对象的destructor,而free不会调用对象的destructor.

27.用变量a给出下面的定义(特殊重要)

a)一个整型数(Aninteger)b)一个指向整型数的指针(A

pointertoaninteger)

c)一个指向指针的的指针,它指向的指针是指向一个整型数(A

pointertoapointertoaninteger)d)一个有10个整型数的

数组(Anarrayof10integers)

e)一个有10个指针的数组,该指针是指向一个整型数的(An

arrayof10pointerstointegers)f)一个指向有10个整型数

数组的指针(Apointertoanarrayof10integers)

g)一个指向函数的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论