文档库 最新最全的文档下载
当前位置:文档库 › C语言笔试题(二套)

C语言笔试题(二套)

C语言笔试题(二套)
C语言笔试题(二套)

第二套C语言笔试题

一、选择题:

(1)下列叙述中正确的是( C )。

A)程序设计就是编制程序B)程序的测试必须由程序员自己去完成

C)程序经调试改错后还应进行再测试D)程序经调试改错后不必进行再测试

【解析】程序设计是一个把软件需求转换为软件表示的过程。软件编制是程序设计中的一小部分,所以选项A)是错误的。软件测试是为了发现错误而执行程序的过程;为了达到较好的测试效果,应该由独立的第三方构造测试,因为从心理学角度讲,程序人员或设计人员在测试自己的程序时,要采取客观的态度是程度不同地存在障碍的,所以选项B)是错误的。程序调试的任务是诊断和改正程序中的错误。它与软件测试不同,软件测试是尽可能多地发现软件中的错误。先要发现软件的错误,然后借助一定的调试工具去执行软件错误的具体位置。软件测试贯穿整个软件生命周期,调试主要在开发阶段,所以选项C)是正确的。

(2)下列数据结构中,能用二分法进行查找的是( A )。

A)顺序存储的有序线性表B)线性链表C)二叉链表D)有序线性链表

【解析】二分法查找只适应于顺序存储的有序表。在此所说的有序表是指线性表中的元素按值非递减排序(即从小到大,但允许相邻元素值相等)。

(3)下列关于栈的描述正确的是( C )。

A)在栈中只能插入元素而不能删除元素

B)在栈中只能删除元素而不能插入元素

C)栈是特殊的线性表,只能在一端插入或删除元素

D)栈是特殊的线性表,只能在一端插入元素,而在另一端删除元素

【解析】栈是限定在一端进行插入与删除的线性表,在栈中允许插入与删除的一端称为栈顶,而不允许插入与删除的另一端称为栈底。

(4)下列叙述中正确的是( D )。

A)一个逻辑数据结构只能有一种存储结构

B)数据的逻辑结构属于线性结构,存储结构属于非线性结构

C)一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率

D)一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率

【解析】数据的逻辑结构是指数据集合中各数据元素之间所固有的逻辑关系;数据的存储结构是在对数据进行处理时,各数据元素在计算机中的存储关系。数据的存储结构是指数据的逻辑结构在计算机中的表示,一种逻辑结构可以表示成多种存储结构;而采用不同的存储结构,其数据处理的效率是不同的。

(5)下列描述中正确的是( C )。

A)软件工程只是解决软件项目的管理问题

B)软件工程主要解决软件产品的生产率问题

C)软件工程的主要思想是强调在软件开发过程中需要应用工程化原则

D)软件工程只是解决软件开发中的技术问题

【解析】软件工程是建立并使用完善的工程化原则,以较经济的手段获得,能在实际机器上有效运行的可靠软件的一系列方法。软件工程主要思想强调在软件开发过程中需要应用工程化原则。

(6)在软件设计中,不属于过程设计工具的是( D )。

A)PDL(过程设计语言)B)PAD图C)N-S图D)DFD图

【解析】DFD(数据流图Data-Flow-Diagram)是描述数据处理过程的工具,是需求理解的逻辑模型的图形表示,它直接支持系统功能建模。在软件详细设计的过程阶段,要对每个模块规定的功能以及算法的设计,给出适当的算法描述。常见的过程设计工具有:

图形工具:程序流程图、N-S,PAD,HIPO。

表格工具:判定表。语言工具:PDL(伪码)。

(7)下列叙述中正确的是( A )。

A)软件交付使用后还需要再进行维护B)软件工具交付使用就不需要再进行维护

C)软件交付使用后其生命周期就结束D)软件维护是指修复程序中被破坏的指令

【解析】通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期。软件生命周期分为软件定义、软件开发及软件运行维护3个阶段。将已交付的软件投入运行,并在运行使用中不断地维护,根据新提出的需要进行必要而且可能的扩充和删除。

(8)数据库设计的根本目标是要解决( A )。

A)数据共享问题B)数据安全问题C)大量数据存储问题D)简化数据维护

【解析】在数据库应用系统中的一个核心问题就是设计一个能满足用户要求,性能良好的数据库,这就是数据

库设计。数据库设计即是在一定平台制约下,根据信息需求与处理需求设计出性能良好的数据模式。数据库设

计的根本目标是要解决数据共享的问题。

(9)设有如下关系表:

则下列操作中正确的是( B )。

A)T=R∩S B)T=R∪S C)T=R×S D)T=R/S

【解析】关系代数的并运算是指设关系R和S具有相同的关系模式,R和S的并是由属于R或属于S的元组组成的集合,记为R∪S。形式定义为:R∪S≡{t|t∈R∧t∈S},式中t是元组变量。本题中关系T是由属于关系R的或者属

于关系S的元组组成,所以T是R∪S的结果。

(10)数据库系统的核心的是( B )。

A)数据模型B)数据库管理系统C)数据库D)数据库管理员

【解析】数据库管理系统(DBMS)是数据库的机构,它是一种系统软件,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务等。所以数据库管理系统是数据系统的核心。

(11)下列叙述中错误的是( A )。

A)用户所定义的标识符允许使用关键字B)用户所定义的标识符应尽量做到"见名知意"

C)用户所定义的标识符必须以字母或下划线开头

D)用户定义的标识符中、大、小写字母代表不同标识

【解析】在C语言中,合法标识符的命名规则是:标识符可以由字母、数字和下划线组成,并且第一个字符必须

为字母或下划线。在C语言程序中,凡是要求标识符的地方都必须按此规划命名。在C语言的标识符中,大写字

母和小写字母被认为是两个不同的字符。在选择标识符时,应注意做到"见名知义",即选择具有一定含义的英

文单词或汉语拼音作为标识符,以增加程序的可读性。

(12)下列叙述中错误的是( C )。

A)C语句必须以分号结束B)复合语句在语法上被看作一条语句

C)空语句出现在任何位置都不会影响程序运行D)赋值表达式末尾加分号就构成赋值语句

【解析】C语言规定每条语句和数据定义的最后必须有一个分号,分号是C语句的必要组成部分。复合语句也称为"语句块",其形式如下:{语句1 语句2 ……语句n},即用一对大括号把若干语句括起来构成一个语句组。一

个复合语句在语法上视为一条语句,在一对花括号内的语句数量不限。一个赋值表达式的最后加一个分号就成

为一条语句,即赋值语句。空语句是只有一个分号的语句,它什么也不做,程序设计中有时需要加一个空语句

来表示存在一条语句,但随意加分号会导致逻辑上的错误,而且这种错误十分隐蔽,编辑器也不会提示逻辑错误,需要慎用。

(13)下列叙述中正确的是( B )。

A)调用printf()函数时,必须要有输出项

B)使用putchar()函数时,必须在之前包含头文件stdio.h

C)在C语言中,整数可以以十二进制、八进制或十六进制的形式输出

D)调节getchar()函数读入字符时,可以从键盘上输入字符所对应的ASCII码

【解析】在调用函数进行输入和输出时,必须在程序的开头出现包含头文件"stdio.h"的命令行:#include putchar()函数的作用是向终端输出一个字符,其调用形式如下:putchar(ch);其中ch可以是字符

变量或是字符常量。

(14)下列关于函数的叙述中正确的是( B )。

A)每个函数都可以被其他函数调用(包括main函数)B)每个函数都可以被单独编译

C)每个函数都可以单独运行D)在一个函数内部可以定义另一个函数

【解析】C语言规定,不能在函数的内部定义函数,所以选项D)错误;在C语言中函数定义时是互相独立的,可以互相调用,但不能调有main函数,所以选项A)错误。每个函数都可以被单独编译,但不能单独运行。所以选项B)正确。

(15)若有语句:char *line[5];下列叙述中正确的是( A )。

A)定义line是一个数组,每个数组元素是一个基类型为char的指针变量

B)定义line是一个指针变量,该变量可以指向一个长度为5的字符型数组

C)定义line是一个指针数组,语句中的*号称为间址运算符

D)定义line是一个指向字符型函数的指针

【解析】本题考察C语言中运算符的优先级,因为[]比*优先级高,因此line先与[5]结合,形成有5个元素的数组line[5],然后再与line前面的"*"结合,表示此数组是一个指针数组,每个数组元素都是一个基类型为char 的指针变量。

(16)有下列程序段:

typedef struct NODE

{ int num;struct NODE *next;

} OLD;

下列叙述中正确的是( C )。

A)以上的说明形式非法B)NODE是一个结构体类型

C)OLD是一个结构体类型D)OLD是一个结构体变量

【解析】C语言允许用typedef说明一种新类型名,其一般形式为:typedef 类型名标识符。typedef语句的作用仅仅是使"标识符"来代表已存在的"类型名",并未产生新的数据类型。原有类型名依然有效。此题中,用使typedef定义了新的类型OLD结构,所以OLD为结构体类型。

(17)下列叙述中错误的是( C )。

A)在C语言中,对二进制文件的访问速度比文本文件快

B)在C语言中,随机文件以二进制代码形式存储数据

C)语句FILE fp;定义了一个名为fp的文件指针

D)C语言中的文本文件以ASCⅡ码形式存储数据

【解析】在C语言中,文件指针实际上是指向一个结构体类型的指针,一般称这个结构体类型名FILE,可以用此类型名来定义文件指针。定义文件类型指针变量的一般形式为:FILE* 指针变量名;此题的选项C)中少了"*",所以,选项C)错误。

(18)当把四个表达式用作if语句的控制表达式时,有一个选项与其他三个选项含义不同,这个选项是( A )。

A)k%2 B)k%2= =1 C)(k%2) ! =0 D)!k%2= =1

【解析】整数k对2求余数的两个结果只能是0和1,所以选项A)表示k除以2的余数,其结果是0或1。在选项B)、C)和D)中包括算术求余运算符"%",关系等于运算符 "=="和关系不等于运算符"!="以及逻辑非运算符"!"。而逻辑运算符与赋值运算符、算术运算符、关系运算符之间从高到低的运算优先次序是:!(逻辑"非")、算术运算符、关系运算符、&&(逻辑"与")、||(逻辑"或")、赋值运算符。选项B)含义是判断表达式k%2的结果是否等于1、选项C)的含义是判断表达式k%2的结果是否不等于0,选项D)含义是判断表达式!k%2的结果是否等于1,所以选项B)、C)和D)的含义相同。

(19)下列不能正确计算代数式sin2()值的C语言表达式是( A )。

A)1/3 *sin(1/2)*sin(1/2) B)sin(0.5)*sin(0.5)/3 C)pow(sin(0.5),2)/3 D)1/3.0*pow(sin(1.0/2),2)

【解析】在C语言中,两个整型相除,其值也是整型。所以1/2的结果等于0,而不是0.5,所以,选项A)的表达式计算过程为1/3*sin(1/2)*sin(1/2)=1/3*sin(0)*sin(0)=0,所以选项A)错误。

(20)下列能正确定义且赋初值的语句是( B )。

A)int nl=n2=10; B)char c=32; C)float f=f+1.1; D)double x=12.3E2.5;

【解析】C语言规定,可以在定义变量的同时给变量赋初值,称为变量初始化。在选项A)中在给n1和n2进行赋初值,但变量n2没有定义;在选项C)中定义变量f时,不能在赋值表达式的右边出现变量f自身,所以选项C)错误;在选项D)用指数表达式的常量中,字母E后面的数应该为整数,而不应该为小数形式。因此,选项B)正确。(21)下列程序的功能是:给r输入数据后计算半径为r的圆面积s。程序在编译时出错。

main( )

/* Beginning */

{ int r; float s;

scanf("%d",&r);

s=*π*r*r ;

printf("s=%f\n",s);

}

出错的原因是( D )。

A )注释语句书写位置错误

B )存放圆半径的变量r 不应该定义为整型

C )输出语句中格式描述符非法

D )计算圆面积的赋值语句中使用了非法变量

【解析】在C 语言程序中,可以用一个符号名来代表一个常量,称为符号常量。这个符号名必须在程序中进行特别的"指定",并符合标识符的命令规则。在本题中圆周率π是一个符号常量,但在程序中并没有指定其值,所以编译器找不到其值就会报错。所以选项D )正确。

(22)设有定义:int k=1,m=2; float f=7;则下列选项中错误的表达式是( C )。

A )k=k > =k

B )-k+ +

C )k%int(f)

D )k > =f > =m

【解析】在C 语言中,求余运算符"%"两边的运算对象都应为整型数据,所以需要对变量f 进行强制类型转换,正确的写法为k%(int)f 。在C 语言中,逻辑运算符与赋值运算符、算术运算符、关系运算符之间从高到低的运算优先次序是:!(逻辑"非")、算术运算符、关系运算符、&&(逻辑"与")、||(逻辑"或")、赋值运算符。根据运算符的优先级与结合性,对于选项A ),先计算k>=k 的值(为真,即1),再用1对k 进行赋值。对于选取项B ),先计算k++的值,再对其取负数。对于选项D ),先计算k>=f 的值(为假,即0),再用0与 m 进行比较,故最终结果为0。

(23)设有定义:int a=2,b=3,c=4;,则下列选项中值为0的表达式是( A )。

A )(!a= =1)&&(!b= =0)

B )(a <b)&&! c ‖ 1

C )a && b

D )a ‖(b+b)&&(c-a)

【解析】在选项A )中,因为!a=0,所以关系表达式!a==1的值为0,又因为逻辑与运算符 "&&" 两边的表达式只要一个等于零,则整个表达式为零,所以选项A )正确。在选项B )中,关系表达式a

(24)有下列程序段:

int k=0,a=1,b=2,c=3;

k=a <b?b:a ;k=k >c?c:k;

执行该程序段后,k 的值是( B )。

A )3

B )2

C )1

D )0

【解析】因为ac=3不成立,所以条件表达式k>c?c:k 的值等于k 的值等于2。把条件表达式k>c?c:k 的值赋给变量k ,因而变量k 的值等于

2。因此,选项B )为正确答案。

(25)设变量a 、b 、c 、d 和y 都已正确定义并赋值。若有下列if 语句

if(a <b)

if(c= =d) y=0;

else y=1;

该语句所表示的含义是( C )。

A )

???=01y d c b a b a =<≥且 B )???=01y d c b a b a =<≠≥且且d c C )???=01y d c b a b a =<≠<且且d c D )???=01y d c b a =<≠且d c

【解析】语句if (c==d) y=0; else y=1;是if( a

(26)有下列程序段

int n,t=1,s=0;

scanf("%d",&n);

do{ s=s+t;t=t-2; }while(t! =n);

为使此程序段不陷入死循环,从键盘输入的数据应该是( D )。

A )任意正奇数

B )任意负偶数

C )任意正偶数

D )任意负奇数

【解析】因为变量t 的初始值等于1,经过第一次do while 循环中,执行t=t-2这条语句一次,所以变量t 的值为-1,

判断关系表达式t!=n是否成立,如果关系表达式成立,则执行第二次循环,再执行t=t-2这条语句一次,所以变量t的值为-3,接着再判断关系表达式t!=n是否成立,如果关系表达式成立,执行第三次循环,否则退出循环。由此可知,所以只要输入变量n的值为负奇数,则一定会使t==n成立,则退出do while循环。

(27)设变量已正确定义,则以下能正确计算f=n!的程序段是

( D )。

A)f=0; B)f=1;

for(i=1;i<=n;i+ +) f*=i; for(i=1;i<n;i+ +) f*=i;

C)f=1; D)f=1;

for(i=n;i>1;i+ +)f*=i; for(i=n;i>=2;i--)f*=i;

【解析】要正确计算函数f=n!,由n!的数学定义可知n!=n*(n-1)*(n-2) *……*1。在选项A)中,由于f的初值为0,在for循环语句中,f依次乘以1,2,3,……,n。最后计算f=n!=0,所以选项A)不正确。在选项B)中,f 的初值为1,在for循环语句中,f依次乘以1,2,3,……,(n-1)。最后计算得到f=(n-1)!,所以选项B)不正确。在选项C)中,f的初值为1,在for循环语句中,f依次乘以n,n+1,n+2,……,所以选项C)不正确。在选项D)中,f的初值为1,在for循环语句中,f依次乘以n,n-1,n-2,……,2。最后计算f=n!,所以选项D)正确。

(28)设有定义:int n1=0,n2,*p=&n2,*q=&n1;,以下赋值语句中与n2=n1;语句等价的是( A )。

A)*p=*q; B)p=q; C)*p=&n1; D)p=*q;

【解析】在定义指针变量p和 q时,分别把变量n2和n1的地址赋给了指针变量p和q,所以*p和 *q中内容就分别是变量n2和n1的值,所以语句*p= *q与语句n2=n1等价。因此选项A)正确。

(29)若有定义:int x=0,*p=&x;,则语句printf("%d\n",*p);的输出结果是( B )。

A)随机值B)0 C)x的地址D)p的地址

【解析】在定义指针变量p时,把变量x的地址赋给指针变量p,所以*p 的值为变量x的值,即等于0。因而选项B)正确。

(30)设fun()函数的定义形式为( C )。

void fun(char ch,float x){…}

则下列对函数fun的调用语句中,正确的是

A)fun("abc",3.0); B)t=fun('D',16.5); C)fun('65',2.8); D)fun(32,32);

【解析】由题目的已知条件函数fun的定义形式 void fun(char ch,float x){…}可知,函数fun定义为void型(无返回值型),故其没有返回值,所以选项B)错误。函数fun的第一个形式参数为字符类型而不是字符串类型,所以选项A)不符合要求。选项D)的第一实参为整型与函数fun的第一形式参数的类型不符,所以选项D)也是错误的。选项C)的第一个实参的类型为字符型、第二个实参的类型为单精度型,与函数fun的形式参数的类型相符合,所以选项C)为正确答案。

(31)有下列程序:

main( )

{ int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],*q=p+2;

printf("%d\n",*p+*q);

}

程序运行后的输出结果是( B )。

A)16 B)10 C)8 D)6

【解析】由整型数组a[10]的定义可知,a[3]的值等于4;由语句*p=&a[3]可知指针变量p指向数组a[10]的第四个元素,即a[3],所以*p=4。而由语句*q=p+2可知,指针变量q指向数组a[10]的第六个元素,即*q= a[5]=6,所以*p+*q=4+6=10。

(32)有下列程序:

main( )

{ char p[ ]={'a','bv,'c'},q[ ]="abc";

printf("%d%d\n",sizeof(p),sizeof(q));

};

程序运行后的输出结果是( C )。

A)4 4 B)3 3 C)3 4 D)4 3

【解析】语句char p[ ]={ 'a', 'b', 'c'};定义了一个一维字符数组p[ ],并用3个字符'a','b','c'进行了初始化;而语句q[ ]="abc"表示定义了一个一维字符数组,并用一个字符串常量"abc"进行了初始化。在C语言中,系统在每个字符串常量的最后自动加入一个字符'\0'作为字符串的结束符。所以函数sizeof(q)=4,而sizeof(p)=3,因而选项C)为正确答案。

(33)有下列程序:

#define f(x)=(x*x)

main( )

{ int i1,i2;

i1=f(8)/f(4); i2=f(4+4)/f(2+2);

prinft("%d,%d\n",i1,i2);

}

程序运行后的输出结果是( C )。

A)64,28 B)4,4 C)4,3 D)64,64

【解析】在C语句中,带参数的宏定义命令行形式如下:#define 宏名(形参表) 替换文本,所以语句#define f(x)=(x*x)是定义带参数x的宏f。因此,i1=f(8)/f(4)=(8*8)/(4*4)=64/16=4;i2=f(4+4)/f(2+2)=(4+4*4+4)/(2+2*2+2)=24/8=3,所以选项C)为正确答案。

(34)有下列程序:

main( )

{ char a1='M',a2='m';

printf("%c\n",(a1,a2));

}

下列叙述中正确的是( B )。

A)程序输出大写字母M B)程序输出小写字母m

C)格式说明符不足,编译出错D)程序运行时产生出错信息

【解析】在C语句中,","是一种特殊运算符,用逗号将表达式连接起来的式子称为逗号表达式。其一般形式为:表达式1,表达式2,……,表达式n。逗号表达式的值为最后一个表达式的值。由题意可知:(a1,a2)为逗号表达式,其值是a2的值。因此,输出的是a2的值m。

(35)有下列程序:

#include

main( )

{ char c1='1',c2='2';

c1=getchar( ); c2=getchar( ); putchar(c1); putchar(c2);

}

当运行时输入:a后,下列叙述正确的是( A )。

A)变量c1被赋予字符a,c2被赋予回车符B)程序将等待用户输入第2个字符

C)变量c1被赋予字符a,c2中仍是原有字符2 D)变量c1被赋予字符a,c2中将无确定值

【解析】getchar()函数从终端读入一个字符作为函数值。在输入时,空格、回车符都将作为字符读入,而且只有在用户敲入Enter键时,读入才开始执行。所以当输入a后,变量c1被赋予字符a ,而变量c2被赋予回车符。(36)有下列程序:

main( )

{ int k=5,n=0;

while(k>0)

{ switch(k)

{ default:break;

case 1: n+ =k;

case 2:

case 3: n+ =k;

}

k--;

}

printf("%d\n",n);

}

程序运行后的输出结果是( D )。

A)0 B)4 C)6 D)7

【解析】本题主要考察while循环语句和switch case语句的使用方法。其执行步骤为:当k=5 时,跳出switch语句,然后k自减1;当k=4时,跳出switch语句,然后k自减1;当k=3时,n=n+k=0+3=3,跳出switch语句,然后k自减1;当k=2时, n=n+k=3+2=5,跳出switch语句,然后k自减1;当k=1时,case 1:n=n+k=5+1=6,case 3:n=n+k=6+1=7,跳

出switch语句,然后k自减1;当k=0时,退出循环,所以输出结果为7。

(37)有下列程序:

main( )

{ int a[ ]={2,4,6,8,10},y=0,x,*p;

p=&a[1];

for(x=1;x<3;x+ +) y+ =p[x];

printf("%d\n",y);

}

程序运行后的输出结果是( C )。

A)10 B)11 C)14 D)15

【解析】由题目的语句p=&a[1]可知,p指向a数组中下标为1的元素"4",又因为p为指针变量,所以p[x]与*(p+x)等价,因而在for循环语句中,第一次循环p[1]指向a数组中下标为2的元素"6",第二次循环p[2]指向a数组中下标为3的元素"8",所以y=6+8=14,因而选项C)为正确答案。

(38)有下列程序:

void sort(int a[ ],int n)

{ int i,j,t;

for(i=0;i<n-1;i+ +)

for(j=i+1;j<n;j+ +)

if(a[i]<a[j]){ t=a[i]; a[i]=a[j]; a[j]=t;}

}

main( )

{ int aa[10]={1,2,3,4,5,6,7,8,9,10},i;

sort(aa+2,5);

for(i=0;i<10;i+ +)printf("%d,",aa[i]);

printf("\n");

}

程序运行后的输出结果是( C )。

A)1,2,3,4,5,6,7,8,9,10, B)1,2,7,6,3,4,5,8,9,10, C)1,2,7,6,5,4,3,8,9,10, D)1,2,9,8,7,6,5,4,3,10,

【解析】由sort()函数的两层for循环语句可知,其功能是把数组a[ ]中的元素按照从大到小的顺序进行排列。在main()函数中首先定义了一维整型数组aa[10],然后调用sort(aa+2,5)实现从数组aa中下标为2的元素"3"开始,其后连续的5个元素从大到小进行排列,其余元素不变。所以选项C)为正确答案。

(39)有下列程序:

void sum(int a[ ])

{ a[0]=a[-1]+a[1];

}

main( )

{ int a[10]={1,2,3,4,5,6,7,8,9,10};

sum(&a[2]);

printf("%d\n",a[2]);

}

程序运行后的输出结果是( A )。

A)6 B)7 C)5 D)9

【解析】子函数sum()的作用是在数组a[ ]中,a[0]元素的值等于其前一项和后一项元素之和。所以在main()函数中,函数sum(&a[2])将a[2]的地址传给函数sum(),所以a[2]的值等于其前一项a[1]和后一项a[3]之和。即a[2]=a[1]+a[3]=2+4=6,所以输出结果为6。

(40)有下列程序:

void swap1 (int c0[ ],int c1[ ])

{ int t;

t=c0[0]; c0[0]=c1[0]; c1[0]=t;

}

void swap2(int *c0,int *cl)

{ int t;

t=*c0; *c0=*c1; *c1=t;

}

main( )

{ int a[2]={3,5}, b[2]={3,5};

swap1(a,a+1); swap2(&b[0],&b[1]);

printf("%d %d %d %d\n",a[0],a[1],b[0],b[1]);

}

程序运行后的输出结果是( A )。

A)3 5 5 3 B)5 3 3 5 C)3 5 3 5 D)5 3 5 3

【解析】子函数swap1(int c0[ ],int c1[ ])的形式参数为两个整型变量,所以在main()主函数中,把数组a 中的两个元素传递给swap1函数的两个形参,swap1函数执行后并不改变a[2]={3,5}中元素的值。子函数swap2(int *c0,int *c1)的形式参数为两个整型指针型变量,所以数组b中的两个元素经过swap2函数执行互换后变为b[2]={5,3},所以输出结果为:3 5 5 3,选项A)正确答案。

(41)有下列程序:

#include

main( )

{ char p[ ]={'a', 'b', 'c'},q[10]={ 'a', 'b', 'c'};

printf("%d%d\n",strlen(p),strlen(q));

}

下列叙述中正确的是( A )。

A)在给p和q数组赋初值时,系统会自动添加字符串结束符,故输出的长度都为3

B)由于p数组中没有字符串结束符,长度不能确定,但q数组中字符串长度为3

C)由于q数组中没有字符串结束符,长度不能确定,但p数组中字符串长度为3

D)由于p和q数组中都没有字符串结束符,故长度都不能确定

【解析】在给字符数组p和q以单个字符的形式赋初值时,系统不会自动添加字符串结束标识符'\0',函数strlen(p)和strlen(q)求的是字符数组p和q中字符串的长度,不包括字符串结束标识符'\0',由题目可知,字符数组p和q 的字符个数都有3个,所以字符数组p和q的长度均为3。

(42)有下列程序,其中函数f()的功能是将多个字符串按字典顺序排序()。

#include

void f(char *p[ ],int n)

{ char *t; int i,j;

for(i=0;i

for(j=i+1;j

if(strcmp(p[i],p[j]>0){t=p[i]; p[i]=p[j], p[j]=t;}

}

main( )

{ char *p[5]={"abc","aabdfg","abbd","dcdbe","cd"};

f(p,5);

printf("%d\n",strlen(p[1]));

}

程序运行后的输出结果是( D )。

A)2 B)3 C)6 D)4

【解析】子函数void f(char *p[ ],int n)的功能是将字符指针数组*p[ ]中的每个字符串按照从小到大的顺序进行排序。所以在主函数main()中,调用f(p,5)后,字符指针数组*p[5]中的字符串按照字典顺序从小到大的顺序排列为如下形式,即*p[5]={"aabdfg","abbd","abc","cd","dcdbe"},因而p[1]= "abdb",strlen(p[1])=4。所以选项D)为正确选项。

(43)有下列程序:

#include

void f(char *s,char *t)

{ char k;

k=*s; *s=*t; *t=k;

s+ +; t--;

if(*s) f(s,t);

}

main( )

{ char str[10]="abcdefg",*p;

p=str+strlen(str)/2+1;

f(p,p-2);

printf("%s\n",str);

}

程序运行后的输出结果是( B )。

A)abcdefg B)gfedcba C)gbcdefa D)abedcfg

【解析】在子函数void f(char *s,char *t)中,字符指针s和t分别指向一个字符串的首部和尾部,从而实现字符串倒置的功能。在main()函数中,由于strlen(str)/2=3,所以p=str+4,即p指向str数组中下标为4的元素"e",(p-2)指向str数组中下标为2的元素"c",再调用f(p,p-2)函数后,实现把字符串str[10]的前半部分"abc"和后半部分"efg"分别从字符'c'和'e'开始实现两个字符串相应字符的互换。所以选项B)为正确答案。

(44)有下列程序:

float fl(float n)

{ return n*n; }

float f2(float n)

{return 2*n;}

main( )

{ float (*p1)(float),(*p2)(float),(*t)(float),y1,y2;

p1=f1; p2=f2;

y1=p2(p1(2.0));

t=p1; p1=p2; p2=t;

y2=p2(p1(2.0));

printf("%3.0f, %3.0f\n",y1,y2);}

程序运行后的输出结果是( A )。

A)8,16 B)8,8 C)16,16 D)4,8

【解析】在主函数main()中,定义了3个函数指针p1、p2和 t。在计算y1的值时,p1调用函数f1,p2调用函数f2,其计算过程为:y1=p2(p1(2.0))=2*(2.0*2.0)=8,然后利用中间的函数指针,实现了函数指针p1和p2所指向函数的互换,此时在计算y2的值时,p1调用函数f2,p2调用函数f1,其计算过程为:

y2=p2(p1(2.0))=(2*2.0)*(2*2.0)=16。所以选项A)为正确答案。

(45)有下列程序:

int a=2;

int f(int n)

{ static int a=3;

int t=0;

if(n%2){ static int a=4; t+ =a+ +;}

else{ static int a=5; t+ =a+ +;}

returnt+a+ +;

}

main( )

{ int s=a,i;

for(i=0;i<3;i+ +) s+ =f(i);

printf("%d\n",s);

}

程序运行后的输出结果是( C )。

A)26 B)28 C)29 D)24

【解析】在程序句定义了全局变量a=2;所以在主函数main()中,语句int s=a;的执行结果为:s=a=2;在子函数int f(int n)中,由语句static int a=3;可知定义了静态局部变量a,其初值等3。所以在return t+a++语句中a 的初值等于3。当变量n的值为奇数时,if else条件语句执行{static int a=4;t+=a++;}语句,当变量n的值为偶数时,if else条件语句执行{static int a=5;t+=a++;}语句。所以本题的计算过程为:

f(0)=5+3=8,f(1)=4+4=8,f(2)=6+5=11,s=f(0)+f(1)+f(2)+2=29,因此,选项C)为正确答案。

(46)有下列程序:

#include

struct STU

{ int num;

float TolalScorc;

};

void f(structSTU p)

{ struct STU s[2]={{20044,550},{20045,537}};

p.num=s[1].num; p.TotalScore=s[1].TotalScore;

}

main( )

{ struct STU s[2]={{20041,703},{20042,580}};

f(s[0]);

printf("%d %3.0f\n",s[0]. num,s[0]. TotalScore);

}

程序运行后的输出结果是( D )。

A)20045 537 B)20044 550 C)20042 580 D)20041 703

【解析】在C语言中,函数的实在参数和形式参数之间进行数据传递。数据只能从实参单向的传递给形参,用户不可能在函数中改变对应实参的值。所以main()函数中的语句f(s[0])执行后,结构体变量s[0]的值并不发生变量,因而选项D)为正确答案。

(47)有下列程序:

#include

struct STU

{ char name[10];

int num;

};

void f(char *name,int num)

{ struct STU s[2]={{"SunDan",20044},{"Penghua",20045}};

num=s[0].num;

strcpy(name,s[0].name);

}

main( )

{ struct STU s[2]={{"YangSan",2004},{"LiSiGuo",20042}},*p;

p=&s[1]; f(p->name,p->num);

printf("%s %d\n", p->name,p->num);

}

程序运行后的输出结果是( A )。

A)SunDan 20042 B)SunDan 20044 C)LiSiGuo 20042 D)YangSan 20041

【解析】在函数 void f(char *name ,int num)的两个形参中,name为字符指针传递,num为整型值传递,指针传递会改变main()函数中的实参变量STU s[1].name的值,而值传递不会改变实参变量STU s[1].num的值,所以执行p=&s[1];f(p->name,p->num)语句后,p->name=SunDan, p->num=20042。所以选项A)为正确答案。(48)有下列程序:

struct STU

{ char name[10]; int num; float TotalScore; };

void f(struct STU *p)

{ struct STU s[2]={{"SunDan",20044,550}, {"Penghua",20045,537}},

*q=s;+ +p; + +q; *p=*q;

}

main( )

{ struct STU s[3]={{"YangSan",20041,703},{"LiSiGuo",20042,580}};

f(s);

printf("%s%d%3.0f\n",s[1].name,s[1].num,s[1].TotalScore);

}

程序运行后的输出结果是( B )。

A)SunDan 20044 550 B)Penghua 20045 537 C)LiSiGuo 20042 580 D)SunDan 20041 703

【解析】子函数f()的形参为结构体指针变量,通过f(s)语句,使指针p指向主函数中结构体STU数组元素s[0]。在子函数f()中,++p使指针p指向main()函数中的s[1],++q使指针q指向f()函数中的s[1],语句*p=*q是将f()函数中的结构体变量s[1]的值赋给main()函数中的结构体变量s[1],所以选项B)为正确答案。

(49)下列程序的功能是进行位运算:

main( )

{ unsigned char a,b;

a=7^3; b=~4 & 3;

printf("%d%d\n",a,b);

}

程序运行后的输出结果是( A )。

A)4 3 B)7 3 C)7 0 D)4 0

【解析】7的二进制形式为111,3的二进制形式为011,所以a=7^3的二进制形式表示为111^011=100,而二进制100转化为十进制数应为4。4的二进制形式为100,3的二进制形式为011,所以b=~4&3的二进制形式表示为~100&011=11&11=11,而11转化为十进制数应为3。所以选项A)为正确答案。

(50)有下列程序:

#include

main( )

{ FILE *fp; int i,k,n;

fp=fopen("data.dat","w+");

for(i=1;i<6;i+ +)

{fprintf(fp, "%d ",i);

if(i%3= =0) fprintf(fp,"\n");

}

rewind(fp);

fscanf(fp,"%d%d",&k,&n); printf("%d%d\n",k,n);

fclose(fp);

}

程序运行后的输出结果是( D )。

A)0 0 B)123 45 C)1 4 D)1 2

【解析】fopen("data.dat","w+")是以读写的形式打开文件data.dat,fprint(fp,"%d",i)是将就量i输出到fp 所指的文件中,通过for循环将数输出到文件data.dat中,每输出3个数进行换行,所以输出结果为:第1行为123,第2行为45,rewind(fp)是将文件指针指向文件的开始,fscan(fp,"%d %d",&k,&n)是将文件指针fp所指的文件中的数输入到变量k和n。所以答案为1 2。

二、填空题:

(1)数据管理技术发展过程经过人工管理、文件系统和数据库系统3个阶段,其中数据独立性最高的阶段是数据库系统。

【解析】数据管理技术的发展过程分为人工管理、文件系统以及数据库系统3个阶段,文件系统是数据库系统发展的初级阶段,它提供了简单的数据共享与数据管理能力,但是它无法提供完整的、统一的、管理和数据共享的能力。数据独立性是数据与程序间的互不依赖性,即数据库中数据独立于应用程序而不依赖于应用程序。即数据的逻辑结构、存储结构与存取方式的改变不会影响应用程序。所以数据独立性最高的阶段是数据库系统。

(2)算法复杂度主要包括时间复杂度和空间复杂度。

【解析】算法的复杂度主要包括时间复杂度和空间复杂度。所谓算法的时间复杂度,是指执行算法所需要的计算工作量。一个算法的空间复杂度,一般是指执行这个算法所需要的内存空间。

(3)在进行模块测试时,要为每个被测试的模块另外设计两类模块:驱动模块和承接模块(桩模块)。其中

驱动模块的作用是将测试数据传送给被测试的模块,并显示被测试模块所产生的结果。

【解析】驱动模块相当于被测模块的主程序。它接收数据,并传送给被测试的模块,输出实际测试结果。桩(承接)模块通常用于代替被测试模块调用的其他模块,其作用仅做少量的数据操作,是一个模拟子程序,不必将子模块的所有功能带入。

(4)一棵二叉树第六层(根结点为第一层)的结点数最多为32个。

【解析】所谓满二叉树是指这样的一种二叉树,除最后一层外,每一层上的所有结点都有两个子结点。即,在满

二叉中,每一层上的结点数都达到最大值,也就是在满二叉树的第k层上有2k-1个结点。对于本题来说,对于深度为6的二叉树来说,第6层的结点数最多为2(6) =32。

(5)数据结构分为逻辑结构和存储结构,循环队列属于储存结构。

【解析】队列的顺序存储结构一般采用循环队列的形式。所谓循环队列就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用。

(6)下列程序运行后的输出结果是88。

main( )

{ int x=0210; printf("%X\n",x);

}

【解析】以0开头的数是八进制数。所以x=0210表示八进制数210,其二进制形式为010001000。"%x"表示以16进制的形式输出,所以010001000的十六进制输出结果88。

(7)下列程序运行后的输出结果 1 。

main( )

{ int a=1,b=2,c=3;

if(c=a) printf("%d\n",c);

else printf("%d\n"b);

}

【解析】在主函数main()中,语句if(c=a) printf("%d\n",c);的条件判断表达形式是一个赋值语句,而根据变量a的初始值等于1,所以变量c的等于1为真,所以执行打印输出语句,输出变量c的当前值1。

(8)已有定义:double *p;,请写出完整的语句,利用malloc函数使p指向一个双精度型的动态存储单元

p=(double *)malloc(sizeof(double))。

【解析】动态存储单元分配函数malloc的形参为申请动态存储单元的大小,此函数默认返回的类型为无类型的指针,所以调用此函数时需要进行强制类型转换,因而本题需要将返回类型强制转换为double型指针

(9)下列程序运行后的输出结果是 2 20.000000。

main( )

{ char c; int n=100;

float f=10; double x;

x=f* =n/ =(c=50);

printf("%d %f\n",n,x);

【解析】按照运算符优先次序计算表达式x=f*=n/=(c=50)的值。其运算次序为:①对c进行赋值;②计算表达式n/=c的值,即n-n/c=100/50=2;③计算表达式f*=n的值,即f=f*n=10.000000*2=20.000000;④将f的值赋给x,即x=20.000000。

(10)下列程序的功能是计算:s=1+12+123+1234+12345。请填空。

main( )

{ int t=0,s=0,i;

for(i=1;i<=5;i+ +}

{ t=i+ t*10; s=s+t; }

printf("s=%d\n",s);

【解析】因为在for循环的每一次循环中,循环变量从1递增到5,其值都作为每一次求和累加数的个位数,所以空白处应该填写t*10,这样表达式t=i+t*10的值才是每次累加的数,执行语句s=s+t,即累加每次循环t的值,就求得到和。

(11)已知字母A的ASCII码为65,下列程序运行后的输出结果是67 G。

main( )

{ char a,b;

a='A'+'5'-'3'; b=a+'6'-'2';

printf("%d %c\n",a,b);

}

【解析】根据字符ASCⅡ的排序顺序可知,执行语句a='A'+'5'-v3';得到的是大写字母C的ASCII的值,即67,用"%d"的十进制数字输出。而执行语句b=a+'6'-'2'; 得到的是大写字母G的ASCⅡ的值,即71,用"%c"以字符的形式输出,即字母G。

(12)有下列程序:

int sub(int n) { return(n/10+n%10);}

main( )

{ int x,y;

scanf("%d",&x);

y=sub(sub(sub(x)));

printf("%d\n",y);

}

若运行时输入:1234,程序的输出结果是 10 。

【解析】函数sub(int n)的作用是求得整数n的个位数字与其十分之一数字的和。在主函数中,对函数sub(int n)进行了3次递归调用,当输入1234时,其执行顺序为: sub(1234)=127,sub(127)=19,sub(19)=10,所以结果为10。

(13)下列函数sstrcat( )的功能是实现字符串的连接,即将t所指字符串复制到s所指字符串的尾部。例如:s所指字符串为abcd,t所指字符串为efgh,函数调用后s所指字符串为abcdefgh。请填空。

#include

void sstrcat(char *s,char *t)

{ int n;

n=strlen(s);

while(*(s+n)= *t){s+ +,t+ +;}

}

【解析】首先用字符串函数strlen(s)求出字符数组s的长度,然后s+n指向s数组中最后一个元素的后面,把t数组放在s之后,当遇到t数组的结束符"/0"时,while判别式的值为0而结束循环,即实现了函数的功能。

(14)下列程序运行后的输出结果是bcdefgha

#include

char *ss(char *s)

{ char *p,t;

p=s+1;t=*s;

while(*p){*(p-1)=*p;p+ +;}

*(p-1)=t;

return s;

}

main( )

{ char *p,str[10]="abcdefgh";

p=ss(str);

printf("%s\n",p);

【解析】由*ss()函数中的while循环语句可知,*ss()函数的功能是将字符串s从第二个元素开始到最后一个元素,逐一向前移动一位,最后再将字符串s的第一个元素放在最后元素的位置上。

(15)下列程序运行后的输出结果是15。

int f(int a[ ],int n)

{ if(n>=1)return f(a,n-1)+a[n-1];

else return 0;

}

main( )

{ int aa[5]={1,2,3,4,5},s;

s=f(aa,5); printf("%d\n",s);

【解析】函数f(int a[ ],int n)的作用是从后向前递归求出数组a[ ]各个元素的和。所以主函数中语句s=f(aa,5)的执行过程为:

=f(aa,4)+aa[4]=f(aa,3)+aa[3]+aa[4]=f(aa,2)+aa[2]+aa[3]+aa[4]=f(aa,1)+aa[1]+aa[2]+aa[3]+aa[4]

=a[0]+aa[1]+aa[2]+aa[3]+aa[4]=15。

(16)下列程序运行后的输出结果是 5 。

struct NODE

{ int num; truct NODE *next;

};

main( )

{ struct NODE s[3]={{1, '\0'},{2, '\0'},{3, '\0'}},*p,*q,*r;

int sum=0;

s[0].next=s+1; s[1].next=s+2; s[2].next=s;

p=s; q=p→next; r=q→next;

sum+ =q→next→num; sum+ =r→next->next→num;

printf("%d\n",sum);

【解析】由于主函数中的语句s[0].next=s+1;s[1].next=s=2;s[2].next=s;可知结构体NODE数组s[3]形成一个循环队列。所以有*p=s[0],*q=s[1],*r=s[2],sum+=q->next->num=s[2].num=3,因而sum=0+3=3,

sun+=r->next->next->num=s[1].num=2,所以sum=3+2=5。

(17)下列程序的功能是输出如下形式的方阵:

13 14 15 16

9 10 11 12

5 6 7 8

1 2 3 4

请填空。

main( )

{ int i,j,x;

for(j=4;j >0;j--)

{ for(i=1;i<=4;i+ +)

{ x=(j-1)*4+ i;

printf("%4d",x);

}

printf("\n");

【解析】要输出一个形式的方阵,可以把这个方阵看成是一个二维数组,用二层for循环来实现,在第1个for循环中用变量j每次递减1控制行循环,在第1个for循环中用变量i每次递增1来控制列循环,最后打印输出得到所求的结果。

(18)下列函数rotate的功能是:将a所指N行N列的二维数组中的最后一行放到b所指二维数组的第0列中,把a所指二维数组中的第0行放到b所指二维数组的最后一列中,b所指二维数组中其他数据不变。

#define N 4

void rotade(int a[ ][N],int b[ ][N])

{ int i,j;

for(i=0;I

{ b[i][N-1]= a[0][i]; b[i][0]=a[N-1][i]; }

【解析】由二维数组的定义可知,要实现把a所指二维数组中的第0行放到b所指二维数组的最后一列中的要求,

只要二维数组b[ ][N]的行下标从0递增加N-1,数组a[ ][N]的列下标从0递增加N-1,即表达式b[i][N-1]=a[0][i]符合此要求。要实现将a所指N行N列的二维数组中的最后一行放到b所指二维数组的第0列中的要求,只需要二维数组b[][N]的行下标从0递增加N-1, 数组a[ ][N]的列下标从0递增加N-1,即表达式b[i][0]=a[N-1][i]]符合此要求。

嵌入式C语言经典笔试题目

嵌入式c语言经典笔试题目 1 .用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1) #define语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2)懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。 3)意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。 4)如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。记住,第一印象很重要。 2 .写一个"标准"宏MIN,这个宏输入两个参数并返回较小的一个。 #define MIN(A,B)((A)<= (B) ? (A) : (B)) 这个测试是为下面的目的而设的: 1)标识#define在宏中应用的基本知识。这是很重要的。因为在嵌入(inline)操作符变为标准C的一部分之前,宏是方便产生嵌入代码的唯一方法,对于嵌入式系统来说,为了能达到要求的性能,嵌入代码经常是必须的方法。 2)三重条件操作符的知识。这个操作符存在C语言中的原因是它使得编译器能产生比if-then-else更优化的代码,了解这个用法是很重要的。 3)懂得在宏中小心地把参数用括号括起来 4)我也用这个问题开始讨论宏的副作用,例如:当你写下面的代码时会发生什么事? least = MIN(*p++, b); 3.预处理器标识#error的目的是什么? 如果你不知道答案,请看参考文献1。这问题对区分一个正常的伙计和一个书呆子是很有用的。只有书呆子才会读C语言课本的附录去找出象这种问题的答案。当然如果你不是在找一个书呆子,那么应试者最好希望自己不要知道答案。 死循环(Infinite loops) 4.嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢? 这个问题用几个解决方案。我首选的方案是: while(1) { } 一些程序员更喜欢如下方案: for(;;) { } 这个实现方式让我为难,因为这个语法没有确切表达到底怎么回事。如果一个应试者给出这个作为方案,

C语言考试题库及答案复习整理

C 语言理论上机考试选择题部分(共200题) 1、下面程序的输出是___D______ #include void main() { int k=11; printf("k=%d,k=%o,k=%x\n",k,k,k); } A) k=11,k=12,k=11 B) k=11,k=13,k=13 C) k=11,k=013,k=0xb D) k=11,k=13,k=b 2、在下列选项中,不正确的赋值语句是__D______. A) ++t; B) n1=(n2=(n3=0)); C) k=i=j; D) a=b+c=1; 3、下面合法的C 语言字符常量是______A____. A) '\t' B) "A" C) 65 D) A 4、表达式: 10!=9的值是 ________D____. A) true B) 非零值 C) 0 D) 1 5、C 语言提供的合法的数据类型关键字是_____B____. A) Double B) short C) integer D) Char 6、字符(char)型数据在微机内存中的存储形式是__D__. A) 反码 B) 补码 C) EBCDIC 码 D) ASCII 码 7、C 语言程序的基本单位是_____C______. A) 程序行 B) 语句 C) 函数 D) 字符 8、设 int a=12,则执行完语句

a+=a-=a*a 后,a 的值是____D____ A) 552 B) 264 C) 144 D) -264 9、执行下面程序中的输出语句后,输出结果是____B__. #include void main() {int a; printf("%d\n",(a=3*5,a*4,a+5)); } A) 65 B) 20 C) 15 D) 10 10、下面程序的输出是____B______. #include void main() {int x=023; printf("%d\n",--x); } A) 17 B) 18 C) 23 D) 24 11、下面程序的输出的是_____C____. #include void main() {int x=10,y=3; printf("%d\n",y=x/y); } A) 0 B) 1 C) 3 D) 不确定的值 12、已知字母A 的ASCII 码为十进制的65,下面程序的输出是______A_____. #include void main() {char ch1,ch2; ch1='A'+'5'-'3'; ch2='A'+'6'-'3'; printf("%d,%c\n",ch1,ch2); } A) 67,D B) B,C C) C,D D) 不确定的值 13、若要求在if 后一对圆括号中表示a 不等于0的关系,则能正确表示这一关系的表达式为____D__. A) a<>0 B) !a C) a=0 D) a

c语言笔试题(答案)(精心整理)

笔试题 一、填空题(每个空4分,共28分) 1)struct tagABC { char name[10]; char sex; long sno; float score[4]; }*pAbc;(四字节对齐) pAbc=NULL; 那么,执行pAbc+=2;之后pAbc的值为(64 ) 2)如下代码,最终value的值是(8) int *p1,*p2; int value; p1=(int*)0×400; p2=(int*)0×408; value = p2-p1; 3)如下代码,printf的结果为(2) #include〈stdio.h〉 #include〈string.h〉 void main(void) { char acNew[20]= “\\0\0”; printf(“%d\n”,strlen(acNew)); } 4) 有如下程序段,运行该程序的输出结果是(33) main () { int y=3,x=3,z=1; printf(“%d%d\n”,(++x,y++),z+2); } 5)设有:int a=1,b=2,c=3,d=4,m=2,n=2;执行(m=a>b)&&(n=c>d)后,n的值为(2)6)struct tagAAA { Unsigned char ucId:1; Unsigned char ucPara0:2; Unsigned char ucState:6; Unsigned char ucTail:4; Unsigned char ucAvail; Unsigned char unTail2:4; Unsigned long ulData; }AAA_S 问:AAA_S在字节对齐分别为1,4情况下,占用的空间大小分别是多少?( 9)(12 )

c语言笔试题目及答案

c语言笔试题目及答案 C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。下面是c语言笔试题目及答案,请参考。 c语言笔试题目及答案 一、选择题((1)~(10)每小题2分,(11)~(50)每小题1分,共60分) 下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确的选 项涂写在答题卡相应位置上,答在试卷上不得分。 (1)数据的存储结构是指________。 A)存储在外存中的数据 B)数据所占的存储空间量 C)数据在计算机中的顺序存储方式 D)数据的逻辑结构在计算机中的表示 答案:D 评析:数据的逻辑结构在计算机存储空间中的存放形式形式称为数据的存储结构(也称数据的物理结构)。 (2)下列关于栈的描述中错误的是________。 A)栈是先进后出的线性表

B)栈只能顺序存储 C)栈具有记忆作用 D)对栈的插入与删除操作中,不需要改变栈底指针 答案:B 评析:栈是一种特殊的线性表,又称先进后出表(FILO—First In Last Out)。 (3)对于长度为n的线性表,在最坏情况下,下列各排序法所对应的比较次数中正确的是 ________。 A)冒泡排序为n2 B)冒泡排序为n C)快速排序为n D)快速排序为n(n一1)/2 答案:D 评析:假设线性表的长度为n,则在最坏情况下,冒泡排序需要经过n/2遍的从前往后扫描和n/2遍的从后往前扫描,需要比较次数为n(n-1)/2。快速排序法的最坏情况比较次数也是n(n-1)/2。 (4)对长度为n的线性表进行顺序查找,在最坏情况下所需要的比较次数为________。 A)log2n B)n/2 C)n D)n+l 答案:C 评析:顺序查找过程中,如果被查找的元素是线性表中的最后一个元素,或者元素不在线性表中,则需要与线性表中所有的元素进行比较。对长度为n的线性表进行顺序查找,在最坏情况下需要比较

大学c语言考试题库含答案

================================================== 题号:1482 执行以下程序段后,输出结果和a的值是()。int a=10; printf("%d",a++); A、11 和10 B、11 和11 C、10 和11 D、10 和10 答案: C 题号:2100 已知字符'A'的ASCⅡ代码值是65,字符变量c1的值是'A',c2的值是'D'.执行语句printf("%d,%d",c1,c2-2);后,输出结果是 A、65,66 B、A,B C、65,68 D、A,68 答案: A 题号:5055 相同结构体类型的变量之间,可以()。 A、比较大小 B、地址相同 C、赋值 D、相加 答案: C 题号:3217 int a[10];合法的数组元素的最小下标值为()。 A、1 B、0 C、10 D、9 答案: B

能正确表示逻辑关系:" a≥10或a≤0 "的C语言表达式是 A、a>=0 | a<=10 B、a>=10 or a<=0 C、a>=10 && a<=0 D、a>=10 || a<=0 答案: D 题号:157 main() {int x=1,a=0,b=0; switch (x) { case 0: b++; case 1: a++; case 2: a++;b++;} printf("a=%d,b=%d",a,b); }该程序的输出结果是( ) A、2,2 B、2,1 C、1,1 D、1,0 答案: B 题号:4784 设变量a是整型,f是实型,i是双精度型,则表达式10+'a'+i*f值的 数据类型为()。 A、不确定 B、double C、int D、float 答案: B 题号:1647 以下程序中,while循环的循环次数是______ main() { int i=0;

C语言笔试题带答案

一、选择题(1)~(10)每小题2分,? (11)~(50)每小题1分,共60分) 下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确的选项涂写在答题卡相应位置上,答在试卷上不得分。 (1)在数据结构中,从逻辑上可以把数据结构分为_______。 A)动态结构和静态结构??? ??B)紧凑结构和非紧凑结构 C)线性结构和非线性结构??? D)内部结构和外部结构 答案:C 评析:逻辑结构反映数据元素之间的逻辑关系,线性结构表示数据元素之间一对一的关系,非线性结构表示数据元素之间一对多或多对一的关系。 (2)若进栈序列为l,2,3,4,进栈过程中可以出栈,则下列不可能的一个出栈序列是_______。 A)1,4,3,2??? B)2,3,4,l C)3,1,4,2 ???D)3,4, 2,1 答案:C 评析:栈是一种后进先出表,选项c中,先出栈的是3,说明此时栈内必然有1,2,由于l先于2进栈,所以l不可能在2之前出栈,故选项C这种出栈序列是不可能的。 (3)排序方法中,将整个无序序列分割成若干小的子序列并分别进行插入排序的方法,称为_______。 A)希尔排序??? B)冒泡排序??? C)插入排序??? D)选择排序 答案:A 评析:希尔排序法的基本思想是:将整个无序序列分割成若干小的子序列分别进行插入排序。 (4)在顺序表(3,6,8,10,12,15,16,18,21,25,30)中,用二分法查找关键码值11,所需的关键码比较次数为_______。 A)2??? ??B)3?????? C)4 ???????D)5 答案:C

评析:二分法查找是用关键码与线性表的中间元素比较,然后根据比较结果来判断是结束查找,还是在左边或者右边子表按相同的方法继续查找。本题中,与 ll比较的关键码分别为15,8,10,12四个。 (5)对于n个结点的单向链表(无表头结点),需要指针单元的个数至少为_______。 A)n-1??? B)n??? C)n+l ?????D)2n 答案:C 评析:在n个结点的单向链表(无表头结点)中,每个结点都有一个指针单元(即指针域),加上头指针,至少需要n+1个指针单元。 (6)在软件开发过程中,软件结构设计是描述_______。 A)数据存储结构?? ??B)软件体系结构??? C)软件结构测试??? D)软件控制过程 答案:B 评析:从工程管理角度来看,软件设计分两步完成:概要设计和详细设计。概要设计(又称结构设计)将软件需求转化为软件体系结构、确定系统级接口、全局数据结构或数据库模式。 (7)模块本身的内聚是模块独立性的重要性度量因素之一。在7类内聚中,具有最强内聚??? 的一类是_______。 A)顺序性内聚? ???B)过程性内聚? ????C)逻辑性内聚??? D)功能性内聚 答案:D 评析:内聚性是一个模块内部各元素间彼此结合的紧密程度的度量。内聚共有7类,它们之间的内聚性由弱到强排列顺序为:偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、顺序内聚和功能内聚。 (8)数据存储和数据流都是_______,仅仅是所处的状态不同。 A)分析结果??? B)事件??? C)动作??? D)数据 答案:D 评析:数据流图有4种成分:源点或终点、处理、数据存储和数据流。数据存储是处于静止状态的数据,数据流是处于运动中的数据。 (9)数据的完整性是指数据的正确性、有效性和_______。 A)可维护性??? B)独立性??? C)安全性??? D)相容性

c语言常见笔试题总结

c语言常见笔试题总结 此句出自北宋诗人林逋的七律《山园小梅》,原诗为“众芳摇落独暄妍,占尽风情向小园。疏影横斜水清浅,暗香浮动月黄昏。霜禽欲下先偷眼,粉蝶如知合断魂。幸有微吟可相狎,不须檀板共金尊。” 【1 使用宏】 1.1 #ifdef NDEBUG now i will introduce myself briefly. i am 21 years old. i was born in heilongjiang province, northeast of china. i am a senior student at beijing xx university. my major is packaging engineering. and i will receive my bachelor degree after my graduation in june. in the past 4 years, i spend most of my time on study. i have passed cet4/6 with an ease. and i have acquired basic knowledge of packaging and publishing both in theory and in practice. besides, i have attended several packaging exhibition held in beijing. this is our advantage study here. moreover, i have taken a tour to some big factory and company. through these i have a deeply understanding of domestic packaging industry. 勤思考研解析:此题考查了初中生出现反抗心理的原因,有三个:自我意识高涨;独立意识增强;中枢神经系统的兴奋性过强,因此答案是C。 #define TRACE(S) S #else #define TRACE(S) printf(“%s;\n”, #S); S #endif 问:以上TRACE()宏的作用是什么? 1.2 #error的作用? 1.3 定义一个宏,求出给定数组中的元素的个数 人员绩效考评的成对比较法中,管理者只有在对每个员工与其他所有员工进行成对比较之后,才能得出对其业绩的总的评价结果。如某部门有五名员工,用该方法所需的总的成对比较次数为

嵌入式C语言面试题汇总(超经典)

第一部分:基本概念及其它问答题 1、关键字static的作用是什么? 这个简单的问题很少有人能回答完全。在C语言中,关键字static有三个明显的作用: 1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。 3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。 大多数应试者能正确回答第一部分,一部分能正确回答第二部分,同是很少的人能懂得第三部分。这是一个应试者的严重的缺点,因为他显然不懂得本地化数据和代码范围的好处和重要性。 2、“引用”与指针的区别是什么? 答、1) 引用必须被初始化,指针不必。 2) 引用初始化以后不能被改变,指针可以改变所指的对象。 3) 不存在指向空值的引用,但是存在指向空值的指针。 指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。程序中使用指针,程序的可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。 流操作符<<和>>、赋值操作符=的返回值、拷贝构造函数的参数、赋值操作符=的参数、其它情况都推荐使用引用。 3、.h头文件中的ifndef/define/endif 的作用? 答:防止该头文件被重复引用。 4、#include 与#include “file.h”的区别? 答:前者是从Standard Library的路径寻找和引用file.h,而后者是从当前工作路径搜寻并引用file.h。 5、描述实时系统的基本特性 答:在特定时间内完成特定的任务,实时性与可靠性。 6、全局变量和局部变量在内存中是否有区别?如果有,是什么区别? 答:全局变量储存在静态数据区,局部变量在堆栈中。 7、什么是平衡二叉树? 答:左右子树都是平衡二叉树且左右子树的深度差值的绝对值不大于1。 8、堆栈溢出一般是由什么原因导致的? 答:1.没有回收垃圾资源 2.层次太深的递归调用

大学c语言考试题及答案

最新大学C语言考试题及答案 姓名成绩 温馨提示:同学们,经过培训学习,你一定积累了很多知识,现在请认真、仔细地完成这张试题吧。加油! 一单项选择题 1. 在C语言中,以 D 作为字符串结束标志 A)’\n’ B)’ ’ C) ’0’ D)’\0’ 2.下列数据中属于“字符串常量”的是( A )。 A.“a” B.{ABC} C.‘abc\0’ D.‘a’ 若干个字符构成字符串 在C语言中,用单引号标识字符;用双引号标识字符串 选项B,C,分别用{}和’’标识字符串 选项D,标识字符。 3、以下说法中正确的是( C )。 A、C语言程序总是从第一个定义的函数开始执行 B、在C语言程序中,要调用的函数必须在main( )函数中定义 C、C语言程序总是从main( )函数开始执行 D、C语言程序中的main( )函数必须放在程序的开始部分 4.下列关于C语言的说法错误的是(B )。 A) C程序的工作过程是编辑、编译、连接、运行 B) C语言不区分大小写。

C) C程序的三种基本结构是顺序、选择、循环 D) C程序从main函数开始执行 5.下列正确的标识符是(C)。 [i] t 6.下列C语言用户标识符中合法的是(B )。 A)3ax B)x C)case D)-e2 E)union 7.下列四组选项中,正确的C语言标识符是(C )。 A)%x B)a+b C)a123 D)123 8、下列四组字符串中都可以用作C语言程序中的标识符的是(A )。 A、print _3d db8 aBc B、I\am one_half start$it 3pai C、str_1 Cpp pow while D、Pxq My->book line# 语言中的简单数据类型包括(D )。 A、整型、实型、逻辑型 B、整型、实型、逻辑型、字符型 C、整型、字符型、逻辑型 D、整型、实型、字符型 10.在C语言程序中,表达式5%2的结果是 C 。 A) B)2 C)1 D)3 11.如果int a=3,b=4;则条件表达式"a

C语言操作题常考编程题库完整

C语言编程题覆盖到的算法: 1、个人所得税计算; 2、求一组数的正、负数(或奇、偶数)的个数和平均值; 3、二维数组主、次对角线之和; 4、求素数(用函数实现); 5、级数有限项求和问题; 6、两个一维数组相加(用函数实现); 7、求最大、最小值; 8、判断闰年(用函数实现); 9、求水仙花数; 10、百钱百鸡; 11、求最大公约数、最小公倍数。 12、求回文数; 13、排序; 14、二维数组的转置; 15、递归函数求阶乘; 16、求斐波那契数列; 17、求和:a+aa+aaa+aaaa+....; 18、求符合条件的整数(如:是某个二位数的平方,个位、十位、百位数各不相同等);(包括素数,回文,完数,等等) 19、字符串加密; 20、统计字符串中字母和数字的个数;

/*1.个人所得税计算,以实验指导P24T5为标准*/ #include void main() { int i,n; double a,b,c; n=i/400; printf("please input income:\n"); scanf("%d",&i); a=(i-800)*0.05,b=20+(i-1200)*0.08,c=84+(i-2000)*0.2; switch(n) {

case 1:printf("不需缴税\n");break; case 2:printf("需交纳%lf元\n",a);break; case 3: case 4:printf("需交纳%lf元\n",b);break; default:printf("需交纳%lf元\n",c);break; } } /*2. 求一组数的奇数个数,偶数个数和平均值#include #define N 10 void main() { int a[N]; int i,m=0,n=0,sum=0; double average; printf("please input 10 numbers:\n"); for(i=0;i

c语言经典面试题

C语言面试题大汇总之华为面试题 1、局部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用"::" ;局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。 2、如何引用一个已经定义过的全局变量? 答:extern 可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个编写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。 3、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?答:可以,在不同的C文件中以static形式来声明同名全局变量。 可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错. 4、请写出下列代码的输出内容 #include int main(void) { int a,b,c,d; a=10;

c=++a; d=10*a++; printf("b,c,d:%d,%d,%d",b,c,d); return 0; } 答:10,12,120 5、static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别? 答: 1) 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。 2) 从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。3) static函数与普通函数作用域不同,仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对

C语言试题及答案

第1章 C语言概述习题 1. 单项选择题 (1) C 语言是在 B 语言的基础上产生的。 A. A B. B C. D D. E (2) 在 C 语言中,每个语句必须以 D 结束。 A. 回车符 B. 冒号 C. 逗号 D. 分号 (3) 标识符和关键字间,要用 C 隔开。 A. 回车符 B. 冒号 C. 空格 D. 分号 (4) 用 C 语言编写的源文件经过编译,若没有产生编译错误,则系统将( B )。 A. 生成可执行目标文件 B. 生成目标文件 C. 输出运行结果 D.自动保存源文件 (5) 下列说法中正确的是( B )。 A. 由于 C 源程序是高级语言程序,因此一定要在 TC 软件中输入 B. 由 C 源程序是字符流组成,因此可以作为文本文件在任何文本编辑的软件中输入 C. 由于C 程序是高级语言程序,因此输入后即可执行 D. 由于 C 程序是高级语言程序,因此它由命令组成 (6) 下列说法中正确的是( A )。 A. C 语言程序由主函数和 0 个或多个函数组成 B. C 语言程序由主程序和子程序组成 C. C 语言程序由子程序组成 D. C 语言程序由过程组成 (7) 下列说法中错误的是( D )。 A. 主函数可以分为两个部分:主函数说明部分和主函数体 B. 主函数可以调用任何非主函数的其他函数 C. 任何非主函数可以调用其他任何非主函数 D. 程序可以从任何非主函数开始执行 2. 填空题 (1) C 语言只有 32 个关键字和 9 种控制语句。 (2) C 语言是一种“中级语言”,既具有高级语言的特点又具有低级语言的特点;既适合于开发系统软件又适合于编写应用程序。 (3) 每个源程序有且只有一个主函数,系统总是从该函数开始执行C语言程序。 (4) 在 C 语言程序中允许出现的字符集是 ASCII码字符集。 (5) C 语言的程序中有特殊含义的英语单词称为保留字。 (6) C 语言标识符的长度是前 8 位有效。 (7) C 语言中,标识符的定义规则是以字母或下划线为开头。 (8) C 语言程序的注释可以出现在程序中的任何地方,它总是以 /* 符号作为开始标记,以 */ 符号作为结束标记。 第2章数据类型运算符和表达式习题 1. 单项选择题 (1) 以下选项中,正确的 C 语言整型常量是 D 。 A. 32L B. 510000 C. -1.00 D. 567 (2) 以下选项中, D 是不正确的 C 语言字符型常量。

C语言面试题(经典全)

1.static有什么用途?(请至少说明两种) 1)限制变量的作用域 2)设置变量的存储域(堆,主动分配内存也是堆) 1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。 2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。 3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。 4.全局变量和局部变量在内存中是否有区别?如果有,是什么区别? 全局变量储存在静态数据库,局部变量在栈 6.堆栈溢出一般是由什么原因导致的? 堆栈溢出一般是循环的递归调用导致的,如果使用的大数据结构的局部变量,也可能导致堆栈溢出。没有回收垃圾资源导致的是内存泄露最后内存耗尽。 20.不能做switch()的参数类型是: switch的参数不能为实型。(只能是int char) 9.写出float x 与“零值”比较的if语句。 if(x<0.000001&&x>-0.000001)

3.在c语言库函数中将一个字符转换成整型的函数是atol()吗,这个函数的原型是什么? 函数名: atol 功能: 把字符串转换成长整型数 函数的原型: long atol(const char *nptr); 程序例: #include #include int main(void) { long l; char *str = "98765432"; l = atol(lstr); printf("string = %s integer = %ld\n", str, l); return(0); } 1.对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现? c用宏定义,c++用inline

C语言期末考试试题及答案

C语言期末考试试题及答案 2003C语言试题2 一选择题(7分,每小题0.5分) 1.C语言源程序的基本单位是()。 A 过程 B 函数 C 子程序 D 标识符 2.下列程序的输出结果是()。 main( ) { int a=7,b=5; printf("%d\n",b=b/a); } A 5 B 1 C 0 D不确定值 3.假设变量a,b均为整型,表达式(a=5,b=2,a>b?a++:b++,a+b)的值是()。 A 7 B 8 C 9 D 2 4.设a为int型变量,执行下列赋值语句后,a的取值分别是()。 a=125.534; a=(int)125.521%4; a=5<<2; A 125,31,1 B 125,1,20 C 125,31,20 D 125.534,2,20 5.设有如下程序段,下面描述中正确的是()。 int k=10; while(k=0) k=k-1; A 循环执行一次 B循环是无限循环 C循环体语句一次也不执行 D循环体语句执行一次 6.以下程序的输出结果为()。 int i; void prt( ) { for(i=5;i<8;i++) printf("%c",'*'); printf("\t"); } main( ) { for(i=5;i<=8;i++) prt( ); } A *** B *** *** *** *** C *** *** D * * * 7.在C语言程序中,以下说法正确的是()。 A函数的定义可以嵌套,但函数的调用不可以嵌套 B函数的定义不可以嵌套,但函数的调用可以嵌套 C函数的定义和函数的调用都不可以嵌套 D函数的定义和函数的调用都可以嵌套 8.以下函数调用语句中含有()个实参。 func((e1,e2),(e3,e4,e5)); A 2 B 3 C 5 D 语法错误 9.以下程序的输出结果为()。 #define ADD(x) x*x

C语言经典面试题目集锦

1.前言 2.声明和初始化 2.1我如何决定使用那种整数类型? 2.264位机上的64位类型是什么样的? 2.3怎样定义和声明全局变量和函数最好? 2.4extern在函数声明中是什么意思? 2.5关键字auto到底有什么用途? 2.6我似乎不能成功定义一个链表。我试过typedef struct{char*item;NODEPTR next;}*NODEPTR;但是编译器报了错误信息。难道在C语言中一个结构不能包含指向自己的指针吗? 2.7怎样建立和理解非常复杂的声明?例如定义一个包含N个指向返回指向字符的指针的函数的指针的数组? 2.8函数只定义了一次,调用了一次,但编译器提示非法重定义了。 2.9main()的正确定义是什么?void main()正确吗? 2.10对于没有初始化的变量的初始值可以作怎样的假定?如果一个全局变量初始值为``零",它可否作为空指针或浮点零? 2.11代码int f(){char a[]="Hello,world!";}不能编译。 2.12这样的初始化有什么问题?char*p=malloc(10);编译器提示``非法初始式"云云。 2.13以下的初始化有什么区别?char a[]="string literal";char*p="string literal";当我向p[i]赋值的时候,我的程序崩溃了。 2.14我总算弄清除函数指针的声明方法了,但怎样才能初始化呢? 3.结构、联合和枚举 3.1声明struct x1{...};和typedef struct{...}x2;有什么不同? 3.2为什么struct x{...};x thestruct;不对? 3.3一个结构可以包含指向自己的指针吗? 3.4在C语言中实现抽象数据类型什么方法最好? 3.5在C中是否有模拟继承等面向对象程序设计特性的好方法? 3.6我遇到这样声明结构的代码:struct name{int namelen;char namestr[1];};然后又使用一些内存分配技巧使namestr数组用起来好像有多个元素。这样合法和可移植吗? 3.7是否有自动比较结构的方法? 3.8如何向接受结构参数的函数传入常数值? 3.9怎样从/向数据文件读/写结构? 3.10我的编译器在结构中留下了空洞,这导致空间浪费而且无法与外部数据文件进行"二进制"读写。能否关掉填充,或者控制结构域的对齐方式? 3.11为什么sizeof返回的值大于结构的期望值,是不是尾部有填充? 3.12如何确定域在结构中的字节偏移? 3.13怎样在运行时用名字访问结构中的域? 3.14程序运行正确,但退出时却``core dump''了,怎么回事? 3.15可以初始化一个联合吗?

c语言考试试题以及答案

1. 编程求和1-2+3-4+5-6+…+99-100 #include<> int main() { int i,t,s; s=0; t=1; for(i=1;i<=100;i++) { t=-t; s=s+(-t)*i; } printf("%d\n",s); system("pause"); return 0; } 2.求:1+(1+2)+(1+2+3)+…+(1+2+3+….10) 的和 #include<> int main() { int i,t,s; s=0; t=0; for(i=1;i<=10;i++) { t=t+i; s=s+t; } printf("%d\n",s); system("pause"); return 0; } 3. 求n的值,其中a是一个不为0的数字,例如2+22+222+2222+22222,其中数字a和n由键盘输入。 #include<> int main() { int a,n,i=1,sn=0,tn=0; printf("a,n:"); scanf("%d %d",&a,&n); while(i<=n) {tn=tn+a; sn=sn+tn; a=a*10; i++; } printf("%d\n",sn); system("pause"); return 0; } 4. 有一个函数如下: x (x<5) y= 2x+6 (5<=x<15) 2x-6 (x>=15) 输入x的值,计算出相应的y值。 #include<>

int main() { int x,y; printf("输入X:"); scanf("%d",&x); if(x<5) { y=x; printf("x=%3d,y=x=%d\n",x,y); } else if(x>=5&&x<15) {y=2*x+6; printf("x=%3d,y=2*x+6=%d\n",x,y); } else {y=2*x-6; printf("x=%3d,y=2*x-6=%d\n",x,y); } system("pause"); return 0; } 5. 某国的税收政策为:1000元以下免税,1000~2000元缴纳5%的税,2000~4000元上税10%,4000元以上按20%交税。试编写程序,输入一个人的收入,计算其需要上缴的税额。 #include<> int main() { float a; scanf("%f",&a); if(a<=1000) { printf("免税",a); } if(a>1000&&a<=2000) { printf("%f",a*); } if(a>2000&&a<=4000) { printf("%f",a*); } else printf("%f",a*); system("pause"); return 0; } 6. 编程分段统计学生成绩,输入为负数时结束。要求按90-100、80-89、70-79、60-69、60以下五档分别统计各分数段人数 #include<> int main() { float score; int a[6]={0,0,0,0,0,0}; char grade; int i; do{ scanf("%f",&score);

C语言笔试题大全

C语言笔试题大全 4. static有什么用途?(请至少说明两种) 1.限制变量的作用域 2.设置变量的存储域 7. 引用与指针有什么区别? 1) 引用必须被初始化,指针不必。 2) 引用初始化以后不能被改变,指针可以改变所指的对象。 2) 不存在指向空值的引用,但是存在指向空值的指针。 8. 描述实时系统的基本特性 在特定时间内完成特定的任务,实时性与可靠性 9. 全局变量和局部变量在内存中是否有区别?如果有,是什么区别? 全局变量储存在静态数据库,局部变量在堆栈 10. 什么是平衡二叉树? 左右子树都是平衡二叉树且左右子树的深度差值的绝对值不大于1 11. 堆栈溢出一般是由什么原因导致的? 没有回收垃圾资源 12. 什么函数不能声明为虚函数? constructor 13. 冒泡排序算法的时间复杂度是什么? O(n^2) 14. 写出float x 与“零值”比较的if语句。 if(x>0.000001&&x<-0.000001) 16. Internet采用哪种网络协议?该协议的主要层次结构? tcp/ip 应用层/传输层/网络层/数据链路层/物理层 17. Internet物理地址和IP地址转换采用什么协议? ARP (Address Resolution Protocol)(地址解析協議) 18.IP地址的编码分为哪俩部分? IP地址由两部分组成,网络号和主机号。不过是要和“子网掩码”按位与上之后才能区分哪些是网络位哪些是主机位。 2.用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出C程序。 循环链表,用取余操作做 3.不能做switch()的参数类型是: switch的参数不能为实型。 華為 1、局部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用"::" 局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如

C语言笔试题及参考答案-东软集团

C语言笔试题及参考答案-东软集团 1、局部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用":: " 局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。 2、如何引用一个已经定义过的全局变量? 答:extern 可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。 3、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么? 答:可以,在不同的C文件中以static形式来声明同名全局变量。 可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错 4、语句for( ;1 ;)有什么问题?它是什么意思? 答:和while(1)相同。 5、do……while和while……do有什么区别? 答:前一个循环一遍再判断,后一个判断以后再循环 6、请写出下列代码的输出内容 #include main() { int a,b,c,d; a=10; b=a++; c=++a; d=10*a++; printf( "b,c,d:%d,%d,%d ",b,c,d); return 0; } 答:10,12,120 7、static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别? 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身

相关文档 最新文档