C语言笔试题(二套_第1页
C语言笔试题(二套_第2页
C语言笔试题(二套_第3页
C语言笔试题(二套_第4页
C语言笔试题(二套_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、第二套C语言笔试题一、 选择题:(1)下列叙述中正确的是( C )。A)程序设计就是编制程序 B)程序的测试必须由程序员自己去完成C)程序经调试改错后还应进行再测试 D)程序经调试改错后不必进行再测试【解析】程序设计是一个把软件需求转换为软件表示的过程。软件编制是程序设计中的一小部分,所以选项A)是错误的。软件测试是为了发现错误而执行程序的过程;为了达到较好的测试效果,应该由独立的第三方构造测试,因为从心理学角度讲,程序人员或设计人员在测试自己的程序时,要采取客观的态度是程度不同地存在障碍的,所以选项B)是错误的。程序调试的任务是诊断和改正程序中的错误。它与软件测试不同,软件测试是尽可能多地发

2、现软件中的错误。先要发现软件的错误,然后借助一定的调试工具去执行软件错误的具体位置。软件测试贯穿整个软件生命周期,调试主要在开发阶段,所以选项C)是正确的。(2)下列数据结构中,能用二分法进行查找的是( A )。A)顺序存储的有序线性表 B)线性链表 C)二叉链表 D)有序线性链表【解析】二分法查找只适应于顺序存储的有序表。在此所说的有序表是指线性表中的元素按值非递减排序(即从小到大,但允许相邻元素值相等)。(3)下列关于栈的描述正确的是( C )。A)在栈中只能插入元素而不能删除元素B)在栈中只能删除元素而不能插入元素C)栈是特殊的线性表,只能在一端插入或删除元素D)栈是特殊的线性表,只能在

3、一端插入元素,而在另一端删除元素【解析】栈是限定在一端进行插入与删除的线性表,在栈中允许插入与删除的一端称为栈顶,而不允许插入与删除的另一端称为栈底。(4)下列叙述中正确的是( D )。A)一个逻辑数据结构只能有一种存储结构B)数据的逻辑结构属于线性结构,存储结构属于非线性结构C)一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率D)一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率【解析】数据的逻辑结构是指数据集合中各数据元素之间所固有的逻辑关系;数据的存储结构是在对数据进行处理时,各数据元素在计算机中的存储关系。数据的存储结构是指数据的逻辑结构在计算机

4、中的表示,一种逻辑结构可以表示成多种存储结构;而采用不同的存储结构,其数据处理的效率是不同的。(5)下列描述中正确的是( C )。A)软件工程只是解决软件项目的管理问题B)软件工程主要解决软件产品的生产率问题C)软件工程的主要思想是强调在软件开发过程中需要应用工程化原则D)软件工程只是解决软件开发中的技术问题【解析】软件工程是建立并使用完善的工程化原则,以较经济的手段获得,能在实际机器上有效运行的可靠软件的一系列方法。软件工程主要思想强调在软件开发过程中需要应用工程化原则。(6)在软件设计中,不属于过程设计工具的是( D )。A)PDL(过程设计语言) B)PAD图 C)N-S图 D)DFD图

5、【解析】DFD(数据流图Data-Flow-Diagram)是描述数据处理过程的工具,是需求理解的逻辑模型的图形表示,它直接支持系统功能建模。在软件详细设计的过程阶段,要对每个模块规定的功能以及算法的设计,给出适当的算法描述。常见的过程设计工具有:图形工具:程序流程图、N-S,PAD,HIPO。表格工具:判定表。 语言工具:PDL(伪码)。(7)下列叙述中正确的是( A )。A)软件交付使用后还需要再进行维护 B)软件工具交付使用就不需要再进行维护C)软件交付使用后其生命周期就结束 D)软件维护是指修复程序中被破坏的指令【解析】通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为软件

6、生命周期。软件生命周期分为软件定义、软件开发及软件运行维护3个阶段。将已交付的软件投入运行,并在运行使用中不断地维护,根据新提出的需要进行必要而且可能的扩充和删除。(8)数据库设计的根本目标是要解决( A )。A)数据共享问题 B)数据安全问题 C)大量数据存储问题 D)简化数据维护【解析】在数据库应用系统中的一个核心问题就是设计一个能满足用户要求,性能良好的数据库,这就是数据库设计。数据库设计即是在一定平台制约下,根据信息需求与处理需求设计出性能良好的数据模式。数据库设计的根本目标是要解决数据共享的问题。(9)设有如下关系表: 则下列操作中正确的是( B )。A)T=RS B)T=RS C)

7、T=RS D)T=R/S【解析】关系代数的并运算是指设关系R和S具有相同的关系模式,R和S的并是由属于R或属于S的元组组成的集合,记为RS。形式定义为:RSt|tRtS,式中t是元组变量。本题中关系T是由属于关系R的或者属于关系S的元组组成,所以T是RS的结果。(10)数据库系统的核心的是( B )。A)数据模型 B)数据库管理系统 C)数据库 D)数据库管理员【解析】数据库管理系统(DBMS)是数据库的机构,它是一种系统软件,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务等。所以数据库管理系统是数据系统的核心。(11)下列叙述中错误的是( A )。A)用户所定义的标识符允许

8、使用关键字 B)用户所定义的标识符应尽量做到见名知意C)用户所定义的标识符必须以字母或下划线开头D)用户定义的标识符中、大、小写字母代表不同标识【解析】在C语言中,合法标识符的命名规则是:标识符可以由字母、数字和下划线组成,并且第一个字符必须为字母或下划线。在C语言程序中,凡是要求标识符的地方都必须按此规划命名。在C语言的标识符中,大写字母和小写字母被认为是两个不同的字符。在选择标识符时,应注意做到见名知义,即选择具有一定含义的英文单词或汉语拼音作为标识符,以增加程序的可读性。(12)下列叙述中错误的是( C )。A)C语句必须以分号结束 B)复合语句在语法上被看作一条语句C)空语句出现在任何

9、位置都不会影响程序运行 D)赋值表达式末尾加分号就构成赋值语句【解析】C语言规定每条语句和数据定义的最后必须有一个分号,分号是C语句的必要组成部分。复合语句也称为语句块,其形式如下:语句1 语句2 语句n,即用一对大括号把若干语句括起来构成一个语句组。一个复合语句在语法上视为一条语句,在一对花括号内的语句数量不限。一个赋值表达式的最后加一个分号就成为一条语句,即赋值语句。空语句是只有一个分号的语句,它什么也不做,程序设计中有时需要加一个空语句来表示存在一条语句,但随意加分号会导致逻辑上的错误,而且这种错误十分隐蔽,编辑器也不会提示逻辑错误,需要慎用。(13)下列叙述中正确的是( B )。A)调

10、用printf()函数时,必须要有输出项B)使用putchar()函数时,必须在之前包含头文件stdio.hC)在C语言中,整数可以以十二进制、八进制或十六进制的形式输出D)调节getchar()函数读入字符时,可以从键盘上输入字符所对应的ASCII码【解析】在调用函数进行输入和输出时,必须在程序的开头出现包含头文件stdio.h的命令行:#include putchar()函数的作用是向终端输出一个字符,其调用形式如下:putchar(ch);其中ch可以是字符变量或是字符常量。(14)下列关于函数的叙述中正确的是( B )。A)每个函数都可以被其他函数调用(包括main函数) B)每个函数

11、都可以被单独编译C)每个函数都可以单独运行 D)在一个函数内部可以定义另一个函数【解析】C语言规定,不能在函数的内部定义函数,所以选项D)错误;在C语言中函数定义时是互相独立的,可以互相调用,但不能调有main函数,所以选项A)错误。每个函数都可以被单独编译,但不能单独运行。所以选项B)正确。(15)若有语句:char *line5;下列叙述中正确的是( A )。A)定义line是一个数组,每个数组元素是一个基类型为char的指针变量B)定义line是一个指针变量,该变量可以指向一个长度为5的字符型数组C)定义line是一个指针数组,语句中的*号称为间址运算符D)定义line是一个指向字符型函

12、数的指针【解析】本题考察C语言中运算符的优先级,因为比*优先级高,因此line先与5结合,形成有5个元素的数组line5,然后再与line前面的*结合,表示此数组是一个指针数组,每个数组元素都是一个基类型为char 的指针变量。(16)有下列程序段:typedef struct NODE int num;struct NODE *next; OLD;下列叙述中正确的是( C )。A)以上的说明形式非法 B)NODE是一个结构体类型C)OLD是一个结构体类型 D)OLD是一个结构体变量【解析】C语言允许用typedef说明一种新类型名,其一般形式为:typedef 类型名 标识符。typedef

13、语句的作用仅仅是使标识符来代表已存在的类型名,并未产生新的数据类型。原有类型名依然有效。此题中,用使typedef定义了新的类型OLD结构,所以OLD为结构体类型。(17)下列叙述中错误的是( C )。A)在C语言中,对二进制文件的访问速度比文本文件快B)在C语言中,随机文件以二进制代码形式存储数据C)语句FILE fp;定义了一个名为fp的文件指针D)C语言中的文本文件以ASC码形式存储数据【解析】在C语言中,文件指针实际上是指向一个结构体类型的指针,一般称这个结构体类型名FILE,可以用此类型名来定义文件指针。定义文件类型指针变量的一般形式为:FILE* 指针变量名;此题的选项C)中少了*

14、,所以,选项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的结果

15、是否等于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

16、(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。程序在编译时出错

17、。main( )/* Beginning */ int r; float s;scanf(%d,&r);s=*r*r;printf(s=%fn,s);出错的原因是( D )。A)注释语句书写位置错误 B)存放圆半径的变量r不应该定义为整型C)输出语句中格式描述符非法 D)计算圆面积的赋值语句中使用了非法变量【解析】在C语言程序中,可以用一个符号名来代表一个常量,称为符号常量。这个符号名必须在程序中进行特别的指定,并符合标识符的命令规则。在本题中圆周率是一个符号常量,但在程序中并没有指定其值,所以编译器找不到其值就会报错。所以选项D)正确。(22)设有定义:int k=1,m=2; float

18、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),

19、再用0与 m 进行比较,故最终结果为0。(23)设有定义:int a=2,b=3,c=4;,则下列选项中值为0的表达式是( A )。A)(!a= =1)&(!b= =0) B)(ab)&! c 1 C)a & b D)a(b+b)&(c-a)【解析】在选项A)中,因为!a=0,所以关系表达式!a=1的值为0,又因为逻辑与运算符 & 两边的表达式只要一个等于零,则整个表达式为零,所以选项A)正确。在选项B)中,关系表达式ab为真,表达式(ab)&!c为假,而表达式(ab)&!c|1为真,所以整个表达式的值为真。选项C)中,a&b的结果为真。在选项D)中,a|(b+b)&(c-a)的结果为真。(2

20、4)有下列程序段:int k=0,a=1,b=2,c=3;k=ab?b:a;k=kc?c:k;执行该程序段后,k的值是( B )。A)3 B)2 C)1 D)0【解析】因为ab成立,所以条件表达式ac=3不成立,所以条件表达式kc?c:k的值等于k的值等于2。把条件表达式kc?c:k的值赋给变量k,因而变量k的值等于2。因此,选项B)为正确答案。(25)设变量a、b、c、d和y都已正确定义并赋值。若有下列if语句if(ab)if(c= =d) y=0;else y=1;该语句所表示的含义是( C )。A) B) C) D)【解析】语句if (c=d) y=0; else y=1;是if( ab

21、)语句的一个子句。所以整个C语句表达式的意思是:在ab的情况下,如果c=d则 y=0,否则y=1。所以,选项C)为正确答案。(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这条语句一次,所以

22、变量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;in;i+ +) f*=i;C)f=1; D)f=1;for(i=n;i1;i+ +)f*=i; for(i=n;i =2;i-)f*=i;【解析】要正确计算函数f=n!,由n!的数学定义可知n!=n*(n-1)*(n-2) *1。在选项

23、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

24、; 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(%dn,*p);的输出结果是( B )。A)随机值 B)0 C)x的地址 D)p的地址【解析】在定义指针变量p时,把变量x的地址赋给指针变量p,所以*p 的值为变量x的值,即等于0。因而选项B)正确。(30)设fun()函数的定义形式为( C )。void fun(char ch,flo

25、at 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的形式参数

26、的类型相符合,所以选项C)为正确答案。(31)有下列程序:main( ) int a10=1,2,3,4,5,6,7,8,9,10,*p=&a3,*q=p+2;printf(%dn,*p+*q);程序运行后的输出结果是( B )。A)16 B)10 C)8 D)6【解析】由整型数组a10的定义可知,a3的值等于4;由语句*p=&a3可知指针变量p指向数组a10的第四个元素,即a3,所以*p=4。而由语句*q=p+2可知,指针变量q指向数组a10的第六个元素,即*q= a5=6,所以*p+*q=4+6=10。(32)有下列程序:main( ) char p =a,bv,c,q =abc;prin

27、tf(%d%dn,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

28、(4); i2=f(4+4)/f(2+2);prinft(%d,%dn,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

29、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);当运行时

30、输入: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(k0) switch(k) default:break;case 1: n+ =k;case 2:case

31、3: n+ =k;k-;printf(%dn,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时,退出循环,

32、所以输出结果为7。(37)有下列程序:main( ) int a =2,4,6,8,10,y=0,x,*p;p=&a1;for(x=1;x3;x+ +) y+ =px;printf(%dn,y);程序运行后的输出结果是( C )。A)10 B)11 C)14 D)15【解析】由题目的语句p=&a1可知,p指向a数组中下标为1的元素4,又因为p为指针变量,所以px与*(p+x)等价,因而在for循环语句中,第一次循环p1指向a数组中下标为2的元素6, 第二次循环p2指向a数组中下标为3的元素8,所以y=6+8=14,因而选项C)为正确答案。(38)有下列程序:void sort(int a ,i

33、nt n) int i,j,t;for(i=0;in-1;i+ +)for(j=i+1;jn;j+ +)if(aiaj) t=ai; ai=aj; aj=t;main( ) int aa10=1,2,3,4,5,6,7,8,9,10,i;sort(aa+2,5);for(i=0;i10;i+ +)printf(%d,aai);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()函数的

34、两层for循环语句可知,其功能是把数组a 中的元素按照从大到小的顺序进行排列。在main()函数中首先定义了一维整型数组aa10,然后调用sort(aa+2,5)实现从数组aa中下标为2的元素3开始,其后连续的5个元素从大到小进行排列,其余元素不变。所以选项C)为正确答案。(39)有下列程序:void sum(int a ) a0=a-1+a1;main( ) int a10=1,2,3,4,5,6,7,8,9,10;sum(&a2);printf(%dn,a2);程序运行后的输出结果是( A )。A)6 B)7 C)5 D)9【解析】子函数sum()的作用是在数组a 中,a0元素的值等于其前

35、一项和后一项元素之和。所以在main()函数中,函数sum(&a2)将a2的地址传给函数sum(),所以a2的值等于其前一项a1和后一项a3之和。即a2=a1+a3=2+4=6,所以输出结果为6。(40)有下列程序:void swap1 (int c0 ,int c1 ) int t;t=c00; c00=c10; c10=t;void swap2(int *c0,int *cl) int t;t=*c0; *c0=*c1; *c1=t;main( ) int a2=3,5, b2=3,5;swap1(a,a+1); swap2(&b0,&b1);printf(%d %d %d %dn,a0,

36、a1,b0,b1);程序运行后的输出结果是( 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函数执行后并不改变a2=3,5中元素的值。子函数swap2(int *c0,int *c1)的形式参数为两个整型指针型变量,所以数组b中的两个元素经过swap2函数执行互换后变为b2=5,3,所以输出结果为:3 5 5 3,选项A)正确答案。(41)有下列程序:#includemain( )

37、char p =a, b, c,q10= a, b, c;printf(%d%dn,strlen(p),strlen(q);下列叙述中正确的是( A )。A)在给p和q数组赋初值时,系统会自动添加字符串结束符,故输出的长度都为3B)由于p数组中没有字符串结束符,长度不能确定,但q数组中字符串长度为3C)由于q数组中没有字符串结束符,长度不能确定,但p数组中字符串长度为3D)由于p和q数组中都没有字符串结束符,故长度都不能确定【解析】在给字符数组p和q以单个字符的形式赋初值时,系统不会自动添加字符串结束标识符0,函数strlen(p)和strlen(q)求的是字符数组p和q中字符串的长度,不包括

38、字符串结束标识符0,由题目可知,字符数组p和q的字符个数都有3个,所以字符数组p和q的长度均为3。(42)有下列程序,其中函数f()的功能是将多个字符串按字典顺序排序( )。#include void f(char *p ,int n) char *t; int i,j;for(i=0;in-1;i+ +)for(j=i+1;j0)t=pi; pi=pj, pj=t;main( ) char *p5=abc,aabdfg,abbd,dcdbe,cd;f(p,5);printf(%dn,strlen(p1);程序运行后的输出结果是( D )。A)2 B)3 C)6 D)4【解析】子函数void

39、f(char *p ,int n)的功能是将字符指针数组*p 中的每个字符串按照从小到大的顺序进行排序。所以在主函数main()中,调用f(p,5)后,字符指针数组*p5中的字符串按照字典顺序从小到大的顺序排列为如下形式,即*p5=aabdfg,abbd,abc,cd,dcdbe,因而p1= abdb,strlen(p1)=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 str10=abcdefg,*p;p=

40、str+strlen(str)/2+1;f(p,p-2);printf(%sn,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)函数后,实现把字符串str10的前半部分abc和后半部分efg分别从字符c和e

41、开始实现两个字符串相应字符的互换。所以选项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.0fn,y1,y2);程序运行后的输出结果是( A )。A)8,16 B)8,8 C)16,16 D)4,8【解析】在主函数main()中

42、,定义了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=

43、5; t+ =a+ +;returnt+a+ +;main( ) int s=a,i;for(i=0;i3;i+ +) s+ =f(i);printf(%dn,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+;

44、语句,当变量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 s2=20044,550,20045,537;p.num=s1.num; p.TotalScore=s1.TotalScore;main( ) struct STU

45、s2=20041,703,20042,580;f(s0);printf(%d %3.0fn,s0. num,s0. TotalScore);程序运行后的输出结果是( D )。A)20045 537 B)20044 550 C)20042 580 D)20041 703【解析】在C语言中,函数的实在参数和形式参数之间进行数据传递。数据只能从实参单向的传递给形参,用户不可能在函数中改变对应实参的值。所以main()函数中的语句f(s0)执行后,结构体变量s0的值并不发生变量,因而选项D)为正确答案。(47)有下列程序:#include struct STU char name10;int num;

46、void f(char *name,int num) struct STU s2=SunDan,20044,Penghua,20045;num=s0.num;strcpy(name,);main( ) struct STU s2=YangSan,2004,LiSiGuo,20042,*p;p=&s1; f(p-name,p-num);printf(%s %dn, p-name,p-num);程序运行后的输出结果是( A )。A)SunDan 20042 B)SunDan 20044 C)LiSiGuo 20042 D)YangSan 20041【解析】在函数 void f(cha

47、r *name ,int num)的两个形参中,name为字符指针传递,num为整型值传递,指针传递会改变main()函数中的实参变量STU 的值,而值传递不会改变实参变量STU s1.num的值,所以执行p=&s1;f(p-name,p-num)语句后,p-name=SunDan, p-num=20042。所以选项A)为正确答案。(48)有下列程序:struct STU char name10; int num; float TotalScore; ;void f(struct STU *p) struct STU s2=SunDan,20044,550, Penghua,20

48、045,537,*q=s;+ +p; + +q; *p=*q;main( ) struct STU s3=YangSan,20041,703,LiSiGuo,20042,580;f(s);printf(%s%d%3.0fn,,s1.num,s1.TotalScore);程序运行后的输出结果是( B )。A)SunDan 20044 550 B)Penghua 20045 537 C)LiSiGuo 20042 580 D)SunDan 20041 703【解析】子函数f()的形参为结构体指针变量,通过f(s)语句,使指针p指向主函数中结构体STU数组元素s0。在子函数f()中,+

49、p使指针p指向main()函数中的s1,+q使指针q指向f()函数中的s1,语句*p=*q是将f()函数中的结构体变量s1的值赋给main()函数中的结构体变量s1,所以选项B)为正确答案。(49)下列程序的功能是进行位运算:main( ) unsigned char a,b;a=73; b=4 & 3;printf(%d%dn,a,b);程序运行后的输出结果是( A )。A)4 3 B)7 3 C)7 0 D)4 0【解析】7的二进制形式为111,3的二进制形式为011,所以a=73的二进制形式表示为111011=100,而二进制100转化为十进制数应为4。4的二进制形式为100,3的二进制

50、形式为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;i6;i+ +)fprintf(fp, %d ,i);if(i%3= =0) fprintf(fp,n);rewind(fp);fscanf(fp,%d%d,&k,&n); printf(%d%dn,k,n);fclose(fp);程序运行后的输出结果是( D )。A)0 0 B)123 45 C)1 4 D)1

51、 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)算法复杂度主要包

温馨提示

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

评论

0/150

提交评论