您的位置首页百科知识

c语言面试题及答案

c语言面试题及答案

的有关信息介绍如下:

c语言面试题及答案

导读:C语言是一门通用计算机编程语言,应用广泛。在面试的时候刷一遍题库,能够帮助你加深各方面的知识点,使自己面试成功的几率更大。下面小编为大家带来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)相容性

答案:D

评析:数据模型的完整性规则是给定的数据模型中数据及其联系所具有的制约和依存规则,用以限定符合数据模型的数据库状态及其状态的变化,以保证数据的正确性、有效性和相容性。

(10)关系代数运算是以_______为基础的运算。

A)关系运算 B)谓词运算 C)集合运算 D)代数运算

答案:C

评析:关系代数运算是以关系代数作为运算对象的一组高级运算的集合。它的基本操作是并、交、差、笛卡尔积,另外还包垂直分割(投影)、水平分割(选择)、关系的结合(连接)等。

(11)能将高级语言程序转换成目标语言程序的是_______。

A)调试程序 B)解释程序 C)编译程序 D)编辑程序

答案:C

评析:用高级语言编写的程序称为“源程序”,而计算机只能识别和执行由0和l组成的二进制指令,所以高级语言必须先用一种称为“编译程序”的软件,把源程序翻译成二进制形式的“目标程序”。

(12) _______是构成c语言程序的基本单位。

A)函数 B)过程 C)子程序 D)子例程

答案:A

评析:c程序是由函数构成的。一个c源程序至少包含一个main函数,也可以包含一个main函数和若干个其他函数,因此,函数是c程序的基本单位。

(13)可以在C语言中用做用户标识符的是_______。

A)void B)as_b3 C)for D)2c

define _123 -abc Do

WORD If cas SIG

答案:B

评析:在c语言中规定,标识符只能由字母、数字和下划线三种符号所组成,而且第一个字符必须是字母或下划线。另外还需要注意的是关键字不能作标识符。选项A中void,C中for都为关键字,D中2c以字母开头。

(14)若有以下类型说明语句:

char w;int x;float y,z;

则表达式w*x+z-y的结果为________类型。

A)float B)char C)int D)double

答案:A

评析:在进行运算时,不同类型的数据参加运算,需要先将其转换成同一类型的数据,然后再进行运算。转换的顺序由低到高为:char,short→int→unsigned→long→double→float,故结果为float型。

(15)main(()

{ float x=123A56;

printf(“%-5.2f ”,x);

}

以上程序输出的结果是________。

A)123.4 B)123.5 C)123.45 D)123.46

答案:D

评析:f格式符,用来输出实数,以小数的形式输出。“%-m.nf”的含义是:输出数据共占m列,其中n位小数,如果输出位数小于m。则右端补空格。如果总长度大于列数,则按实际情况四舍五入输出。

(16)下面语句的输出结果是________。

Printf(“%d\n”,strlen(“\t\”\065\xff\n”));

A)14 B)8

C)5 D)输出项不合法,无正常输出

答案:C

评析:在c语言中,以“\”开头的字符均为转义字符,其中“\”后可跟l~3位八进制数或在“\”后跟字母x及l~2位十六进制数,以此来代表一个特定的字符。

(17)下列程序的输出结果是________。

main()

{ int a=0,b=0,c=0;

if(++a>0lI++b>0)++c;

printf(“\na=%d,b=%d,c=%d”,a,b,C);

}

A)a=0,b=0,c=0 B)a=l,b=l,c=1

C)a=l,b=O, c=I D)a=0, b=1.c=1

答案:C

评析:

“︱︱”是或运算,它有个“短路”的特点需要特别注意,当“︱︱”运算符左边的表达式的值为真时,则程序就不再对“︱︱”右边的表达式的值去进行运算,而是使得整个表达式的值直接为真。

(18)下列程序的输出结果是_________。

Main()

{ int i;

for(i=1;i+l;i++)

{ if(i>4){printlf(”%d”,i++);break;}

}

printf(“%d”,i++);

}

A)55 B)56

C)程序错误,没有输出 D)循环条件永远为真,死循环

答案:B

评析:本程序中有个for循环,但注意到for循环的条件是“i+l”,也就是只要i+l的值为真(非零值均为真),就执行循环。当i=l的时,i+l的值为真,判断if条件不成立,执行i++,输出i的值为5。

(19)下列程序的输出结果是_________。

#define A 100

main()

{ int i=O,sum=O;

do{ if(I==(i/2)*2)continue;

sum+=i;

}while(++iprintf(“%d\n”,sum);}A)2500 B)2050 C)4 D)O答案:A评析:本题程序的功能是求1到_99之问(包括1和99)所有奇数之和。程序中的while循环的终止条件为++i=100,在while循环体内,如果i是偶数,则执行continue,跳过这一次循环,去执行下一次循环,否则求和。最后输出的值是1到99之间(包括l和99)所有奇数之和(1+99)*50/2=2500。(20)下列程序的输出结果是_________。main(){ int I=3;switch(i){ case 1:case 2:printf(”%d”,i);case 3:case 4:break;default:printf(”OK”);}}A)0 B)3 C)OK D)没有任何输出答案:D评析:在本题中,i的值为3,由于“case 3:”后面没有break语句,所以继续向下执行“case 4:”后面的语句,由于“case 4:”后面的语句为break强行退出switch语句,所以,本题没有任何输出。(21)下列程序执行后的输出结果是________。main(){ int m[]={1,4,7,2,5,8,3,6,9};int i,k=2:for(I=0;i<3;i++){printf(”%d”,m[k][i]);}}A)456 B)258 C)369 D)789答案:C评析:根据二维数组的定义得出:m[O][O]=1,m[O]=4,m[O]=7,m=2,rail]=5,m=8,m=3,m[l]=6,m=9,所以本题的输出是第3行的值m,m,m,即369。(22)设已定义洱口k为int类型变量,则以下for循环语句_________。for(i=0;k=-1,k=1;i++,k++)printf(”****\n”);A)判断循环结束的条件不合法 B)是无限循环C)循环一次也不执行 D)循环只执行一次答案:B评析:本题定义了一个for循环,它的循环变量是i,但由于本题并没有去设置循环条件,所以循环的条件永远默认为真,即无限次执行循环。(23)下面程序的输出结果是___________。unsigned fun(unsigned num){ unsigned k=1;do{k*=num%lO;num/=lO;}while(num);return(k);}main(){ unsigned n。26;printf(”%d\n”,fun(n));}A)0 B)4 C)12 D)无限次循环答案:C评析:本题定义了一个fun函数,用于num求和,具体执行过程如下:num=26:k=k*(num%10)=1*(26%10),所以k=6,num=num/10=2;num=2:k=k*(num%10)=6*(2%10),所以k=12,num=num/lO=O;num=O:while条件不成立,所以返回k的值12.(24)已知字母A的ASCII码值是65,字母a的ASCII码值是97,以下程序_______。main(){ char a=‘A’;int b=20;printf(“%d,%o”,(a=a+a,a+b,b),a+‘a’-‘A’,b);}A)表达式非法,输出零或不确定值B)因输出项过多,无输出或输出不确定值C)输出结果为20,141D)输出结果为20,141,20答案:C评析:本题中首先输出逗号表达式“a=a+a,a+b,b”的值,即是20。然后以八进制的形式输出a+‘a’-‘A’的值为97对应的八进制数141,由于最后一个表达式b没有对应输出格式的输出项表列就不会输出。(25)C语言函数返回值的类型是由__________决定的。A)return语句中的表达式类型 B)调用函数的主调函数类型C)调用函数时临时 D)定义函数时所指定的函数类型答案:D评析:函数值的类型应当是在定义函数时指定的。在定义函数时对函数值说明的类型一般应该和return语句中的表达式类型一致,如果不_致,则以函数类型为准,即函数类型决定返回值的类型。(26)下列程序执行后输出的结果是___________。int d=l:fun(int p){ int d。5;d+=p++;printf(”%d,”,d);}main(){ int a=3;fun(a);d+=a++:printf(”%d\n”,d);}A)8,12 B)9,13 C)8,4 D)9,5答案:C评析:本题执行过程如下:首先调用fun函数,使得实参a的值3传递给形参p,得到局部变量d=8,打印出局部变量d的值8;返回主函数执行“d+=a++”,此处的d为全局变量,所以d=1+3=4(由于本题是值传递,所以在函数fun中对p值的改变并不能引起a的改变),故本题的输出是8,4。(27)已知下面的程序段,正确的判断是_________。#define A 3#define B(A)((_A+1)‘a)int a=3:……X=3*(A+B(7));A)程序错误,不允许嵌套定义 B)X=93C)X=8l D)程序错误,宏定义不允许有参数答案:C评析:本题的宏定义是合法的,宏定义展开为3*(3+((A+1)*a))=3*(3+((7+1)*3))=81。(28)定义int*swap()指的是_______。A)一个返回整型值的函数swap()B)一个返回指向整型值指针的函数swap()C)一个指向函数swap()的指针,函数返回一个整型值D)以上说法均错答案:B评析:一个函数可以带回一个整型值、字符值、实型值等,但是也可以带回指针型数据,即地址。本题的定义中,包括括号和·号,由于f)优先级高于t。故它是一个返回整型指针的函数。(29)以下程序段的输出结果是__________。main(){ char s1,s2,s3;scanf(”%s”,s1);gets(s2);gets(s3);puts(s 1);puts(s2);puts(s3);}输入数据如下: (此处代表回车符)aaabbbA)aaa B)aaa C)aaa\0bbb\0 D)aaabbbbbbbbb答案:B评析:scanf是标准的输入函数,在输入字符串aaa时,实际的内容为“aaa

printf(“%d\n”,sum);

}

A)2500 B)2050 C)4 D)O

答案:A

评析:本题程序的功能是求1到_99之问(包括1和99)所有奇数之和。程序中的while循环的终止条件为++i=100,在while循环体内,如果i是偶数,则执行continue,跳过这一次循环,去执行下一次循环,否则求和。最后输出的值是1到99之间(包括l和99)所有奇数之和(1+99)*50/2=2500。

(20)下列程序的输出结果是_________。

main()

{ int I=3;

switch(i)

{ case 1:

case 2:printf(”%d”,i);

case 3:

case 4:break;

default:printf(”OK”);

}

}

A)0 B)3 C)OK D)没有任何输出

答案:D

评析:在本题中,i的值为3,由于“case 3:”后面没有break语句,所以继续向下执行“case 4:”后面的语句,由于“case 4:”后面的语句为break强行退出switch语句,所以,本题没有任何输出。

(21)下列程序执行后的输出结果是________。

main()

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

int i,k=2:

for(I=0;i<3;i++)

{printf(”%d”,m[k][i]);}

}

A)456 B)258 C)369 D)789

答案:C

评析:根据二维数组的定义得出:m[O][O]=1,m[O]=4,m[O]=7,m=2,rail]=5,m=8,m=3,m[l]=6,m=9,所以本题的输出是第3行的值m,m,m,即369。

(22)设已定义洱口k为int类型变量,则以下for循环语句_________。

for(i=0;k=-1,k=1;i++,k++)

printf(”****\n”);

A)判断循环结束的条件不合法 B)是无限循环

C)循环一次也不执行 D)循环只执行一次

答案:B

评析:本题定义了一个for循环,它的循环变量是i,但由于本题并没有去设置循环条件,所以循环的条件永远默认为真,即无限次执行循环。

(23)下面程序的输出结果是___________。

unsigned fun(unsigned num)

{ unsigned k=1;

do{

k*=num%lO;

num/=lO;

}while(num);

return(k);

}

main()

{ unsigned n。26;

printf(”%d\n”,fun(n));

}

A)0 B)4 C)12 D)无限次循环

答案:C

评析:本题定义了一个fun函数,用于num求和,具体执行过程如下:

num=26:k=k*(num%10)=1*(26%10),所以k=6,num=num/10=2;

num=2:k=k*(num%10)=6*(2%10),所以k=12,num=num/lO=O;

num=O:while条件不成立,所以返回k的值12.

(24)已知字母A的ASCII码值是65,字母a的ASCII码值是97,以下程序_______。

main()

{ char a=‘A’;

int b=20;

printf(“%d,%o”,(a=a+a,a+b,b),a+‘a’-‘A’,b);

}

A)表达式非法,输出零或不确定值

B)因输出项过多,无输出或输出不确定值

C)输出结果为20,141

D)输出结果为20,141,20

答案:C

评析:本题中首先输出逗号表达式“a=a+a,a+b,b”的值,即是20。然后以八进制的形式输出a+‘a’-‘A’的值为97对应的八进制数141,由于最后一个表达式b没有对应输出格式的输出项表列就不会输出。

(25)C语言函数返回值的类型是由__________决定的。

A)return语句中的表达式类型 B)调用函数的主调函数类型

C)调用函数时临时 D)定义函数时所指定的函数类型

答案:D

评析:函数值的类型应当是在定义函数时指定的。在定义函数时对函数值说明的类型一般应该和return语句中的表达式类型一致,如果不_致,则以函数类型为准,即函数类型决定返回值的类型。

(26)下列程序执行后输出的结果是___________。

int d=l:

fun(int p)

{ int d。5;

d+=p++;

printf(”%d,”,d);

}

main()

{ int a=3;

fun(a);

d+=a++:

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

}

A)8,12 B)9,13 C)8,4 D)9,5

答案:C

评析:本题执行过程如下:首先调用fun函数,使得实参a的值3传递给形参p,得到局部变量d=8,打印出局部变量d的值8;返回主函数执行“d+=a++”,此处的d为全局变量,所以d=1+3=4(由于本题是值传递,所以在函数fun中对p值的改变并不能引起a的改变),故本题的输出是8,4。

(27)已知下面的程序段,正确的判断是_________。

#define A 3

#define B(A)((_A+1)‘a)

int a=3:

……

X=3*(A+B(7));

A)程序错误,不允许嵌套定义 B)X=93

C)X=8l D)程序错误,宏定义不允许有参数

答案:C

评析:本题的宏定义是合法的,宏定义展开为3*(3+((A+1)*a))=3*(3+((7+1)*3))=81。

(28)定义int*swap()指的是_______。

A)一个返回整型值的函数swap()

B)一个返回指向整型值指针的函数swap()

C)一个指向函数swap()的指针,函数返回一个整型值

D)以上说法均错

答案:B

评析:一个函数可以带回一个整型值、字符值、实型值等,但是也可以带回指针型数据,即地址。本题的定义中,包括括号和·号,由于f)优先级高于t。故它是一个返回整型指针的函数。

(29)以下程序段的输出结果是__________。

main()

{ char s1,s2,s3;

scanf(”%s”,s1);gets(s2);gets(s3);

puts(s 1);puts(s2);puts(s3);

}

输入数据如下: (此处代表回车符)

aaa

bbb

A)aaa B)aaa C)aaa\0bbb\0 D)aaabbb

bbb

bbb

答案:B

评析:scanf是标准的输入函数,在输入字符串aaa时,实际的内容为“aaa