国二C语言历年真题27737

国二C语言历年真题27737

ID:69928648

大小:915.00 KB

页数:166页

时间:2023-12-11

上传者:U-140648
国二C语言历年真题27737_第1页
国二C语言历年真题27737_第2页
国二C语言历年真题27737_第3页
国二C语言历年真题27737_第4页
国二C语言历年真题27737_第5页
国二C语言历年真题27737_第6页
国二C语言历年真题27737_第7页
国二C语言历年真题27737_第8页
国二C语言历年真题27737_第9页
国二C语言历年真题27737_第10页
资源描述:

《国二C语言历年真题27737》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

------------------------------------------作者xxxx------------------------------------------日期xxxx国二C语言历年真题27737 【精品文档】2008年4月真题________。A)图元关系B)数据流C)控制流D)调用关系参考答案:C【解析】程序流程图是人们对解决问题的方法、思路或算法的一种描述。其中,图框表示各种操作的类型,图框中的文字和符号表示操作的内容,流程线表示操作的先后次序。带箭头的线段在数据流程图中表示数据流,而在程序流程图中表示控制流。在所给出的选项中,在图元之间用带有箭头的线段表示图元关系。在模块之间用带有箭头的线段表示调用关系。构成程序流程图的基本图符及其含义是:→或↓表示控制流;□表示加工步骤;◇表示逻辑条件。2.结构化程序设计的基本原则不包括________。A)多态性B)自顶向下C)模块化D)逐步求精参考答案:A【解析】结构化程序设计的原则包括:"自顶而下,逐步求精"的设计思想,"独立功能,单出口、单入口"的模块化设计等。多态性是面向对象程序语言的特征。________。A)低内聚低耦合B)高内聚低耦合C)低内聚高耦合D)高内聚高耦合参考答案:B【解析】模块划分应遵循的准则包括模块之间的耦合和内聚。一般来说,要求模块之间的耦合尽可能地低,即模块尽可能独立,要求模块的内聚程度尽可能地高,即高内聚、低耦合的原则。4.在软件开发中,需求分析阶段产生的主要文档是________。【精品文档】 【精品文档】A)可行性分析报告B)软件需求规格说明书C)概要设计说明书D)集成测试计划参考答案:B【解析】需求分析阶段的工作主要包括需求获取、需求分析、编写需求规格说明书和需求评审等四方面。产生的主要文档为软件需求规格说明书,它可以为用户、分析人员和设计人员之间的交流提供方便,可以直接支持目标软件系统的确认,又可以作为控制软件开发进程的依据。________。A)算法程序的运行时间是有限的B)算法程序所处理的数据量是有限的C)算法程序的长度是有限的D)算法只能被有限的用户使用参考答案:A【解析】算法具有6个特性。①有穷性:一个算法必须总是(对任何合法的输入值)在执行有穷步之后结束,且每一步都可在有限时间内完成,即运行时间是有限的。②确定性:算法中每一条指令必须有确切的含义,读者理解时不会产生歧义。③可行性:一个算法是可行的,即算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现。④输入:一个算法有零个或多个输入,这些输入取自某个特定的对象的集合。⑤输出:一个算法有一个或多个输出。n的线性表排序,在最坏情况下,比较次数不是n(n-1)/2的排序方法是________。A)快速排序B)冒泡排序C)直接插入排序D)堆排序参考答案:D【精品文档】 【精品文档】【解析】在最坏情况下,快速排序、冒泡排序和直接插入排序需要的比较次数都是n(n-1)/2,堆排序需要比较的次数为nlog2n。7.下列关于栈的叙述正确的是________。A)栈按"先进先出"组织数据B)栈按"先进后出"组织数据C)只能在栈底插入数据D)不能删除数据参考答案:B【解析】在栈中,允许插入与删除的一端称为栈顶,而不允许插入与删除的一端称为栈底。栈顶元素总是最后被插入的元素,从而也是最先被删除的元素;栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素。因而栈是按照"先进后出"或"后进先出"的原则组织数据的。8.在数据库设计中,将E-R图转换成关系数据模型的过程属于________。A)需求分析阶段B)概念设计阶段C)逻辑设计阶段D)物理设计阶段参考答案:C【解析】数据库的逻辑设计分为:①将概念模型转换成一般的数据模型;②将一般的数据模型转换为特定的数据库管理系统所支持的数据模型。把概念模型转换成关系数据模型就是把E-R图转换成一组关系模式。9.有三个关系R、S和T如下:RBCDa0k1b1n1SBCD【精品文档】 【精品文档】f3h2a0k1n2x1TBCDa0k1由关系R和S通过运算得到关系T,则所使用的运算为________。A)并B)自然连接C)笛卡尔积D)交参考答案:D【解析】在关系运算中,交的定义如下:设R1和R2为参加运算的两个关系,它们具有相同的度n,且相对应的属性值取自同一个域,则R1∩R2为交运算,结果仍为度等于n的关系,其中,交运算的结果既属于R1又属于R2。10.设有表示学生选课的三张表,学生S(学号,姓名,性别,年龄,身份证号),课程C(课号,课名),选课SC(学号,课号,成绩),则表SC的关键字(键或码)为________。A)课号,成绩B)学号,成绩C)学号,课号D)学号,姓名,成绩参考答案:C【解析】"选课SC"表是"学生S"表和"课程C"表的映射表,主键是两个表主键的组合。A)C程序中的注释只能出现在程序的开始位置和语句的后面B)C程序书写格式严格,要求一行内只能写一个语句【精品文档】 【精品文档】C)C程序书写格式自由,一个语句可以写在多行上D)用C语言编写的程序只能放在一个程序文件中参考答案:C【解析】在C语言中,注释可以加在程序中的任何位置,选项A)错误。C程序可以分模块写在不同的文件中,编译时再将其组合在一起,选项D)错误。C程序的书写风格很自由,不但一行可以写多个语句,还可以将一个语句写在多行中。所以正确答案为选项C)。12.以下选项中不合法的标识符是A)printB)FORC)&aD)_00参考答案:C【解析】C语言合法标识符的命名规则是:标识符只能由字母、数字和下划线组成,并且第一个字符必须为字母或下划线。因为选项C)中的标识符的第一个字符为"&",所以选项C)为本题的正确答案。13.以下选项中不属于字符常量的是A)′C′B)′′C′′C)′xCC′D)′72′参考答案:B【解析】在C语言程序中,用单引号把一个字符或反斜线后跟一个特定的字符括起来表示一个字符常量。选项A)、C)和D)为正确的字符常量;而选项B)是用双引号括起来的字符,表示一个字符串常量,所以正确答案为选项B)。14.设变量已正确定义并赋值,以下正确的表达式是A)x=y*5=x+zB)int(15.8%5)C)x=y+z+5,++yD)x=参考答案:C【精品文档】 【精品文档】【解析】求余运算符"%"两边的运算对象必须是整型,而选项B)和D)中"%"两边的运算对象有浮点整数据,所以选项B)和D)是错误的表达式;在选项A)中赋值表达式的两边出现相同的变量x,也是错误的;选项C)是一个逗号表达式,所以正确答案为C)。15.以下定义语句中正确的是A)int a=b=0;B)char A=65+1,b=′b′;C)floata=1,*b=&a,*c=&b;D)double a=;b=;参考答案:B【解析】本题考查变量的定义方法。如果要一次进行多个变量的定义,则在它们之间要用逗号隔开。因此选项A)和D)错误;在选项C)中,变量c是一个浮点型指针,它只能指向一个浮点型数据,不能指向指针变量b;所以正确答案为B)。16.有以下程序段:char ch;int k;ch=′a′;k=12;printf("%c,%d,",ch,ch,k);printf("k=%d ",k);已知字符a的ASCII码值为97,则执行上述程序段后输出结果是A)因变量类型与格式描述符的类型不匹配输出无定值B)输出项与格式描述符个数不符,输出为零或不定值C)a,97,12k=12D)a,97,k=12参考答案:D【解析】输出格式控制符%c表示将变量以字符的形式输出;输出格式控制符%d表示将变量以带符号的十进制整型数输出。所以第一个输出语句输出的结果为a,97,第二个输出语句输出的结果为k=12,所以选项D)为正确答案。【精品文档】 【精品文档】17.已知字母A的ASCII码值为65,若变量kk为char型,以下不能正确判断出kk中的值为大写字母的表达式是A)kk>=′A′&&kk<=′Z′B)!(kk>=′A′||kk<=′Z′)C)(kk+32)>=′a′&&(kk+32)<=′Z′D)isalpha(kk)&&(kk<91)参考答案:B【解析】C语言的字符以其ASCII码的形式存在,所以要确定某个字符是大写字母,只要确定它的ASCII码在'A'和'Z'之间就可以了,选项A)和C)符合此要求。在选项D)中,函数isalpha用来确定一个字符是否为字母,大写字母的ASCII码值的范围为65到90,所以如果一个字母的ASCII码小于91,那么就能确定它是大写字母。本题答案选B)。c的值不为2、4、6时,值也为"真"的表达式是A)(c==2)||(c==4)||(c==6)B)(c>=2&&c<=6)||(c!=3)||(c!=5)C)(c>=2&&c<=6)&&!(c%2)D)(c>=2&&c<=6)&&(c%2!=1)参考答案:B【解析】满足表达式(c>=2&&c<=6)的整型变量c的值是2,3,4,5,6。当变量c的值不为2,4,6时,其值只能为3或5,所以表达式c!=3和c!=5中至少有一个为真,即不论c为何值,选项B)中表达式的值都为"真"。正确答案为B)。19.若变量已正确定义,有以下程序段:int a=3,b=5,c=7;if(a>b)a=b; c=a;if(c!=a)c=b;printf("%d,%d,%d ",a,b,c);其输出结果是A)程序段有语法错【精品文档】 【精品文档】B)3,5,3C)3,5,5D)3,5,7参考答案:B【解析】两个if语句的判断条件都不满足,程序只执行了c=a这条语句,所以变量c的值等于3,变量b的值没能变化,程序输出的结果为3,5,3。所以正确答案为选项B)。20.有以下程序:#include main(){ int x=1,y=0,a=0,b=0;switch(x){ case1:switch(y){ case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;}printf("a=%d,b=%d ",a,b);}程序的运行结果是A)a=1,b=0B)a=2,b=2C)a=1,b=1D)a=2,b=1参考答案:D【解析】本题考查了switch结构的内容。在C语言中,程序执行完一个case标号的内容后,如果没有break语句,控制结构会转移到下一个case继续执行,因为case常量表达式只是起语句标号作用,并不是在该处进行条件判断。本题程序在执行完内部switch结构后,继续执行了外部switch结构的case2分支。最后a和b的值分别为2和1。【精品文档】 【精品文档】21.有以下程序:#include main(){ int x=8;for( ; x>0; x--){ if(x%3) {printf("%d,",x--); continue;}printf("%d,",--x);}}程序的运行结果是A)7,4,2,B)8,7,5,2,C)9,7,6,4,D)8,5,4,2,参考答案:D【解析】在本题中,程序每执行一次循环x的值就减2,循环共执行4次。当x的值为8,4,2时,printf语句先输出x的值,再将x的值减1。而当x为6时,if语句条件成立,程序先将x的值减1,再将其输出。所以输出结果为选项D)。22.以下不构成无限循环的语句或语句组是A)n=0;do{++n;}while(n<=0);B)n=0;while(1){n++;}C)n=10;while(n);{n--;}D)for(n=0,i=1;;i++)n+=i;参考答案:A【解析】项A)中变量n的值,先自加1,再进行循环条件判断,此时循环条件n<=0不成立,跳出循环。所以正确答案为A)。23.有以下程序:#include main(){ int a[]={1,2,3,4},y,*p=&a[3];--p;y=*p;printf("y=%d ",y);}程序的运行结果是【精品文档】 【精品文档】A)y=0B)y=1C)y=2D)y=3参考答案:D【解析】在程序中指针变量p初始指向a[3],执行p减1后,p指向a[2],语句y=*p的作用是把a[2]的值赋给变量y,所以输出为y=3。正确答案为D)。24.以下错误的定义语句是A)int x[][3]={{0},{1},{1,2,3}};B)int x[4][3]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};C)int x[4][]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};D)int x[][3]={1,2,3,4};参考答案:C【解析】本题考查的是二维数组的定义和初始化方法。C语言中,在定义并初始化二维数组时,可以省略数组的第一维的长度,但是不能省略第二维的长度。故选项C)错误。25.设有如下程序段: char s[20]="Beijing",*p; p=s;则执行p=s;语句后,以下叙述正确的是A)可以用*p表示s[0]B)s数组中元素的个数和p所指字符串长度相等C)s和p都是指针变量D)数组s中的内容和指针变量p中的内容相同参考答案:A【解析】语句p=s的作用是把字符数组s的首地址作为初值赋给了指针变量p,并且使p指向了字符数组s的第一个字符s[0]。26.若有定义:int a[2][3];,以下选项中对a数组元素正确引用的是A)a[2][!1]B)a[2][3]【精品文档】 【精品文档】C)a[0][3]D)a[1>2][!1]参考答案:D【解析】C语言中数组下标是从0开始的,所以二维数组a[2][3]的第一维下标取值为0、1;第二维的下标取值为0、1、2,因而选项A)、B)、C)都是错误的,选项D)表示的是数组元素a[0][0]。所以正确答案为D)。27.有定义语句:char s[10];,若要从终端给s输入5个字符,错误的输入语句是A)gets(&s[0]);B)scanf("%s",s+1);C)gets(s);D)scanf("%s",s[1]);参考答案:D【解析】在格式输入中,要求给出的是变量的地址,而D)答案中给出的s[1]是一个值的表达式。28.以下叙述中错误的是A)在程序中凡是以"#"开始的语句行都是预处理命令行B)预处理命令行的最后不能以分号表示结束C)#define MAX是合法的宏定义命令行D)C程序对预处理命令行的处理是在程序执行的过程中进行的参考答案:D【解析】C语言中的预处理命令以符号#开头,这些命令是在程序编译之前进行处理的,选项D)的描述错误。故答案选D)。A)typedefstruct{intn;charc;}REC;RECt1,t2;B)structREC;{intn;charc;};RECt1,t2;【精品文档】 【精品文档】C)typedefstructREC;{intn=0;charc='A';}t1,t2;D)struct{intn;charc;}REC;RECt1,t2;参考答案:A【解析】本题考查的是typedef的用法和结构体变量的定义方法。typedef可用于声明结构体类型,其格式为"typedefstruct{结构元素定义}结构类型;"。本题正确答案为A)。30.以下叙述中错误的是A)gets函数用于从终端读入字符串B)getchar函数用于从磁盘文件读入字符C)fputs函数用于把字符串输出到文件D)fwrite函数用于以二进制形式输出数据到文件参考答案:B【解析】getchar函数的作用是从终端读入一个字符。31.有以下程序:#include main(){ int s[12]={1,2,3,4,4,3,2,1,1,1,2,3},c[5]={0},i;for(i=0;i<12;i++) c[s[i]]++;for(i=1;i<5;i++) printf("%d",c[i]);printf(" ");}程序的运行结果是A)1234B)2344C)4332D)1123参考答案:C【解析】在for(i=0;i<12;i++)c[s[i]]++中,数组元素s[i]的值作为数组c的下标,当退出循环时,数组c的4个元素的值分别为4、3、3、2。所以选项C)正确。【精品文档】 【精品文档】32.有以下程序:#include void fun(int *s,int n1,int n2){ int i,j,t;i=n1; j=n2;while(i#include void fun(char *s[],int n){ char *t;    int i,j;for(i=0;istrlen(s[j])) {t=s[i];s[i]=s[j];s[j]=t;}}main(){ char *ss[]={"bcc","bbcc","xy","aaaacc","aabcc"};fun(ss,5);   printf("%s,%s ",ss[0],ss[4]);}程序的运行结果是A)xy,aaaacc【精品文档】 【精品文档】B)aaaacc,xyC)bcc,aabccD)aabcc,bcc参考答案:A【解析】函数fun(char*s[],intn)的功能是对字符串数组的元素按照字符串的长度从小到大排序。在主函数中执行fun(ss,5)语句后,*ss[]={"xy","bcc","bbcc","aabcc","aaaacc"},ss[0],ss[4]的输出结果为xy,aaaacc。所以选项A)为正确答案。34.有以下程序:#include intf(int x){ int y;if(x==0||x==1) return(3);y=x*x-f(x-2);return y;}main(){ int z;z=f(3);   printf("%d ",z);}程序的运行结果是A)0B)9C)6D)8参考答案:C【解析】函数intf(intx)是一个递归函数调用,当x的值等于0或1时,函数值等于3,其他情况下y=x2-f(x-2)。所以在主函数中执行语句"z=f(3)"时,y=3*3-f(3-2)=9-f(1)=6。35.有以下程序:#include void fun(char *a,char *b){ while(*a==′*′)a++;while(*b=*a){b++;a++;}}main(){ char *s="*****a*b****",t[80];【精品文档】 【精品文档】fun(s,t); puts(t);}程序的运行结果是A)*****a*bB)a*bC)a*b****D)ab参考答案:C【解析】在函数fun(char*a,char*b)中,while(*a=='*')a++的功能是:如果*a的内容为'*',则a指针向后移动,直到遇到非'*'字符为止,退出循环进入下一个while循环,在while(*b=*a){b++;a++;}中,把字符数组a中的字符逐个赋给字符数组b。所以在主函数中,执行fun(s,t)语句后,字符数组t中的内容为"a*b****"。所以选项C)为正确答案。36.有以下程序:#include #include typedef struct{ charname[9]; charsex; floatscore[2]; }STU;void f(STU a){ STU b={"Zhao",′m′,85.0,90.0};  int  i;,b.name);a.sex=;for(i=0;i<2;i++) a.score[i]=b.score[i];}main(){ STU c={"Qian",′f′,95.0,92.0};f(c);printf("%s,%c,,%2.0f ",,,c.score[0],c.score[1]);}程序的运行结果是A)Qian,f,95,92B)Qian,m,85,90C)Zhao,f,95,92D)Zhao,m,85,90参考答案:A【精品文档】 【精品文档】【解析】本题考查的是函数调用时的参数传递问题。程序在调用函数f时,传给函数f的参数只是结构变量c在栈中的一个复制,函数f所做的所有操作只是针对这个数据复制进行的修改,这些都不会影响变量c的值。37.有以下程序:#include main(){ FILE *fp;  int a[10]={1,2,3},i,n;fp=fopen("d1.dat","w");for(i=0;i<3;i++) fprintf(fp,"%d",a[i]);fprintf(fp," ");fclose(fp);fp=fopen("d1.dat","r");fscanf(fp,"%d",&n);fclose(fp);printf("%d ",n);}程序的运行结果是A)12300B)123C)1D)321参考答案:B【解析】在函数中首先把整型数组a[10]中的每个元素写入文件中,然后再次打开这个文件,把文件中的内容读入到整型变量n中,最后输出变量n的值。所以正确答案为B)。38.变量a中的数据用二进制表示的形式是01011101,变量b中的数据用二进制表示的形式是11110000。若要求将a的高4位取反,低4位不变,所要执行的运算是A)a^bB)a|bC)a&bD)a<<4参考答案:A【解析】本题考查的是位运算的知识。对于任何二进制数,与1进行异或运算会让其取反,而与0进行异或运算不会产生任何变化,故本题答案选A)。【精品文档】 【精品文档】39.在C语言中,只有在使用时才占用内存单元的变量,其存储类型是A)auto和registerB)extern和registerC)auto和staticD)static和register参考答案:A【解析】在C语言中只有自动变量和寄存器变量在使用时才占用内存单元。所以正确答案为A)。40.设有定义语句int (*f)(int);,则以下叙述正确的是A)f是基类型为int的指针变量B)f是指向函数的指针变量,该函数具有一个int类型的形参C)f是指向int类型一维数组的指针变量D)f是函数名,该函数的返回值是基类型为int类型的地址参考答案:B【解析】本题考查的是指向函数的指针。语句"int(*f)(int);"是对一个函数的声明,其中f是指向该函数的指针,该函数有一个整型的参数,函数返回值类型为整型。故答案选B)。__【1】__值集。参考答案:输出【解析】软件测试用例是为了有效发现软件缺陷而编写的包含测试目的、测试步骤、期望测试结果的特定集合。正确认识和设计软件测试用例可以提高软件测试的有效性,便于测试质量的度量,增强测试过程的可管理性。软件测试用例包括:输入值集和输出值集。测试用例是软件测试的核心。2.深度为5的满二叉树有__【2】__个叶子结点。参考答案:16【精品文档】 【精品文档】【解析】在满二叉树中,叶子结点数目的计算公式为2n-1,其中n为树的深度。3.设某循环队列的容量为50,头指针front=5(指向队头元素的前一位置),尾指针rear=29(指向队尾元素),则该循环队列中共有__【3】__个元素。参考答案:24【解析】实现循环队列时,头指针指向第一个元素的前一个空间,尾指针指向最后一个元素。因此,此时队列中6,7,8,...,29这24个空间存有元素,即队列中有29-5=24个元素。4.在关系数据库中,用来表示实体之间联系的是__【4】__。参考答案:关系【解析】在关系数据库中,用关系(二维表结构)表示实体及其之间联系的模型称为关系数据模型。5.在数据库管理系统提供的数据定义语言、数据操纵语言和数据控制语言中,__【5】__负责数据的模式定义与数据的物理存取构建。参考答案:数据定义语言【解析】数据定义语言负责数据的模式定义与数据的物理存取构建;数据操纵语言负责数据的操纵,如查询、增加、删除、修改等;数据控制语言负责数据完整性、安全性的定义与检查,以及并发控制、故障恢复等。6.已有定义:char c=′ ′;int a=1,b;(此处c的初值为空格字符),执行b=!c&&a;后b的值为__【6】__。参考答案:0【解析】字符空格的ASCII码不为0,所以本题中表达式!c的值为0,b=0&&1的结果显然为0。【精品文档】 【精品文档】7.设变量已正确定义为整型,则表达式n=i=2,++i,i++的值为__【7】__。参考答案:3【解析】本题考查的是C语言逗号表达式的相关知识。程序在计算逗号表达式时,从左到右计算由逗号分隔的各表达式的值,整个逗号表达式的值等于其中的最后一个表达式的值。本题中,首先i被赋值为2,再自加1,最后i++的值计算为3。8.若有定义:int k;,以下程序段的输出结果是__【8】__。for(k=2;k<6;k++,k++) printf("##%d",k);参考答案:##2##4【解析】在for循环语句中,自变量k的自增表达式为k++,k++。这是一个逗号表达式,所以输出结果为##2##4。9.以下程序的定义语句中,x[1]的初值是__【9】__,程序运行后输出的内容是__【10】__。#include main(){ int x[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16},*p[4],i;for(i=0;i<4;i++){ p[i]=&x[2*i+1];printf("%d,p[i][0]");}printf(" ");}参考答案:22468【解析】在主函数中根据整型数组x[]的定义可知,x[1]的初值等于2。在for循环语句中,当i=0时,p[0]=&x[1],p[0][0]=2;当i=1时,p[1]=&x[3],p[1][0]=4;当i=2时,p[2]=&x[5],p[2][0]=6;当i=3时,p[3]=&x[7],p[3][0]=8。所以程序输出的结果为2468。10.以下程序的输出结果是__【11】__。#include void swap(int *a, int *b)【精品文档】 【精品文档】{ int *t;t=a; a=b; b=t;}main(){ int i=3,j=5,*p=&i,*q=&j;swap(p,q);  printf("%d %d ",*p,*q);}参考答案:35【解析】函数swap(int*a,int*b)的功能是实现*a和*b中两个数据的交换,在主函数中调用swap(p,q)后,参形指针变量a和b分别指向i和j,在swap(int*a,int*b)执行完后,指针变量a和b分别指向j和i,而指针变量p,q所指向变量的值没有发生变化,所以输出结果为35。11.以下程序的输出结果是__【12】__。#include main(){ int a[5]={2,4,6,8,10},*p;p=a; p++;printf("%d",*p);}参考答案:4【解析】在主函数中,语句p=a;p++使用指针p指向数组a[1],所以输出结果为4。12.以下程序的输出结果是__【13】__。#include void fun(int x){ if(x/2>0) fun(x/2);printf("%d",x);}main(){ fun(3); printf(" "); }参考答案:13【解析】在主函数中调用fun(3)时,实参3传递给形参x。在fun(x)内,执行第一条语句,输出1,然后执行第二条语句,输出3,所以结果为13。【精品文档】 【精品文档】13.以下程序中函数fun的功能是:统计person所指结构体数组中所有性别(sex)为M的记录的个数,存入变量n中,并作为函数值返回。请填空。#include #define N 3typedef struct{int num; char nam[10]; char sex;}SS;int fun(SS person[]){ int i,n=0;for(i=0;imain(){FILE*fp;char ch;fp=fopen(__【15】__);ch=fgetc(fp);while(!feof(fp)) { putchar(ch); ch=fgetc(fp); }putchar(′ ′);fclose(fp);}参考答案:"filea.dat","r"【解析】fopen函数的调用方式通常为fopen(文件名,使用文件方式)。本题中要求程序可以打开filea.dat文件,并且读取文件中的内容。所以空白处应当填入"filea.dat","r"。【精品文档】 【精品文档】2008年9月真题1.一个栈的初始状态为空。现将元素1、2、3、4、5、A、B、C、D、E依次入栈,然后依次出栈,则元素出栈的顺序是________。A)12345ABCDEB)EDCBA54321C)ABCDE12345D)54321EDCBA参考答案:B【解析】栈的特点是先进后出,所以全部入栈后再全部出栈所得的序列顺序必然与入栈序列的顺序相反。2.下列叙述中正确的是________。A)循环队列有队头和队尾两个指针,因此,循环队列是非线性结构B)在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况C)在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况D)循环队列中元素的个数是由队头指针和队尾指针共同决定的参考答案:D【解析】循环队列是线性表的一种,所以选项A)错误。循环队列的入队和出队需要队尾指针和队头指针共同完成,所以选项B)和C)错误。n的有序线性表中进行二分查找,最坏情况下需要比较的次数是________。A)O(n)B)O(n2)参考答案:C【解析】二分查找法也称为折半查找法。它的基本思想是:将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2],则找到x,算法终止;如果xa[n/2],则只要在数组a的右半部继续搜索x。每次余下n/(2i)个元素待比较,当最后剩下一个时,即n/(2i)=1。故,n=2i;所以。________。A)顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的B)顺序存储结构只针对线性结构,链式存储结构只针对非线性结构C)顺序存储结构能存储有序表,链式存储结构不能存储有序表D)链式存储结构比顺序存储结构节省存储空间参考答案:A【解析】顺序存储方式是把逻辑上相邻的结点存储在物理上相邻的存储单元里,结点之间的关系由存储单元的邻接关系来体现。其优点是占用最少的存储空间,所以选项D)错误。顺序存储结构可以存储如二叉树这样的非线性结构,所以选项B)错误。链式存储结构也可以存储线性表,所以选项C)错误。________。A)控制流B)事件驱动C)模块调用D)数据流参考答案:D【解析】在数据流图中,矩形表示数据的外部实体,圆角的矩形表示变换数据的处理逻辑,双横线表示数据的存储,箭头表示数据流。6.在软件开发中,需求分析阶段可以使用的工具是________。A)N-S图B)DFD图C)PAD图D)程序流程图参考答案:B【精品文档】 【精品文档】【解析】数据流图简称DFD图,采用图形方式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程,是结构化系统分析方法的主要表达工具及用于表示软件模型的一种图示方法。所以DFD图可以用于需求分析阶段。7.在面向对象方法中,不属于"对象"基本特点的是________。A)一致性B)分类性C)多态性D)标识唯一性参考答案:A【解析】对象是面向对象方法中最基本的概念,它的基本特点有:标识唯一性、分类性、多态性、封装性和模块独立性。故本题答案为A)。8.一间宿舍可住多个学生,则实体宿舍和学生之间的联系是________。A)一对一B)一对多C)多对一D)多对多参考答案:B【解析】一个实体宿舍可以对应多个学生,而一个学生只能对应一个宿舍,所以宿舍和学生之间是一对多关系。9.在数据管理技术发展的三个阶段中,数据共享最好的是________。A)人工管理阶段B)文件系统阶段C)数据库系统阶段D)三个阶段相同参考答案:C【解析】人工管理阶段:计算机出现的初期,主要用于科学计算,没有大容量的存储设备。处理方式只能是批处理,【精品文档】 【精品文档】数据不共享,不同程序不能交换数据。文件系统阶段:把有关的数据组织成一种文件,这种数据文件可以脱离程序而独立存在,由一个专门的文件管理系统实施统一管理。但是,数据文件仍高度依赖于其对应的程序,不能被多个程序通用。数据库系统阶段:对所有的数据实行统一规划管理,形成一个数据中心,构成一个数据仓库,数据库中的数据能够满足所有用户的不同要求,供不同用户共享。数据共享性显著增强。故本题答案为C)。R、S和T如下:RABm1n2SBC1335TABCm13由关系R和S通过运算得到关系T,则所使用的运算为________。A)笛卡尔积B)交C)并D)自然连接参考答案:D【解析】自然连接是一种特殊的等值连接。当关系R和S有相同的属性组,且该属性组的值相等时的连接称为自然连接。________。A)C程序的基本组成单位是语句B)C程序中的每一行只能写一条语句C)简单C语句必须以分号结束D)C语句必须在一行内写完参考答案:C【解析】函数是C程序的基本组成单位;C语言书写风格很自由,不但一行可以写多个语句,还可以将一个语句写在多行中。故本题答案为C)。________。【精品文档】 【精品文档】A)源程序B)目标程序C)汇编程序D)可执行程序参考答案:D【解析】计算机能直接执行的只能是机器语言程序,源程序和汇编程序都是用高级语言编写的程序,不能被直接执行。目标程序也是不能被直接执行的程序,需要通过系统提供的连接程序与库函数连接装配成可执行程序,才能被计算机执行。所以本题答案为D)。C语言合法常量的是________。A)'cd'+6C)"\a"D)'11'参考答案:A【解析】选项B)是实型常量,选项C)是字符串常量,选项D)是转义字符常量,都是合法的常量。________。A)double a;b;B)double a=b=7;C)double a=7,b=7;D)double,a,b;参考答案:C【解析】定义变量a和变量b为double类型,并对其赋初值。变量之间应以","分隔,定义关键字与变量名之间应以空格分隔,语句应以";"结尾。的C语言表达式是________。A)2*a*b/c/dB)a*b/c/d*2C)a/c/d*b*2D)2*a*b/c*d参考答案:D【解析】C语言中算术运算符的结合性均为自左向右。选项D)中表达式计算结果是2*a*b*d/c,和题目要求的代数式不一致,因此选项D)不能正确表示题目所给的代数式不一致,因此选项D)不能正确表示题目所给的代数式内容。【精品文档】 【精品文档】16.C源程序中不能表示的数制是________。A)二进制B)八进制C)十进制D)十六进制参考答案:A【解析】C语言中整型常量可用十进制、八进制和十六进制3种形式表示。(w)?(--x):(++y),则其中与w等价的表达式是________。A)w==1B)w==0C)w!=1D)w!=0参考答案:D【解析】条件运算符组成条件表达式的一般形式为:表达式1?表达式2:表达式3。其求值规则为:如果表达式1的值为真,则以表达式2的值作为条件表达式的值,否则以表达式3的值作为条件表达式的值。本题中需要获得表达式w的逻辑值,即w是否为0,不为0则为真,为0则为假。因此正确答案为D)。18.执行以下程序段后,w的值为________。 int w='A',x=14,y=15; w=((x‖y)&&(w<'a'));A)-1B)NULLC)1D)0参考答案:C【解析】根据题目所给条件可知,x||y为1,w<'a'为1,1&&1结果为1。因此正确答案为C)。【精品文档】 【精品文档】int型,要通过语句scanf("%d,%d,%d",&a,&b,&c);给a赋值1、给b赋值2、给c赋值3,以下输入形式中错误的是(代表一个空格符)________。A)1,2,3<回车>B)123<回车>C)1,2,<回车>D)1,2,3<回车>参考答案:B【解析】由于scanf格式输入语句中,使用逗号作为输入值的间隔,所以在输入时需要使用逗号隔开。只有选项B)中没有使用逗号,故本题选B)。20.有以下程序段: int a,b,c; a=10; b=50; c=30; if(a>b)a=b, b=c; c=a; printf("a=%db=%dc=%d ",a,b,c);程序的输出结果是________。A)a=10b=50c=10B)a=10b=50c=30C)a=10b=30c=10D)a=50b=30c=50参考答案:A【解析】该题考查if条件语句,当条件为真时,将b值赋给a,c值赋给b;当条件为假时,将a值赋给c。该题中if条件为假,所以将a的值赋给c,故a=10b=50c=10。21.若有定义语句:intm[]={5,4,3,2,1},i=4;,则下面对m数组元素的引用中错误是________。A)m[--i]B)m[2*2]C)m[m[0]]D)m[m[i]]参考答案:C【精品文档】 【精品文档】【解析】数组m下标从0到4计算,共5个元素,选项C)中m[0]=5,则m[m[0]]为m[5]中,超出了数组m的下标范围。因此正确答案为C)。func函数的实参个数是________。 func(f2(v1,v2),(v3,v4,v5),(v6,max(v7,v8)));A)3B)4C)5D)8参考答案:A【解析】C语言函数定义中,参数列表之间使用逗号分隔。该题目中func的函数列表中使用两个逗号,将3个参数分隔开。23.若有定义语句:double x[5]={1.0,2.0,3.0,4.0,5.0},*p=x;则错误引用x数组元素的是________。A)*pB)x[5]C)*(p+1)D)*x参考答案:B【解析】x[5]={1.0,2.0,3.0,4.0,5.0},说明数组x有5个元素。下标范围为0到4,选项B)中x[5]超过了下标范围,故引用错误。24.若有定义语句:char s[10]="1234567";,则strlen(s)的值是________。A)7B)8C)9D)10参考答案:A【解析】strlen(s)即求字符串s的长度,遇到''时结束统计。因此选项A)为正确答案。________。A)用户定义的函数中可以没有return语句【精品文档】 【精品文档】B)用户定义的函数中可以有多个return语句,以便可以调用一次就返回多个函数值C)用户定义的函数中若没有return语句,则应当定义函数为void类型D)函数的return语句中可以没有表达式参考答案:B【解析】在函数中允许有多个return语句,但每次调用只能有一个return语句被执行,因此只能返回一个函数值。________。A)宏名必须用大写字母表示B)宏定义必须位于源程序中所有语句之前C)宏替换没有数据类型限制D)宏调用比函数调用耗费时间参考答案:C【解析】宏名可以大写,也可以小写。其有效范围为定义命令之后到本源文件结束。宏的调用是字符的替换,没有数据类型限制。27.有以下程序:#include main(){ int  i,j; for(i=3;i>=1;i--) { for(j=1;j<=2;j++)printf("%d",i+j); printf(" "); }}程序的运行结果是________。A)234B)432345543C)23D)4534344523参考答案:D【精品文档】 【精品文档】【解析】该题目主要考查for嵌套循环,要注意循环变量i和j的取值范围。输出结果为变量i和j的和。28.有以下程序:#include main(){ int x=1,y=2,z=3; if(x>y) if(yy为假,所以直接执行最后一行代码。29.有以下程序:#include main(){ int i=5; do { if(i%3==1)if(i%5==2){ printf("*%d",i); break; } i++; } while(i!=0); printf(" ");}程序的运行结果是________。A)*7B)*3*5C)*5D)*2*6参考答案:A【精品文档】 【精品文档】【解析】整个程序中只有对i增加的语句而没有对i减少的语句,所以2、3都不可能出现,选项B)和D)错误。而i=5时第一个if语句的表达式为假,所以选项C)也错误。30.有以下程序:#include  int fun(int a,int b){ if(b==0) returna; else   return(fun(--a,--b));}main(){ printf("%d ",fun(4,2));}程序的运行结果是________。A)1B)2C)3D)4参考答案:B【解析】该题目考查函数参数传递以及if条件语句。当变量b为0时,将a的值返回给主调函数,因此a进行两次自减1后,将其值返回并输出。31.有以下程序:#include #include int fun(int n){ int *p; p=(int*)malloc(sizeof(int)); *p=n;  return *p;}main(){ int a; a=fun(10); printf("%d ",a+fun(10));}程序的运行结果是________。A)0B)10C)20D)出错【精品文档】 【精品文档】参考答案:C【解析】分配内存空间函数malloc的调用形式:(类型说明符*)malloc(size)。其功能是在内存的动态存储区中分配一块长度为"size"字节的连续区域,函数的返回值为该区域的首地址。"类型说明符"表示把该区域用于何种数据类型。32.有以下程序:#include void fun(int a,int b){ int t; t=a;a=b;b=t;}main(){ int c[10]={1,2,3,4,5,6,7,8,9,0},i; for(i=0;i<10;i+=2) fun(c[i],c[i+1]); for(i=0;i<10;i++) printf("%d,",c[i]); printf(" ");}程序的运行结果是________。A)1,2,3,4,5,6,7,8,9,0,B)2,1,4,3,6,5,8,7,0,9,C)0,9,8,7,6,5,4,3,2,1,D)0,1,2,3,4,5,6,7,8,9,参考答案:A【解析】主函数中给数组C元素赋值1,2,…,9,0。第一个for循环语句中调用fun函数,该函数功能是交换变量的数值,注意循环变量i的增量。第二个for循环语句将数组C中元素的值进行输出。33.有以下程序:#include struct st{ int x,y;}data[2]={1,10,2,20};main(){ struct st *p=data; printf("%d,",p->y);  printf("%d ',(++p)->x);}程序的运行结果是________。A)10,1B)20,1【精品文档】 【精品文档】C)10,2D)20,2参考答案:C【解析】数组名的值即为数组首地址,所以p->y可得第一个元素的y值,(++p)->x可得第二个元素的x值。34.有以下程序:#include voidfun(int a[],int n){ int i,t; for(i=0;i#define  N 4void fun(int a[][N],int b[]){ int i; for(i=0;iint fun(int (*s)[4],intn,intk){ int m,i; m=s[0][k]; for(i=l;im)m=s[i][k]; return m;}main(){ int a[4][4]={{1,2,3,4),{11,12,13,14},{21,22,23,24},{31,32,33,34}}; printf("%d ",fun(a,4,0));}程序的运行结果是________。A)4B)34C)31D)32参考答案:C【解析】fun函数中使用for循环语句和if条件语句对m进行赋值,主函数的功能是将fun函数中的m返回主调函数并输出。37.有以下程序:#include main(){ structSTU{ char name[9]; char sex; double score[2]; }; structSTU a={"Zhao",'m',85.0,90.0},b={"Qian",'f',95.0,92.0};【精品文档】 【精品文档】 b=a; printf("%s,%c,,%2.0f ",,,b.score[0],b.score[1]);}程序的运行结果是________。A)Qian,f,95,92B)Qian,m,85,90C)Zhao,f,95,92D)Zhao,m,85,90参考答案:D【解析】该题目考查结构体数据类型,注意语句b=a,因此输出为zhao,为m,依此类推。38.假定已建立以下链表结构,且指针p和q已指向如下图所示的结点:则以下选项中可将q所指结点从链表中删除并释放该结点的语句组是    。A)(*p).next=(*q).next; free(p);B)p=q->next; free(q);C)p=q; free(q);D)p->next=q->next; free(q);参考答案:D【解析】要将结点b从链表中删除,应先将a的指针域指向b结点的下一个结点,即p->next=q->next,然后释放指针q的空间。39.有以下程序:#include main(){ char a=4; printf("%d ",a=a<<1);}程序的运行结果是________。A)40B)16C)8D)4参考答案:C【精品文档】 【精品文档】【解析】左移运算符的功能是把其左边的运算数的各二进制位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。如a<<1,即把a的各个二进制位向左移动1位,a=00000100(十进制数为4),左移1位后为00001000(十进制数为8)。40.有以下程序:#include main(){ FILE *pf; char *s1="China",*s2="Beijing"; pf=fopen("abc.dat","wb+"); fwrite(s2,7,1,pf); rewind(pf);          /*文件位置指针回到文件开头*/ fwrite(s1,5,1,pf); fclose(pf);}以上程序执行后文件的内容是________。A)ChinaB)ChinangC)ChinaBeijingD)BeijingChina参考答案:B【解析】该题目考查文件相关知识。"wb+"用于打开或建立二进制文件并允许对其进行读和写操作。文件操作先写入了s2,然后将文件指针移动到文件夹,再写入s1,这样s1就会覆盖掉一部分s2的内容。__【1】__。参考答案:DBXEAYFZC【精品文档】 【精品文档】【解析】二叉树中序遍历的顺序为先遍历左子树,然后访问根结点,最后遍历右子树。2.按照软件测试的一般步骤,集成测试应在__【2】__测试之后进行。参考答案:单元【解析】软件测试过程按4个步骤进行,即:单元测试、集成测试、确认测试和系统测试。3.软件工程三要素包括方法、工具和过程,其中,__【3】__支持软件开发的各个环节的控制和管理。参考答案:过程【解析】软件工程包括三个要素:方法、工具和过程。方法为软件开发提供了"如何做"的技术;工具支持软件的开发、管理和文档生成;过程支持软件开发的各个环节的控制与管理。4.数据库设计包括概念设计、__【4】__和物理设计。参考答案:逻辑设计【解析】数据库的设计过程大致分为3个步骤:概念设计、逻辑设计和物理设计。5.在二维表中,元组的__【5】__不能再分成更小的数据项。参考答案:分量【解析】一张二维表对应一个关系,代表一个实体集,表中的一行称为一个元组。一个元组又由许多个分量组成,每个元组分量是表框架中每个属性的投影值。a和b已正确定义并赋初值。请写出与a-=a+b等价的赋值表达式__【6】__。参考答案:a=-b【解析】a-=a+b等价于a=a-(a+b),等价于a=-b。【精品文档】 【精品文档】a和b中的值分别为7和9,要求按以下格式输出a和b的值: a=7 b=9请完成输出语句:printf("__【7】__",a,b);。参考答案:a=%d b=%d 【解析】"%d"表示按十进制整型输出," "表示回车换行。__【8】__。#include main(){ int i,j,sum; for(i=3;i>=1;i--) { sum=0; for(j=1;j<=i;j++) sum+=i*j; } printf("%d ",sum);}参考答案:1【解析】在循环中当i=3、2、1时,j分别为1、2、3;1、2;1。sum值即为每个i值和它对应的j值相乘之后全部相加的和。__【9】__。#include main(){ int j,a[]={1,3,5,7,9,11,13,15},*p=a+5; for(j=3;j;j--) { switch(j) { case 1:   case 2: printf("%d",*p++); break;   case 3: printf("%d",*(--p)); } }}参考答案:9911【解析】由switch语句的用法可知,case3的语句执行了一次,case2的语句执行了两次。__【10】__。#include #define N 5【精品文档】 【精品文档】int fun(int *s,inta,int n){ int j; *s=a; j=n; while(a!=s[j])j--; return j;}main(){ int s[N+1]; int k; for(k=1;k<=N;k++) s[k]=k+1; printf("%d ",fun(s,4,N));}参考答案:3【解析】fun函数中while循环语句得到变量j的值,当s[j]=4时跳出循环,此时j=3,并返回给主调函数。__【11】__。#include int fun(int x){ staticint t=0; return(t+=x);}main(){ int s,i; for(i=1;i<=5;i++) s=fun(i); printf("%d ",s);}参考答案:15【解析】static关键字用来声明"静态局部变量",静态局部变量属于静态存储类别,在静态存储区内分配存储单元。在程序运行期间不释放变量的值。x数组的下三角置数,并按如下形式输出,请填空。     4     3 7     2 6 9     1 5 8 10#include main(){ int x[4][4],n=0,i,j; for(j=0;j<4;j++) for(i=3;i>=j;__【12】__){n++;x[i][j]=__【13】__;} for(i=0;i<4;i++)【精品文档】 【精品文档】 { for(j=0;j<=i;j++) printf("%3d",x[i][j]); printf(" "); }}参考答案:i--n【解析】第一空的表达式使i以1为步长递减,第二空则是为数组x赋值。13.以下程序的功能是:通过函数func输入字符并统计输入字符的个数。输入时用字符@作为输入结束标志。请填空。#include long__【14】__; /* 函数说明语句 */main(){ long n; n=func(); printf("n=%ld ",n);}longfunc(){ long m; for( m=0;getchar()!='@';__【15】__); return m;}参考答案:func()m++【解析】第一空为函数说明语句,其格式为:函数标志符#函数名。第二空中的m作为计数器,每读一个字符时加1。2009年3月真题________。A)栈是"先进先出"的线性表B)队列是"先进后出"的线性表C)循环队列是非线性结构D)有序线性表既可以采用顺序存储结构,也可以采用链式存储结构参考答案:D【精品文档】 【精品文档】【解析】栈是"先进后出"的线性表;队列是"先进先出"的线性表;循环队列是队列的一种顺序存储结构,因此是线性结构;有序线性表既可以采用顺序存储结构,也可以采用链式存储结构。________。A)栈B)树C)队列D)二叉树参考答案:A【解析】栈支持子程序调用。栈是一种只能在一端进行插入或删除的线性表,在主程序调用子函数时要首先保存主程序当前的状态,然后转去执行子程序,最终把子程序的执行结果返回到主程序中调用子程序的位置,继续向下执行,这种调用符合栈的特点,因此本题的答案为A)。5个度为2的结点,则该二叉树中的叶子结点数是________。A)10B)8C)6D)4参考答案:C【解析】对于任何一棵二叉树T,如果其终端结点(叶子)数为n1,度为2的结点数为n2,则n1=n2+1。所以该二叉树的叶子结点数等于5+1=6。4.下列排序方法中,最坏情况下比较次数最少的是________。A)冒泡排序B)简单选择排序C)直接插入排序D)堆排序参考答案:D【解析】冒泡排序、简单选择排序和直接插入排序在最坏情况下比较次数都是"n(n-1)/2",堆排序在最坏情况下比较次数最少,是""。5.软件按功能可以分为:应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的是________。A)编译程序B)操作系统【精品文档】 【精品文档】C)教务管理系统D)汇编程序参考答案:C【解析】软件按功能可以分为:应用软件、系统软件、支撑软件(或工具软件)。应用软件是为解决某一特定领域的应用而开发的软件;系统软件是计算机管理自身资源,提高计算机使用效率并为计算机用户提供各种服务的软件;支撑软件是介于系统软件和应用软件之间,协助用户开发软件的工具性软件。编译程序、操作系统和汇编程序都属于系统软件;教务管理系统属于应用软件。________。A)软件测试的目的是发现错误并改正错误B)对被调试的程序进行"错误定位"是程序调试的必要步骤C)程序调试通常也称为DebugD)软件测试应严格执行测试计划,排除测试的随意性参考答案:A【解析】软件测试的目的是暴露错误,评价程序的可靠性。软件调试的目的是发现错误的位置,并改正错误。软件测试和调试不是同一个概念。7.耦合性和内聚性是对模块独立性度量的两个标准。下列叙述中正确的是________。A)提高耦合性降低内聚性有利于提高模块的独立性B)降低耦合性提高内聚性有利于提高模块的独立性C)耦合性是指一个模块内部各个元素间彼此结合的紧密程度D)内聚性是指模块间互相连接的紧密程度参考答案:B【精品文档】 【精品文档】【解析】耦合性是模块间互相连接的紧密程度的度量,内聚性是一个模块内部各个元素间彼此结合的紧密程度的度量。一般较优秀的软件设计,应尽量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,这样有利于提高模块的独立性。________。A)数据库设计B)数据库系统设计C)数据库维护D)数据库管理员培训参考答案:A【解析】数据库应用系统中的一个核心问题就是设计一个能满足用户需求、性能良好的数据库,这就是数据库设计。9.有两个关系R,S如下:由关系R通过运算得到关系S,则所使用的运算为________。A)选择B)投影C)插入D)连接参考答案:B【解析】专门的关系运算有3种:投影、选择和联接。选择运算是从关系中找出满足给定条件的那些元组,其中的条件是以逻辑表达式给出的,值为真的元组将被选取,这种运算是从水平方向抽取元组。投影运算是从关系模式中挑选若干属性组成新的关系,这是从列的角度进行的运算,相当于对关系进行垂直分解。联接运算是二目运算,需要两个关系作为操作对象。E-R图转换为关系模式时,实体和联系都可以表示为________。A)属性B)键C)关系D)域参考答案:C【精品文档】 【精品文档】【解析】数据库逻辑设计的主要工作是将E-R图转换成指定RDBMS中的关系模式。从E-R图到关系模式的转换是比较直接的,实体与联系都可以表示成关系,E-R图中属性也可以转换成关系的属性。实体集也可以转换成关系。________。A)1_1B)1-1C)_11D)1__参考答案:C【解析】标识符命名规则:标识符必须由字母(a~z或A~Z)或下划线(_)开头;标识符的其他部分可以用字母、下划线或数字(0~9)组成;大小写字母表示不同意义,如cout和Cout代表不同的标识符;在定义标识符时,虽然语法上允许用下划线开头,但是,我们最好避免定义用下划线开头的标识符,因为编译器常常定义一些下划线开头的标识符。因此,本题正确答案为C)。12.若函数中有定义语句:intk;,则________。A)系统将自动给k赋初值0B)这时k中的值无定义C)系统将自动给k赋初值-1D)这时k中无任何值参考答案:B【解析】用int方法定义变量时,编译器仅为变量开辟存储单元,并没有在存储单元中存放任何值,此时变量中的值是无确定的,称变量值"无意义"。因此,本题正确答案为B)。13.以下选项中,能用作数据常量的是________。A)o115B)0118【精品文档】 【精品文档】D)115L参考答案:D【解析】整型常量和实型常量统称为数值型常量。本题中A)项是数字和字符的组合,不能构成数值型常量。B)项以0开头代表该常量是一个8进制数,但其后面的数字中又出现了"8",因此不正确。C)项用指数形式表示实型常量,但e后面必须为整数,不正确。D)项中一个常量后面加字母L表示长整型数据。因此,本题答案为D)。14.设有定义:intx=2;,以下表达式中,值不为6的是________。A)x*=x+1B)x++,2*xC)x*=(1+x)D)2*x,x+=2参考答案:D【解析】本题考察逗号运算符的运算方式,逗号运算符的作用是将若干表达式连接起来,它的优先级别在所有运算符中是最低的,结合方向为"自左至右"。A)项和C)项的结果是一样的,可展开为:x=x*(x+1)=2]+,因为++运算符有自加功能,逗号之前执行后x的值为3,逗号后的值就是整个表达式的值,即6;D)项逗号之前并未给x赋值,所以表达式的值就是x+=2的值,即4。因此,本题答案为D)。15.程序段:intx=12;doubley=;printf("%d%8.6f",x,y);的输出结果是________。参考答案:A【解析】本题考查printf函数的输出格式控制符,表示指定输出的实型数据的宽度为m(【精品文档】 【精品文档】包含小数点),并保留n位小数。当输出数据的小数位大于n时,截去右边多余的小数,并对截去的部分的第一位小数做四舍五入处理;当输出数据的小数位小于n时,在小数的最右边补0,输出数据的小数部分宽度为n。若给出的总宽度m小于n加上整数位数和小数点,则自动突破m的限制;反之,数字右对齐,左边补空格。本题中数值长度为8,小数位数为6,因此左端没有空格,故正确答案为A)。16.若有定义语句:doublex,y,*px,*py;执行了px=&x;py=&y;之后,正确的输入语句是________。A)scanf("%f%f",x,y);B)scanf("%f%f"&x,&y);C)scanf("%lf%le",px,py);D)scanf("%lf%lf",x,y);参考答案:C【解析】本题考查scanf函数,其格式为:scanf("控制格式",地址表列)。其中地址表列中应为要赋值变量的地址。本题要为变量x和y赋值,并定义了两个指针分别指向x和y,因此取得变量x和y的地址的方法有两种,一种是使用取地址符号"&",即&x和&y,另一种是使用指针变量,即px和py。选项A)和D)中地址表列表示错误;选项B)中控制格式与地址表列之间应用逗号分开。因此,本题正确答案为C)。if语句的基本形式: if(表达式)语句其中"表达式"________。A)必须是逻辑表达式B)必须是关系表达式【精品文档】 【精品文档】C)必须是逻辑表达式或关系表达式D)可以是任意合法的表达式参考答案:D【解析】C语言中if(表达式)中表达式的值可以是任意合法的表达式,如果表达式的值为0表示条件为假,如果表达式的值非0表示条件为真。18.有以下程序:#includemain(){ intx;  scanf("%d",&x);  if(x<=3);else  if(x!=10)printf("%d ",x);}程序运行时,输入的值在哪个范围才会有输出结果________。A)不等于10的整数B)大于3且不等10的整数C)大于3或等于10的整数D)小于3的整数参考答案:B【解析】if-else控制结构中,else总是与最近的未配对的if匹配。本题的执行过程为:如果输入整数小于3则不进行任何操作,否则判断是否不等于10,若为真则进行输出。因此程序输出的数据为大于3且不等于10的整数。19.有以下程序:#includemain(){ inta=l,b=2,c=3,d=0; if(a==l&&b++==2) if(b!=2||c--!=3)  printf("%d,%d,%d ",a,b,c); elseprintf("%d,%d,%d ",a,b,c); elseprintf("%d,%d,%d ",a,b,c);}程序运行后的输出结果是________。A)1,2,3【精品文档】 【精品文档】B)1,3,2C)l,3,3D)3,2,1参考答案:C【解析】程序首先执行第一个判断语句,a==1成立;b++==2,先判断b是否为2,再进行b加1操作,执行后b的值为3。继续执行第二个判断语句,注意程序此时进行逻辑或运算,b!=2的值为真,因此条件表达式b!=2||c--!=3的值为真,程序便不再执行第二个逻辑语句c--!=3,而直接进行输出操作。因此,本题正确答案为C)。20.以下程序段中的变量已正确定义: for(i=0;i<4;i++,i++)  for(k=l;k<3;k++);printf("*");程序段的输出结果是________。A)********B)****C)**D)*参考答案:D【解析】本题考察for循环语句,注意第二个for语句的后面有一个分号,即printf函数不属于循环体,无论循环执行多少次,printf("*")语句只执行一次。因此,本题正确答案为D)。21.有以下程序:#includemain(){char*s={"ABC"}; do {printf("%d",*s%10);s++; }while(*s);}注意:字母A的ASCII码值为65。程序运行后的输出结果是________。A)5670【精品文档】 【精品文档】B)656667C)567D)ABC参考答案:C【解析】指针s指向一个字符数组,每进行一次循环,将s中相应的字母的ASCII码对10取余数,并且将余数输出,因为A的ASCII码值是65,所以第一次打印出65%10=5,第二次打印出66%10=6,第三次打印出67%10=7。因此,本题正确答案为C)。22.设变量已正确定义,以下不能统计出一行中输入字符个数(不包含回车符)的程序段是________。A)n=0;while((ch=getchar())!=' ')n++;B)n=0;while(getchar()!=' ')n++;C)for(n=0;getchar()!='n';n++);D)n=0;for(ch=getchar();ch!=' ';n++);参考答案:D【解析】A)项每进行一次循环判断一个字符是否为回车,如果不是就进行下一次判断,因此可以统计出输入字符个数;B)项与A)项的判断相似,仅为是否将读入的数据赋值给一个变量,因此并不影响判断结果;C)想用for循环来判断,与B)项的判断完全相同,可以统计出输入字符个数;D)项中ch=getchar()是给变量ch赋初值,如果输入回车,则程序只循环一次,如果输入一个非回车的字符,则程序进入死循环。因此,本题正确答案为D)。23.有以下程序:#includemain(){inta1,a2;charc1,c2; scanf("%d%c%d%c",&a1,&c1,&a2,&c2); printf("%d,%c,%d,%c",a1,c1,a2,c2);}【精品文档】 【精品文档】若想通过键盘输入,使得a1的值为12,a2的值为34,c1的值为字符a,c2的值为字符b,程序输出结果是:12,a,34,b。正确的输入格式是(以下ㄩ代表空格,代表回车)________。A)12a34bB)12ㄩaㄩ34ㄩbC)12,a,34,bD)12ㄩa34ㄩb参考答案:A【解析】当输入整数或实数等数值型数据时,输入的数据之间必须用空格、回车、制表符等间隔符号隔开,间隔符个数不限。但整数和字符之间不用空格隔开,因为空格会被当作一个字符读入。因此,本题答案为A)。24.有以下程序:#includeintf(intx,inty){return((y-x)*x);}main(){inta=3,b=4,c=5,d;d=f(f(a,b),f(a,c));printf("%d ",d);}程序运行后的输出结果是________。A)10B)9C)8D)7参考答案:B【解析】将a、b、c的值分别带入f(a,b)和f(a,c)中计算得:f(a,b)=3,f(a,c)=6,再计算f(3,6),算出d=9。25.有以下程序:#includevoidfun(char*s)【精品文档】 【精品文档】{while(*s) {if(*s%2==0)printf("%c",*s);  s++; }}main(){chara[]={"good"}; fun(a);printf(" ");}注意:字母a的ASCII码值为97,程序运行后的输出结果是________。A)dB)goC)godD)good参考答案:A【解析】fun函数的功能是输出字符串中ASCII码能被2整除的字符,g的ASCII码为103,o的ASCII码为111,d的ASCII码为100,只有d满足。因此,本题答案为D)。26.有以下程序:#includevoidfun(int *a,int *b){int *c; c=a;a=b;b=c;}main(){intx=3,y=5,*p=&x,*q=&y; fun(p,q);printf("%d,%d,",*p,*q); fun(&x,&y);printf("%d,%d ",*p,*q);}程序运行后的输出结果是________。A)3,5,5,3B)3,5,3,5C)5,3,3,5D)5,3,5,3参考答案:B【解析】子函数fun功能为交换形式参数的值,即交换指针变量a和b的值。但是fun函数并不能够交换实参的值,因此fun(p,q)不能交换p和q的值,所以第一个printf【精品文档】 【精品文档】语句的输出为3,5。第二个fun函数对x和y的地址进行了操作,同样不能交换x和y的值,并且不能影响p和q指针指向的数据,因此第二个printf语句的输出为3,5。27.有以下程序:#includevoidf(int*p,int*q);main(){intm=1,n=2,*r=&m; f(r,&n);printf("%d,%d",m,n);}voidf(int*p,int*q){p=p+1;*q=*q+1;}程序运行后的输出结果是________。A)1,3B)2,3C)1,4D)1,2参考答案:A【解析】在f(int*p,int*q)函数中,执行p=p+1将p所对应的地址加1,而*q=*q+1是将q所指向的n的地址所对应的值加1,即m的地址所对应的值不变,而n的值为3。8个输出数组中的数据:voidfun(int*w,intn){inti; for(i=0;imain(){char*a[]={"abcd","ef","gh","ijk");inti; for(i=0;i<4;i++)printf("%c",*a[i]);}程序运行后的输出结果是________。A)aegiB)dfhkC)abcdD)abcdefghijk参考答案:A【解析】a为一个指针数组,其中的每个元素都是一个指针。该程序的功能是分别打印4个字符串的首字母。因此本题答案为A)。32.以下选项中正确的语句组是________。A)chars[];s="BOOK!";B)char*s;s={"BOOK!"};C)chars[10];s="BOOK!";D)char*s;s="BOOK!";参考答案:D【解析】定义数组时应指明数组长度,因此选项A)错误;B)项是一个指针,初始化应写为s="BOOK!";C)项中定义了一个字符数组,初始化应写为s={BOOK!};D)项正确。33.有以下程序:#includeintfun(intx,inty){if(x==y)return(x); elsereturn((x+y)/2);}main(){inta=4,b=5,c=6; printf("%d ",fun(2*a,fun(b,c)))}【精品文档】 【精品文档】则运行结果为。A)3B)6C)8D)12参考答案:B【解析】函数fun的功能是求两个整数的平均值,返回值仍为整数。5和6的平均取整后为5,8和5的平均取整后为6。因此,本题答案为B)。n,为保证其在未赋初值的情况下初值为0,应选择的存储类别是________。A)autoB)registerC)staticD)auto或register参考答案:C【解析】static(静态局部变量):有时我们希望函数中局部变量的值在函数调用结束后不消失而保留原值,这时就将局部变量指定为静态局部变量,如果定义静态局部变量时不赋值,则编译时自动赋初值0(对数据型变量)或空字符(对字符变量)。auto(自动变量):函数中的局部变量,如不专门声明为static存储类别,都是动态地分配存储空间的,数据存储在动态存储区中。函数中的形参和在函数中定义的变量都属此类,在调用该函数时系统会给它们分配存储空间,在函数调用结束时自动释放这些存储空间。register(寄存器变量):为了提高效率,C语言允许将局部变量的值放在CPU中的寄存器中,这种变量叫寄存器变量。35.有以下程序:#includeintb=2;intfun(int*k){b=*k+b;return(b);}main(){inta[10]={1,2,3,4,5,6,7,8},i; for(i=2;i<4;i++){b=fun(&a[i])+b;printf("%d",b);} printf(" ");}【精品文档】 【精品文档】程序运行后的输出结果是________。A)1012B)810C)1028D)1016参考答案:C【解析】b为全局变量,在第一次执行for循环后b的值变为10并输出,第二次执行for循环后b的值变为28。因此,本题答案选C)。36.有以下程序:#include#definePT ;#defineS(x) PT*x*x;main(){inta=l,b=2;printf("%4.1f ",S(a+b));}程序运行后的输出结果是________。A)14.0B)31.5C)7.5D)程序有错无输出结果参考答案:D【解析】本题考察宏定义的用法,进行宏定义时语句不能用分号结束,否则会出现错误。因此,本题答案为D)。37.有以下程序:#includestructord{intx,y;}dt[2]={1,2,3,4};main(){structord*p=dt; printf("%d,",++p->x);printf("%d ",++p->y);}程序的运行结果是________。A)1,2B)2,3C)3,4D)4,l参考答案:B【解析】p->x初始时为1,因为"->"的优先级大于"++",所以先计算p->x的值加1等于2并输出,再计算p->y的值加1等于3并输出。因此,本题答案为B)。【精品文档】 【精品文档】38.设有宏定义:#defineIsDIV(k,n)((k%n==1)?1:0)且变量m已正确定义并赋值,则宏调用:IsDIV(m,5)&&IsDIV(m,7)为真时所要表达的是________。A)判断m是否能被5或者7整除B)判断m是否能被5和7整除C)判断m被5或者7整除是否余1D)判断m被5和7整除是否都余1参考答案:D【解析】语句((k%n==1)?1:0)的意思是:当k%n==1时该表达式的值为1,否则,该表达式的值为0。因此IsDIV(m,5)&&IsDIV(m,7)为真时,表示判断m被5和7整除是否都余1。39.有以下程序:#includemain(){inta=5,b=l,t; t=(a<<2)|b;printf("%d ",t);}程序运行后的输出结果是________。A)2lB)11C)6D)1参考答案:A【解析】按位或运算符"|"是双目运算符,其功能是参与运算的两数各对应的二进位相或。左移运算符"<<"是双目运算符,其功能把"<<"左边的运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。将5变换为二进制数为101,左移2位后为10100,1转换为二进制数为00001,10100与00001进行或运算后为10101,再将其转换为十进制数为21。因此,本题答案为A)。40.有以下程序:#includemain()【精品文档】 【精品文档】{FILE*f; f=fopen("filea.txt","w"); fprintf(f,"abc"); fclose(f);}若文本文件中原有内容为:hello,则运行以上程序后,文件中的内容为________。A)helloabcB)abcloC)abcD)abchello参考答案:C【解析】"w"表示建立一个供写入的文件。如果文件不存在,系统将用在fopen调用中指定的文件名建立一个新文件,如果指定的文件已存在,则将从文件的起始位置开始写入,文件中原有的内容将全部消失。50的数组(数组元素的下标从0到49)作为栈的存储空间,栈底指针bottom指向栈底元素,栈顶指针top指向栈顶元素,如果bottom=49,top=30(数组下标),则栈中具有__【1】__个元素。参考答案:20【解析】与一般的线性表一样,在程序设计语言中,用一维数组S(1,m)作为栈的顺序存储空间,其中m为栈的最大容量。通常,栈底指针指向栈空间的栈中的元素个数等于(栈底指针-栈顶指针+1),即49-30+1=20。2.软件测试可分为白盒测试和黑盒测试。基本路径测试属于__【2】__测试。参考答案:白盒【解析】黑盒测试是根据程序规格说明所规定的功能来设计测试用例的,它不考虑程序的内部结构和处理过程。常用的黑盒测试技术分为等价类划分、边界分析、错误猜测以及因果图等。白盒测试的基本原则是:保证所测模块中每一独立路径至少执行一次;保证所测模块所有判断的每一分支至少执行一次;保证所测模块每一循环都在边界条件和一般条件下至少各执行一次;验证所有内部数据结构的有效性。白盒测试的主要方法有逻辑覆盖和基本路径测试等。【精品文档】 【精品文档】3.符合结构化原则的三种基本控制结构是:选择结构、循环结构和__【3】__。参考答案:顺序结构【解析】结构化程序设计的3种基本逻辑结构为顺序结构、选择结构和循环结构。顺序结构是一种简单的程序设计结构,它是最基本、最常用的程序设计结构;选择结构又称为分支结构,包括简单分支和多分支选择结构;循环结构也叫重复结构,它根据给定的条件,判断是否需要重复执行某一相同的程序段。__【4】__。参考答案:数据库管理系统【解析】数据库管理系统可以对数据库的建立、使用和维护进行管理,是数据库系统的核心。E-R图中,图形包括矩形框、菱形框、椭圆框。其中表示实体联系的是__【5】__框。参考答案:菱形【解析】在E-R图中,用矩形表示实体,框内标明实体名;用椭圆框表示实体的属性,框内标明属性名;用菱形框表示实体间的联系,框内标明联系名。(int)((double)(5/2)+2.5)的值是__【6】__。参考答案:4【解析】计算5/2=2,其结果先转换为double类型,即,然后加上为,再转换为int型,所以结果为4。x、y已定义为int类型且x的值为99,y的值为9,请将输出语句printf(__【7】__,x/y);补充完整,使其输出的计算结果形式为:x/y=11。参考答案:"x/y=%d"【解析】printf语句中,除了格式转换说明外,字符串中的其他字符(包括空格)将按原样输出。8.有以下程序:【精品文档】 【精品文档】#includemain(){charc1,c2; scanf("%c",&c1); while(c1<65||c1>90)scanf("%c",&c1); c2=c1+32; printf("%c,%c ",c1,c2);}程序运行输入65回车后,能否输出结果、结束运行(请回答能或不能)__【8】__。参考答案:不能【解析】c1,c2被定义为字符类型,当输入65时是以字符形式读入,只能读到字符6,6的ASCII码值是54,满足while(c1<65||c2>90),所以执行scanf("%c",&c1),即不能输出结果。__【9】__。#includemain(){intk=1,s=0; do{if((k%2)!=0)continue;s+=k;k++; }while(k>10); printf("s=%d ",s);}参考答案:s=0【解析】continue语句用于跳出本次循环,直接进行下一次循环。进行if判断时k的值为1不能够被2整除,因此执行continue退出本次循环,不对s进行任何操作,直接进行循环条件判断,此时k的值为1不满足循环条件,退出while循环,输出s的值为0。10.下列程序运行时,若输入1abcedf2df<回车>输出结果为__【10】__。#includemain(){chara=0,ch; while((ch=getchar())!=′ ′) {if(a%2!=0&&(ch>=′a′&&ch<=′z′))ch=ch-′a′+′A′;【精品文档】 【精品文档】a++;putchar(ch); } printf(" ");}参考答案:1AbCeDf2dF【解析】本题考查逻辑运算和ASCII码。While循环的功能是对输入的第偶数个且为小写字母的字符进行处理,将小写字母转化为大写,因此答案为1AbCeDf2dF。11.有以下程序,程序执行后,输出结果是__【11】__。#includevoidfun(int*a){a[0]=a[1];}main(){inta[10]={10,9,8,7,6,5,4,3,2,1),i; for(i=2;i>=0;i--)fun(&a[i]); for(i=0;i<10;i++)printf("%d",a[i]); printf(" ");}参考答案:7777654321【解析】函数的功能是将输入的指针指向的后一个变量赋给指针指向的变量。第一个for循环,i为2满足条件,将a[3]赋值给a[2],数组变为{10,9,7,7,6,5,4,3,2,1},同理第二次循环数组变为{10,7,7,7,6,5,4,3,2,1},第三次为{7,7,7,7,6,5,4,3,2,1},运行此次循环后退出第一个for循环。第二个for循环为输出数组的值,因此答案为7777654321。12.请将以下程序中的函数声明语句补充完整。#includeint__【12】__;main(){intx,y,(*p)(); scanf("%d%d",&x,&y); p=max; printf("%d ",(*p)(x,y));}intmax(inta,intb){return(a>b?a:b);}【精品文档】 【精品文档】参考答案:max(inta,intb)【解析】本题考的是函数声明。函数声明是把函数的名字、函数类型以及形参的类型、个数和顺序通知给编译系统。函数在被调用前必须先声明,因为main函数后面有max函数的定义。13.以下程序用来判断指定文件是否能正常打开,请填空。#includemain(){FILE*fp; if(((fp=fopen("test.txt","r"))==__【13】__))printf("未能打开文件! "); elseprintf("文件打开成功! ");}参考答案:NULL【解析】本题考查fopen函数的用法。若fopen不能实现打开任务时,函数会带回一个出错信息,出错原因可能是磁盘出现故障,磁盘无法建立新文件等,此时fopen函数将带回一个空指针NULL。因此通过判断返回值是否为NULL即可判断是否读取文件正确。__【14】__。#include#includestructA{inta;charb[10];doublec;};voidf(structA*t);main(){structAa={1001,"ZhangDa",1098.0); f(&a);printf("%d,%s,%6.1f ",,,a.c);}voidf(structA*t){strcpy(t->b,"ChangRong");}参考答案:【解析】此题考的是结构体用法。函数f的功能为将结构体的第二个变量修改为ChangRong。主函数为运行f函数后,将结构体输出。【精品文档】 【精品文档】NODETYPE型的变量链接成一个简单的链表,并在while循环中输出链表结点数据域中的数据。请填空。#includestructnode{intdata;structnode*next;};typedefstructnodeNODETYPE;main(){NODETYPEa,b,c,*h,*P; a.data=10;=20;=30;h=&a; a.next=&b;=&c;=′′; p=h; while(p){printf("%d,",p->data);__【15】__;} printf(" ");}参考答案:p=p->next【解析】打印完一个链表结点的数据域中的数据域后,用p=p->next使链表指针指向下一个链表结点。2009年9月真题1.下列数据结构中,属于非线性结构的是________。A)循环队列B)带链队列C)二叉树D)带链栈参考答案:C【解析】根据数据结构中各数据元素之间前后关系的复杂程度,一般将数据结构分为两大类型:线性结构与非线性结构。线性结构表示数据元素之间为一对一的关系,非线性结构表示数据元素之间为一对多或者多对一的关系。根据各种结构的定义知二叉树是一种非线性结构。2.下列数据结构中,能够按照"先进后出"原则存取数据的是________。A)循环队列B)栈C)队列D)二叉树【精品文档】 【精品文档】参考答案:B【解析】栈是限定只在一端进行插入与删除的线性表,通常称插入、删除的这一端为栈顶,另一端为栈底。栈顶元素总是后被插入的元素,也是最先被删除的元素;栈底元素总是最先被插入的元素,也是最后才能被删除的元素。栈是按照"先进后出"或"后进先出"的原则组织数据的。3.对于循环队列,下列叙述中正确的是________。A)队头指针是固定不变的B)队头指针一定大于队尾指针C)队头指针一定小于队尾指针D)队头指针可以大于队尾指针,也可以小于队尾指针参考答案:D【解析】循环队列是将顺序队列首尾相连形成的,随着插入元素或删除元素的进行,其队头指针及队尾指针是在不断变化的,有时可能会出现队头指针大于队尾指针的情况,也可能是队尾指针大于队头指针,故答案为D)。________。A)算法在执行过程中所需要的计算机存储空间B)算法所处理的数据量C)算法程序中的语句或指令条数D)算法在执行过程中所需要的临时工作单元数参考答案:A【解析】算法的空间复杂度是指:算法执行过程中所需的存储空间。一个算法所占用的存储空间包括算法程序所占的空间、输入的初始数据所占的存储空间以及算法执行过程中所需要的额外空间。________。A)低内聚低耦合B)高内聚低耦合【精品文档】 【精品文档】C)低内聚高耦合D)高内聚高耦合参考答案:B【解析】模块划分应考虑的因素包括模块之间的耦合和内聚。一般来说,要求模块之间的耦合尽可能地低,即模块尽可能独立,要求模块的内聚程度尽可能地高,即遵循高内聚、低耦合的原则。________。A)可封装B)自顶向下C)模块化D)逐步求精参考答案:A【解析】模块化、自顶向下、逐步求精都是结构化程序设计的原则;可封装是面向对象程序设计原则。7.软件详细设计产生的图如下:该图是    。A)N-S图B)PAD图C)程序流程图D)E-R图参考答案:C【解析】N-S图是由若干基本框图构成的流程图,其特点是没有流程线;PAD图即问题分析图(ProblemAnalysisDiagram)【精品文档】 【精品文档】,它是一种由左往右展开的二维树形结构;程序流程图用于描述问题解决的过程和步骤,其中方框表示处理步骤,菱形框表示逻辑判断,箭头表示控制流向;E-R图即实体-联系图(EntityRelationshipDiagram),用来描述现实世界的概念模型,构成元素有实体、属性和联系,分别用矩形、椭圆形和菱形表示。本题答案为C)。________。A)操作系统的一部分B)在操作系统支持下的系统软件C)一种编译系统D)一种操作系统参考答案:B【解析】数据库管理系统是指位于用户与操作系统之间的数据管理软件。数据库管理系统是为数据库建立、使用和维护而配置的软件。E-R图中,用来表示实体联系的图形是________。A)椭圆形B)矩形C)菱形D)三角形参考答案:C【解析】E-R图中用矩形表示实体(等同于表),用椭圆形表示实体的属性(等同于表中字段),用菱形表示实体关系(等同于外键)。R,S和T如下:RABCa12b21c31SABCd32TABCa12b21c31【精品文档】 【精品文档】d32其中关系T由关系R和S通过某种操作得到,该操作为________。A)选择B)投影C)交D)并参考答案:D【解析】两个相同结构关系的并是由属于这两个关系的元组组成的集合。________。A)程序设计的任务就是编写程序代码并上机调试B)程序设计的任务就是确定所用数据结构C)程序设计的任务就是确定所用算法D)以上三种说法都不完整参考答案:D【解析】程序设计通常分为问题建模、算法设计、编写代码和编译调试四个阶段。所以选项A)、B)、C)说法都不完整。12.以下选项中,能用作用户标识符的是________。A)voidB)8_8C)_0_D)unsigned参考答案:C【解析】C语言的标识符命名规则为:①只能由字母、数值和下划线3种字符组成;②第一个字符必须是字母或下划线;③不能与C语言中的关键字或保留字相同。13.阅读以下程序:#includemain(){ intcase;floatprintF;printf("请输入2个数:");scanf("%d %f",&case,&printF);printf("%d %f ",case,printF);}该程序在编译时产生错误,其出错原因是________。【精品文档】 【精品文档】A)定义语句出错,case是关键字,不能用作用户自定义标识符B)定义语句出错,printF不能用作用户自定义标识符C)定义语句无错,scanf不能作为输入函数使用D)定义语句无错,printf不能输出case的值参考答案:A【解析】标识符不能与C编译系统已经预定义的、具有特殊用途的保留标识符(即关键字)同名,否则程序在编译时会出现错误。题目源程序中使用了已经预定义的关键字case,所以将出现错误。14.表达式:(int)((double)9/2)-(9)%2的值是________。A)0B)3C)4D)5参考答案:B【解析】(int)((double)9/2)的值为4,(9)%2的值为1,因此(int)((double)9/2)-(9)%2的值为3。15.若有定义语句:int x=10;,则表达式x-=x+x的值为________。A)-20B)-10C)0D)10参考答案:B【解析】x-=x+x可化为:x=x-(x+x),由于x初始值为10,所以计算后,x=10-20=-10,因此选B)。16.有以下程序:#includemain(){ int a=1,b=0;printf("%d,",b=a+b);printf("%d ",a=2*b);}程序运行后的输出结果是________。【精品文档】 【精品文档】A)0,0B)1,0C)3,2D)1,2参考答案:D【解析】执行第一个printf语句时,b=a+b=1,所以输出1,执行第二个printf语句时,a=2*b=2,所以输出结果为2。17.设有定义:int a=1,b=2,c=3;,以下语句中执行效果与其他三个不同的是________。A)if(a>b)c=a,a=b,b=c;B)if(a>b){c=a,a=b,b=c;}C)if(a>b)c=a;a=b;b=c;D)if(a>b){c=a;a=b;b=c;}参考答案:C【解析】逗号表达式的求解过程是:按表达式顺序从左往右依次求解。本题中由于判断条件a>b的值为假,所以选项A)、B)、D)中if语句后面的语句均未被执行,而C)中的后两条语句a=b和b=c被执行,因此选项C)的执行效果与其他三个不同。18.有以下程序:#includemain(){ int c=0,k;for (k=1;k<3;k++)switch(k){ default:c+=k;case2:c++;break;case4:c+=2;break;}printf("%d ",c);}程序运行后的输出结果是________。A)3B)5C)7D)9参考答案:A【解析】第一次循环时,k=1,在switch语句中,先执行default后面的语句,即c=c+【精品文档】 【精品文档】k=1,因为没有break语句,所以不会跳出switch结构,会接着执行case2后面的语句,即c=c+1=2,然后跳出switch;第二次循环时,k=2,直接执行case2后面的语句,即c=c+1=3,然后跳出switch语句,结束循环,执行输出语句。19.以下程序段中,与语句:k=a>b?(b>c?1:0):0;功能相同的是________。A)if((a>b)&&(b>c))k=1;else k=0;B)if((a>b)‖(b>c))k=1;elsek=0;C)if(a<=b)k=0;elseif(b<=c)k=1;D)if(a>b)k=1;else if(b>c) k=1;else k=0;参考答案:A【解析】表达式k=a>b?(b>c?1∶0)∶0表示:如果(a>b)条件为真,则k取值(b>c?1∶0),否则k取值0;当a>b的情况下,如果b>c,则k值为1,否则为0。所以该表达式与选项A)功能相同。20.有以下程序:#includemain(){ chars[]={"012xy"};inti,n=0;for(i=0;s[i]!=0;i++) if(s[i]>='a'&&s[i]<='z') n++;printf("%d ",n);}程序运行后的输出结果是________。A)0B)2C)3D)5参考答案:B【解析】在字符串数组s[i]中,只有当下标i=3和i=4时,才满足if条件,所以n的值从0增加两次,结果为2。【精品文档】 【精品文档】21.有以下程序:#includemain(){ int n=2,k=0;while(k++&&n++>2);printf("%d %d ",k,n);}程序运行后的输出结果是________。A)0 2B)1 3C)5 7D)1 2参考答案:D【解析】本题考查逻辑运算符的"短路"现象,由于k的值为0,表达式首先去求k++的值,因为表达式k++的值为0,系统完全可以确定逻辑表达式的运算结果总是为0,因此将跳过n++>2,不再对它进行求值,即k的值加1,n的值不变。22.有以下定义语句,编译时会出现编译错误的是________。A)char a='a';B)char a=' ';C)char a='aa';D)char a='x2d';参考答案:C【解析】aa是字符串,不用加上单引号。23.有以下程序:#includemain(){ charcl,c2;cl='A'+'8'-'4';c2='A'+'8'-'5';printf("%c,%d ",cl,c2);}已知字母A的ASCIl码为65,程序运行后的输出结果是________。A)E,68B)D,69C)E,DD)输出无定值参考答案:A【精品文档】 【精品文档】【解析】c1输出字符的ASCII码比字母A大4,即字母E;c2以十进制数字形式输出,因此可以判断本题答案为A)。24.有以下程序:#includevoid fun(intp){ intd=2;p=d++; printf("%d",p);}main(){ int a=1;fun(a);printf("%d ",a);}程序运行后的输出结果是________。A)32B)12C)21D)22参考答案:C【解析】程序运行后,首先输出的是p的值,然后输出a的值。p=d++,得到p的值为d的初始值2;a的值不变,仍为1。findmax拟实现在数组中查找最大值并作为函数值返回,但程序中有错导致不能实现预定功能。#defineMIN-2147483647intfindmax(int x[],intn){ int i,max;for(i=0;imain(){ intm=1,n=2,*p=&m,*q=&n,*r;r=p;p=q;q=r;printf("%d,%d,%d,%d ",m,n,*p,*q);}程序运行后的输出结果是________。A)1,2,1,2B)1,2,2,1C)2,1,2,1D)2,1,1,2参考答案:B【解析】m和n的值不变,输出结果为1,2。指针*p和*q交换了指向的位置,即*p=&n,*q=&m,输出结果分别为2,1。27.若有定义语句:int a[4][10],*p,*q[4];且0≤i<4,则错误的赋值是________。A)p=aB)q[i]=a[i]C)p=a[i]D)p=&a[2][1]参考答案:A【解析】直接将二维数组a赋给p不合法,两者类型不匹配。28.有以下程序:#include#includemain(){ charstr[][20]={"One*World","one*Dream!"},*p=str[1];printf("%d,",strlen(p));printf("%s ",p);}程序运行后的输出结果是________。A)9,One*WorldB)9,One*Dream!C)10,One*Dream!D)10,One*World参考答案:C【精品文档】 【精品文档】【解析】可以将二维数组str看成是一个特殊的一维数组,其元素也是一个数组。那么,str[0]为"One*World",str[1]为"One*Dream!"。29.有以下程序:#includemain(){ int a[]={2,3,5,4},i;for(i=0;i<4;i++)switch(i%2){ case0:switch(a[i]%2)     {case0:a[i]++;break;     case1:a[i]--;     }break; case1:a[i]=0;}for(i=0;i<4;i++) printf("%d",a[i]);printf(" ");}程序运行后的输出结果是________。A)3344B)2050C)3040D)0304参考答案:C【解析】第一次循环,i=0,i%2=0,a[0]%2=0,a[0]=a[0]+1=3;第二次循环,i=1,1%2=1,a[1]=0;第三次循环,i=2,a[2]%2=1,a[2]=a[2]-1=4;第四次循环,i=3,i%2=1,a[3]=0。30.有以下程序:#include#includemain(){ chara[10]="abcd"; printf("%d,%d ",strlen(a),sizeof(a));}程序运行后的输出结果是________。A)7,4B)4,10C)8,8D)10,10参考答案:B【精品文档】 【精品文档】【解析】strlen()用来返回字符串的长度,而sizeof()返回的是一个对象或者类型所占的内存字节数,即数组所占的内存。C语言字符数组的描述,其中错误的是________。A)不可以用赋值语句给字符数组名赋字符串B)可以用输入语句把字符串整体输入给字符数组C)字符数组中的内容不一定是字符串D)字符数组只能存放字符串参考答案:D【解析】字符数组中的内容既可以是字符,也可以是字符串,选项D)说法不正确。________。fun(char *a,char *b){ while((*b=*a)!='') {a++;b++;}}A)将a所指字符串赋给b所指空间B)使指针b指向a所指字符串C)将a所指字符串和b所指字符串进行比较D)检查a和b所指字符串中是否有''参考答案:A【解析】表达式*b=*a是将a所指的字符赋给b所指的空间,然后,指针a和b依次后移,直到到达指针a所指字符串的结尾。33.设有以下函数:voidfun(intn,char *s){……}则下面对函数指针的定义和赋值均正确的是________。A)void (*pf)(); pf=fun;B)void *pf();    pf=fun;C)void *pf();  *pf=fun;【精品文档】 【精品文档】D)void(*pf)(int,char); pf=&fun;参考答案:A【解析】函数指针的定义形式是:数据类型标识符(*指针变量名)()。void(*pf)()定义了一个没有返回值的函数指针pf,在给函数指针变量赋值时,只需给出函数名而不必给出参数。所以给pf赋值时,只把函数名fun赋给pf即可。所以正确答案为选项A)。34.有以下程序:#includeintf(intn);main(){ inta=3,s; s=f(a);s=s+f(a);printf("%d ",s);}intf(intn){ staticinta=1; n+=a++; returnn;}程序运行后的输出结果是________。A)7B)8C)9D)10参考答案:C【解析】s=f(a)表达式第一次调用f(n)函数时,f(n)函数运行结果为n=4,a=2,即s等于4;s=s+f(a)表达式第二次调用f(n)函数时,f(n)函数运行结果为n=5,所以得到s值为9。35.有以下程序:#include#definef(x)x*x*xmain(){ inta=3,s,t;s=f(a+1);t=f((a+1));printf("%d,%d ",s,t);}程序运行后的输出结果是________。【精品文档】 【精品文档】A)10,64B)10,10C)64,10D)64,64参考答案:A【解析】s=f(a+1)=a+1*a+1*a+1=10;s=f((a+1))=(a+1)*(a+1)*(a+1)=64。36.下面结构体的定义语句中,错误的是________。A)struct ord {int x;int y;int z;};struct ord a;B)struct ord {int x;int y;int z;}struct ord a;C)struct ord {int x;int y;int z;}a;D)struct {int x;int y;int z;}a;参考答案:B【解析】定义结构体变量有三种方式:①先声明结构体类型,再定义变量名,如选项A)所示;②在声明类型的同时定义变量,如选项C)所示;③直接定义结构体类型变量,如选项D)所示。37.设有定义:char *c;,以下选项中能够使字符型指针c正确指向一个字符串的是________。A)charstr[]="string";c=str;B)scanf("%s",c);C)c=getchar();D)*c="string";参考答案:A【解析】选项B)、D)中,没有为字符串分配空间,因此不能用c指向字符串。选项C)中getchar()函数返回一个字符,不能将字符赋给字符指针c。选项A)中首先定义了字符数组str,然后将str的首地址赋给指针c,这样就使指针c指向了字符串"string"。38.有以下程序:#include#includestructA{ inta;charb[10];doublec;};structAf(structAt);main(){ structAa={1001,"ZhangDa",1098.0);a=f(a);printf("%d,%s,f ",,,a.c);【精品文档】 【精品文档】}structAf(structAt){ t.a=1002;,"changRong");=;returnt;}程序运行后的输出结果是________。A)1001,B)1002,C)1001,D)1002,参考答案:D【解析】在主函数中,通过a=f(a)实现函数调用,所以输出的结构体变量相应变为1002,。39.若有以下程序段:int r=8;printf("%d ",r>>1);输出结果是________。A)16B)8C)4D)2参考答案:C【解析】8用二进制表示为1000,右移1位后为0100,即十进制4。C语言文件的叙述中正确的是________。A)文件由一系列数据依次排列组成,只能构成二进制文件B)文件由结构序列组成,可以构成二进制文件或文本文件C)文件由数据序列组成,可以构成二进制文件或文本文件D)文件由字符序列组成,其类型只能是文本文件参考答案:C【解析】文件由数据序列组成,可以构成二进制文件,也可以构成文本文件。5个度为2的结点及3个度为1的结点,则该二叉树中共有__【1】__个结点。参考答案:14【解析】在二叉树中,度为0的结点数是度为2的结点数加1【精品文档】 【精品文档】,故二叉树中结点数的总和为度为0的结点数、度为1的结点数及度为2的结点数三者相加,得出结果为14个结点。__【2】__。参考答案:逻辑判断【解析】绘制流程图时事实描述用椭圆形表示、行动方案用矩形表示、问题用菱形表示、箭头代表流动方向。3.软件开发过程主要分为需求分析、设计、编码与测试四个阶段,其中__【3】__阶段产生"软件需求规格说明书"。参考答案:需求分析【解析】需求分析阶段的工作主要包括需求获取、需求分析、编写需求规格说明书和需求评审等四方面,产生的主要文档为软件需求规格说明书,它可以为用户、分析人员和设计人员之间的交流提供方便,直接支持目标软件系统的确认,也可以作为控制软件开发进程的依据。4.在数据库技术中,实体集之间的联系可以是一对一或一对多或多对多的,那么"学生"和"可选课程"的联系为__【4】__。参考答案:多对多【解析】一名学生可以选择多门课程,一门课程也可以由多名学生选择,因此是多对多的联系。5.人员基本信息一般包括:身份证号,姓名,性别,年龄等。其中可以作为主关键字的是__【5】__。参考答案:身份证号【精品文档】 【精品文档】【解析】主关键字是表中区别不同的记录的标识,在该表中只有身份证号能具有这个作用,所以用其作为主关键字。6.若有定义语句:inta=5;,则表达式:a++的值是__【6】__。参考答案:5【解析】a++的含义是在使用a值以后,使a值加1,所以a++的值为5。doublex=17;inty;,当执行y=(int)(x/5)%2;之后y的值为__【7】__。参考答案:1【解析】y=(int)(x/5)%2=(int)(3.4)%2=3%2=1。__【8】__。#includemain(){ int x=20;printf("%d",00||x<20)的值,显然为真,即为1;第二个printf语句输出的是逻辑表达式(x>0&&x<20)的值,该值为假,即为0。__【9】__。#includemain(){ inta=1,b=7; do{b=b/2;a+=b; }while(b>1);printf("%d ",a);}参考答案:5【解析】第一次循环执行后,b=3,a=4,满足条件b>1,循环继续;第二次循环执行后,b=1,a=5,不满足条件b>1,结束循环。所以输出的a值为5。10.有以下程序:#include【精品文档】 【精品文档】main(){ intf,fl,f2,i;f1=0;f2=1;printf("%d %d ",f1,f2);for (i=3;i<=5;i++){f=f1+f2;printf("%d",f);f1=f2;f2=f;}printf(" ");}程序运行后的输出结果是__【10】__。参考答案:01123【解析】第一个printf语句输出结果为01。循环体总共循环三次,第一次循环结果为,f=1,f1=1,f2=1;第二次循环结果为f=2,f1=1,f2=2;第三次循环结果为f=3,f1=2,f2=3。11.有以下程序:#includeinta=5;voidfun(intb){ inta=10;a+=b;printf("%d",a);}main(){ intc=20;fun(c);a+=c;printf("%d ",a);}程序运行后的输出结果是__【11】__。参考答案:3025【解析】fun(c)调用函数fun(b),函数执行结果为a=a+b=10+20=30;调用完函数后,主函数继续执行,输出结果a=a+c=5+20=25。12.设有定义:structperson{ intID;charname[12];}p;请将scanf("%d",__【12】__);语句补充完整,使其能够为结构体变量p的成员ID正确读入数据。【精品文档】 【精品文档】参考答案:【解析】结构体成员的引用通过符号"."来表示,通过scanf语句对变量进行赋值时,要用取地址符&。13.有以下程序:#includemain(){ chara[20]="Howareyou?",b[20];scanf("%s",b);printf("%s%s ",a,b);}程序运行时从键盘输入:Howareyou?<回车>则输出结果为__【13】__。参考答案:Howareyou?How【解析】用%s格式输入字符串时,空格和回车都作为输入数据的分隔符,不能被读入,因此数组b的输出结果为How。14.有以下程序:#includetypedefstruct{ intnum;doubles;}REC;voidfunl(RECx) =23;=;}main(){ RECa={16,90.0);fun1(a);printf("%d ",a.num);}程序运行后的输出结果是__【14】__。参考答案:16【解析】主函数中,通过funl()函数将a值传递给x,但没有把形参x的值返回,此时变量a的值并没有发生变化,所以输出的值为16。15.有以下程序:#includefun(intx){ if(x/2>0)fun(x/2);printf("%d .",x);【精品文档】 【精品文档】}main(){ fun(6),printf(" ");}程序运行后的输出结果是__【15】__。参考答案:136【解析】依次执行fun(6),fun(3),fun(1),当执行fun(6)时要调用fun(3),执行fun(3)时要调用fun(1),所以输出的结果为136。2010年3月真题1、下列叙述中正确的是A)对长度为n的有序链表进行查找,最坏情况下需要的比较次数为nB)对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(n/2)C)对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(log2n)D)对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(nlog2n)参考答案:A【解析】对长度为n的有序链表进行查找,最坏情况是从最小值开始查找最大值(或从最大值开始查找最小值),这个过程需要比较的次数为n,故选项A正确。对分查找只能针对随机存取的有序表进行,而有序链表只能进行顺序存取,不能进行随机存取,在有序链表上不能进行对分查找,故B、C、D选项都错误。2、算法的时间复杂度是指A)算法的执行时间B)算法所处理的数据量C)算法程序中的语句或指令条数D)算法在执行过程中所需要的基本运算次数【精品文档】 【精品文档】参考答案:D【解析】算法的时间复杂度是指算法需要消耗的时间资源,是独立于机器的,选项D正确;相同的算法在不同的机器上运行时间可能不同,选项A错误;算法所处理的数据量与算法无关,选项B错误;程序的长短与程序执行时需要消耗的时间资源没有必然的关系,比如一个条件语句可以很长,但只需判断一次,而一个循环语句可能只有几行,但可以执行很多次,故选项C错误。3、软件按功能可以分为:应用软件、系统软件和支撑软件(或工具软件)。下面属于系统软件的是A)编辑软件B)操作系统C)教务管理系统D)浏览器参考答案:B【解析】编辑软件、教务管理软件属于应用软件,操作系统属于系统软件,浏览器属于支撑软件,故本题答案选B。4、软件(程序)调试的任务是A)诊断和改正程序中的错误B)尽可能多地发现程序中的错误C)发现并改正程序中的所有错误D)确定程序中错误的性质参考答案:A【解析】软件调试的任务是诊断和改正程序中的错误,本题正确答案为A。其他三项描述不正确,选项B描述不全面,选项C描述太绝对,选项D描述不符合定义。5、数据流程图(DFD图)是A)软件概要设计的工具B)软件详细设计的工具C)结构化方法的需求分析工具D)面向对象方法的需求分析工具参考答案:C【精品文档】 【精品文档】【解析】数据流图是结构化分析方法中使用的工具,它以图形的方式描绘数据在系统中流动和处理的过程。软件结构图是软件概要设计的工具,而详细设计是对概要设计的每个模块进行细化,UML是面向对象的需求分析的工具。6、软件生命周期可分为定义阶段、开发阶段和维护阶段。详细设计属于A)定义阶段B)开发阶段C)维护阶段D)上述三个阶段参考答案:B【解析】软件定义阶段的基本任务是确定软件系统的工程需要,分为软件系统的可行性研究和项目需求分析。软件开发阶段包括概要设计、详细设计、实现、组装测试和确认测试5个阶段。维护阶段主要是软件的使用、系统维护和系统更新换代。7、数据库管理系统中负责数据模式定义的语言是A)数据定义语言B)数据管理语言C)数据操纵语言D)数据控制语言参考答案:A【解析】数据定义语言用于定义数据库的所有特性和属性,如行布局、列定义、文件位置和存储策略等。8、数据库设计中,用E-R图来描述信息结构但不涉及信息在计算机中的表示,它属于数据库设计的A)需求分析阶段B)逻辑设计阶段C)概念设计阶段D)物理设计阶段参考答案:C【解析】E-R图即实体-联系图(Entity-RelationDiagram),用来建立数据模型,在数据库系统概论中属于概念设计阶段。【精品文档】 【精品文档】9、有两个关系R和T如下:则由关系R得到关系T的操作是A)选择B)投影C)交D)并参考答案:A【解析】关系T中的两行和关系R中的最后两行一致,通过选择运算即可由R得到T。10、以下叙述正确的是A)C语言程序是由过程和函数组成的B)C语言函数可以嵌套调用,例如:fun(fun(x))C)C语言函数不可以单独编译D)C语言中除了main函数,其他函数不可作为单独文件形式存在参考答案:B【解析】C语言中只有函数没有过程,故选项A错误;C语言可以嵌套调用,故选项B正确;C语言函数可以单独编译成.dll文件,故选项C错误;C语言中除main函数以外,其他函数可作为单独文件形式存在,故选项D也错误。11、以下叙述正确的是A)C语言程序是由过程和函数组成的B)C语言函数可以嵌套调用,例如:fun(fun(x))C)C语言函数不可以单独编译D)C语言中除了main函数,其他函数不可作为单独文件形式存在参考答案:B【精品文档】 【精品文档】【解析】C语言中只有函数没有过程,故选项A错误;C语言可以嵌套调用,故选项B正确;C语言函数可以单独编译成.dll文件,故选项C错误;C语言中除main函数以外,其他函数可作为单独文件形式存在,故选项D也错误。12、以下关于C语言的叙述中正确的是A)C语言中的注释不可以夹在变量名或关键字的中间B)C语言中的变量可以在使用之前的任何位置进行定义C)在C语言算术表达式的书写中,运算符两侧的运算数类型必须一致D)C语言的数值常量中夹带空格不影响常量值的正确表示参考答案:A【解析】C语言中注释可以放在任何位置,但不能夹在变量名或关键字中间,选项A正确;C语言中的变量要在使用之前定义,C标准规定定义位置在相关程序块的首部,选项B错误;C语言中两侧数据类型可以不一致,系统可进行强制类型转换,选项C错误;C语言数值常量中不允许存在空格,选项D错误。13、以下C语言用户标识符中,不合法的是A)_1B)AaBcC)a_bD)a--b参考答案:D【解析】标识符由字母、下划线、数字三个方面组成,开头必须是字母或下划线。14、若有定义:doublea=22;inti=0,k=18;,则不符合C语言规定的赋值语句是A)a=a++,i++;B)i=(a+k)<=(i+k);C)i=a%11;D)i=!a;参考答案:C【解析】C语言中取余运算符两侧的操作数只能是整型(若为char型,则会自动转换成整型)。15、有以下程序#include【精品文档】 【精品文档】main(){chara,b,c,d;scanf("%c%c",&a,&b);c=getchar();d=getchar();printf("%c%c%c%c ",a,b,c,d);}当执行程序时,按下列方式输入数据(从第1列开始,代表回车,注意,回车也是一个字符)1234则输出结果是A)1234B)12C)12D)12334参考答案:C【解析】程序根据用户输入分别给字符型变量a、b、c、d赋值为'1'、'2'、''、'3',因此输出到屏幕得到选项C中的格式。16、以下关于C语言数据类型使用的叙述中错误的是A)若要准确无误差地表示自然数,应使用整数类型B)若要保存带有多位小数的数据,应使用双精度类型C)若要处理如"人员信息"等含有不同类型的相关数据,应自定义结构体类型D)若只处理"真"和"假"两种逻辑值,应使用逻辑类型参考答案:D【解析】C语言中没有逻辑类型,若只处理"真"或"假"两种逻辑值,可以使用整型数"1"或"0"表示,故选D。17、若a是数值类型,则逻辑表达式(a==1)||(a!=1)的值是A)1B)0C)2D)不知道a的值,不能确定参考答案:A【解析】当A==1时,(A==1)||(A!=1)为真;当A!=1时,(A==1)||(A!=1)也为真,故正确答案为A。【精品文档】 【精品文档】18、以下选项中与if(a==1)a=b;elsea++;语句功能不同的switch语句是A)switch(a){case1:a=b;break;default:a++;}B)switch(a==1){case0:a=b;break;case1:a++;}C)switch(a){default:a++;break;case1:a=b;}D)switch(a==1){case1:a=b;break;case0:a++;}参考答案:B【解析】switch(a==1)语句中,若a等于1,则a==1为"真",则应该进行a=b的操作,故选项B错误。19、有如下嵌套的if语句if(ac)?b:c);C)k=(ac)?b:c)"错误,选项D中没有比较b、c大小。20、有以下程序【精品文档】 【精品文档】#includemain(){inti,j,m=1;for(i=1;i<3;i++){for(j=3;j>0;j--){if(i*j>3)break;m*=i*j;}}printf("m=%d ",m);}程序运行后的输出结果是A)m=6B)m=2C)m=4D)m=5参考答案:A【解析】第一次循环i=1,j=3和j=2时都能执行m*=i*j,此时得到m的值为6;然后进行第二次循环i=2,j=3时会执行break语句,内部循环直接结束,此时i再加1,也会导致退出外部循环,所以最终结果m的值为6。21、有以下程序#includemain(){inta=1,b=2;for(;a<8;a++){b+=a;a+=2;}printf("%d,%d ",a,b);}程序运行后的输出结果是A)9,18B)8,11C)7,11D)10,14参考答案:D【解析】初始值a=1,b=2,第一次循环:b=b+a=2+1=3,a=a+2=1+2=3,a=a+1=3+1=4;第二次循环:b=b+a=3+4=7,a=a+2=4+2=6,a=a+1=6+1=7;第三次循环:b=b+a=7+7=14,a=a+2=7+2=9,a=a+1=9+1=10,故本题答案选D。22、有以下程序,其中k的初值为八进制数#includemain(){intk=011;printf("%d ",k++);【精品文档】 【精品文档】}程序运行后的输出结果是A)12B)11C)10D)9参考答案:D【解析】011转换成十进制为9,并且k++表示先使用k的值,再使k的值加1,所以输出值为9。23、下列语句组中,正确的是A)char*s;s="Olympic";B)chars[7];s="Olympic";C)char*s;s={"Olympic"};D)chars[7];s={"Olympic"};参考答案:A【解析】若s被定义为指针,选项A表示将指针s指向一个字符串,选项C表示为指针s赋一个字符串的值,显然选项A正确,选项C错误;若s被定义为数组,且要为该数组直接赋值,则必须在定义时进行,因此选项B和选项D都错误。24、以下关于return语句的叙述中正确的是A)一个自定义函数中必须有一条return语句B)一个自定义函数中可以根据不同情况设置多条return语句C)定义成void类型的函数中可以有带返回值的return语句D)没有return语句的自定义函数在执行结束时不能返回到调用处参考答案:B【解析】一个自定义函数中可以没有返回值。如果函数不返回值,则应定义为void型,程序执行结束后自动返回到调用处。故选项A、C、D错误。一个自定义函数可以根据不同的情况设置多条return语句,但函数的返回值必须只有一个,故选项B正确。25、下列选项中,能正确定义数组的语句是A)intnum[0..2008];B)intnum[];C)intN=2008;D)#defineN2008intnum[N];intnum[N];【精品文档】 【精品文档】参考答案:D【解析】选项A不符合C语言的语法要求;选项B中没有指定数组的大小;选项C中数组大小不能用变量来指定。26、有以下程序#includevoidfun(char*c,intd){*c=*c+1;d=d+1;printf("%c,%c,",*c,d);}main(){charb='a',a='A';fun(&b,a);printf("%c,%c ",b,a);}程序运行后的输出结果是A)b,B,b,AB)b,B,B,AC)a,B,B,aD)a,B,a,B参考答案:A【解析】函数fun的第一个参数传指针,可以将更改后的值传回调用函数,第二个参数传值,不能将更改后的值传回调用函数,故选A。27、若有定义int(*pt)[3];,则下列说法正确的是A)定义了基类型为int的三个指针变量B)定义了基类型为int的具有三个元素的指针数组ptC)定义了一个名为*pt、具有三个元素的整型数组D)定义了一个名为pt的指针变量,它可以指向每行有三个整数元素的二维数组参考答案:D【解析】定义了一个指向一维数组的指针,该一维数组具有三个int型元素,按照C语言中二维数组的定义知,二维数组先按照行排列,再按照列排列,故选D。28、设有定义doublea[10],*s=a;,以下能够代表数组元素a[3]的是A)(*s)[3]B)*(s+3)C)*s[3]D)*s+3【精品文档】 【精品文档】参考答案:B【解析】s指向数组首元素,s+3表示指针s向后移动3个位置,即数组的第4个元素a[3],故选B。29、有以下程序#includemain(){inta[5]={1,2,3,4,5},b[5]={0,2,1,3,0},i,s=0;for(i=0;i<5;i++)s=s+a[b[i]];printf("%d ",s);}程序运行后的输出结果是A)6B)10C)11D)15参考答案:C【解析】当i=0时a[b[0]]=1;当i=1时a[b[1]]=3;当i=2时a[b[2]]=2;当i=3时a[b[3]]=4;当i=4时a[b[4]]=1。将以上各数值相加得11,故选C。30、有以下程序#includemain(){intb[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1;for(i=0;i<3;i++)for(j=1;j<=1;j++)t+=b[i][b[j][i]];printf("%d ",t);}程序运行后的输出结果是A)1B)3C)4D)9参考答案:C【解析】当i=0,j=0时能进行相加操作,b[0][b[0][0]]=0;当i=1,j=1时能进行相加操作,b[1][b[1][1]]=1;当i=2,j=2时能进行相加操作,b[2][b[2][2]]=2。将以上各数值相加再加1,得4,故选C。31、若有以下定义和语句chars1[10]="abcd!",*s2=" 123\";【精品文档】 【精品文档】printf("%d%d ",strlen(s1),strlen(s2));则输出结果是A)55B)105C)107D)58参考答案:A【解析】计算字符串长度是从第一个字符开始到'\0'前的一个字符结束。第一个字符串长度为5,分别为'a'、'b'、'c'、'd'、'!'第二个字符串的长度也为5,分别为'\n','1','2','3','\',其中'\n'和'\\'均表示一个字符。32、有以下程序#include#defineN8voidfun(int*x,inti){*x=*(x+i);}main(){inta[N]={1,2,3,4,5,6,7,8},i;fun(a,2);for(i=0;iintf(intt[],intn);main(){inta[4]={1,2,3,4},s;s=f(a,4);printf("%d ",s);}intf(intt[],intn){if(n>0)returnt[n-1]+f(t,n-1);elsereturn0;}程序运行后的输出结果是【精品文档】 【精品文档】A)4B)10C)14D)6参考答案:B【解析】函数的功能是求数组所有元素的和。递归表示为a[3]+a[2]+a[1]+a[0]+f(t,0)=10。34、有以下程序#includeintfun(){staticintx=1;x*=2;returnx;}main(){inti,s=1;for(i=1;i<=2;i++)s=fun();printf("%d ",s);}程序运行后的输出结果是A)0B)1C)4D)8参考答案:C【解析】x被声明为静态变量,第一次调用fun()后,x值为2,第二次调用时直接执行x*=2,值为4。35、有以下程序#include#defineSUB(a)(a)-(a)main(){inta=2,b=3,c=5,d;d=SUB(a+b)*c;printf("%d ",d);}程序运行后的输出结果是A)0B)-12C)-20D)10参考答案:C【解析】在此处需要直接替换整个式子,SUB(a+b)*c即为(a+b)-(a+b)*c,代入a,b,c的值可得结果为-20。36、设有定义:structcomplex{intreal,unreal;}datal={1,8},data2;【精品文档】 【精品文档】则以下赋值语句中错误的是A)data2=data1;B)data2=(2,6);C)data2.rea1=data1.real;D)data2.real=datal.unreal;参考答案:B【解析】选项B需要强制转换数据类型,应该为(structcomplex){2,6};。37、有以下程序#include#includestructA{inta;charb[10];doublec;};voidf(structAt);main(){structAa={1001,"ZhangDa",1098.0};f(a);printf("%d,%s,%6.1f ",a.a,a.b,a.c);}voidf(structAt){t.a=1002;strcpy(t.b,"ChangRong");t.c=1202.0;}程序运行后的输出结果是A)1001,ZhangDa,1098.0C)1001,ChangRong,1098.0参考答案:A【解析】该函数的调用为传值调用,故不会改变任何值。38、有以下定义和语句structworkers{intnum;charname[20];charc;struct{intday;intmonth;intyear;}s;};structworkersw,*pw;pw=&w;能给w中year成员赋1980的语句是A)*pw.year=1980;B)w.year=1980;C)pw->year=1980;D)w.s.year=1980;参考答案:D【精品文档】 【精品文档】【解析】结构体structureworkers中的成员s是结构体类型,给w中成员year赋值的语句是w.s.year=1980,故选D。39、有以下程序#includemain(){inta=2,b=2,c=2;printf("%d ",a/b&c);}程序运行后的输出结果是A)0B)1C)2D)3参考答案:A【解析】对于a/b&c,先求a/b,得到1,然后求1&c(即按位与操作),显然得0。40、有以下程序#includemain(){FILE*fp;charstr[10];fp=fopen("myfile.dat","w");fputs("abc",fp);fclose(fp);fp=fopen("myfile.dat","a+");fprintf(fp,"%d",28);rewind(fp);fscanf(fp,"%s",str);puts(str);fclose(fp);}程序运行后的输出结果是A)abcB)28cC)abc28D)因类型不一致而出错参考答案:C【解析】首先打开文件写入字符串"abc",然后关闭文件,再打开时文件指针定位到了最后,写入"28",然后重定位位置指针到开始,读取字符串为"abc28"。1、一个队列的初始状态为空。现将元素A,B,C,D,E,F,5,4,3,2,1依次入队,然后再依次退队,则元素退队的顺序为【1】。【精品文档】 【精品文档】参考答案:ABCDEF54321【解析】队列是先进先出的数据结构,所以出队列的顺序与进度列的顺序一致。2、设某循环队列的容量为50,如果头指针front=45(指向队头元素的前一位置),尾指针rear=10(指向队尾元素),则该循环队列中共有【2】个元素。参考答案:15【解析】计算队列中元素个数的公式为:(read-front+MAXQSIZE)%MAXQSIZE,其中MAXQSIZE为队列的容量,所以该队列中的元素为(10-45+50)%50=15。3、设二叉树如下:对该二叉树进行后序遍历的结果为【3】。参考答案:EDBGHFCA【解析】后序遍历二叉树的定义为:若二叉树为空,则空操作;否则,后序遍历左子树,后序遍历右子树,访问根结点。根据该规则,遍历结果应为EDBGHFCA。4、软件是【4】、数据和文档的集合。参考答案:程序【解析】本题考查软件的定义,软件是程序、数据和文档的集合。5、有一个学生选课的关系,其中学生的关系模式为:学生(学号,姓名,班级,年龄),课程的关系模式为:课程(课号,课程名,学时),其中两个关系模式的键分别是学号和课号,则关系模式选课可定义为:选课(学号,【5】,成绩)。【精品文档】 【精品文档】参考答案:课号【解析】选课关系是学生和课程之间的关系,应该由学号、课号和成绩组成。6、设x为int型变量,请写出一个关系表达式【6】,用以判断x同时为3和7的倍数时,关系表达式的值为真。参考答案:(x%3==0)&&(x%7==0)【解析】x%3==0能保证x是3的倍数,x%7==0能保证x是7的倍数,(x%3==0)&&(x%7==0)能保证x是3的倍数并且x是7的倍数。7、有以下程序#includemain(){inta=1,b=2,c=3,d=0;if(a==1)if(b!=2)if(c==3)d=1;elsed=2;elseif(c!=3)d=3;elsed=4;elsed=5;printf("%d ",d);}程序运行后的输出结果是【7】。参考答案:4【解析】a==1为真,b!=2为假,c!=3为假,所以d=4。8、有以下程序#includemain(){intm,n;scanf("%d%d",&m,&n);while(m!=n){while(m>n)m=m-n;while(m时,输出结果是【8】。【精品文档】 【精品文档】参考答案:7【解析】执行while(mn)的循环,得到m=7,n=7。此时所有循环结束,m=7。9、有以下程序#includemain(){inti,j,a[][3]={1,2,3,4,5,6,7,8,9};for(i=0;i<3;i++)for(j=i;j<3;j++)printf("%d",a[i][j]);printf(" ");}程序运行后的输出结果是【9】。参考答案:123569【解析】当i=0时,j=0、1、2时满足条件,则打印a[0][0]、a[0][1]、a[0][2];当i=1时,j=1、2时满足条件,则打印a[1][1]、a[1][2];当i=2时,j=2时满足条件,则打印a[2][2],所以打印结果为123569。10、有以下程序#includemain(){inta[]={1,2,3,4,5,6},*k[3],i=0;while(i<3){k[i]=&a[2*i];printf("%d",*k[i]);i++;}}程序运行后的输出结果是【10】。参考答案:135【解析】当i=0时,k[0]=&a[0];当i=1时,k[1]=&a[2];当i=2时,k[2]=&a[4],则打印结果为135。11、有以下程序#includemain(){inta[3][3]={{1,2,3},{4,5,6},{7,8,9}};【精品文档】 【精品文档】intb[3]={0},i;for(i=0;i<3;i++)b[i]=a[i][2]+a[2][i];for(i=0;i<3;i++)printf("%d",b[i]);printf(" ");}程序运行后的输出结果是【11】。参考答案:101418【解析】当i=0时,b[0]=a[0][2]+a[2][0]=3+7=10;当i=1时,b[1]=a[1][2]+a[2][1]=6+8=14;当i=2时,b[2]=a[2][2]+a[2][2]=9+9=18,则打印结果为101418。12、有以下程序#include#includevoidfun(char*str){chartemp;intn,i;n=strlen(str);temp=str[n-1];for(i=n-1;i>0;i--)str[i]=str[i-1];str[0]=temp;}main(){chars[50];scanf("%s",s);fun(s);printf("%s ",s);}程序运行后输入:abcdef<回车>,则输出结果是【12】。参考答案:fabcde【解析】在函数fun中,先求出字符串str的长度,并将最后一个字符暂存到temp中,然后使用循环语句将所有字符向右移动一个位置,最后将temp中的字符放到字符串的第1个位置,所以结果为fabcde。13以下程序的功能是:将值为三位正整数的变量x中的数值按照个位、十位、百位的顺序拆分并输出。请填空。#includemain(){intx=256;printf("%d-%d-%d ",【13】,x/10%10,x/100);【精品文档】 【精品文档】}参考答案:x%10【解析】x=256,x%10=6。14、以下程序用以删除字符串中所有的空格,请填空。#includemain(){chars[100]={"ourteacherteachclanguage!"};inti,j;for(i=j=0;s[i]!='';i++)if(s[i]!=''){s[j]=s[i];j++;}s[j]=【14】;printf("%s ",s);}参考答案:''【解析】程序使用变量i遍历字符数组s中的所有字符,使用变量j存放非空格字符。当将所有的非空格字符重新存放到字符数组s中后,应添加字符串结束标志''。15、以下程序的功能是:借助指针变量找出数组元素中的最大值及其元素的下标值。请填空。#includemain(){inta[10],*p,*s;for(p=a;p-a<10;p++)scanf("%d",p);for(p=a,s=a;p-a<10;p++)if(*p>*s)s=【15】;printf("index=%d ",s-a);}参考答案:p【解析】s指向当前最大的元素,当*p>*s时,表示当前p所指向的那个元素比s指向的元素大,则s应该记录当前最大的元素的地址。2010年9月真题1、下列叙述中正确的是A)线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的B)线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构【精品文档】 【精品文档】C)线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构D)上述三种说法都不对参考答案:B【解析】线性表的顺序存储结构是把线性表中相邻的元素存放在相邻的内存单元中,而链式存储结构是用一组任意存储单元来存放表中的数据元素,为了表示出每个元素与其直接后继元素之间的关系,除了存储元素本身的信息外,还需存储一个指示其直接后继的存储位置信息。故线性表的链式存储结构所需的存储空间一般要多于顺序存储结构,答案为B)。2、下列叙述中正确的是A)在栈中,栈中元素随栈底指针与栈顶指针的变化而动态变化B)在栈中,栈顶指针不变,栈中元素随栈底指针的变化而动态变化C)在栈中,栈底指针不变,栈中元素随栈顶指针的变化而动态变化D)上述三种说法都不对参考答案:C【解析】栈是限定在一端进行插入与删除的线性表,允许插入与删除的一端称为栈顶,不允许插入与删除的另一端称为栈底。当有新元素进栈时,栈顶指针向上移动;当有元素出栈时,栈顶指针向下移动。在栈中栈底指针不变,栈中元素随栈顶指针的变化而动态变化,故答案为C)。3、软件测试的目的是A)评估软件可靠性B)发现并改正程序中的错误C)改正程序中的错误D)发现程序中的错误参考答案:D【解析】软件测试的目的是为了发现程序中的错误而运行程序。4、下面描述中,不属于软件危机表现的是【精品文档】 【精品文档】A)软件过程不规范B)软件开发生产率低C)软件质量难以控制D)软件成本不断提高参考答案:A【解析】软件危机是计算机软件在它的开发和维护过程中所遇到的一系列严重问题。主要表现在以下几个方面:软件需求的增长得不到满足;软件开发成本和进度无法控制;软件质量难以保证;软件可维护性差;软件的成本不断提高;软件开发生产率的提高赶不上硬件的发展和应用需求的增长。故答案选A)。5、软件生命周期是指A)软件产品从提出、实现、使用维护到停止使用退役的过程B)软件从需求分析、设计、实现到测试完成的过程C)软件的开发过程D)软件的运行维护过程参考答案:A【解析】通常将软件产品从提出、实现、使用维护到使用、退役的过程称为软件生命周期。故答案为A)。6、面向对象方法中,继承是指A)一组对象所具有的相似性质B)一个对象具有另一个对象的性质C)各对象之间的共同性质D)类之间共享属性和操作的机制参考答案:D【解析】继承是面向对象方法的一个重要特征。广义地说,继承是指能够直接获得已有的性质和特征,不必重复定义它们。在面向对象的软件技术中,继承是指子类自动地共享基类中定义的数据和方法的机制,故答案为D)。7、层次型、网状型和关系型数据库划分原则是A)记录长度B)文件的大小【精品文档】 【精品文档】C)联系的复杂程度D)数据之间的联系方式参考答案:D【解析】数据库按数据模型分为层次型数据库、网状型数据库、关系型数据库,数据模型即数据之间的联系方式,故答案为D)。8、一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,则实体工作人员与实体计算机之间的联系是A)一对一B)一对多C)多对多D)多对一参考答案:C【解析】两个实体间的联系可分为3种类型:①一对一联系,表现为主表中的一条记录与相关表中的一条记录相关联;②一对多联系,表现为主表中的一条记录与相关表中的多条记录相关联;③多对多联系,表现为主表中的多条记录与相关表中的多条记录相关联。本题中一个工作人员可以使用多台计算机,一台计算机可被多个人使用。故答案为C)。9、数据库设计中反映用户对数据要求的模式是A)内模式B)概念模式C)外模式D)设计模式参考答案:C【解析】模式的3个级别反映了模式的3个不同环境,以及对它们的不同要求。其中,内模式处于最低层,它反映了数据在计算机物理结构中的实际存储形式,概念模式处于中层,它反映了设计者的数据全局逻辑要求,而外模式是处于最高层,反映了用户对数据的要求。故答案选C)。10、有三个关系R、S和T如下:【精品文档】 【精品文档】则由关系R和S得到关系T的操作是A)自然连接B)交C)投影D)并参考答案:A【解析】自然连接是最常用的一种连接,它满足下面的条件:①两关系有公共域;②通过公共域的相等值进行连接,故答案为A)。11、以下关于结构化程序设计的叙述中正确的是A)一个结构化程序必须同时由顺序、分支、循环三种结构组成B)结构化程序使用goto语句会很便捷C)在C语言中,程序的模块化是利用函数实现的D)由三种基本结构构成的程序只能解决小规模的问题参考答案:C【解析】一个结构化程序可以由顺序、分支、循环三种结构组成,但不是必须同时都包括,可以包括其中的一个或多个,所以选项A)错误。goto语句会破坏程序的结构性、可读性,不得以不要用,所以选项B)错误。三种基本结构构成的程序也可以解决大规模的程序,所以选项D)错误。在C语言中,利用函数来实现程序的模块化,C)正确。12、以下关于简单程序设计的步骤和顺序的说法中正确的是A)确定算法后,整理并写出文档,最后进行编码和上机调试B)首先确定数据结构,然后确定算法,再编码,并上机调试,最后整理文档C)先编码和上机调试,在编码过程中确定算法和数据结构,最后整理文档D)先写好文档,再根据文档进行编码和上机调试,最后确定算法和数据结构【精品文档】 【精品文档】参考答案:B【解析】设计一个能解决实际问题的计算机程序需要经过以下几个过程:①建立模型。②算法设计:给出解决问题的步骤,即算法。③算法表达:选择一种表达算法的工具,对算法进行清晰的表达。④编写程序:选择一种程序设计语言,把以上算法程序化,这称为编写程序。⑤程序调试:对编写好的程序进行调试,修改程序中的错误。⑥程序文档编写与程序维护。综上所述,B)选项是符合上述描述的,其他选项不恰当。13、以下叙述中错误的是A)C程序在运行过程中所有计算都以二进制方式进行B)C程序在运行过程中所有计算都以十进制方式进行C)所有C程序都需要编译链接无误后才能运行D)C程序中整型变量只能存放整数,实型变量只能存放浮点数参考答案:B【解析】C程序在运行过程中所有计算都以二进制方式进行,所以A)正确B)错误。所有C程序先编译再链接,全都无误后才能运行。C程序中整型变量用于存放整数,实型变量用于存放浮点数。所以,本题答案为B)。14、有以下定义:inta;longb;doublex,y;则以下选项中正确的表达式是A)a%(int)(x-y)B)a=x!=y;C)(a*y)%bD)y=x+y=x参考答案:B【解析】A)选项中如果x与y的值相等那么取余时就会有除数为0的情况。C)选项中取余的两个数据都应为整数,不能有一方为实型变量,而a*y的结果为double型。D)选项表达式本身就错误,不能给表达式赋值。所以,本题答案为B)。【精品文档】 【精品文档】15、以下选项中能表示合法常量的是A)整数:1,200B)实数:1.5E2.0C)字符斜杠:''D)字符串:"07"参考答案:D【解析】A)选项中1,200不能表示整数1200。B)选项中应表示为。在C语言中,反斜杠是转义符,其后必须跟有其他字符,所以选项C)也是错误的。D)选项正确。16、表达式a+=a-=a=9的值是A)9B)-9C)18D)0参考答案:D【解析】题干中的表达式可以分解为以下表达式:①a=9;②a=a-a即a=9-9,此时a的值为0;③a=a+a即a=0+0,此时a的值为0。故本题的答案为D)。17、若变量已正确定义,在if(W)printf("%d ",k);中,以下不可替代W的是A)a<>b+cB)ch=getchar()C)a==b+cD)a++参考答案:A【解析】在C语言中,表示不等于不能用"<>",而只能使用"!="。其他选项均满足题目的要求。18、有以下程序#includemain(){inta=1,b=0;if(!a)b++;elseif(a==0)if(a)b+=2;elseb+=3;printf("%d ",b);}程序运行后的输出结果是A)0B)1C)2D)3参考答案:A【解析】根据在if…else语句中,else总是和最近的if配对的原则,本题中层次关系是:if(!a)与else【精品文档】 【精品文档】if(a==0)是一组,在最外层。而if(a)与else是一组,位于elseif(a==0)条件的内层。据此所有条件均不成立,所以b未进行任何操作仍为初始值0。19、若有定义语句inta,b;doublex;则下列选项中没有错误的是A)switch(x%2)B)switch((int)x/2.0){case0:a++;break;{case0:a++;break;case1:b++;break;case1:b++;break;default:a++;b++;default:a++;b++;}}C)switch((int)x%2)D)switch((int)(x)%2){case0:a++;break;:a++;break;case1:b++;break;:b++;break;default:a++;b++;default:a++;b++;}}参考答案:C【解析】switch()中括号内的变量类型应该与下面case语句后的常量保持类型一致。使用(int)x,可以将x强制转换成整型,然后与整型2做取余运算还是整型数据。若与数据做取余运算,按照转换原理:向高精度的数据类型进行转换,结果就变成了实型数据。综上所述,本题C)正确,B)错误。A),D)均不满足switch语句的原则。20、有以下程序#includemain(){ inta=l,b=2;while(a<6){b+=a;a+=2;b%=10;}printf("%d,%d ",a,b);}程序运行后的输出结果是A)5,11B)7,1C)7,11D)6,1参考答案:B【精品文档】 【精品文档】【解析】第一次循环后b为3,a为3;第二次循环后b为6,a为5;第三次循环:执行b+=a,所以b为11;执行a+=2所以a为7;执行b%=10,所以b为1。21、有以下程序#includemain(){inty=10;while(y--);printf("y=%d ",y);}程序执行后的输出结果是A)y=0B)y=-1C)y=lD)while构成无限循环参考答案:B【解析】当y减为1时判断while(y--),此时满足条件,但是y变成0。下次循环判断while(y--)时,因为y为0不满足条件跳出循环,但是此时也要执行y--,所以y变成了-1。打印输出时输出-1。22、有以下程序#includemain(){chars[]="rstuv";printf("%c ",*s+2);}程序运行后的输出结果是A)tuvB)字符t的ASCII码值C)tD)出错参考答案:C【解析】*s+2相当于(*s)+2即先取出s所指的数据然后对其加2,s是字符串的首地址,所以*s【精品文档】 【精品文档】即s[0]就是字符"r",所以在它的ASCII码上加上数字2就变成了字母"t"的ASCII码,所以以%c格式输出,即为选项C)。23、有以下程序#include#includemain(){ charx[]="STRING";x[0]=0;x[1]='';x[2]='0';printf("%d %d ",sizeof(x),strlen(x));}程序运行后的输出结果是A)6 1B)7 0C)6 3D)7 1参考答案:B【解析】sizeof是返回字符串在内存中所占用的空间,是真正的长度。strlen是返回字符串的长度,strlen遇到'\0'就结束,而且不包括'\0'。24、有以下程序#includeintf(intX);main(){ intn=1,m;m=f(f(f(n)));printf("%d ",m);}intf(intx){ returnx*2;}程序运行后的输出结果是A)1B)2C)4D)8参考答案:D【解析】第一次调用的是最内层的f(n),即f(1)返回值2。第二次调用中间的f(f(n)),即f(2)返回值4。最后调用最外层的f(f(f(n))),即f(4)返回值8,最后打印输出。25、以下程序段完全正确的是A)int*p;scanf("%d",&p);B)int*p;scanf("%d",p);C)intk,*p=&k;scanf("%d",p);D)intk,*p;*p=&k;scanf("%d",p);【精品文档】 【精品文档】参考答案:C【解析】A)选项输入的是指针型变量p的地址,变量一定义就已分配好了地址不能再指定了,所以A错误。B)选项没有指定指针p应该指向的变量,没给变量赋初值。D)选项中,p是地址,*p是地址内存放的数据,它把整型变量k的地址赋给了*p,所以错误。26、有定义语句:int*p[4];以下选项中与此语句等价的是A)intp[4];B)int**p;C)int*(p[4]);D)int(*p)[4];参考答案:C【解析】题目中声明的p表示的是有4个整数指针元素的数组。A选项表示有四个整数元素的数组。B选项表示一个指向整数指针的指针。D选项声明了一个指针变量,它指向的是含4个元素一维数组。所以本题答案为C)。27、下列定义数组的语句中,正确的是A)intN=10;B)#defineN10C)intx[0..10];D)intx[]; intx[N]; intx[N];参考答案:B【解析】A)中的N是一个变量,不可以用变量来定义数组,所以选项A)错误。C)中把所有的下标均列出不正确,此处只需指明数组长度即可。D)中在定义时没有指明数组长度不正确,如果不指明长度就应在定义时对数组元素进行赋值,而此选项没有,所以错误。故本题答案为B)。28、若要定义一个具有5个元素的整型数组,以下错误的定义语句是A)inta[5]={0};B)intb[]={0,0,0,0,0};C)intc[2+3];D)inti=5,d[i];参考答案:D【解析】在进行数组的定义时,不能使用变量对数组的长度进行定义。其他选项均符合数组定义标准。29、有以下程序#include【精品文档】 【精品文档】voidf(int*p);main(){ inta[5]={1,2,3,4,5},*r=a;f(r);printf("%d ",*r);}voidf(int*p){ p=p+3;printf("%d,",*p);}程序运行后的输出结果是A)1,4B)4,4C)3,1D)4,1参考答案:D【解析】指针r所指的位置一直是数组a的起始地址即a[0]的地址,而形参p通过传递参数开始也指向a数组起始地址,但通过p=p+3后指向了a[3]的地址,所以先打印输出a[3]中数据"4",然后返回主函数输出r所指a[0]中数据"1"。30、有以下程序(函数fun只对下标为偶数的元素进行操作)#includevoidfun(int*a,intn){ inti,j,k,t;for(i=0;ia[k])k=j;t=a[i];a[i]=a[k];a[k]=t;}}main(){ intaa[10]={1,2,3,4,5,6,7},i;fun(aa,7);for(i=0;i<7;i++)printf("%d,",aa[i]);printf(" ");}程序运行后的输出结果是A)7,2,5,4,3,6,1,B)1,6,3,4,5,2,7,C)7,6,5,4,3,2,1,D)1,7,3,5,6,2,1,参考答案:A【解析】由函数fun(int*a,intn)中语句if(a[j]>a[k])k=j;可知当前k【精品文档】 【精品文档】是记录数组中较大数据值所在位置的下标变量,所以该函数的作用是对数组a中的下标为偶数位置的数据进行从大到小的排序,即对a[0],a[2],a[4],a[6]中的数据1,3,5,7进行从大到小的排序,其他位置的数据不变,所以答案为A)。31、下列选项中,能够满足"若字符串s1等于字符串s2,则执行ST"要求的是A)if(strcmp(s2,s1)==0)ST;B)if(sl==s2)ST;C)if(strcpy(s1,s2)==1)ST;D)if(sl-s2==0)ST;参考答案:A【解析】函数strcmp(s2,s1)的作用是比较大小,函数strcpy(s1,s2)的作用是进行字符串复制,所以选择A)选项。B)和D)都是比较的字符串s1与s2的地址是否一致而不是比较字符串内容是否一致。32、以下不能将s所指字符串正确复制到t所指存储空间的是A)while(*t=*s){t++;s++;}B)for(i=0;t[i]=s[i];i++);C)do{*t++=*s++;}while(*s);D)for(i=0,j=0;t[i++]=s[j++];);参考答案:C【解析】C)选项中,当复制完s所指字符串的最后一个非'\0'字符后,指针s指向了'\0',循环结束,没有将字符串结束符0复制到t中,因此C)选项是错误的。33、有以下程序(strcat函数用以连接两个字符串)#include#includemain(){ chara[20]="ABCDEFG",b[]="IJK";strcat(a,b);printf("%s ",a);}程序运行后的输出结果是A)ABCDEFGIJKB)ABCDIJKC)IJKD)EFGIJK参考答案:B【解析】char*strcat(char*dest,char*src)的功能是:把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')【精品文档】 【精品文档】并添加'\0'。因为'\0'是字符串的结束标志,所以a数组中存放的字符串为"ABCD",所以将两个字符串拼接后结果为"ABCDIJK"。34、有以下程序,程序中库函数islower(ch)用以判断ch中的字母是否为小写字母#include#includevoidfun(char*p){ inti=0;while(p[i]){ if(p[i]==''&&islower(p[i-1]))p[i-1]=p[i-1]-'a'+'A';i++;}}main(){ charsl[100]="abcdEFG!";fun(s1);printf("%s ",s1);}程序运行后的输出结果是A)abcdEFG!B)AbCdEFg!C)aBcDEFG!D)abcdEFg!参考答案:C【解析】intislower(charch)的功能是判断字符c是否为小写英文字母,当ch为小写英文字母(a-z)时,返回非零值,否则返回零。后面语句p[i-1]=p[i-1]-'a'+'A'的作用是把小写字母转化为大写字母。根据判断条件可知,只有当空格字符的前一个字符为小写字符时才把该小写字符变成大写,所以选择C)。35、有以下程序#includevoidfun(intx){ if(x/2>1)fun(x/2);printf("%d",x);}main(){ fun(7);printf(" ");}程序运行后的输出结果是【精品文档】 【精品文档】A)137B)731C)73D)37参考答案:D【解析】本程序是一个递归函数,第一次实参为7,第二次为3,此时不满足条件,因为3/2结果为1,等于1而不大于1,所以跳过fun(x/2)语句,执行printf语句,即打印出3。然后向上返回到第一次调用打印出7。36、有以下程序#includeintfun(){ staticintx=1;x+=1;returnx;}main(){ inti,s=1;for(i=l;i<=5;i++)s+=fun();printf("%d ",s);}程序运行后的输出结果是A)11B)21C)6D)120参考答案:B【解析】本题目fun()函数中定义的变量x为静态局部变量, 第一循环后x的值为2,s的值为3;第二次循环后x的值为3,s的值为6;第三次循环后x的值为4,s的值为10;第四次循环后x的值为5,s的值为15;第五次循环后x的值为6,s的值为21。37、有以下程序#include#includemain(){ int*a,*b,*c;a=b=c=(int*)malloc(sizeof(int));*a=1;*b=2,*c=3;a=b;printf("%d,%d,%d ",*a,*b,*c);}程序运行后的输出结果是A)3,3,3B)2,2,3C)1,2,3D)1,1,3【精品文档】 【精品文档】参考答案:A【解析】根据程序可以分析出系统只分配了一个整型数据的存储空间,把这个空间的地址分别赋给了指针型变量a、b和c。程序利用指针a把数据1写入了该空间,然后利用指针b,把数据2写入该空间,所以原来的1就被覆盖掉了,最后用指针c把数据3写入该空间把数据2覆盖掉了,此空间中最后留有的数据是3。因为3个指针都指向该空间,所以输出数据均为3。38、有以下程序#includemain(){ ints,t,A=10;doubleB=6;s=sizeof(A);t=sizeof(B);printf("%d,%d ",s,t);}在VC6平台上编译运行,程序运行后的输出结果是A)2,4B)4,4C)4,8D)10,6参考答案:C【解析】sizeof的作用就是返回一个对象或者类型所占的内存字节数。在VC6中整型占4个字节,双精度实型占8个字节,所以选C)。39、若有以下语句typedefstructS{ intg;charh; }T;以下叙述中正确的是A)可用S定义结构体变量B)可用T定义结构体变量C)S是struct类型的变量D)T是structS类型的变量参考答案:B【解析】此题考察的是结构体的定义方式。S是我们定义的结构体的名字,在题目中顺便将T定义为structS类型,即T被定义为一个类型名。这样就可以用T来定义说明新的变量了。在此S与T都不是变量的名称。【精品文档】 【精品文档】40、有以下程序#includemain(){ shortc=124;c=c    ;printf("%d ",c);}若要使程序的运行结果为248,应在下划线处填入的是A)>>2B)|248C)&0248D)<<1参考答案:D【解析】短整型在存储时占用16位,按照移位运算如果右移两位就等于原数除以4,结果为31,如果左移一位相当于原数乘以2结果为248,所以选择D)。1、一个栈的初始状态为空。首先将元素5,4,3,2,1依次入栈,然后退栈一次,再将元素A,B,C,D依次入栈,之后将所有元素全部退栈,则所有元素退栈(包括中间退栈的元素)的顺序为 【1】 。参考答案:1DCBA2345【解析】栈是限定只在一端进行插入与删除的线性表,栈按照"先进后出"或"后进先出"的原则组织数据。当54321入栈后,此时执行退栈操作,出栈的元素是1,然后ABCD入栈,再将所有元素退栈,故退栈顺序为:1DCBA2345。2、在长度为n的线性表中,寻找最大项至少需要比较 【2】 次。参考答案:1【解析】在线性表中,如果元素按从小到大的顺序排列且查找从后向前进行时,比较1次即能找到最大值,这时查找比较次数最少,故至少比较次数为1次。3、一棵二叉树有10个度为1的结点,7个度为2的结点,则该二叉树共有 【3】 个结点。参考答案:25【精品文档】 【精品文档】【解析】在二叉树中,根据性质3,度为0的结点是度为2的结点个数+1,故二叉树中结点总和为度为0的结点数、度为1的结点数以及度为2的结点数三者相加,即8+10+7,共25个结点。4、仅由顺序、选择(分支)和重复(循环)结构构成的程序是 【4】 程序。参考答案:结构化【解析】结构化程序是程序设计的先进方法和工具。在1996年,Boehm和Jacopini证明了程序设计语言仅使用三种基本控制结构足以表达出其他形式结构的程序设计方法。这三种基本控制结构就是顺序结构、选择(分支)结构、循环(重复)结构,故本题答案为结构化程序。5、数据库设计的四个阶段是:需求分析,概念设计,逻辑设计和 【5】 。参考答案:物理设计【解析】数据库设计的四个阶段是需求分析、概念设计、逻辑设计和物理设计。6、以下程序运行后的输出结果是 【6】 。#includemain(){ inta=200,b=010;printf("%d%d ",a,b);}参考答案:2008【解析】整型变量a的值为200,b的值"010"是用八进制表示的"10"即十进制的"8",最后输出格式均为%d,即十进制格式,所以输出为"2008"。7、有以下程序#includemain(){ intx,y;scanf("%2d%1d",&x,&y);printf("%d ",x+y);}程序运行时输入:1234567,程序的运行结果是 【7】 。【精品文档】 【精品文档】参考答案:15【解析】可以指定输入数据所占列宽,系统自动按所指定的格式截取所需数据。%2d即将输入数据的2个列宽的数据赋给变量x,因为输入的为"1234567",所以前两个列宽的数据为12,即x的值为12,同理%1d即把输入数据中前两个列宽所在数据后的一个列宽的数据赋给变量y,所以y的值为3,所以x+y的值为15。8、在C语言中,当表达式值为0时表示逻辑值"假",当表达式值为 【8】 时表示逻辑值"真"。参考答案:非0【解析】本题一定要明确一个概念,即:所有非0的数(并不只是"1"),在c语言中都表示逻辑值为"真"。9、有以下程序#includemain(){ inti,n[]={0,0,0,0,0};for(i=l;i<=4;i++){n[i]=n[i-1]*3+1;printf("%d",n[i]);}}程序运行后的输出结果是 【9】 。参考答案:141340【解析】第一次循环结果为:n[1]=0*3+1,即n[1]的值为1,打印输出1;第二次循环结果为:n[2]=1*3+1,即n[2]的值为4,打印输出4;第三次循环结果为:n[3]=4*3+1,即n[3]的值为13,打印输出13;第四次循环结果为:n[4]=13*3+1,即n[4]的值为40,打印输出40。10、以下fun函数的功能是:找出具有N个元素的一维数组中的最小值,并作为函数值返回。请填空。(设N已定义)intfun(intx[N]){ inti,k=0;【精品文档】 【精品文档】for(i=0;iint*f(int*p,int*q);main(){intm=l,n=2,*r=&m; r=f(r,&n);printf("%d ",*r);}int*f(int*p,int*q){return(*p>*q)?p:q;}程序运行后的输出结果是 【11】 。参考答案:2【解析】本题中f函数的功能是返回指针p与指针q所指的元素中较大的那个元素的地址,从函数调用可知,在参数传递过程中变量m的地址传给了指针p,变量n的地址传给了指针q,因为n的值2大于m的值1,所以返回的是变量n的地址。在主函数中用来接收f函数返回值的变量是指针型变量r,所以r就变成了变量n的地址,所以*r即为2。12、以下fun函数的功能是在N行M列的整型二维数组中,选出一个最大值作为函数值返回,请填空。(设M,N已定义)intfun(inta[N][M]){ inti,j,row=0,col=0;for(i=0;ia[row][co1]){row=i;col=j;}return( 【12】 );【精品文档】 【精品文档】}参考答案:a[row][col]【解析】通过程序可以看出,外循环是行,内循环是列。先在行不变的情况下找一行内最大的数据进行记录。通过语句if(a[i][j]>a[row][col]){row=i;col=j;}可知,如果变量a[i][j]大于a[row][col],将i赋给了row,将j赋给了col,所以a[row][col]是记录当前最大值的变量。13、有以下程序#includemain(){ intn[2],i,j;for(i=0;i<2;i++)n[i]=0;for(i=0;i<2;i++) for(j=0;j<2;j++)n[j]=n[i]+1;printf("%d ",n[1]);}参考答案:3【解析】通过第一次for(i=0;i<2;i++)n[i]=0;的循环语句可知,已经将数组n中的两个元素都赋初值为0。接下来的循环中,第一次循环,外循环i=0的前提下:内循环j=0时,运行完n[0]=n[0]+1后n[0]为1;j=1时,运行完n[1]=n[0]+1后,n[1]为2。第二次循环,外循环i=1的前提下,内循环j=0时,运行完n[0]=n[1]+1后n[0]为3;j=1时,运行完n[1]=n[1]+1后,n[1]为3。14、以下程序的功能是:借助指针变量找出数组元素中最大值所在的位置并输出该最大值。请在输出语句中填写代表最大值的输出项。#includemain(){ inta[10],*p,*s;for(p=a;p-a<10;p++)scanf("%d",p);for(p=a,s=a;p-a<10;p++)if(*p>*s)s=p;【精品文档】 【精品文档】printf("max=%d ", 【14】 );}参考答案:*s【解析】因为题目中有 if(*p>*s) s=p;语句,可知如果p所指的元素的值比s所指的元素的值大,就把指针p的地址赋予指针s,即s指向当前值最大的元素,所以最后应该输出的元素的值为*s。15、以下程序打开新文件,并调用字符输出函数将a数组中的字符写入其中,请填空。#includemain(){  【15】 *fp;chara[5]={'1','2','3','4','5'},i;fp=fopen("f.txt","w");for(i=0;i<5;i++)fputc(a[i],fp);fclose(fp);}参考答案:FILE【解析】在这里需要定义文件指针,定义文件指针的格式为:FILE*变量名。2011年3月真题1、下列关于栈叙述正确的是A)栈顶元素最先能被删除B)栈顶元素最后才能被删除C)栈底元素永远不能被删除D)以上三种说法都不对参考答案:A【解析】栈是限定在一端进行插入与删除的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom)【精品文档】 【精品文档】;栈底固定,而栈顶浮动。栈按照后进先出的原则存储数据,先进入的数据被压入栈底,最后进入的数据在栈顶,需要读数据时从栈顶开始弹出数据(最后一个进入数据被第一个读出来)。所以栈顶的元素最先被删除,本题答案为A)。2、下列叙述中正确的是A)有一个以上根结点的数据结构不一定是非线性结构B)只有一个根结点的数据结构不一定是线性结构C)循环链表是非线性结构D)双向链表是非线性结构参考答案:B【解析】线性结构指的是数据元素之间存在着"一对一"线性关系的数据结构,这样的结构中只有一个根结点,如循环链表和双向链表;非线性结构指的是数据元素之间存在着"一对多"非线性关系的数据结构,这样的结构中可能有一个根结点,如树形结构,也可能有多个根结点,如网状结构。故本题答案为B)。3、某二叉树共有7个结点,其中叶子结点只有1个,则该二叉树的深度为(假设根结点在第1层)A)3B)4C)6D)7参考答案:D【解析】叶子结点个数=度为2的结点个数+1,在此题中叶子结点个数为1,说明度为2的结点数为0,即二叉树中不存在度为2的结点,只有度为1的结点和叶子结点,那么此二叉树就是一棵单支树,树中结点个数即为树的深度,所以答案为D)。4、在软件开发中,需求分析阶段产生的主要文档是A)软件集成测试计划B)软件详细设计说明书C)用户手册D)软件需求规格说明书参考答案:D【精品文档】 【精品文档】【解析】软件需求规格说明书是需求分析阶段的最后成果,是软件开发中的的重要文档,故本题答案为D)。5、结构化程序所要求的基本结构不包括A)顺序结构B)GOTO跳转C)选择(分支)结构D)重复(循环)结构参考答案:B【解析】结构化程序设计方法主要由以下三种逻辑结构组成:1)顺序结构:顺序结构是一种线性、有序的结构,它依次执行各语句模块;2)循环(重复)结构:循环结构是重复执行一个或几个模块,直到满足某一条件为止;3)选择(分支)结构:选择结构是根据条件成立与否选择程序执行的通路。故本题答案为B)。6、下面描述中错误的是A)系统总体结构图支持软件系统的详细设计B)软件设计是将软件需求转换为软件表示的过程C)数据结构与数据库设计是软件设计的任务之一D)PAD图是软件详细设计的表示工具参考答案:A【解析】系统总体结构支持软件系统的概要设计,其他选项均正确。故本题答案选A)。7、负责数据库中查询操作的数据库语言是A)数据定义语言B)数据管理语言C)数据操纵语言D)数据控制语言参考答案:C【精品文档】 【精品文档】【解析】数据库中有三种主要程序设计语言类别的语句:数据定义语言(DDL),数据操作语言(DML)及数据控制语言(DCL)。其中数据操作语言主要负责数据的插入、删除、查询、修改等操作,故答案为C。8、一个教师可讲授多门课程,一门课程可由多个教师讲授。则实体教师和课程间的联系是A)1:1联系B)1:m联系C)m:1联系D)m:n联系参考答案:D【解析】两个实体间的联系可分为3种类型:一对一联系、一对多联系、多对多联系。在本题中一位教师可讲授多门课程,一门课程可由多位教师讲授,属于多对多联系。故本题答案为D)。9、有三个关系R、S和T如下:RABCa12b21c31SABc3TC1则由关系R和S得到关系T的操作是A)自然连接B)交C)除D)并参考答案:C【解析】在关系代数中,除法运算可理解为笛卡尔积的逆运算。设被除关系R为m元关系,除关系S为n元关系,那么它们的商为m-n元关系,记为R÷S。商的构成原则是:将被除关系R中的【精品文档】 【精品文档】m-n列,按其值分成若干组,检查每一组的n列值的集合是否包含除关系S,若包含则取m-n列的值作为商的一个元组,否则不取。故本题答案为C)。10、定义无符号整数类为UInt,下面可以作为类UInt实例化值的是A)-369B)369C)0.369D)整数集合{1,2,3,4,5}参考答案:B【解析】无符号整型unsigned[int],占16位,范围是0~65535。故本题答案为B)。11、计算机高级语言程序的运行方法有编译执行和解释执行两种,以下叙述中正确的是A)C语言程序仅可以编译执行B)C语言程序仅可以解释执行C)C语言程序既可以编译执行又可以解释执行D)以上说法都不对参考答案:A【解析】解释程序是将源程序(如BASIC)作为输入,解释一句后就提交计算机执行一句,并不形成目标程序。编译程序是把高级语言(如FORTRAN、COBOL、Pascal、C等)源程序作为输入,进行翻译转换,产生出机器语言的目标程序,然后再让计算机执行这个目标程序,得到计算结果。12、以下叙述中错误的是A)C语言的可执行程序是由一系列机器指令构成的B)用C语言编写的源程序不能直接在计算机上运行C)通过编译得到的二进制目标程序需要连接才可以运行D)在没有安装C语言集成开发环境的机器上不能运行C源程序生成的.exe文件参考答案:D【精品文档】 【精品文档】【解析】C语言的可执行程序是由一系列机器指令组成的,用C语言编写的源程序必须经过编译生成二进制目标代码,再经过连接才能运行,并且可以脱离C语言集成开发环境。故答案为D)。13、以下选项中不能用作C程序合法常量的是A)1,234B)'123'C)123D)"x7G"参考答案:A【解析】常量是在程序运行过程中,其值不能被改变的量。常量类型包括:整型常量、实例常量、字符常量、字符串常量和符号常量。B)选项为字符常量,表示八进制数123代表的ASCII字符;C)选项为整型常量;D)选项为字符串常量。14、以下选项中可用作C程序合法实数的是参考答案:A【解析】浮点型常量有十进制小数形式和指数形式。指数形式要求字母e(或者E)之前必须有数字,且e后面的指数必须为整数。B)、C)、D)都是不合法的指数形式,故答案为A)。15、若有定义语句:inta=3,b=2,c=1;,以下选项中错误的赋值表达式是A)a=(b=4)=3;B)a=b=c+1;C)a=(b=4)+c;D)a=1+(b=c=4);参考答案:A【解析】在A)选项中,赋值语句b=4先把4赋值给整型变量b,之后执行(b=4)=3是把常量3赋值给常量4,但是由于C语言规定赋值运算符的左侧只能是变量,不能是常量或者表达式,因此A)选项错误。16、有以下程序段charname[20];intnum;scanf("name=%snum=%d",name,&num);当执行上述程序段,并从键盘输入:name=Lilinum=1001<回车>后,name的值为【精品文档】 【精品文档】A)LiliB)name=LiliC)Lilinum=D)name=Lilinum=1001参考答案:A解析】scanf()函数规定,如果在"格式控制"字串中除了格式说明以外还有其他字符,则在输入数据时应输入与这些字符相同的字符,如题干中的"name="和"num="。在输入过程中遇到空格、回车或跳格键时认为输入结束,这些字符称为"间隔符"。17、if语句的基本形式是:if(表达式)语句,以下关于"表达式"值的叙述中正确的是A)必须是逻辑值B)必须是整数值C)必须是正数D)可以是任意合法的数值参考答案:D【解析】if语句中的表达式可以是逻辑值也可以是任意合法的数值,表达式的运算结果为非0(真)或者0(假)。18、有以下程序#includemain(){intx=011;printf("%d ",++x);}程序运行后的输出结果是A)12B)11C)10D)9参考答案:C【解析】x=011表示把八进制的11赋值给变量x,因此x的值为十进制的9,程序运行的结果输出变量x自加运算后的十进制值,即10。19、有以下程序#includemain(){ints;scanf("%d",&s);while(s>0){switch(s)【精品文档】 【精品文档】{case1:printf("%d",s+5);case2:printf("%d",s+4);break;case3:printf("%d",s+3);default:printf("%d",s+1);break;}scanf("%d",&s);}}运行时,若输入123450<回车>,则输出结果是A)6566456B)66656C)66666D)6666656参考答案:A【解析】switch语句执行完一个case后面的语句后,流程控制转移到下一个case语句继续执行,遇到break会跳出本次循环。本题中输入1时会输出65,输入2时会输出6,输入3时会输出64,输入4时会输出5,输入5时会输出6,在输入0时不满足循环条件,程序执行结束。20、有以下程序段inti,n;for(i=0;i<8;i++){n=rand()%5;switch(n){case1:case3:printf("%d ",n);break;case2:case4:printf("%d ",n);continue;case0:exit(0);}printf("%d ",n);}以下关于程序段执行情况的叙述,正确的是A)for循环语句固定执行8次B)当产生的随机数n为4时结束循环操作C)当产生的随机数n为1和2时不做任何操作D)当产生的随机数n为0时结束程序运行参考答案:D【精品文档】 【精品文档】【解析】当产生的随机数n为1或2时,由于没有遇到break,因此程序将分别顺序执行case3与case4;当n为3时,程序输出n的值后跳出switch语句;当n为4时,程序输出n的值后将继续执行下一次循环;当n为0时,程序执行exit函数结束运行。21、有以下程序#includemain(){chars[]="012xy8s34f4w2";inti,n=0;for(i=0;s[i]!=0;i++)if(s[i]>='0'&&s[i]<='9')n++;printf("%d ",n);}程序运行后的输出结果是A)0B)3C)7D)8参考答案:B【解析】本题的程序是要统计字符串s中数字的个数,其中前三个字符满足选择条件,此时n为3,然后遇到字符'',这个转义字符表示值为0的空字符NULL,此时循环条件不满足,因此循环结束。22、若i和k都是int类型变量,有以下for语句for(i=0,k=-1;k=1;k++)printf("***** ");下面关于语句执行情况的叙述中正确的是A)循环体执行两次B)循环体执行一次C)循环体一次也不执行D)构成无限循环参考答案:D【解析】本题程序中,for循环的循环条件是k=1,这个语句是赋值语句总是正确的,因此循环条件将一直满足,构成一个无限循环。23、有以下程序#includemain()【精品文档】 【精品文档】{charb,c;inti;b='a';c='A';for(i=0;i<6;i++){if(i%2)putchar(i+b);elseputchar(i+c);}printf(" ");}程序运行后的输出结果是A)ABCDEFB)AbCdEfC)aBcDeFD)abcdef参考答案:B【解析】本题中当变量i取值为0、2、4时,i可以被2整除,程序执行putchar(i+c),分别输出ACE;当变量i取值为1、3、5时,2除i的余数不为0,因此程序执行putchar(i+b),分别输出bdf。所以最终输出AbCdEf。24、设有定义:doublex[10],*p=x;,以下能给数组x下标为6的元素读入数据的正确语句是A)scanf("%f",&x[6]);B)scanf("%lf",*(x+6));C)scanf("%lf",p+6);D)scanf("%lf",p[6]);参考答案:C【解析】本题中定义了数组x和指向数组首元素的指针p,因此可以用x[6]的地址或者p指针偏移6个单位来定位数组下标为6的元素。另外,由于数组x的元素类型为double型,因此输入的格式控制符应为%lf。25、有以下程序(说明:字母A的ASCIl码值是65)#includevoidfun(char*s){while(*s){if(*s%2)printf("%c",*s);s++;}}main(){chara[]="BYTE";fun(a);printf(" ");}【精品文档】 【精品文档】程序运行后的输出结果是A)BYB)BTC)YTD)YE参考答案:D【解析】本题中调用函数fun(),可以输出字符串中ASCII码值为奇数的字符,字符串"BYTE"中各字符的ASCII码分别为66、89、84和69,因此最终输出YE。26、有以下程序段#includemain(){…while(getchar()!=' ');…}以下叙述中正确的是A)此while语句将无限循环B)getchar()不可以出现在while语句的条件表达式中C)当执行此while语句时,只有按回车键程序才能继续执行D)当执行此while语句时,按任意键程序就能继续执行参考答案:C【解析】本题中while循环条件为getchar()!=' ',如果不按下回车键,则循环条件getchar()!=' '一直成立,形成一个空循环;如果按下回车键,则循环条件不成立使循环结束,程序继续执行。27、有以下程序#includemain(){intx=1,y=0;if(!x)y++;elseif(x==0)if(x)y+=2;elsey+=3;printf("%d ",y);}程序运行后的输出结果是A)3B)2C)1D)0【精品文档】 【精品文档】参考答案:D【解析】根据在if…else语句中,else总是和最近的if配对的原则,本题中层次关系是:if(!x)与elseif(x==0)是一组,在最外层。而if(x)与else是一组,位于elseif(x==0)条件的内层。据此所有条件均不成立,所以y未进行任何操作,仍为0。28、若有定义语句:chars[3][10],(*k)[3],*p;,则以下赋值语句正确的是A)p=s;B)p=k;C)p=s[0];D)k=s;参考答案:C【解析】A)选项中p=s将二维数组赋值给指向字符的指针;B)选项中p=k将指向一维数组的指针赋值给指向字符的指针;D)选项中k=s将二维数组赋值给一维数组,因此上述赋值语句均不正确。C)选项p=s[0]是把一维数组的首地址赋值给p指针。29、有以下程序#includevoidfun(char*c){while(*c){if(*c>='a'&&*c<='z')*c=*c-('a'-'A');c++;}}main(){chars[81];gets(s);fun(s);puts(s);}当执行程序时从键盘上输入HelloBeijing<回车>,则程序的输出结果是A)helloBeijingB)HelloBeijingC)HELLOBEIJINGD)hELLOBeijing参考答案:C【解析】本题中调用gets()函数输入字符串,然后调用fun()函数,用【精品文档】 【精品文档】*c=*c-('a'-'A')实现把输入字符串中的小写字母转化为对应大写字母,最后调用puts()函数输出字符串。30、以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。#include#defineN10voidfun(intx[N]){inti=0;while(imain(){chara[30],b[30];scanf("%s",a);gets(b);printf("%s %s ",a,b);}程序运行时若输入:howareyou?Iamfine<回车>则输出结果是A)howareyou?IamfineB)howareyou?IamfineC)howareyou?IamfineD)howareyou?参考答案:B【精品文档】 【精品文档】解析】scanf函数会把空格字符作为输入的字符串之间的分隔符,因此字符串a为"how"。gets()函数读取字符串时,直至接受到换行符或EOF时才停止,并将读取的结果存放在指针所指向的字符数组中,因此其余输入的内容赋值给b。32、设有如下函数定义intfun(intk){if(k<1)return0;elseif(k==1)return1;elsereturnfun(k-1)+1;}若执行调用语句:n=fun(3);,则函数fun总共被调用的次数是A)2B)3C)4D)5参考答案:B【解析】执行fun(3)语句时会返回fun(3-1)+1,即fun(2)+1;执行fun(2)时会返回fun(2-1)+1,即fun(1)+1;执行fun(1)时会返回1,所以一共执行fun函数为3次。33、有以下程序#includeintfun(intx,inty){if(x!=y)return((x+y)/2);elsereturn(x);}main(){inta=4,b=5,c=6;printf("%d ",fun(2*a,fun(b,c)));}程序运行后的输出结果是A)3B)6C)8D)12参考答案:B【解析】本题中对函数fun()进行了嵌套的调用。首先调用fun(5,6),返回值为5,2*a的值为8,然后调用fun(8,5),最终输出值为6。34、有以下程序#includeintfun()【精品文档】 【精品文档】{staticintx=1;x*=2;returnx;}main(){inti,s=1;for(i=1;i<=3;i++)s*=fun();printf("%d ",s);}程序运行后的输出结果是A)0B)10C)30D)64参考答案:D【解析】静态局部变量只在定义它的函数内有效,程序仅为其分配一次内存,调用函数返回后,该变量仍然保存上次的结果值。本题中第一次for循环后x值为2,s值为2;第二次循环后x值为4,s值为8;第三次循环后x值为8,s值为64。35、有以下程序#include#defineS(x)4*(x)*x+1main(){intk=5,j=2;printf("%d ",S(k+3));}程序运行后的输出结果是A)197B)143C)33D)28参考答案:B【解析】宏定义又称为宏代换,格式为"#define标识符字符串",其中的标识符就是所谓的符号常量,也称为"宏名",宏的预处理工作也叫做宏展开,即将宏名替换为字符串。本题中把S(k+j)替换成4*(k+j)*k+j+1,计算结果为143。36、设有定义:struct{charmark[12];intnum1;doublenum2;}t1,t2;,若变量均已正确赋初值,则以下语句中错误的是A)t1=t2;;【精品文档】 【精品文档】;D)t2.;参考答案:C【解析】字符串赋值不能通过指针来简单赋值。结构体可以进行整体的赋值。37、有以下程序#includestructord{intx,y;}dt[2]={1,2,3,4};main(){structord*p=dt;printf("%d,",++(p->x));printf("%d ",++(p->y));}程序运行后的输出结果是A)1,2B)4,lC)3,4D)2,3参考答案:D【解析】本题中定义了一个结构体数组dt[2],其中dt[0].x=1,dt[0].y=2,dt[1].x=3,dt[1].y=4。在main函数中指针p指向了结构体数组的第一个元素,因此p->x值为1,p->y值为2,自加运算的结果分别为2和3。38、有以下程序#includestructS{inta,b;}data[2]={10,100,20,200};main(){structSp=data[1];printf("%d ",++(p.a));}程序运行后的输出结果是A)10B)11C)20D)21参考答案:D【解析】本题中定义了一个结构体数组data[2],其中data[0].a=10,data[0].b=100,data[1].a=20,data[1].b=200。在main函数中结构体数组的第2个元素data[1]赋值给p,即p指向结构体数组的第2个元素,因此的值为20,进行自加运算后结果为21。39、有以下程序【精品文档】 【精品文档】#includemain(){unsignedchara=8,c;c=a>>3;printf("%d ",c);}程序运行后的输出结果是A)32B)16C)1D)0参考答案:C【解析】本题中将8赋值给字符变量a,则a的二进制为"00001000",a>>3的位运算是把a向右移动三位,结果为"00000001",输出其十进制的值1。40、设fp已定义,执行语句fp=fopen("file","w");后,以下针对文本文件file操作叙述的选项中正确的是A)写操作结束后可以从头开始读B)只能写不能读C)可以在原有内容后追加写D)可以随意读和写参考答案:B【解析】本题中用"w"方式打开文件,只能向文件写数据。如果原来不存在该文件,则新创建一个以指定名字命名的文件;如果已存在该文件,则把原文件删除后重新建立一个新文件,而不是把内容追加到原文件后。1、有序线性表能进行二分查找的前提是该线性表必须是【1】存储的。参考答案:顺序【解析】能使用二分法查找的线性表必须满足两个条件:1)用顺序存储结构;2)线性表是有序的。2、一棵二叉树的中序遍历结果为DBEAFC,前序遍历结果为ABDECF,则后序遍历结果为【2】。参考答案:DEBFCA【解析】依据前序遍历序列可确定根结点为A,再依据中序遍历序列可知其左子树由DBE构成,右子树为FC;由A的左子树的前序遍历序列可知其根结点为B【精品文档】 【精品文档】,由中序遍历序列可知其左子树为D,右子树为E;由A的右子树的前序遍历序列可知其根结点为C,由中序遍历序列可知其左子树为F,右子树为空。因此此二叉树的后序遍历序列为DEBFCA。3、对软件设计的最小单位(模块或程序单元)进行的测试通常称为【3】测试。参考答案:单元测试【解析】软件测试的过程一般按4个步骤进行,即单元测试、集成测试、验收测试(确认测试)和系统测试。单元测试又称模块测试,是针对软件设计的最小单位--程序模块进行正确性检验的测试工作。4、实体完整性约束要求关系数据库中元组的【4】属性值不能为空。参考答案:主码【解析】实体完整性规则是针对基本关系而言,即针对现实世界的一个实体集,而现实世界中的实体是可区分的。该规则的目的是利用关系模式中的主码或主属性来区分现实世界中的实体集中的实体,所以不能取空值。5、在关系A(S,SN,D)和关系B(D,CN,NM)中,A的主关键字是S,B的主关键字是D,则称【5】是关系A的外码。参考答案:D【解析】参照完整性用于约定两个关系之间的联系,理论上规定:若M是关系S中的一属性组,且M是另一关系Z的主关键字,则称M为关系S对应关系Z的外关键字。若M是关系S的外关键字,则S中每一个元组在M上的值必须是空值或是对应关系Z中某个元组的主关键字值。6、以下程序运行后的输出结果是【6】。#include【精品文档】 【精品文档】main(){inta;a=(int)((double)(3/2)+0.5+(int)1.99*2);printf("%d ",a);}参考答案:3【解析】本题中3/2=1,(double)(3/2)=1,(int)1.99*2=1*2=2,因此(int)(1+0.5+2)=(int)3.5=3。7、有以下程序#includemain(){intx;scanf("%d",&x);if(x>15)printf("%d",x-5);if(x>10)printf("%d",x);if(x>5)printf("%d ",x+5);}若程序运行时从键盘输入12<回车>,则输出结果为【7】。参考答案:1217【解析】本题中输入12时,第一条if的条件x>15不满足因此不执行,第二条if的条件x>10满足因此输出12,第三条if的条件x>5满足因此输出17。8、有以下程序(说明:字符0的ASCIl码值为48)#includemain(){charc1,c2;scanf("%d",&c1);c2=c1+9;printf("%c%c ",c1,c2);}若程序运行时从键盘输入48<回车>,则输出结果为【8】。参考答案:09【解析】本题中通过ASCII码对字符变量赋值,由于字符0的ASCII码是48,因此字符变量c1为0,c2的ASCII码比c1大9,因此c2为9。9、有以下函数voidprt(charch,intn){inti;【精品文档】 【精品文档】for(i=1;i<=n;i++)printf(i%6!=0?"%c":"%c ",ch);}执行调用语句prt('*',24);后,函数共输出了【9】行*号。参考答案:4【解析】本题中输出*并换行的条件是i能被6整除,否则输出*不换行。因此只有在i为6、12、18和24时*的输出才会换行,最终输出4行*。10、以下程序运行后的输出结果是【10】。#includemain(){intx=10,y=20,t=0;if(x==y)t=x;x=y;y=t;printf("%d%d ",x,y);}参考答案:200【解析】本题中if选择的条件x==y不满足,因此直接执行后面的x=y和y=t,则x的值为20,y的值为0。11、已知a所指的数组中有N个元素。函数fun的功能是,将下标k(k>0)开始的后续元素全部向前移动一个位置。请填空。voidfun(inta[N],intk){inti;for(i=k;i【12】;main(){doublex,y,(*p)();scanf("%lf%lf",&x,&y);p=avg;printf("%f ",(*p)(x,y));【精品文档】 【精品文档】}doubleavg(doublea,doubleb){return((a+b)/2);}参考答案:doubleavg(doublea,doubleb);【解析】c语言编译器对于源代码的编译是顺序编译的,当任意一个函数中调用某个函数的时候,这个函数的原型必须在调用之前声明,否则就会出现编译错误。本题中需要在main函数调用avg之前对其进行声明。13、以下程序运行后的输出结果是【13】。#includemain(){inti,n[5]={0};for(i=1;i<=4;i++){n[i]=n[i-1]*2+1;printf("%d",n[i]);}printf(" ");}参考答案:13715【解析】本题中已知n[0]为0,根据循环的执行可以得到n[1]为1,n[2]为3,n[3]为7,n[4]为15,因此输出结果是13715。14、以下程序运行后的输出结果是【14】。#include#include#includemain(){char*p;inti;p=(char*)malloc(sizeof(char)*20);strcpy(p,"welcome");for(i=6;i>=0;i--)putchar(*(p+i));printf(" ");free(p);}参考答案:emoclew【解析】本题中用malloc函数申请一个20个字符大小的空间,并用指针p指向空间的首地址。strcpy函数使"welcome"字符串存放到分配的空间,最后用putchar函数倒序输出字符串的前7个字符。p[0]=w,p[1]=e,p[2]=l,p[3]=c,p[4]=o,p[5]=m,p[6]=e。【精品文档】 【精品文档】15、以下程序运行后的输出结果是【15】。#includemain(){FILE*fp;intx[6]={1,2,3,4,5,6},i;fp=fopen("test.dat","wb");fwrite(x,sizeof(int),3,fp);rewind(fp);fread(x,sizeof(int),3,fp);for(i=0;i<6;i++)printf("%d",x[i]);printf(" ");fclose(fp);}参考答案:123456【解析】本题中fwrite函数向目标文件指针fp指向的文件中写入3个int数据,即123。rewind函数将文件内部的位置指针重新指向文件的开头。fread函数将从fp所指文件中读取3个int数据到x指向的地址,因此数组x的元素没有变化。2011年9月真题1、下列叙述中正确的是    。A)算法就是程序B)设计算法时只需要考虑数据结构的设计C)设计算法时只需要考虑结果的可靠性D)以上三种说法都不对参考答案:D【解析】算法不同于程序,算法优先于程序;算法强调的是程序的易读性;设计算法时需要考虑算法的时间复杂度和空间复杂度。故答案为D)2、下列关于线性链表的叙述中,正确的是    。A)各数据结点的存储空间可以不连续,但它们的存储顺序与逻辑顺序必须一致【精品文档】 【精品文档】B)各数据结点的存储顺序与逻辑顺序可以不一致,但它们的存储空间必须连续C)进行插入与删除时,不需要移动表中的元素D)以上三种说法都不对参考答案:C【解析】线性表的链式存储结构称为线性链表。在线性链表中,各元素结点的存储空间可以是不连续的,且各数据元素的存储顺序与逻辑顺序可以不一致。在线性链表中进行插入与删除,不需要移动链表中的元素。因此C)选项正确。3、下列关于二叉树的叙述中,正确的是    。A)叶子结点总是比度为2的结点少一个B)叶子结点总是比度为2的结点多一个C)叶子结点数是度为2的结点数的两倍D)度为2的结点数是度为1的结点数的两倍参考答案:B【解析】根据二叉树的性质3,在任意一棵二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个。故答案为B)。4、软件按功能可以分为应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的是    。A)学生成绩管理系统B)C语言编译程序C)UNIX操作系统D)数据库管理系统参考答案:A【解析】系统软件负责管理计算机系统中各种独立的硬件,使得计算机使用者和其他软件将计算机当作一个整体而不需要顾及到底层每个硬件是如何工作的,包括操作系统和一系列基本的工具(【精品文档】 【精品文档】比如编译器、数据库管理、存储器格式化、文件系统管理、用户身份验证、驱动管理、网络连接等方面的工具)。支撑软件是支撑各种软件的开发与维护的软件,又称为软件开发环境,它主要包括环境数据库、各种接口软件和工具组。应用软件是为了某种特定的用途而被开发的软件,它可以是一个特定的程序,也可以是一组功能联系紧密、可以互相协作的程序的集合,或者是一个由众多独立程序组成的庞大的软件系统,如文字处理软件、教育与娱乐软件等。选项A)"学生成绩管理系统"属于应用软件。5、某系统总体结构图如下图所示:该系统总体结构图的深度是    。A)7B)6C)3D)2参考答案:C【解析】系统总体结构图是对软件系统结构总体设计的图形显示,其深度表示控制的层数。故答案为C)。6、程序调试的任务是    。A)设计测试用例B)验证程序的正确性C)发现程序中的错误D)诊断和改正程序中的错误参考答案:D【解析】程序调试的任务是诊断和改正程序中的错误,主要在开发阶段进行。程序调试活动由两部分组成,一是根据错误的迹象确定程序中错误的确切性质、原因和位置;二是对程序进行修改,排除这个错误。7、下列关于数据库设计的叙述中,正确的是    。A)在需求分析阶段建立数据字典B)在概念设计阶段建立数据字典【精品文档】 【精品文档】C)在逻辑设计阶段建立数据字典D)在物理设计阶段建立数据字典参考答案:A【解析】需求分析阶段常用的工具是数据流图和数据字典。故答案为A)。8、数据库系统的三级模式不包括    。A)概念模式B)内模式C)外模式D)数据模式参考答案:D【解析】数据库的三级模式包括概念模式、外模式和内模式。概念模式是数据库的中心与关键;内模式依赖于概念模式,独立于外模式和存储设备;外模式面向具体的应用,独立于内模式和存储设备;应用程序依赖于外模式,独立于概念模式和内模式。选项D)不是数据库的三级模式。9、有三个关系R,S和T如下:RABCa12b21c31SABCa12b21TABCc31则由关系R和S得到关系T的操作是    。A)自然连接B)差C)交D)并参考答案:B【解析】关系的基本运算有两种:一类是传统的集合运算,包括并、差和交等;另一类是专门的关系运算,包括选择、投影和连接。并:由属于进行运算的两个关系的全部元组组成的集合。【精品文档】 【精品文档】差:由属于前一个关系的元组但不属于后一个关系的元组组成的集合。交:由属于进行运算的两个关系所共有的元组组成的集合。题中R和S进行差运算可得到T,选项B)正确。10、下列选项中属于面向对象设计方法主要特征的是    。A)继承B)自顶向下C)模块化D)逐步求精参考答案:A【解析】面向对象设计方法的三个基本特性即封装、多态、继承。结构化程序设计方法的主要原则可以概括为自顶向下、逐步求精、模块化、限制使用goto语句。故答案为A)。11、以下叙述中错误的是________。A)C语言编写的函数源程序,其文件名后缀可以是.CB)C语言编写的函数都可以作为一个独立的源程序文件C)C语言编写的每个函数都可以进行独立的编译并执行D)一个C语言程序只能有一个主函数参考答案:C【解析】C语言编写的每个函数可以被独立编译,但是除主函数外不能独立执行。12、以下选项中关于程序模块化的叙述错误的是________。A)把程序分成若干相对独立的模块,可便于编码和调试B)把程序分成若干相对独立、功能单一的模块,可便于重复使用这些模块C)可采用自底向上、逐步细化的设计方法把若干独立模块组装成所要求的程序D)可采用自顶向下、逐步细化的设计方法把若干独立模块组装成所要求的程序【精品文档】 【精品文档】参考答案:C【解析】结构化程序设计的总体思想是采用模块化结构,自上而下,逐步求精。即首先把一个复杂的大问题分解为若干相对独立的小问题。如果小问题仍较复杂,则可以把这些小问题又继续分解成若干子问题,这样不断地分解,使得小问题或子问题简单到能够直接用程序的三种基本结构表达为止。然后,对应每一个小问题或子问题编写出一个功能上相对独立的程序块来,这种像积木一样的程序块被称为模块。每个模块各个击破,最后再统一组装,这样,对一个复杂问题的解决就变成了对若干个简单问题的求解。这就是自上而下,逐步求精的程序设计方法。13、以下选项中关于C语言常量的叙述错误的是    。A)所谓常量,是指在程序运行过程中,其值不能被改变的量B)常量分为整型常量、实型常量、字符常量和字符串常量C)常量可分为数值型常量和非数值型常量D)经常被使用的变量可以定义成常量参考答案:D【解析】常量是其值不可变化的量。常量分为数字常量和字符常量。在C语言中,常量多是通过符号常量来表示的。数字常量又包括整形常量和浮点型常量,浮点型常量又称实数。在程序中不希望被改变的变量才定义为常量,而不是经常使用的变量。14、若有定义语句:inta=10;doubleb=;,则表达式A+a+b值的类型是________。A)charB)intC)doubleD)float参考答案:C【精品文档】 【精品文档】【解析】本题考查数据类型的自动转换,C语言语法规定,当不同的变量相加时按最长的变量对齐,即转换优先级为:chark2)&&(k2=k2>k1)后,k1和k2的值分别为________。A)0和1B)0和20C)10和1D)10和20参考答案:B【解析】考查运算符的相关知识,逻辑与运算符的规则是如果第一个参数的值为0,那么就不会执行第二个参数的内容,在本题中,程序执行到第一个括号时,k1的值变为0,且括号内的值为0,所以不会执行第二个括号中的语句,即k2仍然保持原值,所以答案为0,20。18、有以下程序#include【精品文档】 【精品文档】main(){ inta=1,b=0;if(--a)b++;elseif(a==0) b+=2;elseb+=3;printf("%d ",b);}程序运行后的输出结果是________。A)0B)1C)2D)3参考答案:C【解析】本题考查运算符和选择语句,执行到if语句时,--a为0,所以不会执行后面的语句,但是会执行elseif后面的语句,所以执行后,b=2,选项C)正确。19、下列条件语句中,输出结果与其他语句不同的是________。A)if(a)printf("%d ",x);elseprintf("%d ",y);B)if(a==0)printf("%d ",y);elseprintf("%d ",x);C)if(a!=0)printf("%d ",x);elseprintf("%d ",y);D)if(a==0)printf("%d ",x);elseprintf("%d ",y);参考答案:D【解析】考查if语句中的判断,可以由A)、B)、C)三个选项看出,都是表示,只有当a不等于0时输出x,否则输出y,D)选项正好相反,所以选择D)。20、有以下程序#includemain(){ inta=7;while(a--);printf("%d ",a);}程序运行后的输出结果是________。A)-1B)0C)1D)7参考答案:A【解析】考查while循环,当a为0时,while(a--)下面的语句不会执行,但是会执行a--,所以最后a的结果为-1。【精品文档】 【精品文档】21、以下不能输出字符A的语句是(注:字符A的ASCII码值为65,字符a的ASCII码值为97)________。A)printf("%c ",'a'-32);B)printf("%d ",'A');C)printf("%c ",65);D)printf("%c ",'B'-1);参考答案:B【解析】A)、C)、D)三个选项的输出格式都是%c,只有B)的输出格式是%d,只会输出数字65,所以应选择B)。22、有以下程序(注:字符a的ASCII码值为97)#includemain(){ char*s={"abc"};do{printf("%d",*s%10);++s;}while(*s);}程序运行后的输出结果是________。A)abcB)789C)7890D)979899参考答案:B【解析】本题考查do…while循环语句以及字符串的相关知识,第一层循环*s为a,*s%10后的结果为7,同理依次输出8和9,所以结果为789,答案为B)。23、若有定义语句:doublea,*p=&a;以下叙述中错误的是________。A)定义语句中的*号是一个间址运算符B)定义语句中的*号只是一个说明符C)定义语句中的p只能存放double类型变量的地址D)定义语句中,*p=&a把变量a的地址作为初值赋给指针变量p参考答案:A【解析】本题中的*p=&a中,*不是间址运算符,只是一个指针说明符。间址运算符用于表示某变量是指针型数据,用于存放某个地址,例如int*p,k;p=&k;*p=2;这里的*就是间址运算符。【精品文档】 【精品文档】24、有以下程序#includedoublef(doublex);main(){ doublea=0;inti;for(i=0;i<30;i+=10)a+=f((double)i);printf("%5.0f ",a);}doublef(doublex){ returnx*x+1;}程序运行后的输出结果是________。A)503B)401C)500D)1404参考答案:A【解析】考查函数的基础知识,当i分别为0、10、20时a分别为1,102,503,所以结果为503,选项A)正确。25、若有定义语句:intyear=2009,*p=&year;,以下不能使变量year中的值增至2010的语句是________。A)*p+=1;B)(*p)++;C)++(*p);D)*p++;参考答案:D【解析】++的优先级比*的高,所以先运算p++,使得p指向了year变量的下一个存储单元中的内容,然后在取其中的值,得到的一个没有意义的数字,*p++自然就不对了。26、以下定义数组的语句中错误的是________A)intnum[]={1,2,3,4,5,6};B)intnum[][3]={{1,2},3,4,5,6};C)intnum[2][4]={{1,2},{3,4},{5,6}}:D)intnum[][4]={1,2,3,4,5,6};参考答案:C【解析】考查数组的定义,选项C)中定义的数组为两行四列的,但是初始化时是为三行两列的,所以初始化不正确。27、有以下程序#include【精品文档】 【精品文档】voidfun(int*p){ printf("%d ",p[5]);}main(){ inta[10]={1,2,3,4,5,6,7,8,9,10};fun(&a[3]);}程序运行后的输出结果是________。A)5B)6C)8D)9参考答案:D【解析】考查指针和函数的相关知识,a[3]指向的是数据值为4的地址,那么相当于是p指向数据值4的地址,那么p[5]指向就是数据值9的地址,所以输出9。28、有以下程序#include#define N  4voidfun(inta[][N],intb[]){ inti;for(i=0;i⋮main(){ doublea[15],k;k=fun(a);⋮}【精品文档】 【精品文档】则以下选项中错误的fun函数首部是________。A)doublefun(doublea[15])B)doublefun(double*a)C)doublefun(doublea[])D)doublefun(doublea)参考答案:D【解析】从主函数中调用fun函数的实参可以看出,形参应该是一个地址,不能省略前面的*号,D)选项的形参为一个double的值,所以不正确。32、有以下程序#include#includemain(){ chara[5][10]={"china","beijing","you","tiananmen","welcome"};int i,j; chart[10];for(i=0;i<4;i++) for(j=i+1;j<5;j++)  if(strcmp(a[i],a[j])>0)  {strcpy(t,a[i]); strcpy(a[i],a[j]);strcpy(a[j],t);}puts(a[3]);}程序运行后的输出结果是________。A)beijingB)chinaC)wclcomeD)tiananmen参考答案:C【解析】本题中程序的主要实现的功能是对这个字符数组,对其中的字符串按照首字母的从小到大排序,排完序后a[5][10]为{"beijing","china","tiananmen","welcome","you"},所以a[3]为welcome。33、有以下程序#includeintf(intm){ staticintn=0;n+=m;returnn;}main(){ intn=0;printf("%d,",f(++n));printf("%d ",f(n++));【精品文档】 【精品文档】}程序运行后的输出结果是________。A)1,2B)1,1C)2,3D)3,3参考答案:A【解析】static变量用于局部变量中有记忆功能和全局生存期。函数中的静态变量的特点是每次调用函数,静态变量的值是上次调用完该函数后的静态变量值,所以在此题中,第一调用函数,返回1,此时函数中的静态变量n的值为1,所以第二次调用函数时,返回值为2。34、有以下程序#includemain(){ charch[3][5]={"AAAA","BBB","CC");printf("%s ",ch[1]);}程序运行后的输出结果是________。A)AAAAB)CCC)BBBCCD)BBB参考答案:D【解析】输出字符串ch[1],即输出BBB。35、有以下程序#include#includevoidfun(char*w,intm){ chars,*p1,*p2;p1=w; p2=w+m-1;while(p1#includetypedefstruct{charname[9];charsex;intscore[2];}STU;STUf(STUa){ STUb={"Zhao",m,85,90);inti;,b.name);a.sex=;for(i=0;i<2;i++)a.score[i]=b.score[i];returna;}main(){ STUc={"Qian",f,95,92},d;d=f(c);printf("%s,%c,%d,%d,",,,d.score[0],d.score[1]);printf("%s,%c,%d,%d ",,,c.score[0],c.score[1]);}程序运行后的输出结果是________。A)Zhao,m,85,90,Qian,f,95,92B)Zhao,m,85,90,Zhao,m,85,90C)Qian,f,95,92,Qian,f,95,92D)Qian,f,95,92,Zhao,m,85,90参考答案:A【解析】本题考查的是结构体知识和函数调用的参数传递知识点。通过函数调用把主函数中c变量的所有数据传给了子函数中的形参a,在子函数中将b中的数据均复制到了a中,所以返回a的值给d,使得d的值为zhao,m,85,90。但是主函数中c变量的值没有任何变化,所以选择A)。37、有以下程序#includemain()【精品文档】 【精品文档】{ structnode{intn; structnodc*next;}*p;structnodex[3]={{2,x+1},{4,x+2},{6,NULL}};p=x;printf("%d,",p->n);printf("%d ",p->next->n);}程序运行后的输出结果是________。A)2,3B)2,4C)3,4D)4,6参考答案:B【解析】p指向a的第一个元素,所以p->n的值为2,p->next指向x+1,即指向a的第二个元素,所以p->next->n为4。38、有以下程序#includemain(){ inta=2,b;b=a<<2;printf("%d ",b);}程序运行后的输出结果是________。A)2B)4C)6D)8参考答案:D【解析】考查移位操作,b的值是由a左移两位,所以b的值为2×2×2=8。39、以下选项中叙述错误的是________。A)C程序函数中定义的赋有初值的静态变量,每调用一次函数,赋一次初值B)在C程序的同一函数中,各复合语句内可以定义变量,其作用域仅限本复合语句内C)C程序函数中定义的自动变量,系统不自动赋确定的初值D)C程序函数的形参不可以说明为static型变量参考答案:A【解析】C程序函数中定义的静态变量,每调用一次函数,不需要对静态变量赋初值,使用的值为上次调用完函数后的值。40、有以下程序【精品文档】 【精品文档】#includemain(){ FILE*fp;intk,n,i,a[6]={1,2,3,4,5,6};fp=fopen("d2.dat","w");for(i=0;i<6;i++)fprintf(fp,"%d ",a[i]);fclose(fp);fp=fopen("d2.dat","r");for(i=0;i<3;i++)fscanf(fp,"%d%d",&k,&n);fclose(fp);printf("%d,%d ",k,n);}程序运行后的输出结果是________。A)1,2B)3,4C)5,6D)123,456参考答案:C【解析】考查文件的相关操作,本题中,依次向文件中写入数字1、2、3、4、5、6,然后关闭后打开,每次读两个数出来,循环执行完后,k为5,n为6,所以结果为5,6。1、数据结构分为线性结构与非线性结构,带链的栈属于 【1】 。参考答案:线性结构【解析】数据结构分线性结构和非线性结构,其中线性表、栈、队列、串都是线性结构,线性结构的特点是(当数据元素非空时):存在唯一的"第一个"数据元素,存在唯一的"最后一个"数据元素,除第一个元素之外,集合中的每一个数据元素都只有一个直接前驱;除最后一个元素之外,集合中的每一个数据元素都只有一个后继。2、在长度为n的顺序存储的线性表中插入一个元素,最坏情况下需要移动表中 【2】 个元素。参考答案:n【解析】在长度为n的顺序存储的线性表中插入一个元素,最坏的情况即插入在第一个位置,线性表中所有元素均需要移动,因此需要移动n次。【精品文档】 【精品文档】3、常见的软件开发方法有结构化方法和面向对象方法。对某应用系统经过需求分析建立数据流图(DFD),则应采用 【3】 方法。参考答案:结构化【解析】数据流图是结构化方法的需求分析工具,是描述数据处理过程的工具,是逻辑模型的图形表示,它直接支持系统的功能建模。4、数据库系统的核心是 【4】 。参考答案:数据库管理系统【解析】数据库管理系统是为数据库建立、使用和维护而配置的软件系统,简称DBMS,是数据库系统的核心。5、在进行关系数据库的逻辑设计时,E-R图中的属性常被转换为关系中的属性,联系通常被转换为 【5】 。参考答案:关系【解析】将E-R图转换为关系模型实际上就是要将实体、实体属性和实体之间的联系转换为一组关系模式,E-R图中的属性将被转换为关系中的属性,联系即被转换为关系。6、若程序中已给整型变量a和b赋值10和20,请写出按以下格式输出a、b值的语句__【6】__。****a=10,b=20****参考答案:printf("****a=%d,b=%d****",a,b);【解析】本题考查的是printf函数的用法,prinrf函数实际上是将所有参数按字符输出。7、以下程序运行后的输出结果是__【7】__。#includemain(){ inta=37;a%=9;printf("%d ",a);【精品文档】 【精品文档】}参考答案:1【解析】本题考查的是取余运算。37%9商为4,余数为1,所以输出的值为1。8、以下程序运行后的输出结果是__【8】__。#includemain(){ inti,j;for(i=6;i>3;i--) j=i;printf("%d%d ",i,j);}参考答案:34【解析】该题中,只有执行完for循环后才输出数据,当for循环执行到最后一层时,即i=3时,停止循环,此时i为3,j为上此循环的值为4,所以最终输出结果为34。9、以下程序运行后的输出结果是__【9】__。#includemain(){ inti,n[]={0,0,0,0,0};for(i=1;i<=2;i++){ n[i]=n[i-1]*3+1;printf("%d",n[i]);}printf(" ");}参考答案:14【解析】考查for循环的基础知识,当i=1时,a[1]为1,输出为1,当i=2时,a[2]为1*3+1=4,所以输出为4,最终输出为14。10、以下程序运行后的输出结果是__【10】__。#includemain(){ chara;for(a=0;a<15;a+=5) {putchar(a+A);}【精品文档】 【精品文档】printf(" ");}参考答案:AFK【解析】本题是进行字符输出,第一次输出0+'A',即A;第二次输出5+'A',即F;第三次输出10+'A',即K,然后跳出循环。11、以下程序运行后的输出结果是__【11】__。#includevoidfun(intx){ if(x/5>0)fun(x/5);printf("%d",x);}main(){fun(11);printf(" ");}参考答案:211【解析】本题考查的是函数的嵌套。当执行fun(11)时,if的条件成立,所以转到执行fun(2),执行fun(2)时,if语句不成立,输出2,退出本层嵌套,继续执行fun(11)的下面语句,即输出11,最终输出211。12、有以下程序#includemain(){ intc[3]={0},k,i;while((k=getchar())!='n')c[k-'A']++;for(i=0;i<3;i++)printf("%d",c[i]);printf(" ");}若程序运行时从键盘输入ABCACC<回车>,则输出结果为__【12】__。参考答案:213【解析】当输入A时,a[0]++;当输入B时,a[1]++;当输入C时,a[2]++;直到遇到回车循环停止,题中共输入2个A,1个B,3个C,所以输出结果为213。13、以下程序运行后的输出结果是__【13】__。#includemain(){ intn[2],i,j;【精品文档】 【精品文档】for(i=0;i<2;i++)n[i]=0;for(i=0;i<2;i++) for(j=0;j<2;j++)n[j]=n[i]+1;printf("%d ",n[1]);}参考答案:3【解析】该题先是初始化数组n[2]中的元素全部赋值为0,然后执行两层for循环,当i=0,j=0,a[0]为1、a[1]为0,当j=1时,a[0]为1、a[1]为2;当i=1,j=0,a[0]为3、a[1]为2,当i=1,j=1时,a[0]为3、a[1]为3。14、以下程序调用fun函数把x中的值插入到a数组下标为k的数组元素中。主函数中,n存放a数组中数据的个数。请填空。#includevoidfun(ints[],int*n,intk,intx){ inti;for(i=*n-1;i>=k;i--)s[__【14】__]=s[i];s[k]=x;*n=*n+__【15】__;}main(){ inta[20]={1,2,3,4,5,6,7,8,9,10,11},i,x=0,k=6,n=11;fun(a,&n,k,x);for(i=0;i

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭