国家二级(C语言)机试模拟试卷6(共384题)_第1页
国家二级(C语言)机试模拟试卷6(共384题)_第2页
国家二级(C语言)机试模拟试卷6(共384题)_第3页
国家二级(C语言)机试模拟试卷6(共384题)_第4页
国家二级(C语言)机试模拟试卷6(共384题)_第5页
已阅读5页,还剩114页未读 继续免费阅读

下载本文档

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

文档简介

国家二级(C语言)机试模拟试卷6(共9套)(共384题)国家二级(C语言)机试模拟试卷第1套一、选择题(本题共40题,每题1.0分,共40分。)1、下列叙述中正确的是A、一个算法的空间复杂度大,则其时间复杂度也必定大B、一个算法的空间复杂度大,则其时间复杂度必定小C、一个算法的时间复杂度大,则其空间复杂度必定小D、算法的时间复杂度与空间复杂度没有直接关系标准答案:D知识点解析:算法的空间复杂度是指算法在执行过程中所需要的内存空间,算法的时间复杂度,是指执行算法所需要的计算工作量,两者之间并没有直接关系,答案为D。2、下列叙述中正确的是A、循环队列中的元素个数随队头指针与队尾指针的变化而动态变化B、循环队列中的元素个数随队头指针的变化而动态变化C、循环队列中的元素个数随队尾指针的变化而动态变化D、以上说法都不对标准答案:A知识点解析:在循环队列中,用队尾指针rear指向队列中的队尾元素,用排头指针front指向排头元素的前一个位置。因此,从排头指针front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素均为队列中的元素。所以循环队列中的元素个数与队头指针和队尾指针的变化而变化,A正确。3、一棵二叉树中共有80个叶子结点与70个度为1的结点,则该二叉树中的总结点数为A、219B、229C、230D、231标准答案:B知识点解析:二叉树中,度为0的节点数等于度为2的节点数加1,即n2=n0-1,叶子节点即度为0,则n2=79,总结点数为n0+n1+n2=80+70+79=229,答案为B。4、对长度为10的线性表进行冒泡排序,最坏情况下需要比较的次数为A、9B、10C、45D、90标准答案:C知识点解析:冒泡法是在扫描过程中逐次比较相邻两个元素的大小,最坏的情况是每次比较都要将相邻的两个元素互换,需要互换的次数为9+8+7+6+5+4+3+2+1=45,选C。5、构成计算机软件的是A、源代码B、程序和数据C、程序和文档D、程序、数据及相关文档标准答案:D知识点解析:软件指的是计算机系统中与硬件相互依赖的另一部分,包括程序、数据和有关的文档,选D。6、软件生命周期可分为定义阶段、开发阶段和维护阶段,下面不属于开发阶段任务的是A、测试B、设计C、可行性研究D、实现标准答案:C知识点解析:开发阶段包括分析、设计和实施两类任务。其中分析、设计包括需求分析、总体设计和详细设计3个阶段,实施则包括编码和测试两个阶段,C不属于开发阶段。7、下面不能作为结构化方法软件需求分析工具的是A、系统结构图B、数据字典(DD)C、数据流程图(DFD图)D、判定表标准答案:A知识点解析:结构化方法软件需求分析工具主要有数据流图、数据字典、判定树和判定表。8、在关系模型中,每一个二维表称为一个A、关系B、属性C、元组D、主码(键)标准答案:A知识点解析:关系模型采用二维表来表示,即每个二维表称为一个关系。9、若实体A和B是一对多的联系,实体B和C是一对一的联系,则实体A和C的联系是A、一对一B、一对多C、多对一D、多对多标准答案:B知识点解析:A和B为一对多的联系,则对于A中的每一个实体,B中有多个实体与之联系,而B与C为一对一联系,则对于B中的每一个实体,C中之多有一个实体与之联系,则可推出对于A中的每一个实体,C中有多个实体与联系,所以为一对多联系。10、有三个关系R、S和T如下:则由关系R和S得到关系T的操作是A、选择B、投影C、交D、并标准答案:D知识点解析:关系T中的元素与关系R和关系S中不同元素的总和,因此为并操作。11、以下叙述中正确的是A、C语言程序所调用的函数必须放在main函数的前面B、C语言程序总是从最前面的函数开始执行C、C语言程序中main函数必须放在程序的开始位置D、C语言程序总是从main函数开始执行标准答案:D知识点解析:C语言所调用的函数可以放在调用它的函数前,也可以放在调用它的函数后,所以A错误,C语言程序总是从main函数开始执行,所以B错误,main函数的位置可以放在开始,也可以放在中间,也可以放在最后,所以C错误。12、C语言程序中,运算对象必须是整型数的运算符是A、&&B、/C、%D、*标准答案:C知识点解析:%取余运算是二目运算符,且要求运算对象必须为整数,所以选C。13、有以下程序#include<stdio.h>main(){intsum,pad,pAd;sum=pad=5;pAd=++sum,pAd++,++pad;printf("%d\n",pad);}程序的输出结果是A、5B、6C、7D、8标准答案:B知识点解析:C语言区分大小写,pad与pAd是两个不同的变量,首先将5赋值给两个变量,由于赋值运算符的优先级高于逗号运算符,所以计算pAd=++sum,此时pAd为6,sum也为6,然后计算pAd++,pAd的值变为7,++pad,pad的值变为6,所以选择B。14、有以下程序#include<stdio.h>main(){inta=3;a+=a-=a*a;printf("%d\n",a);}程序的输出结果是A、0B、9C、3D、-12标准答案:D知识点解析:首先计算a*a结果为9,执行a=a-9,a的值为-6,然后执行a+=a,即a=a+a=-6+(-6),所以值为-12。15、sizeof(double)是A、一个整型表达式B、一个双精度型表达式C、一个不合法的表达式D、一种函数调用标准答案:A知识点解析:sizeof是C语言中的一个操作符(operator),不是函数调用,简单的说其作用就是返回一个对象或者类型所占的内存字节数,所以选择A。16、有以下程序#include<stdio.h>main(){inta=2,c=5;printf("a=%%d,b=%%d\n",a,c);}程序的输出结果是A、a=2,b=5B、a=%2,b=%5C、a=%d,b=%dD、a=%%d,b=%%d标准答案:C知识点解析:C语言中用"%%"打印输出字符"%",所以%%d,输出为%d两个普通字符,而不是格式控制符"%d"的含义,所以打印结果为C。17、若有定义语句:chara=’\82’;则变量aA、说明不合法B、包含1个字符C、包含2个字符D、包含3个字符标准答案:A知识点解析:定义语句:chara=’\82’;反斜杠’\’后面跟三位八进制数据表示一个ASCII码,八进制没有数字8,因此A选项正确。18、有以下程序#include<stdio.h>main(){charc1=’A’,c2=’Y’;printf("%d,%d\n",c1,c2);}程序的输出结果是A、输出格式不合法,输出出错信息B、65,89C、65,90D、A,Y标准答案:B知识点解析:本题重点考察字符变量的相关知识。分别给字符型变量a和b分别赋值为’A’和’Y’,即A和Y的ASSCII码,因此输出结果为65,89,因此B选项正确。19、若变量已正确定义for(x=0,y=0;(y!=99&&x<4);x++)则以上for循环A、执行3次B、执行4次C、执行无限次D、执行次数不定标准答案:B知识点解析:本题重点考察for语句的循环次数,for(x=0,y=0;(y!=99&&x<4);x++),y!=99&&x<4即循环条件当y不等于99以及x<4时,执行循环语句,当有一个条件不成立时,均结束循环,因此循环4次,B选项正确。20、对于while(!E)s;,若要执行循环体s,则E的取值应为:A、E等于1B、E不等于0C、E不等于1D、E等于0标准答案:D知识点解析:while语句的一般形式为:while(表达式)语句;其中表达式是循环条件,语句为循环体。while语句的语义是:计算表达式的值,当值为真(非0)时,执行循环体语句。该题中如要执行语句s,则!E应为真,因此E应等于0,D选项正确。21、有以下程序#include<stdio.h>main(){intx;for(x=3;x<6;x++)printf((x%2):("*%d"):("#%d"),x);printf("\n");}程序的输出结果是A、*3#4*5B、#3*4#5C、*3*4#5D、*3#4#5标准答案:A知识点解析:条件运算符组成条件表达式的一般形式为:表达式1:表达式2:表达式3。其求值规则为:如果表达式1的值为真,则以表达式2的值作为条件表达式的值,否则以表达式2的值作为整个条件表达式的值。本题中语句printf((x%2):("*%d"):("#%d"),x);含义为变量x对2求余,如果结果为真,则按照"*%d"格式输出,否则按照#%d输出。因此A选项正确。22、有以下程序#include<stdio.h>main(){inta,b;for(a=1,b=1;a<=100;a++){if(b>=20)break;if(b%3==1){b=b+3;continue;}b=b-5;}printf("%d\n",a);}程序的输出结果是A、10B、9C、8D、7标准答案:C知识点解析:首先注意for循环的控制条件当b>=20或者a>100则跳出for循环也即b<20且a<=100时执行for循环;第一次进入循环a=1,b=1均满足循环条件,但b%3==1条件满足,故执行b=b+3,得到b=4,注意有continue,所以后面语句不执行,直接跳转到a++这个语句,所以第一次循环完之后a=2,b=4;进入第二轮循环,b%3==1也是满足的,故再次b=b+3,此轮循环执行之后a=3,b=7,进入下一轮。此后和前面循环同理,都是b%3==1满足,因为每次都是加3,而之后又去模3,且都跳过for后面语句直接执行a++,所以,一直循环到b=22跳出for循环。此时a为8.综合起来就是,每次循环b增加3,a增加1,且当b>22时跳出循环,结束程序。所以b从1增加到22,有(22-1)/3=7,所以a=1+7=8.因此C选项正确。23、有以下程序#include<stdio.h>voidfun(intx,inty,int*c,int*d){*c=x+y;*d=x-y;}main(){inta=4,b=3,c=0,d=0;fun(a,b,&c,&d);printf("%d%d\n",c,d);}程序的输出结果是A、00B、43C、34D、71标准答案:D知识点解析:主函数中首先初始化整型变量a、b、c、d分别为4、3、0、0。调用函数fun,将实参传递给形参。在fun函数内,*c=7、*d=1。返回主函数,最后输出7和1。因此D选项正确。24、有以下程序#include<stdio.h>voidfun(int*p,int*q){intt;t=*p;*p=*q;*q=t;*q=*p;}main(){inta=0,b=9;fun(&a,&b);printf("%d%d\n",a,b);}程序的输出结果是A、90B、00C、99D、09标准答案:C知识点解析:主函数中定义整型变量a、b,分别赋值0和9。将a和b的地址传递给指针变量p和q,函数fun中将a和b的值互换后,又将a的值赋给b。返回主函数,最后输出9和9。因此C选项正确。25、有以下程序#include<stdio.h>main(){inta[]={2,4,6,8,10},x,*p,y=1;p=&a[1];for(x=0;x<3;x++)y+=*(p+x);printf("%d\n",y);}程序的输出结果是A、13B、19C、11D、15标准答案:B知识点解析:本题通过语句"p=&a[1]"将指针变量p指向了存储单元a[1],即使得p[0]的值为4,y的初始值为1,然后通过3次for循环,使得y的值分别加上p[0]、p[1]和p[2],那么y=1+4+6+8,所以输出的y的值为19。26、有以下程序#include<stdio.h>main(){inti,x[3][3]={1,2,3,4,5,6,7,8,9};for(i=0;i<3;i++)printf("%d",x[i][2-i]);printf("\n");}程序的输出结果是A、150B、357C、147D、369标准答案:B知识点解析:程序首先初始化二维数组x[3][3],然后通过3次for循环,输出x[0][2]、x[1][1]和x[2][0]的值,即3、5、7。因此B选项正确。27、设有某函数的说明为int*func(inta[10],intn);则下列叙述中,正确的是A、形参a对应的实参只能是数组名B、说明中的a[10]写成a[]或*a效果完全一样C、func的函数体中不能对a进行移动指针(如a++)的操作D、只有指向10个整数内存单元的指针,才能作为实参传给a标准答案:B知识点解析:本题重点考察返回指针值的函数相关知识,返回指针值的函数,一般定义形式为:类型名*函数名(参数列表)。func函数被定义为指针型函数,它的形参inta[10]和intn,分别指一维数组a[0]和整型变量n。28、有以下程序#include<stdio.h>charfun(char*c){if(*c<=’Z’&&*c>=’A’)*c-=’A’-’a’;return*c;}main(){chars[81],*p=s;gets(s);while(*p){*p=fun(p);putchar(*p);p++;}printf("\n");}若运行时从键盘上输入OPENTHEDOOR<回车>,程序的输出结果是A、OPENTHEDOORB、oPENtHEdOORC、openthedoorD、OpenTheDoor标准答案:C知识点解析:字符串输入函数gets的功能是从标准输入设备键盘上输入一个字符串。首先使指针变量p指向字符串的首字母,while循环语句中对字符串的每个字符进行fun函数操作。fun函数的功能是,将字符串中的大写字母变小写字母。将处理结果返回主函数,主函数通过putchar()字符输出函数进行输出。因此C选项正确。29、设有定义语句:char*aa[2]={"abcd","ABCD"};则以下叙述正确的是A、aa[0]存放了字符串"abcd"的首地址B、aa数组的两个元素只能存放含有4个字符的一维数组的首地址C、aa数组的值分别是字符串"abcd"和"ABCD"D、aa是指针变量,它指向含有两个元素的字符型数组标准答案:A知识点解析:本题中定义了一个指针数组,数组中存放的是字符指针,aa数组的两个元素分别包含了5个字符,所以可以存放5个字符的一维数组的首地址,所以B选项错误。aa数组的值是指向那两个字符串的字符指针,而不是那两个字符串,所以C选项错误。aa本身是一个指向两个字符指针的指针,所以D选项错误。30、有以下程序#include<stdio.h>intfun(char*s){char*p=s;while(*p!=0)p++;return(p-s);}main(){printf("%d\n",fun("goodbey!"));}程序的输出结果是A、0B、6C、7D、8标准答案:D知识点解析:本题主要考查了函数定义及调用,以及while循环语句,执行fun函数后,首先是找到最后一个字符的地址,然后减去第一个地址得到的就是这个字符串的长度,所以本题答案为8。答案为D选项。31、有以下程序#include<stdio.h>intfun(intn){inta;if(n==1)return1;a=n+fun(n-1);return(a);}main(){printf("%d\n",fun(5));}程序的输出结果是A、9B、14C、10D、15标准答案:D知识点解析:考查函数的递归调用,只需要一步一步递归调用fun函数即可,执行fun(5)=5+(4+(3+(2+fun(1))))=15,所以答案为D选项。32、有以下程序#include<stdio.h>intd=1;voidfun(intp){intd=5;d+=p++;printf("%d",d);}main(){inta=3;fun(a);d+=a++;printf("%d\n",d);}程序的输出结果是A、84B、96C、94D、85标准答案:A知识点解析:本题主要考查局部变量和全局变量的区别,题目中函数之外定义的d为全局变量,函数fun内定义的d为局部变量,所以执行fun函数后,打印出8,执行完d+=a++;后d变为4,所以答案为A。33、有以下程序#include<stdio.h>intfun(intA){intb=0;staticintc=3;a=(c++,b++);return(a);}main(){inta=2,i,k;for(i=0;i<2;i++)k=fun(a++);printf("%d\n",k);}程序的输出结果是A、4B、0C、1D、2标准答案:B知识点解析:题目中fun函数被执行了两次,两次执行后,都是返回了函数内部的b值,所以答案为0,即B选项正确。34、有以下程序#include<stdio.h>main(){charc[2][5]={"6934","8254"},*p[2];inti,j,s=0;for(i=0;i<2;i++)p[i]=c[i];for(i=0;i<2;i++)for(j=0;p[i][j]>0&&p[i][j]<=’9’;j+=2)s=10*s+p[i][j]-’0’;printf("%d\n",s);}程序的输出结果是A、693825B、69825C、63825D、6385标准答案:D知识点解析:本题的意图在于将c中两个字符串的偶数位置的数字组成一个新数,找到的四个数字分别为6、3、8、5,组成的数为6385,所以答案为D选项。35、有以下程序#include<stdio.h>#defineSQR(X)X*Xmain(){inta=10,k=2,m=1;a/=SQR(k+m)/SQR(k+m);printf("%d\n",a);}程序的输出结果是A、0B、1C、9D、10标准答案:B知识点解析:本题考查宏定义,宏定义只是做个简单的替换,执行SQR(k+m)/SQR(k+m)=k+m*k+m/k+m*k+m=15/2,a/=SQR(k+m)/SQR(k+m)的结果为1,选项B正确。36、有以下程序#include<stdio.h>main(){charx=2,y=2,z;z=(y<<1)&(x>>1);printf("%d\n",z);}程序的输出结果是A、1B、0C、4D、8标准答案:B知识点解析:本题考查位运算<<、&。y<<1为4,x>>1为1,二者与一下为0,所以B选项正确。37、有以下程序#include<stdio.h>structS{inta;intb;};main(){structSa,*p=&a;a.a=99;printf("%d\n",__________);}程序要求输出结构体中成员a的数据,以下不能填入横线处的内容是A、a.aB、*p.aC、p->aD、(*p).a标准答案:B知识点解析:本题考查结构体变量的引用,题目中要求输出结构体中成员a的数据,p为指针,*p为结构体变量,那么*p.a可以表示为结构体中成员a的数据。38、有以下程序#include<stdio.h>#include<stdlib.h>voidfun(double*p1,double*p2,double*s){s=(double*)calloc(1,sizeof(double));*s=*p1+*(p2+1);}main(){doublea[2]={1.1,2.2},b[2]={10.0,20.0},*s=a;fun(a,b,s);printf("%5.2f\n",*s);}程序的输出结果是A、21.10B、11.1C、12.1D、1.1标准答案:D知识点解析:本题考查把数组名作为函数参数,执行fun函数后,s的值并没有发生变化,仍然是指向a,所以输出结果为1.10,选项D正确。39、若已建立以下链表结构,指针p、s分别指向如图所示结点则不能将s所指结点插入到链表末尾的语句组是A、p=p->next;s->next=p;p->next=s;B、s->next=’\0’;p=p->next;p->next=s;C、p=p->next;s->next=p->next;p->next=s;D、p=(*p).next;(*s).next=(*p).next;(*p).next=s;标准答案:A知识点解析:本题考查向链表中插入节点,A选项语句错误,不能够实现在链表末尾插入。40、若fp已定义为指向某文件的指针,且没有读到该文件的末尾,则C语言函数feof(fp)的函数返回值是A、EOFB、非0C、-1D、0标准答案:D知识点解析:本题考查文件的定位,feof函数的用法是从输入流读取数据,如果到达文件末尾(遇文件结束符),eof函数值为非零值,否则为0,所以选项D正确。二、程序填空题(本题共1题,每题1.0分,共1分。)41、给定程序中,函数fun的功能是:将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数atoi和atof将字符申转换成相应的整数、浮点数,然后将其显示在屏幕上。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#inClucle<stdio.h>#include<stdlib.h>voidfun(char*s,inta,doublef){/**********found***********/【1】fp;charstr[100],str1[100],str2[100];inta1;doublef1;fp=fopen(“filel.txt”,“W”);fprintf(fp,“%S%d%f\n”,S,a,f);/**********found***********/【2】;fp=fopen(“filel.txt”,“r”);/**********found***********/fscanf(【3】,“%s%s%S”,str,str1,Str2),fclose(fp);a1=atoi(str1),f1=atof(str2),printf(“\nTheresult:\n\n%S%d%f\n”,str,a1,f1);}main(){chara[10]=“Hello!”;intb=12345;cloublec=98.76;fun(a,b,c);}标准答案:(1)FILE*(2)fclose(fp)(3)fp知识点解析:填空1:从使用fp=fopen(“filel.txt”,“w”)可知fp应该是文件类型指针,因此本空应该填写FILE*。填空2:当对fp作打开操作的时候,并进行不同的操作前,应该对其关闭,因为在第一次打开时是对fp进行写操作,而在第二次打开后进行的是读操作,因此应该先对fp进行关闭,本空填fclose(fp)。填空3:fscanf()是把文本文件输出,因此本空只能填写fp。三、程序修改题(本题共1题,每题1.0分,共1分。)42、下列给定程序中函数fun的功能是:删除s所指字符中所有的小写字母c。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>voidfun(char*s){inti,j,for(i=j=0;S[i]!=‘\0’;i++)if(S[i]!=’c’)/**********found***********/S[j]=S[i];/**********found***********/s[i]=‘\0’;}voidmain(){chars[80];printf(“\nEnterastring:”);gets(s);printf(“Theoriginalstring:”),puts(s);fun(s);printf(“Thestringafterdeleted:”);puts(S),printf(“\n\n”),}标准答案:(1)s[j++]=s[i];或{s[j]=s[i];j++;}(2)s[j]=‘\0’;知识点解析:由循环条件if(s[i]!=‘c’)可知,如果字符串中的字符不是‘c’,则将保留该宁符到s[j]位置,然后下标j进行加1操作。循环结束后要在新串的结尾加上‘\0’。四、程序设计题(本题共1题,每题1.0分,共1分。)43、编写函数fun,其功能是:实现B=A+A’,即将矩阵A加上A的转置,存放在矩阵B中。计算结果在mmn函数中输出。例如,输入下面的矩阵:123456789其转置矩阵为:147258369程序输出:261061014101418注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>#include<COnio.h>#include<stdlib.h>voidfun(inta[3][3],intb[3][3]){}voidmain(){inta[3][3]=f{1,2,3},{4,5,6},{7,8,9}},t[3][3];inti,j;system(“CLS”),fun(a,t);for(i=0;i<3;i++){for(j=0,j<3;j++)printf(“%7d”,t[i][j]);printf(“\n”),}}标准答案:voidfun(inta[3][3],intb[3][3]){inti,j;for(i=0,i<3;i++)for(j=0,j<3;j++)b[i][j]=a[i][j]+a[j][i];/*把矩阵a加上a的持置,存放在矩阵b中*/}知识点解析:行列数相等的二维数组的转置就是行列互换,即转置后的第i行第j列正好对应原矩阵的第j行第i列。本题使用双层循环实现矩阵的转置,并将计算结果存入矩阵b中,外层循环控制矩阵的行下标,内层循环控制矩阵的列下标。国家二级(C语言)机试模拟试卷第2套一、选择题(本题共40题,每题1.0分,共40分。)1、下列关于栈叙述正确的是()。A、栈顶元素最先能被删除B、栈顶元素最后才能被删除C、栈底元素永远不能被删除D、栈底元素最先被删除标准答案:A知识点解析:栈是先进后出的数据结构,所以栈顶元素最后入栈却最先被删除。栈底元素最先人栈却最后被删除。所以选择A。2、下列叙述中正确的是()。A、在栈中,栈中元素随栈底指针与栈顶指针的变化而动态变化B、在栈中,栈顶指针不变,栈中元素随栈底指针的变化而动态变化C、在栈中,栈底指针不变,栈中元素随栈顶指针的变化而动态变化D、以上说法都不正确标准答案:C知识点解析:栈是先进后出的数据结构,在整个过程中,栈底指针不变,入栈与出栈操作均由栈顶指针的变化来操作,所以选择C3、某二叉树共有7个结点,其中叶子结点只有1个,则该二叉树的深度为(假设根结点在第1层)()。A、3B、4C、6D、7标准答案:D知识点解析:根据二叉树的基本性质3:在任意一棵二义树中,多为0的叶子结点总比度为2的结点多一个,所以本题中度为2的结点为1-1=0个,所以可以知道本题目中的二义树的每一个结点都有一个分支,所以共7个结点共7层,即度为7。4、软件按功能可以分为应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的是()。A、学生成绩管理系统B、C语言编译程序C、UNIX操作系统D、数据库管理系统标准答案:A知识点解析:软件按功能町以分为:应用软件、系统软件、支撑软件。操作系统、编译程序、汇编程序、网络软件、数据库管理系统部属于系统软件。所以B、C、D都是系统软件,只有A是应用软件。5、结构化程序所要求的基本结构不包括()。A、顺序结构B、GOTO跳转C、选择(分支)结构D、重复(循环)结构标准答案:B知识点解析:1966年Boehm和Jacopini证明了程序设计语言仅仅使用顺序、选择和重复三种基本控制结构就足以表达出各种其他形式结构的程序设计方法。6、下面描述中错误的是()。A、系统总体结构图支持软件系统的详细设计B、软件设计是将软件需求转换为软件表示的过程C、数据结构与数据库设计是软件设计的任务之一D、PAD图是软件详细设计的表示工具标准答案:A知识点解析:详细设计的任务是为软件结构图中而非总体结构图中的每一个模块确定实现算法和局部数据结构,刚某种选定的表达工具表示算法和数据结构的细节,所以A错误。7、负责数据库中查询操作的数据库语言是()。A、数据定义语言B、数据管理语言C、数据操纵语言D、数据控制语言标准答案:C知识点解析:数据定义语言:负责数据的模式定义与数据的物理存取构建;数据操纵语言:负责数据的操纵,包括查询及增、删、改等操作;数据控制语言:负责数据完整性、安全性的定义与检查以及并发控制、故障恢复等功能。8、一个教师可讲授多门课程,一门课程可由多个教师讲授。则实体教师和课程间的联系是()。A、1:1联系B、1:m联系C、m:1联系D、m:n联系标准答案:D知识点解析:因为一个教师可讲授多门课程,而一门课程又能由多个老师讲授所以他们之间是多对多的关系,可以表爪为m:n。9、有三个关系R、S和T如下:则由关系R和S得到关系T的操作是()。A、自然连接B、并C、交D、差标准答案:D知识点解析:关系T中的元组是关系R中有而关系S中没有的元组的集合,即从关系R中除去与关系S中相同元组后得到的关系T。所以做的是差运算。10、定义无符号整数类为UInt,下面可以作为类UInt实例化值的是()。A、-369B、369C、0.369D、整数集合{1,2,3,4,5}标准答案:B知识点解析:只有B选项369可以用无符号整数来表示和存储。A选项-369有负号,选项C0.369是小数都不能用无符号整数类存储。选项D是一个整数集合得用数组来存储。11、以下叙述中错误的是()。A、C程序在运行过程中所有计算都以二进制方式进行B、C程序在运行过程中所有计算都以十进制方式进行C、所有C程序都需要编译链接无误后才能运行D、C程序中字符变量存放的是字符的ASCII码值标准答案:B知识点解析:C程序在运行过程中的所有计算都以二进制方式进行,所以B选项错误12、以下关于C语言的叙述中正确的是()。A、C语言的数值常量中夹带空格不影响常量值的正确表示B、C语言中的变量可以在使用之前的任何位置进行定义C、在C语言算术表达式的书写中,运算符两侧的运算数类型必须一致D、C语言中的注释不可以夹在变量名或关键字的中间标准答案:D知识点解析:C语言的数值常量中不能夹带空格,所以A错误。C语言中的变量都必须先定义再使川,对变量的定义通常放在甬数体内的前部,但也可以放往函数外部或复合语句的开头,不能随便放置,所以B错误.在Ci语言中运算符两侧的运算数据类型可以不一致,且结果与精度较高的保持一致,所以C错误。13、以下不合法的字符常量是()。A、’\\’B、’\"’C、’\018’D、’\xcc’标准答案:C知识点解析:转义字符中,八进制的表示形式为\ddd,但是八进制中不能包含数字8,所以C选项不合法。14、以下选项中正确的定义语句是()。A、double,a,b;B、doublea=b=7;C、doublea;b;D、doublea=7,b=7;标准答案:D知识点解析:A选项中变量类型符double后面不能有逗号。B选项中变量b不能先使用再定义,应该写成选项D中的格式。C选项中变量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)=3是错误的。16、若有定义:inta,b;通过语句:scanf("%d;%d",&a,&b);能把整数3赋给变量a,5赋给变量b的输入数据是()。A、35B、3,5C、3;5D、35标准答案:C知识点解析:输入数据的格式必须与scanf()的格式控制串完全匹配,所以输入时必须在3和5之间输入“;”。17、已知大写字母A的ASCII码值是65,小写字母a的ASCII码值是97。以下不能将变量c中的大写字母转换为对应小写字母的语句是()。A、c=(’A’+c)%26-’a’B、c=c+32C、c=c-’A’+’a’D、c=(c-’A’)%26+’a’标准答案:A知识点解析:根据题意可知,小写字母比与之对应的大写字母的ASCII码大32。A选项中字符A加上c表示的大写字符再对字母个数26取余,本身这个表达式没有任何含义,所以选择A选项。18、在以下给出的表达式中,与while(E)中的(E)不等价的表达式是()。A、(E>0||E<0)B、(E==0)C、(!E==0)D、(E!=0)标准答案:B知识点解析:while语句中条件表达式E的值不为0即为真,认为满足条件,所以与B选项中表达式的含义正好相反,选择B选项。19、以下程序段中,与语句:k=a>b?(b>c?1:0):0;功能相同的是()。A、if((a>h)||(b>c))k=1;elsek=0;B、if((a>b)&&(b>c))k=1;else!k=0;C、if(a<=b)k=0;elseif(b<=c)k=1;D、if(a>h)k=1;elseif(h>c)k=1;elsek=0;标准答案:B知识点解析:条件表达式的含义是,如果表达式1成立,结果为表达式2的值,如果不成立为表达式3的值。所以题干中k的值这样取值:如果a>b且b>c,k值结果为1,如果a>b,且b<c则值为0。如果a<b,k值为0。也就是只要a>b与b>c中只要有一个条件不成立,k的值就为0,所以选择B选项。20、有以下程序:#include<stdio.h>main(){inta=1,}1=2;for(;a<8;a++){b+=a;a+=2;}printf("%d,%d\n",a,b);}程序运行后的输出结果是()。A、9,18B、8,11C、7,11D、10.14标准答案:D知识点解析:第一次循环a的值为1,满足条件,执行b+=a,与a+=2,则b的值变为3,a的值变为3。执行a++,a的值为4,满足条件进入第二次循环,执行完循环体后b的值为7,a的值为6。执行a++,a的值为7,满足条件进入第三次循环,执行完循环体后b的值为14,a的值为9。执行a++,a的值变为10,不满足条件,循环结束。所以选择D选项。21、有以下程序:#include<stdio.h>main(){inti,j,m=55;for(i=1;i<=3;i++)for(j=3;j<=i;j++)m=m%j;printf("%d\n",m);}程序运行后的输出结果是()。A、0B、1C、2D、3标准答案:B知识点解析:第一次执行外循环i的值为1,满足条件,判断第一次内循环,j的值为3,不满足条件,跳出内循环。第二次执行外循环i的值为2,同理也不满足内循环条件,跳出内循环。第三次执行外循环i的值为3,此时进入内循环判断条件时,条件成立,执行m=m%j,m的值为1,跳出内循环,跳出外循环打印m的值。22、有以下程序:#inelude<stdio.h>main(){intx=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知识点解析:coutinue的作用是跳出循环体中剩余的语句而进行下一次循环。第一次循环x的值为8,循环体中if条件成直,打印x的值8后将x减1,再执行continue语句,跳出本次循环。第二次判断循环条件时,x的值变为6,不满足循环体内if条件,执行打印--x的操作,即打印5后跳出循环。第三次判断循环条件时x的值为4,满足循环体中if条件,执行打印x--的操作,即打印4,后将x值减一,执行continue语句,跳出本次循环。第四次判断循环条件时x的为2,满足循环体中if条件,打印x--,即打印2后将x减一,执行continue语句,跳出本次循环。在进行for条件表达式中第三个表达式x--的操作后x的值为0,不满足条件结束循环。所以打印结果为8,5,4,2,。23、以下叙述中错误的是()。A、C程序必须由一个或一个以上的函数组成B、函数调用可以作为一个独立的语句存在C、若函数有返回值,必须通过return语句返回D、函数形参的值也可以传回给对应的实参标准答案:D知识点解析:形参是函数定义时由川户定义的形式上的变量,实参是函数调用时,主调函数为被调函数提供的原始数据。在C语言中,实参向形参传送数据的方式是“值传递”。因此D选项正确。24、有以下程序:#include<stdio.h>main(){inta=1,b=3,c=5;int*p1=&a,*p2=&b,*p=&c;*p=*p1*(*p2);printf("%d\n",c);}程序执行后的输出结果是()。A、1B、2C、3D、4标准答案:C知识点解析:该程序中int*p1=&a,*p2=&h,*p=&c;指定义三个指针变量,并赋值,即使p1指向a;p2指向b;p指向c。*p=*p1*(*p2);该条语句是给p所指的存储单元c赋值,就是p1所指的存储单元的值,即a的值,与p2所指的存储单元b的值相乘,也就是c=a*b,等价于c=1*3=3;因此C选项正确。25、有以下程序:#include<stdio.h>voidf(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、2,3B、1,3C、1,4D、1,2标准答案:B知识点解析:在f(int*p,int*q)函数中,执行p=p+1是将p所对应的地址加1,而*q=*q+1是将q所指向的n的地址所对应的值加1,所以m的得知所对应的值没有变,而n的值则为3了。因此B选项正确。26、若有定义语句:inta[2][3],*p[3];则以下语句中正确的是()。A、p=a;B、p[0]=a;C、p[0]=&[1][2];D、p[1]=&a;标准答案:C知识点解析:A选项错误,因为p是指向一个指针数组,作为数组名,不能指向别的地方。B选项错误,因为p[0]是一个int指针,也就是int*;而a是一个指向指针的指针int**。选项正确,因为p[0]是一个int*,a[1][2]是int,&a[1][2]是int*,类型吻合。D选项错误,因为a作为数组名,不能取地址。即使能取,p[1]是int*,&a是int=***,类型不对。因此C选项正确。27、以下程序中函数f的功能是:当flag为1时,进行由小到大排序;当flag为0时,进行由大到小排序。#include<stdio.h>voidf(intb[],intn,intflag){inti,j,t;for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)if(flag?b[i]>b[j]:b[i]<b[j]){t=b[i];b[i]=b[j];b[j]=t;}}main(){inta[10]={5,4,3,2,1,6,7,8,9,10},i;f(&a[2],5,0);f(a,5,1);for(i=0;i<10;i++)printf("%d,",a[i]);}程序运行后的输出结果是()。A、1,2,3,4,5,6,7,8,9,10,B、3,4,5,6,7,2,1,8,9,10,C、5,4,3,2,1,6,7,8,9,10,D、10,9,8,7,6,5,4,3,2,1,标准答案:B知识点解析:本题重点考察函数的参数传递,函数的参数传递分为传值和传地址两种情况。本题就是结合数组考查参数传递的情形。函数f完成的功能是对数据进行排序,语句f(&a[2],5,0)的作用是对从a[2]开始的5个元素进行从大到小排序。注意:这里传递的是地址&a[2],所以排序操作可看作是直接对数组a操作,执行后的结果为5,4,7,6,3,2,1,8,9,10。语句f(a,5,1)对数组a的前5个元素从小到大排序,排序后数组为:3,4,5,6,7,2,1,8,9,10。因此B选项正确。28、有以下程序:#include<stdio.h>main(){ints[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("\n");}程序运行后的输出结果是()。A、2344B、4332C、1234D、1123标准答案:B知识点解析:在for(i=0;i<12;i++)c[s[i]]++中,数组元素s[i]的值作为数组c的下标,当退出循环时,数组c的4个元素的值分别为4、3、3、2。因此B选项正确。29、以下能正确定义字符串的语句是()。A、charstr:"\x43";B、charstr[]="\0";C、charstr=’’;D、charstr[]={’\064’};标准答案:B知识点解析:C语言中,字符串是用一对双引号括起来的字符序列,并用字符型数组来存放,故C选项和D选项不属于字符串,A选项定义的是一个字符变量str,却用来存放字符串,显然也不正确,冈此B选项正确。30、以下关于字符串的叙述中正确的是()。A、空串比空格打头的字符串小B、两个字符串中的字符个数相同时才能进行字符串大小的比较C、可以用关系运算符对字符串的大小进行比较D、C语言中有字符串类型的常量和变量标准答案:A知识点解析:字符串比较大小是以第1个不相同字符的大小为标准的,跟长度没有关系,B选项不正确;字符串比较大小除了使用库函数strcmp()以外,就只能靠自己写代码来实现了,而不能通过关系运算符来比较大小。因为字符串在表达式中相当于constchar*,即常字符指针,代表的是字符串的首地址,关系运算符会将两个字符串的首地址值比较大小,这是毫无意义的。C选项不正确。C语言中只有字符串常量而没有字符串变量,D选项描述不正确;空串的长度为0,而以空格打头的字符串的长度至少为1,因此A选项是正确的。31、有以下程序:#include<stdio。h>voidfun(ehar*a,char*b){while(*a==’*’)a++;while(*b=*a){b++;a++;}}main(){char*s="*****a*b****",t[80];fun(s,t);puts(t);}}程序运行后的输出结果是()。A、abB、a*bC、*****a*bD、a*b****标准答案:D知识点解析:在函数fun(char*a,char*b)中,while(*a==’*’)a++的功能是:如果*a的内容为‘*’则a指针向后移动,卣到遇到非’*’字符为止,退出循环进入下一个whik循环,在while(*b=*a){b++;a++;}中,把字符数组a中的字符逐个赋给字符数组b。所以在主函数中,执行fun(s,t)语句后,字符数组t中的内容为“a*b****”。因此D选项正确。32、下列函数的功能是()。voidfun(char*a,char*b){while((*b=*a)!=’\0’){a++;b++;}}A、将a所指字符串赋给b所指空间B、使指针b指向a所指字符串C、将a所指字符串和b所指字符串进行比较D、检查a和b所指字符串中是否有’\0’标准答案:A知识点解析:While循环条件为:(*b=*a)!=’\0’,执行时先把指针a所指向的字符赋给指针h所在内存单元,如果该字符不是结束标识‘\0’,执行循环体a++;h++;,指针a、b分别指向下一个字符单元。再判断循环条件,如果成立,继续把指针a所指向的字符赋给指针b所在内存单元,直到遇到结束标识为止。因此A选项正确。33、有以下程序:#include<stdio.h>intfun(intx)intp;if(x==0||x==1)return(3):p=x-fun(x-2);returnp;}main()}printf("%d\n",fun(7));干旱序执行后的输出结果是()。A、2B、3C、7D、0标准答案:A知识点解析:因为fun(intx)是一个递归函数,所以主函数中fun(7)经过3次递归调用,其过程可以描述为“fun(7)=7-fun(5)=7-(5-fun(3))=7-(5-(3-fun(1)))=7-(5-(3-3))=7-5=2”,所以最后输出结果为2。因此A选项正确。34、有以下程序:#include<stdio.h>intfun(){staticintx=1;x*=2;returnx;main(){inti,s=1:for(i=1;i<=2;i++)s=fun();printf("%din",s);}程序运行后的输出结果是()。A、0B、1C、4D、8标准答案:C知识点解析:fun函数中的x为静态局部变量,占用固定的内存单元,下一次调用时仍可保留上次调用时的值。也就是说,如果多次调用fun函数,x的定义只在第一次调用时有效,从第二次调用开始,x的定义相当于不存在,直接使用x的值。主函数中调用两次fun函数:第一次调用:x=1,x=x*2=2,s=2;第二次调用:(直接用上次x的值)x=x*2=4,s=4。因此C选项正确。35、以下结构体类型说明和变量定义中正确的是()。A、structREC;{intn;charc;};RECt1,t2;B、typedefstruct{intn;charc;}REC;RECt1,t2;C、typedefstructREC;{intn=0;charc=’A’;}t1,t2;D、struct{intn;charc;}REC;RECt1,t2;标准答案:B知识点解析:本题考查结构体的相关知识,选项A中structREC后面不能有分号,C选项中typedefstructREC的后面也不能有分号,选项D中REC已经是结构体变量,不能当做结构体类型来使用。36、似定已建立以下链表结构,且指针p和q已指向如图所示的结点:则以下选项中可将q所指结点从链表中删除并释放该结点的语句组是()。A、p->next=q->next;free(q);B、p=q->next;free(q);C、p=q;free(q);D、(*p).next=(*q).next;free(p);标准答案:A知识点解析:本题考查删除链表中的结点操作,其方法是将要删除结点的上个结点的下个结点指向要删除结点的下个结点,然后释放该要删除结点,所以选项A正确。37、有以下程序:#include<stdio.h>#include<string.h>structA{inta;charb[10];doublec;};voidf(structAt);main()structAa={1001,"ZhangDa",1098.0};f(a);printf("%d,%s,%6.1f\n",a.a,a.b,a.c);}voidf(structAt){t.a=1002;strcpy(t.b,"ChangRong");t.c=1202.0;}程序运行后的输出结果是()。A、1002,ZhangDa,1202.0B、1002,ChangRong,1202.0C、1001,ChangRong,1098.0D、1001,ZhangDa,1098.0标准答案:D知识点解析:本题考查结构体的相关操作以及传值、传址的区别,该题中调用f函数后,会生成参数a的一个副本,而不会改变a的值,所以a值维持原值,选项D正确。38、有以下程序:#include<stdio.h>#defineN5#defineMN+l#definef(x)(x*M)main(){inti1,i2:i1=f(2):i2=f(1+1);printf("%d%d\n",i1,i2);}程序运行后的输出结果是()。A、127B、1212C、1111D、117标准答案:D知识点解析:本题考查宏定义的用法,宏定义只是做个简单的替换,所以本题中执行f(2)=(2*N+1)=11,执行f(1+1)=(1+1*N+1)=7。选项D正确。39、有以下程序:#include<stdio.h>main()inta=5,b=1,t:t=(a<<2)|b:printf("%d\n",t);}程序运行后的输出结果是()。A、1B、11C、6D、21标准答案:D知识点解析:本题考查位运算,以及按位或操作,将a左移一位相当于是将a乘以了4,所以a<<2等于20,二进制表示为00010100,与b按位或得到00010101,即21,所以选项D正确。40、设fp为指向某二进制文件的指针,且已读到此文件末尾,则函数feof(fp)的返回值为()。A、0B、’\0’C、非0值D、NULL标准答案:C知识点解析:本题考查文件的定位,feof函数的用法是从输入流读取数据,如果到达文件末尾(遇文件结束符),eof函数值为非零值,否则为0,所以选项C正确。二、程序填空题(本题共1题,每题1.0分,共1分。)41、下列给定程序中,函数fun的功能是进行数字字符转换。若形参ch中是数字字符‘0’~‘9’,则将‘0’转换成‘9’,‘1’转换成‘8’,‘2’转换成‘7’,……,‘9’转换成‘0’;若是其他字符则保持不变;并将转换后的结果作为函数值返回。请在程序的下划线处填入止确的内容并将下划线删除,使程序得出正确的结果。注意:部分源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include<stdio.h>/**********found**********/[1]fun(charch){/**********found**********/if(ch>=‘0’&&[2])/**********found**********/return‘9’-(ch-[3]);returnch;main(){charc1,c2;printf("\nTheresult:\n");c1=’2’;c2=fun(c1);printf("c1=%cc2=%c\n",c1,c2);c1=’8’;c2=fun(c1);printf("c1=%cc2=%c\n",c1,c2);c1=’a’;c2=fun(c1);printf("c1=%cc2=%c\n",c1,c2);}标准答案:(1)char(2)ch<=’9’(3)’0’。知识点解析:本题考查:函数定义,注意函数定义的一般形式以及有参函数和无参函数的区别;if语句条件表达式,本题的条件表达式是判断数字字符;函数返回值,其一般形式为“retum表达式:”。有参函数定义,其一般形式为:类型标识符函数名(形式参数表列){声明部分语句}在形参表中给出的参数称为形式参数,它们可以是各种类型的变量,各参数之间用逗号间隔。在进行函数调用时,主调函数将赋予这些形式参数实际的值。形参既然是变量,必须在形参列表中给出类型说明。三、程序修改题(本题共1题,每题1.0分,共1分。)42、给定程序MODI1.C中,函数fun的功能是:判断输入的任何一个正整数n,是否等于某个连续正整数序列之和。若是,则输出所有可能的序列,否则输出“不能分解”。例如:当输入100时,输出:100=9+10+11+12+13+14+15+16100=18+19+20+21+22请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<stdio.h>voidfun(intn){intj,b,c,m,flag=0;for(b=1;b<=n/2;b++){/**********found**********/n=m:c=b;while(m!=0&&m>=c){/**********found**********/m=m-c;c++}/**********found**********/if(m!=0){printf("%d=",n);for(j=b;j<c-1;j++)printf("%d+",j);printf("%d\n",j);flag=1;}if(flag==0)printf("不能分解\n");}main(){intn;printf("请输入一个整数:");seailf("%d",&n);fun(n);}标准答案:(1)m:n;(2)m:m-c;c++;(3)if(m==0)。知识点解析:(1)每次循环,程序需要对n执行减去连续的正整数序列来判断n是否刚好为0,即n是否是连续的正整数序列之和,所以需要使用临时变量m寄存n的值,每次循环对m执行减运算操作,不满足继续下一轮。另外,程序声明变量m时,未初始化它的值,所以此处应该修改为:m=n。(2)语法错误。C语言中每个语句必须以分号结束,所以应修改为:m=m-c;c++;。(3)题目判断n是否是连续的正整数序列之和,若是,则输出所有序列,程序中m依次减去连续的正整数,当m为0时,表示m(即n)满足条件,再输出当前序列中的每个正整数,所以此处判断条件反了,应修改为:if(m==0)。四、程序设计题(本题共1题,每题1.0分,共1分。)43、编写函数fun,其功能是:求ss所指字符串中指定字符的个数,并返回此值。例如,若输入字符串123412132,输入字符为1,则输出3。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include<stdio.h>#include<string.h>#defineM81intfun(char*ss,charc){}main(){chara[M],ch;voidNONO();printf("\nPleaseenterastring:");gets(a);printf("\nPleaseenterachar:");ch=getchar();printf("\nThenumberofthecharis:%d\n",fun(a,ch));NONO();}voidNONO(){/*本函数用于打开文件,输人测试数据,调用fun函数,输出数据,关闭文件。*/inti;FILE*rf,*wf;chara[M],b[M],ch;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%s",a);fscanf(rf,"%s",b);ch=*b:fprintf(wf,"%c=%d\n",ch,fun(a,ch));}fclose(rf);fclose(wf);}标准答案:intflun(char*ss,charc){inti=0:for(;*ss!=’\0’;ss++)if(*ss==c)i++;/*求出ss所指字符串中指定字符的个数*/returni:}。知识点解析:本题考查:for循环语句遍历字符串,并通过if条件语句,判断字符串是否结束。从字符串中查找指定字符,需要使用循环判断结构,循环语句用来遍历字符串,循环条件为字符串没有结束,即当前字符不是‘\0’,判断语句用来判断当前字符是否为指定字符。最后返回指定字符的个数。国家二级(C语言)机试模拟试卷第3套一、选择题(本题共40题,每题1.0分,共40分。)1、程序流程图中带有箭头的线段表示的是()。A、图元关系B、数据流C、控制流D、调用关系标准答案:C知识点解析:在数据流图中,用标有名字的箭头表示数据流。在程序流程图中,用标有名字的箭头表示控制流。所以选择C。2、结构化程序设计的基本原则不包括()。A、多态性B、自顶向下C、模块化D、逐步求精标准答案:A知识点解析:结构化程序设计的思想包括:自顶向下、逐步求精、模块化、限制使用goto语句,所以选择A。3、软件设计中模块划分应遵循的准则是()。A、低内聚低耦合B、高内聚低耦合C、低内聚高耦合D、高内聚高耦合标准答案:B知识点解析:软件设计中模块划分应遵循的准则是高内聚低偶合、模块大小规模适当、模块的依赖关系适当等。模块的划分应遵循一定的要求,以保证模块划分合理,并进一步保证以此为依据开发出的软件系统可靠性强,易于理解和维护。模块之间的耦合应尽可能的低,模块的内聚度应尽可能的高。4、在软件开发中,需求分析阶段产生的主要文档是()。A、可行性分析报告B、软件需求规格说明书C、概要设计说明书D、集成测试计划标准答案:B知识点解析:A错误,可行性分析阶段产生可行性分析报告。C错误,概要设计说明书是总体设计阶段产生的文档。D错误,集成测试计划是在概要设计阶段编写的文档。B正确,需求规格说明书是后续工作如设计、编码等需要的重要参考文档。5、算法的有穷性是指()。A、算法程序的运行时间是有限的B、算法程序所处理的数据量是有限的C、算法程序的长度是有限的D、算法只能被有限的用户使用标准答案:A知识点解析:算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。有穷性是指算法程序的运行时间是有限的。6、对长度为n的线性表排序,在最坏情况下,比较次数不是n(n一1)/2的排序方法是()。A、快速排序B、冒泡排序C、直接插入排序D、堆排序标准答案:D知识点解析:除了堆排序算法的比较次数是O(nlog2n),其他的都是n(n—1)/2。7、下列关于栈的叙述正确的是()。A、栈按“先进先出”组织数据B、栈按“先进后出”组织数据C、只能在栈底插入数据D、不能删除数据标准答案:B知识点解析:栈是按“先进后出”的原则组织数据的,数据的插入和删除都在栈顶进行操作。8、在数据库设计中,将E-R图转换成关系数据模型的过程属于()。A、需求分析阶段B、概念设计阶段C、逻辑设计阶段D、物理设计阶段标准答案:C知识点解析:E—R图转换成关系模型数据则是把图形分析出来的联系反映到数据库中,即设计出表,所以属于逻辑设计阶段。9、有三个关系R、S和T如下:由关系R和S通过运算得到关系T,则所使用的运算为()。A、并B、自然连接C、笛卡尔积D、交标准答案:D知识点解析:自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,所以B错误。笛卡尔积是用R集合中元素为第一元素,s集合中元素为第二元素构成的有序对,所以C错误。根据关系T可以很明显地看出是从关系R与关系s中取得相同的关系组所以取得是交运算,选择D。10、设有表示学生选课的三张表,学生S(学号,姓名,性别,年龄,身份证号),课程C(课号,课名),选课SC(学号,课号,成绩),则表SC的关键字(键或码)为()。A、课号,成绩B、学号,成绩C、学号,课号D、学号,姓名,成绩标准答案:C知识点解析:学号是学生表s的主键,课号是课程表c的主键,所以选课表SC的关键字就应该是与前两个表能够直接联系且能唯一定义的学号和课号,所以选择C。11、以下叙述中错误的是()。A、C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令B、C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件C、用C语言编写的程序称为源程序,它以ASCII代码形式存放在一个文本文件中D、C语言源程序经编译后生成后缀为.obj的目标程序标准答案:A知识点解析:C语言中的非执行语句不会被编译,不会生成二进制的机器指令,所以A错误。由C语言构成的指令序列称C源程序,C源程序经过C语言编译程序编译之后生成一个后缀为,OBJ的二进制文件(称为目标文件);最后要由“连接程序”把此.OBJ文件与C语言提供的各种库函数连接起来生成一个后缀为,EXE的可执行文件。12、以下选项中,合法的一组C语言数值常量是()。A、12.0Xa234.5e0B、028.5e一3-Oxf。C、.1774e1.50abeD、0x8A10.0003.e5标准答案:A知识点解析:C语言中八进制整型常量的开头是数字0,十六进制整型常量的数字开头是0x。C语言中的实型常量有两种表示形式:小数形式,小数形式表示的实型常量必须要有小数点;指数形式,以“e”或“E”后跟一个整数来表示以10为底数的幂数,且规定字母e或E之前必须要有数字,且e或E后面的指数必须为整数。B选项中028错误,八进制中没有数字8。C选项中4e1.5中e后面的指数不是整数。D选项中3.e5小数点后面缺少数字。13、以下选项中不合法的标识符是()。A、&aB、FORC、13rintD、_00标准答案:A知识点解析:C语言中标识符由字母、下划线、数字组成,且开头必须是字母或下划线。另外,关键字不能作为标识符。因为C语言中区分大小写,所以B选项中的“FOR”可以作为标识符来用。A选项中含有非法字符&,所以选择A。14、若有代数式(其中e仅代表自然对数的底数,不是变量),则以下能够正确表示该代数式的C语言表达式是()。A、sqrt(fabs(pow(n,x)+exp(x)))B、sqrt(fabs(pow(n,x)+pow(x,e)))C、sqrt(abs(n^x+e^x))D、sqrt(fabs(pow(x,n)+exp(x)))标准答案:A知识点解析:B选项中函数pow(x,e)错误应该直接使用exp(x)函数。C选项中函数abs(n^x+e^x)错误,应该使用fabs()返回浮点数的绝对值。D选项中pow(x,n)参数顺序错误。15、若有定义:d

温馨提示

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

评论

0/150

提交评论