资源描述:
《国二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;i