C语言笔试题

文章目录

(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类,它们之间的内聚性由弱到强排列顺序为:偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、顺序内聚和功能内聚。

常见的内聚有七类。

  • 1)功能内聚(Functional Cohesion)

如果一个模块内所有处理元素完成一个,而且仅完成一个功能,则称为功能内聚。

功能内聚是最高程度的内聚。但在软件结构中,并不是每个模块都能设计成一个功能内聚模块。

  • 2)顺序内聚(Sequential Cohesion)

如果一个模块内处理元素和同一个功能密切相关,而且这些处理元素必须顺序执行,则称为顺序内聚。

  • 3)通信内聚(Communicational Cohesion)

如果一个模块中所有处理元素都使用同一个输入数据和(或)产生同一个输出数据,称为通信内聚。

  • 4)过程内聚(Procedural Cohesion)

如果一个模块内的处理元素是相关的,而且必须以特定的次序执行,称为过程内聚。

过程内聚与顺序内聚的区别是: 顺序内聚中是数据流从一个处理单元流到另一个处理单元,而过程内聚是控制流从一个动作流向另一个动作。

  • 5)时间内聚(Temporal Cohesion)

如果一个模块包含的任务必须在同一段时间内执行,称为时间内聚。也称为瞬时内聚。

  • 6)逻辑内聚(Logical Cohesion)

如果模块完成的任务在逻辑上属于相同或相似的一类,称为逻辑内聚。

  • 7)偶然内聚(Coincidental Cohesion)

如果一个模块由完成若干毫无关系的功能处理元素偶然组合在一起的,就叫偶然内聚。

软件设计中应该:力求做到高内聚,尽量少用中内聚,不用低内聚。

(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=123.456printf(“%-52f\n”,x)}

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

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

**答案:**D

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

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

printf(“%ld\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>0 || ++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=0,sum=0do{ 
        if(i==(i/2)*2)
            continue;

		sum+=i;

	}while(++i<A)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[][3]={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][1]=4,m[O][2]=7,m[1][0]=2,rail][1]=5,m[1][2]=8,m[2][0]=3,m[2][l]=6,m[2][2]=9,所以本题的输出是第3行的值m[2][0],m[2][1],m[2][2],即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/l0=0;

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[10],s2[10],s3[10];

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

puts(s1);puts(s2);puts(s3);

}

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

aaa

bbb

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

bbb

​ bbb

**答案:**B

**评析:**scanf是标准输入函数,在输入字符串aaa时,实际的内容为“aaa\0”,“\0”是由系统自动加入的;gets的功能是从终端读入一行字符,即一直读到换行符为止,并由系统自动以“\0”代替换行符。

(30)下述函数功能是________。

Int fun(char*x)

{ char*y=x;

while(*y++);

return y-x-l;

}

A)求字符串的长度 B)求字符串存放的位置

C)比较两个字符串的大小 D)将字符串x连接到字符串y后面

**答案:**A

**评析:**在函数体内定义一字符型指针并指向形参,然后遍历其中各字符直到NULL,最后返回字符串首尾地址的差值,即字符串的长度。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yengi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值