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

下载本文档

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

文档简介

国家二级(C语言)机试模拟试卷23(共9套)(共382题)国家二级(C语言)机试模拟试卷第1套一、选择题(本题共39题,每题1.0分,共39分。)1、设有定义:inta=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;bc;D、if(a>b){c=a;a=b.b=c}标准答案:C知识点解析:C语言中if语句后面只跟一条语句时,可以省略大括号。即if语句仅作用于紧随其后的那条语句或者是复合语句的内容,所以A项执行三条语句组成的复合语句;BD两项执行大括号中的三条语句;而C项只执行c=a;。2、若变量都已正确说明,则以下程序段输出结果为()。#include<stdio.h>main(){chara=’a’;intb=2;printf(a>b?’’***a=%d’’:’’###b=%d’’,a,b);}A、***a=3B、###b=3C、***a=3###b=5D、全部错误标准答案:D知识点解析:本题考查printf函数的格式和三目运算符“?:”的使用。printf函数中格式说明符之前插入的任何字符都原样输出。本题中“a>b”为真,所以返回“***a=97”。3、设x和y都是int类型,且x=1,y=2,则printf("%d%d",x,y,(x,y))的输出结果是()。A、12B、122C、1,2D、输出值不确定标准答案:A知识点解析:本题考查printf函数的格式和逗号表达式。printf函数在输出时,是根据格式说明符的个数输出的,如果函数中有多余的项将不予输出;如果有输出项少于格式说明符,则出错,不能输出正确的结果。本题中逗号表达式(x,y)只返回y的值。此时格式说明的个数是2,而输出项的个数是3,因此printf函数只输出前两项。4、设有定义:chars[81];inti=0;,以下不能将一行(不超过80个字符)带有空格的字符串正确读入的语句或语句组是()。A、gets(s);B、while((s[i++]=getchar())!=’\n’);s[i]=‘\0’;C、seanf(“%s”,s);D、d0{seanf(“%c”,&s[i]);}while(s[i++]!=‘\n’);s[i]=‘\0’;标准答案:C知识点解析:字符串的输入不能使用scanf(“%s”,s);而应该使用gets(s)。5、以下叙述错误的是()。A、C语言区分大小写B、C程序中的一个变量,代表内存中一个相应的存储单元,变量的值可以根据需要随时修改C、整数和实数都能用C语言准确无误地表示出来D、在C程序中,正整数可以用十进制、八进制和十六进制的形式来表示标准答案:C知识点解析:本题涉及C语言最基本的3个概念:①C语言是区分大小写的,q和Q是两个不同的变量;②变量的实质就是在内存中占据一定的存储单元,存储单元里存放的是该变量的值,变量的值可以根据需要进行修改;③整数在允许的范围内可以准确的表示出来,但不可能表示无限度的实数。正整数可用二进制、十进制、八进制和十六进制表示。6、按照C语言规定的用户标识符命名规则,不能出现在标识符中的是()。A、大写字母B、下划线C、数字字符D、连接符标准答案:D知识点解析:C语言中标识符由字母、下划线、数字组成,且开头必须是字母或下划线。所以D选项中的连接符不合法。7、有以下程序段#includemain(){inta,b,c;a=10;b=50;c=30;if(a>b)a=b,b=c;c=a;printf("a-=%db=%dc=%d\n",a,b,c);}程序的输出结果是()。A、a=10b=50c=30B、a=10b=50c=10C、a=10b=30c=10D、a=50b=30c=50标准答案:B知识点解析:C语言中使用分号来作为语句的结束,所以a=b,b=c;是一条含有逗号运算符语句。if条件不满足,直接执行c=a。8、在软件设计中不使用的工具是()。A、系统结构图B、PAD一图C、数据流图(DFD图)D、程序流程图标准答案:C知识点解析:系统结构图是对软件系统结构的总体设计的图形显示。在需求分析阶段,已经从系统开发的角度出发,把系统按功能逐次分割成层次结构,是在概要设计阶段用到的。PAD图是在详细设计阶段用到的。程序流程图是对程序流程的图形表示,在详细设计过程中用到。数据流图是结构化分析方法中使用的工具,它以图形的方式描绘数据在系统中流动和处理的过程,由于它只反映系统必须完成的逻辑功能,所以它是一种功能模型,是在可行性研究阶段用到的而非软件设计时用到,所以选择C。9、有以下程序:#inelude<stdio.h>#definePT3.5;#defineS(x)PT*x*x;mai.(){inta=1,b=2;printf("%4.1f\n",S(a+b));}程序运行后的输出结果是()。A、7.5B、31.5C、程序有错无输出结果D、14.0标准答案:C知识点解析:宏定义不是C语句,末尾不需要有分号。所以语句printf("%4.1f\n",S(a+b));展开后为printf("%4.1f、n",3.5;*a+b*a+b;);所以程序会出现语法错误。10、以下数据结构中,属于非线性数据结构的是()。A、栈B、线性表C、队列D、二叉树标准答案:D知识点解析:二叉树属于非线性结构。栈是一种特殊的线性表,这种线性表只能在固定的一端进行插入和删除操作;队列可看作是插入在一端进行,删除在另一端进行的线性表。11、下列工具中,小属于结构化分析的常用二L具的是()。A、数据流图B、数据字典C、判定树D、N—S图标准答案:D知识点解析:结构化分析的常用工具有数据流图、数据字典、判定树和判定表。12、下面描述中,不属于软件危机表现的是()。A、软件过程不规范B、软件开发生产率低C、软件质量难以控制D、软件成本不断提高标准答案:A知识点解析:软件危机主要表现在:软件需求的增长得不到满足;软件开发成本和进度无法控制;软件质量难以保证;软件不可维护或维护程度非常低;软件的成本不断提高;软件开发生产率的提高赶不上硬件的发展和应用需求的增长。所以选择A。13、有两个关系R、S如下:由关系R通过运算得到关系S,则所使用的运算为()。A、选择B、投影C、插AD、连接标准答案:B知识点解析:投影运算是指对于关系内的域指定可引入新的运算。本题中S是在原有关系R的内部进行的,是由R中原有的耶些域的列所组成的关系。所以选择B。14、关于C语言标识符,以下叙述中错误的是()。A、标识符可全部由数字组成B、标识符可全部由下画线组成C、标识符可全部由小写字母组成D、标识符可全部由大写字母组成标准答案:A知识点解析:C语言标识符只能由字母、数字、下画线构成,且只能以字母、下画线开头,故选项A不正确。15、有以下程序#include<stdio.h>voidmain(){intn=2,k=1;while(!(k>0||n++));printf(’’%d%d\n’’,k,n);}程序运行后的输出结果是()。A、02B、13C、57D、12标准答案:D知识点解析:在程序中整型变量n的初始值等于2,整型变量k的初始值等于1,在执行while语句时,由于表达式k的值大于0为真,所以不再需要判断“n++’是否为真,“(k>0‖n++)”表达式的值为真。“!(k>0‖n++)”表达式的值为假,所以while语句中的条件不满足,循环语句不会执行,变量n的值也不会加1,所在输出变量k和n的值是1和2。16、以下叙述中正确的是()。A、charc1,c2,*c3,c4[40];是合法的变量定义语句B、数组下标的下限由数组中第一个非零元素的位置决定C、数组下标的下限由数组中第一个被赋值元素的位置决定D、数组下标的下限是1标准答案:A知识点解析:A)正确,charc1,c2,*c3,c4[40]表示定义了两个字符变量c1、c2,一个字符指针c3,一个字符数组c4。数组的下限永远为0,选项B)、C)、D)错,答案选A)。17、有以下程序段:structst{intx;int*y;}*pt;inta[]={1,2},b[]={3,4};struetstc[2]={10,a,20,b};pt=c;以下选项中表达式的值为11的是()。A、++pt->xB、pt->xC、*pt->yD、(pt++)->X标准答案:A知识点解析:本题考查结构体数组初始化以及结构体变量的引用,题目中定义了一个结构体数组c并初始化,指针pt指向c的第一个元素,那么pt->x为10,++pt->x为11,*pt->y为1,(pt++)->x为20,所以答案为A。18、有以下程序段int*p;p=__________malloc(sizeof(int));若要求使p指向一个int型的动态存储单元,在横线处应填入的是()。A、(int*)B、intC、int*D、(*int)标准答案:A知识点解析:语句"malloc(sizeof(int))"为动态分配了一块内存,因为p为int型指针,所以需要使用强制转换将该内存地址转换成int*类型后再指给p,填入的内容为(int*),答案选A)。19、下列叙述中正确的是()。A、线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的B、线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构C、线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构D、线性表的链式存储结构与顺序存储结构在存储空间的需求上没有可比性标准答案:B知识点解析:线性链式存储结构中每个结点都由数据域与指针域两部分组成,增加了存储空间,所以一般要多于顺序存储结构。20、设有定义#include<stdio.h>#include<stdlib.h>typedefstruet{intx,y;}T;typedefstruet{intx,y;}*USER;USERfun(){USERp;p=(USER)malloc(sizeof(T));p->x=1:p->y=2:returnp;}函数fun返回值的类型是()。A、T类型的结构体B、指向结构体类型的指针C、int类型的元素D、int类型的指针标准答案:B知识点解析:由题意可知:使用typeclef将类型:struet{intx,y;}*重命名为usER,所以函数fun的返回类型为struct{intx,y;}*,即指向结构体类型的指针,本题答案为B。21、下列选项中不属于结构化程序设计原则的是()。A、可封装B、自顶向下C、模块化D、逐步求精标准答案:A知识点解析:结构化程序设计的基本原则包括:①模块化;②自顶向下;③逐步求精;④限制使用goto语句。可封装是面向对象的设计思想。22、有以下程序#definer(X,Y)(X)*(Y)main(){inta=3,b=4;printf("%dLn",F(a++,b++));}程序运行后的输出结果是()。A、12B、15C、16D、20标准答案:A知识点解析:此题考查的是编译预处理命令以及自加运算符。F(a++,b++)先取a和b的值,、参加运算,再把a和b的值分别加1,所以F(a++,b++)=F(3,4)=3*4=12。23、阅读下面程序,程序执行后的结果为()。#include"stdioh"main(){char*str="abcdefghijklmnopq";while(*str++!=’e’);printf("%c\n",*str);}A、fB、aC、eD、q标准答案:A知识点解析:本题考查的是取内容运算符“·”和自加运算符“++”的优先级问题。由于“++”的优先级高于“*”,所以题干中*str++!=’e’,即*(str++)!=’e’,当str指向字符’e’时,while循环的条件不成立,但str已经进行了自加指向了字符’f’,所以*six输出字符’f’。24、当变量c的值不为2、4、6时,值也为”真”的表达式是()。A、(c>=2&&c<=6)&&(c%21=1)B、(c:=2)||(c==4)||(c==6)C、(c>=2&&c<=6)&&!(c%2)D、(c>=2&&c<=6)||(c!=3)||(c!=5)标准答案:D知识点解析:逻辑或运算符中只要有一个运算量为真结果就是真,当c>=2&&c<=6条件不成立时c的值肯定不是2、3、4、5、6,所以c!=3,与c!=5均成立。所以D选项的结果一定为真。25、有以下程序:#includemain(){intx;scanf("%d",&x);if(x<=0);elseif(x!=5)printf("%d\n",x);}程序运行时,输入的值在哪个范围才会有输出结果()。A、不等于5的整数B、大于0且不等5的整数C、大于0或等于5的整数D、小于5的整数标准答案:B知识点解析:题目中,虽然else和第二个if不在同一行上,但等价于在同一行上,因此,程序的意思是当x大于0且不等于5时将其打印出来。26、有以下程序:#include<stdio.h>Structord{intx,y;}dt[2]=;{1,2,3,4};main(){structord*p=dt:printf("%d,",++(p->x));printf("%d\n",++(p->y));程序运行后的输出结果是()。A、3,4B、4,1C、2,3D、1.2标准答案:C知识点解析:本题考查结构体数组的相关操作,dt为结构体数组,那么指针p指向了结构体数组的一个元素,所以p->x为1,p->y为2,结果为2,3选项C正确。27、以下叙述中错误的是()。A、可以给指针变量赋一个整数作为地址值B、函数可以返回地址值C、改变函数形参的值,不会改变对应实参的值D、当在程序的开头包含头文件stdio.h时,可以给指针变量赋NULL标准答案:A知识点解析:不能将一个整数直接赋给指针变量作为地址,所以A选项是错误的。函数的返回值可以是地址,即指针。函数调用中形参值的变化不会传递给实参。28、有以下程序:#include#defineN4voidfun(inta[][N],intb[]){inti;for(i=0;i<N;i++)b[i]=a[i][i];}voidmain(){intx[][N]={{1,2,3},{4,3},{5,6,7,8},{9,10,11}},y[N],i;fun(x,y);for(i=0;i<N;i++)printf(’’%d,’’,y[i]);printf(’’\n’’);}程序运行后的输出结果是()。A、1,3,5,9,B、1,2,3,4,C、1,3,7,0,D、3,4,8,10标准答案:C知识点解析:子函数的功能是将一个4*4的二维矩阵的对角线上的元素赋给另外一个有4个元素的一维数组。在主函数中定义数组时,没有指定元素默认为零,因此,主函数中的数组x[4][4]={{1,2,3,0},{4,3,0,0},{5,6,7,8},{9,10,11,0},对角线上的元素为1,3,7,0。29、以下叙述中正确的是A、每个后缀为.C的C语言源程序都可以单独进行编译B、每个后缀为.C的C语言源程序都应该包含一个main函数C、在C语言程序中,main函数必须放在其他函数的最前面D、在C语言程序中,只有main函数才可单独进行编译标准答案:A知识点解析:一个普通的C函数可以单独作为一个C的程序文件存在被包含到其他程序中,每个后缀为.C的C语言源程序都可以单独进行编译,所以B、D错误。main函数可以放在程序的开始,中间,最后,所以C错误。30、关系数据库管理系统能实现的专门关系运算包括()。A、排序、索引、统计B、选择、投影、连接C、关联、更新、排序D、显示、打印、制表标准答案:B知识点解析:关系数据库管理系统的专门关系运算包括选择运算、投影运算和连接运算。31、有以下程序(其中的strstr()函数头部格式为:char*strstr(char*p1,char*p2)确定p2字符串是否在p1中出现,并返回p2第一次出现的字符串首地址)#include<stdio.h>#include<string.h>char*a="you";char*b="WelcomeyoutoBeijing!";main(){char*p;p=strstr(b,a)+strlen(a)+1;printf("%s\n",p);}程序的运行结果是A、toBeijing!B、youtoBeijing!C、WelcomeyoutoBeijing!D、Beijing!标准答案:A知识点解析:调用strstr函数,可知a指向的字符串在b指向的字符串中第一次出现的位置,并将此地址赋给指针p。strlen()函数是求字符串的实际长度(不包含结束标志),并且作为函数值返回。strstr函数返回的地址下标值为9,加上a长度3,再加1,此时p指向的地址下标值为13,输出"toBeijing!",A选项正确。32、以下叙述正确的是A、不能在数组说明符的一对方括号中使用表达式B、charc1,*c2,**c3,c4[2];是C语言的合法语句C、数组下标的最小值可以是负值D、若有数组定义intarray[5];则语句printf("%d",array[1.23]);是合法的标准答案:B知识点解析:在B选项中,c1是字符型变量,c2是字符型指针变量,c3是指向字符型指针的指针变量,c4[2]是一个一维字符数组,这些都是C语言的合法语句,因此答案为B选项。33、有以下程序#include<stdio.h>#include<string.h>structS{charname[10];};main(){structSs1,s2;strcpy(,"XXX");strcpy(,"=");s1=s2;printf("%s\n",);}程序运行后的输出结果是A、=B、XXXC、#NAME?D、X=标准答案:A知识点解析:主函数首先为结构体定义两个变量s1,s2,分别使用字符串拷贝函数strcpy()为s1和s2的成员name赋值,再将s2中的成员信息赋值给s1,因此输出为"=",答案为A选项。34、为了降低算法的空间复杂度,要求算法尽量采用原地工作(inplace)。所谓原地工作是指A、执行算法时所使用的额外空间固定(即不随算法所处理的数据空间大小的变化而变化)B、执行算法时所使用的额外空间随算法所处理的数据空间大小的变化而变化C、执行算法时不使用额外空间D、执行算法时不使用任何存储空间标准答案:A知识点解析:算法的空间复杂度是指执行这个算法所需要的内存空间,包括输入数据所占的存储空间、程序本身所占的存储空间、算法执行过程中所需要的额外空间。如果额外空间量相对于问题规模(即输入数据所占的存储空间)来说是常数,即额外空间量不随问题规模的变化而变化,则称该算法是原地工作的。故选A选项.35、设有以下程序段floata[8]={1.0,2.0};intb[1]={0};charc[]={"A","B"};chard=="1";以下叙述正确的是A、只有变量c的定义是合法的B、只有变量a,b,c的定义是完全合法的C、所有变量的定义都是完全合法的D、只有变量a,b的定义是完全合法的标准答案:D知识点解析:floata[8]={1.0,2.0};定义了一个包含8个float型元素的数组,并初始化了数组的前2项,其他项是随机数。intb[1]={0},定义了只有一个int型元素的数组,并初始化为0。charc[]={"A","B"};定义一个char型数组,大小有初始化元素决定,但初始化值是字符串,类型不兼容,编译出错。chard="1";定义一个char型变量,但是初始化赋值字符串,类型不兼容,编译出错。因此只有a,b定义和初始化正确。故答案为D选项36、下面属于面向对象方法中对象基本特点的是A、多态性B、方法唯一性C、可修改性D、灵活性标准答案:A知识点解析:对象的基本特点如下:由上表可知,本题选A选项.37、设循环队列的存储空间为Q(1:50),初始状态为front=rear=50。现经过一系列入队与退队操作后,front=rear=1,此后又正常地插入了两个元素。最后该队列中的元素个数为A、2B、1C、3D、52标准答案:A知识点解析:循环队列是队列的一种顺序存储结构,用队尾指针rear指向队列中的队尾元素,用排头指针指向排头元素的前一个位置。循环队列长度为50,由初始状态为front=rear=50可知此时循环队列为空。入队运算时,首先队尾指针进1(即rear+1),然后在rear指针指向的位置插入新元素。特别的,当队尾指针rear=50+1时,置rear=1。退队运算时,排头指针进1(即front+1),然后删除front指针指向的位置上的元素,当排头指针front=50+1时,置front=1。若经过运算,front=rear=1可知队列空或者队列满。此后又正常地插入了两个元素说明插入前队列为空,则插入后队列元素个数为2。故选A选项38、以下是while语句的基本形式:while(表达式){语句;>其中“表达式”()。A、必须是逻辑表达式B、必须是关系表达式C、必须是逻辑表达式或关系表达式D、可以是任意合法的表达式标准答案:D知识点解析:本题考查while表达式。while(表达式)中的表达式可以为任何合法的表达式,一般情况下为逻辑、条件表达式,需要注意的是,当等号(==)误写为赋值号(=)时不会报错的,但是其值恒为1。39、有以下程序:#include<stdio.h>voidfun(inta[],intn){inti.t:for(i=0;i<n/2;i++){t=a[i]:a[i]=a[n一1一i];a[n一1一i]=t;}}main(){intk[10]={1,2,3,4,5,6,7,8,9,10},i;fun(k,5):for(i=2;i<8;i++)printf("%d",k[i]);printf("\n");}程序运行的结果是()。A、3456787B、876543C、1098765D、321678标准答案:D知识点解析:由于数组名本身是一个地址,所以在用数组名作为实参传递时,对应的形参相当于一个指针变量,在函数中可以通过指针变量来引用数组元素,从而改变元素的值。本题中函数fun的作用是将数组A的前n个元素进行逆转,fun(k,5)的结果是数组k的前五个元素1、2、3、4、5变为5、4、3、2、1。逆转后,输出数组中第3个至第8个元素。二、程序填空题(本题共1题,每题1.0分,共1分。)40、给定程序中,函数fun的功能是:将形参n中,各位上为偶数的数取出,并按原来从高位到低位的顺序组成一个新的数,并作为函数值返回。例如,从主函数输入一个整数:27638496,函数返回值为:26846。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!1#include<stdio.h>2unsignedlongfun(unsignedlongn)3{unsignedlongx=0,s,i;intt;4s=n;5/**********found**********/6i=__1__;7/**********found**********/8while(__2__)9{t=s%10;10if(t%2==0){11/**********found**********/12x=x+t*i;i=__3__;13}14s=s/10;15}16returnx;17}18main()19{unsignedlongn=-1;20while(n>99999999||n<0)21{printf(’’Pleaseinput(0<n<100000000):’’);scanf(’’%1d’’,&n);}22printf(’’\nTheresultis:%1d\n’’,fun(n));23}标准答案:(1)1(2)s(3)i*10知识点解析:函数fun的功能是将形参n中,各位上为偶数的数取出,组成新数。第一空:由“if(t%2==0){x=x+t*i;i=__3__;}”可知,如果t是偶数,那么t添加到返回值里面,比如第一次得到t=2,那么x=0+2*1;下一次得到了t=4,那么此时x的值应该是2+2*10;再下一一次得到t=2,那么x=22+2*100,即x的值是在上一次值的基础上加上新得到的值乘以其权值,因此i是代表权值。第一空处是初始化i,第一次进入if语句时市,x是个1位数,此时权值i应为l,故第一空处应为“1”。第二空:第二空处是填循环的终止条件,在循环体内,s每次缩小10倍,在最后一次进入循环的时候,s是一个一位数,s/10之后s变成0,下次就不应该进入while循环,因此while循环的终止条件是s不为0,故第二空处为“s”或“s!=0”。第三空:由第一空的分析可知权值i是在上一次的基础上增加10倍,故第三空处应为“i*10”。三、程序修改题(本题共1题,每题1.0分,共1分。)41、下列给定程序的功能是:读入一个英文文本行,将其中每个单词的第一个字母改成大写,然后输出此文本行(这里”单词”是指由空格隔开的字符串)。例如,若输入"Iamastudenttotaketheexamination",则应输出"IAmAStudentToTakeTheExamination"。请改正程序中的错误,使程序能得出正确的结果。注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:1#include<stdlib.h>2#include<string.h>3#include<conio.h>4#include<ctype.h>5#include<stdio.h>6#include<string.h>7/*********found*********/8voidupfst(charP)9{10intk=0;11for(;*P;P++)12if(k)13{14if(*P==’’)15k=0;16}17else18{19if(*P!=’’)20{21k=1;22*P=toupper(*P);23}24}25}26voidmain()27{28charchrstr[81]j29System("CLS");30printf("\nPleaseenteranEnglishtext;lihe:");31gets(chrstr);32printf("\nBoforechanging:\n%s",chrstr);33upfst(chrstr);34printf("\nAfterchanging:\n%s\n",chrstr);35}标准答案:voidupfst(char*p)知识点解析:主函数中fun函数的调用方式说明函数fun的参数应为指针类型。四、程序设计题(本题共1题,每题1.0分,共1分。)42、下列程序定义了N×N的二维数组,并在主函数中赋值。请编写函数fun,函数的功能是:求出数组周边元素的平均值并作为函数值返回给主函数中的s。例如,若a数组中的值为:0127919745238314568259141则返回主程序后s的值应为3.375。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:1#include<stdio.h>2#include<conio.h>3#include<Stdlib.h>4#defineN55doublefun(intw[][N])6{78}9voidmain()10{11FILE*wf;12inta[N][N]={0,1,2,7,9,1,9,7,4,5,2,3,8,3,1,4,5,6,8,2,5,9,1,4,1);13inti,j;14doubles;15system("CLS");16printf("***Thearray***\n");17for(i=0;i<N;i++)18{for(j=0;j<N;j++)19{printf("%4d",a[i][j]);)20print:f("\n");21}22s=fun(a);23printf("***THERESULT***\n");24printf("Thesumis:%lf\n",s);25/*****************/26wf=fopen("out.dat","w");27fprintf(wf,"%lf",s);28fclose(wf);29/*****************/30}标准答案:doublefun(intw[][N]){inti,j,k=0;doublesum=0.0;for(i=0;i<N;i++)for(j=0;j<N;j++)if(i==0‖i==N—1‖j==0‖j==N—1)/*只要下标中有一个为0或N—1,则它一定是周边元素*/{sum=sum+w[i][j];/*将周边元素求和*/k++;}returnsum/k;/*求周边元素的平均值*/}知识点解析:本题要求计算二维数组周边元素的平均值,for循环语句控制循环过程,if条件语句根据数组元素的下标判断该元素是否为二维数组的周边元素。本题采用逐一判断的方式,周边元素的规律为下标中有一个是0或N—1,所以只要下标中有一个为0或N—1,那么它一定是周边元素。计算周边元素个数的方式是当给sum累加一个值时,k也加1。国家二级(C语言)机试模拟试卷第2套一、选择题(本题共39题,每题1.0分,共39分。)1、算法的时间复杂度是指()。A、算法的长度B、执行算法所需要的时间C、算法中的指令条数D、算法执行过程中所需要的基本运算次数标准答案:D知识点解析:算法的时间复杂度,是指执行算法所需要的工作量,可以用算法在执行过程中所需基本运算的执行次数来度量算法的工作量。2、以下数据结构中,属于非线性数据结构的是()。A、栈B、线性表C、队列D、二叉树标准答案:D知识点解析:二叉树属于非线性结构。栈是一种特殊的线性表,这种线性表只能在固定的一端进行插入和删除操作;队列可看作是插入在一端进行,删除在另一端进行的线性表。3、数据结构中,与所使用的计算机无关的是数据的()。A、存储结构B、物理结构C、逻辑结构D、线性结构标准答案:C知识点解析:数据的逻辑结构反映的是数据元素之间的逻辑关系,与使用的计算机无关。4、内聚性是对模块功能强度的衡量,下列选项中,内聚性较弱的是()。A、顺序内聚B、偶然内聚C、时间内聚D、逻辑内聚标准答案:B知识点解析:内聚是从功能角度来衡量模块的联系,它描述的是模块内的功能联系。内聚有如下种类,它们之间的内聚度由弱到强排列:偶然内聚一一模块中的代码无法定义其不同功能的调用。但它使该模块能执行不同的功能,这种模块为巧合强度模块。逻辑内聚一一这种模块把几种相关的功能组合在一起,每次被调用时,由传送给模块的参数来确定该模块应完成那一种功能。时间内聚一一这种模块顺序完成一类相关功能,比如初始化模块,它顺序地为变量置初值。过程内聚一一如果一个模块内的处理元素是相关的,而且必须以特定次序执行,则称为过程内聚。通信内聚一一这种模块除了具有过程内聚的特点外,还有另外一种关系,即它的所有功能都通过使用公用数据而发生关系。顺序内聚一一如果一个模块内各个处理元素和同一个功能密切相关,而且这些处理必须顺序执行,处理元素的输出数据作为下一个处理元素的输入数据,则称为顺序内聚。功能内聚一一如果一个模块包括为完成某一具体任务所必需的所有成分,或者说模块中所有成分结合起来是为了完成一个具体的任务,此模块则为功能内聚模块。5、在关系中凡能惟一标识元组的最小属性集称为该表的键或码。二维表中可能有若干个键,它们称为该表的()。A、连接码B、关系码C、外码D、候选码标准答案:D知识点解析:在关系中凡能惟一标识元组的最小属性集称为该表的键或码。二维表中可能有若干个键,它们称为该表的候选码或候选键。从二维表的所有候选键中选取一个作为用户使用的键称为主键或主码。6、检查软件产品是否符合需求定义的过程称为()。A、确认测试B、需求测试C、验证测试D、路径测试标准答案:A知识点解析:确认测试的任务是验证软件的功能和性能,以及其他特性是否满足需求规格说明中确定的各种需求。7、数据流图用于抽象描述一个软件的逻辑模型,数据流图由一些特定的图符构成。下列图符名标识的图符不属于数据流图合法图符的是()。A、控制流B、加工C、存储文件D、源和潭标准答案:A知识点解析:数据流图用于抽象描述一个软件的逻辑模型,它由一些特定的图符构成,包括4个方面,即加工、数据流、存储文件、源和潭。8、待排序的关键码序列为(15,20,9,30,67,65,45,90),要按关键码值递增的顺序排序,采取简单选择排序法,第一趟排序后关键码15被放到第()个位置。A、2B、3C、4D、5标准答案:B知识点解析:选择排序的基本思想是扫描整个线性表,从中选出最小的元素,将它交换到表的最前面,然后对剩下的子表采用同样的方法,直到子表为空。所以第一趟排序后,将选出最小的元素9放在第一个位置,元素15则被交换放在第三个位置。9、对关系S和关系R进行集合运算,结果中既包含关系Sp的所有元组也包含关系R中的所有元组,这样的集合运算称为()。A、并运算B、交运算C、差运算D、除运算标准答案:A知识点解析:关系的并运算是指,由结构相同的两个关系合并,形成一个新的关系,其中包含两个关系中的所有元组。10、下列选项中,不属于数据管理员(DBA)职责的是()。A、数据库维护B、数据库设计C、改善系统性能,提高系统效率D、数据类型转换标准答案:D知识点解析:数据库管理员(DataBaseAdminiswator,DBA)是指对数据库的规划、设计、维护、监视等的人员,其主要工作如下:数据库设计。DBA的主要任务之一是数据库设计,具体地说是进行数据模式的设计;数据库维护。DBA必须对数据库中的数据安全性、完整性、并发控制及系统恢复、数据定期转储等进行实施与维护;改善系统性能,提高系统效率。DBA必须随时监视数据库的运行状态,不断调整内部结构,使系统保持最佳状态与效率。11、C语言规定,在一个C程序中,main()函数的位置()。A、必须在系统调用的库函数之后B、必须在程序的开始C、必须在程序的最后D、可以在任意位置标准答案:D知识点解析:每个C程序有且只有一个主函数(main),且程序必须从“main()”函数开始执行,而且“main()”函数可以放在程序中的任意位置。12、以下叙述中正确的是()。A、C语言比其他语言高级B、C语言可以不用编译就能被计算机识别执行C、C语言以接近英语国家的自然语言和数学语言作为语言的表达形式D、C语言出现的最晚,具有其他语言的一切优点标准答案:C知识点解析:此题考查的是C语言的基本特点。C语言是一种高级编程语言,但并不是比其他语言高级;C语言源程序必须经过编译生成目标文件才能被计算机识别执行;C语言出现比较晚,它既有优点也有缺点,而并不是具有其他一切语言的优点。13、下列叙述中错误的是()。A、C语句必须以分号结束B、复合语句在语法上被看作一条语句C、空语句出现在任何位置都不会影响程序运行D、赋值表达式末尾加分号就构成赋值语句标准答案:C知识点解析:C语言规定每条语句和数据定义的最后必须有一个分号,分号是C语句的必要组成部分。复合语句也称为“语句块”,其形式如下:{语句1;语句2;……”语句n;},即用一对大括号把若干语句括起来构成一个语句组。一个复合语句在语法上视为一条语句,在一对花括号内的语句数量不限。一个赋值表达式的最后加一个分号就成为一条语句,即赋值语句。空语句是只有一个分号的语句,它什么也不做,程序设计中有时需要加一个空语句来表示存在一条语句,但随意加分号会导致逻辑上的错误,而且这种错误十分隐蔽,编辑器也不会提示逻辑错误,需要慎用。14、若有定义:inta=7;floatx=2.5,y=4.7;则表达式“x+a%3*(int)(x+y)%2/4”的值是()。A、2.500000B、2.750000C、3.500000D、0.000000标准答案:A知识点解析:此题考查的是变量的类型转换。表达式中“(int)(x+y)把x+y=(7.2)”的值强制转化成整型即得到7,那么“a%3*(int)(x+y)%2”的值为整型常量1,所以“a%3*(int)(x+y)%2/4”的值为0;因为变量x是浮点型变量,所以表达式“x+a%3*(int)(x+y)%2/4”的结果也是浮点型,得到2.500000。15、若下列选项中的各变量均为整型且已有值,其中不正确的赋值语句是()。A、++i;B、n1=(n2/(n3=2));C、k=-i=j;D、a=b+c=2;标准答案:D知识点解析:本题考查赋值表达式。赋值表达式的一般形式是:变量名=表达式。C语言规定,不能给变量表达式赋值。16、下列关于逻辑运算符两侧运算对象的叙述中正确的是()。A、只能是整数0或1B、只能是整数0或非0整数C、可以是结构体类型的数据D、可以是任意合法的表达式标准答案:D知识点解析:逻辑运算符两侧的运算对象可以是任意合法的表达式。逻辑表达式的运算结果或者为1(“真”),或者为0(“假”)。17、若有说明inta[3][4];则a数组元素的非法引用是()。A、a[0][2*1]B、a[1][3]C、a[4-2][0]D、a[0][4]标准答案:D知识点解析:此题考查的是数组元素的引用。对于已定义的数组a[M][N],数组元素的正确引用必须满足行下标小于M,列下标小于N且为正整数。此题中,选项D)中列下标值出现溢出。18、下列说法不正确的是()。A、int*ptr;//指针指向整形数据B、char*ptr;//指针的类型是字符型指针C、int**ptr;//指针的类型是双重指针D、int(*ptr)[3];//是一个指针数组,数组共有三个元素,而三个元素是int型指针标准答案:D知识点解析:血(*ptr)[3]是一个数组指针,指针指向一个有3个int型变量的数组。19、有以下程序#include<stdio.h>voidmain(){chars[]={"0laXy"};inti,n=0;for(i=0;s[i]!=0;i++)if(s[i]<=’a’&&s[i]>=’z’)n++;printf("%d\n",n);}程序运行后的输出结果是()。A、0B、2C、3D、5标准答案:A知识点解析:这段程序的功能求出字符串s中字符的ASCII码小于小写字符a并且大于小写字符z的字符的个数。因为小写字符z的ASCII码大于小写字符a的ASCII码,所以满足a的ASCII码并且大于z的ASCII码的字符是不存在的,所以输出0。20、有以下程序:#include<stdio.h>main()(inta[]={1,2,3,4),y,*p=&a[3];--p;y=*p;printf("y=%d\n",y);}程序的运行结果是()。A、y=0B、y=1C、y=2D、y=3标准答案:D知识点解析:程序首先定义了一个一维数组和指针,接着将数组第4个元素的地址赋给“*p”,进行-p使指针p指向了数组的第3个元素;通过“y=*p”,将数组第3个元素的值3赋给了y,所以选项D)正确。21、下面的for语句的循环次数为()。for(x=1,y=0;(y!=19)&&(x<6);x++);A、是无限循环B、循环次数不定C、最多执行6次D、最多执行5次标准答案:D知识点解析:本题考查for循环。只考虑x的取值变化,x从1取到5,可以循环5次,但是并不知道y是如何变化的,有可能出现y=19提前跳出循环的情况,所以是最多执行了5次。22、下列程序的输出结果是()。#include<stdio.h>voidmain(){inta=0,b=1,c=2;if(++a>0‖++b>0)++c;printf("%d,%d,%d",a,b,c);}A、0,1,2B、1,2,3C、1,1,3D、1,2,2标准答案:C知识点解析:本题考查if语句。先判断if语句的条件是否成立,因为“++a=1>0”,所以条件成立,又因为是进行逻辑或运算,在己知其中一个运算对象为真的情况下,不必判断另外一个运算对象的真假,即不进行抖b操作,就可以直接得出整个表达式的值为逻辑1,执行下面的++c。23、有以下程序:#include<stdio.h>main(){intc;while((c=getchar())!=’\n’){switch(c-’3’){case0:case1:putchat(c+4);case2:putchar(c+4);break;case3:putchar(c+3);case4:putchar(c+3);break;}}printf("\n");}从第一列开始输入数据(<CR>代表一个回车符):3845<CR>,则程序输出结果为()。A、77889B、77868C、776810D、77886610标准答案:A知识点解析:题中while循环的条件是:当从键盘读入的字符不是“\n”时,执行while循环。输入第一个字符3时:执行case0,什么也不输出;case1,输出7;case2,输出7;遇到break语句,跳出switch语句。输入第二个字符8时“c-’3’=5”,不执行任何语句。输入第三个字符4时“c-’3’=1”,执行case1输出8:case2,输出8;遇到break语句,跳出switch语句。输入第四个字符5时“c-’3’=2”,执行case2,输出9;遇到break语句,跳出switch语句。24、C语言规定,函数返回值的类型是()。A、由调用该函数时的主调函数类型所决定B、由return语句中的表达式类型所决定C、由调用该函数时系统临时决定D、由定义该函数时所指定的数值类型决定标准答案:D知识点解析:本题考查函数调用时的数值类型。函数调用时,函数返回值的类型既不由主调函数类型所决定,也不由return语句中的表达式类型所决定,更不是由系统临时决定,而是由定义该函数时所指定的数值类型所决定。25、执行下列程序时输入“456<空格>789<空格>123<回车>”,输出结果是()。#include<stdio.h>main(){charm[80];intc,i;scanf("%c",&c);scanf("%d",&i);scanf("%s",&m);printf("%c,%d,%s\n",c,i,m);}A、456,789,123B、4,789,123C、4,56,789,123D、4,56,789标准答案:D知识点解析:scanf函数中的“%c”表示通过键盘只读入一个字符型的数据,“&c”表示将该数据赋值给c,所以c=4。另外,以“%d”格式读入数据时,只有遇到空格或者换行等间隔符时才停止读入,所以i=56,m=789。26、已知下列函数定义:fun(int*b,intc,intd){intk;for(k=0;k<c*d;k++){*b=c+d;b++;}}则调用此函数的正确写法是(假设变量a的说明为inta[10])()。A、fun(*a,6,14);B、fun(&a,6,8);C、fun(a,8,4);D、fun((int)a,8,6):标准答案:C知识点解析:本题考查函数调用时的参数传递。fun函数的调用形式为fun(int*b,intc,intd)。调用数组时,用数组名表示一个指向数组的第一个元素的指针,因此,调用时的形式为“fun(a,8,4)”。27、设Y为整型变量,A=1,A的地址为EF01;B=2,B的地址为EF02;执行语句B=&A;Y=&B;后Y的值()。A、1B、2C、EF01D、EF02标准答案:D知识点解析:&是取地址运算符,“Y=&B”是将B的地址赋给Y,因此,Y值为EF02。28、有以下程序:#include<stdio.h>intf(intt[],intn);main(){inta[4]={1,2,3,4},s;s=f(a,2);printf("%d\n",s);}intf(intt[],intn){if((n>0)&&(n<5))returnt[n+1]+f(t,-1);elsereturn0;}程序运行后的输出结果是()。A、4B、7C、10D、6标准答案:B知识点解析:本题主要考查的是函数的递归调用,子函数f是一个递归函数,所以主函数中执行“f(a,2)”时,其执行过程是“a[3]+f(a,1)=a[3]+a[2]+f(a,0)=7”。29、以下语句定义正确的是()。A、inta[1][4]={1,2,3,4,5};B、floata[3][]={{1,2},{2,3),{3,1}};C、longa[2][3]={{1},{1,2},{1,2,3},{0,0}};D、doublea[][3]={8};标准答案:D知识点解析:本题考查如何对二维数组的元素赋值。选项A),数组第二维的大小是4,但是却赋值了5个元素,数组溢出:选项B),C语言规定,对于二维数组,只可以省略第一个方括号中的常量表达式,而不能省略第二个方括号中的常量表达式;选项C),数组第一维的大小是2,但是赋值超过了2;选项D),在对二维数组元素赋初值时,可以只对部分元素赋初值,未赋初值的元素自动取0。30、下列一维数组说明中,不正确的是()。A、intN:scanf("%d",&N);intb[N];B、floata[]={1,6,6,0,2};C、#defineS10inta[S];D、#defineS10inta[S+5];标准答案:A知识点解析:本题考查一维数组的赋值。一维数组的一般定义格式为:类型说明符数组名[常量表达式]。其中,“[]”中的内容可以是整型常量,也可以是整型表达式。选项A)中的N是一个变量,所以错误。31、下面函数的功能是()。sss(s,t)char*s,*t;{while((*s)&&(*t)&&(*t++==*s++));return(*s-*t);}A、将字符串s复制到字符串t中B、比较两个字符串的大小C、求字符串的长度D、将字符串s接续到字符串t中标准答案:B知识点解析:“*s-*t”的输出实际是比较两个字符的ASCII码值,比较两个字符串的大小。32、有以下程序:#include<stdio-h>#include"string.h"voidfun(char*s[],intn){char*t;inti,j;for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)if(strlen(s[i])>strlen(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\n",ss[0],ss[4]);}程序的运行结果是()。A、xy,aaaaccB、aaaacc,xyC、bcc,aabccD、aabcc,bcc标准答案:A知识点解析:从main函数入手,定义了一个一维数组并赋初值,接着调用函数fun(),函数的功能是:比较数组中各元素的长度,按元素长度从小到大的顺序排列元素,所以执行“fun(ss,5)”函数后,“*ss[]={"xy","bcc","bbcc","aabcc","aaaacc"}”,所以调用printf函数输出ss[0],ss[4]的值分别为xy,aaaacc。33、若已定义:inta[]={0,1,2,3,4,5,6,7,8,9},*p=a,i;其中0≤i≤9,则对a数组元素不正确的引用是()。A、a[p-a]B、*(&a[i])C、p[i]D、a[10]标准答案:D知识点解析:此题考查对一维数组的引用。对于已定义的数组a[M],数组元素的正确引用必须满足下标小于M且为正整数。选项D)中下标值出现溢出。34、以下选项中可用作C程序合法实数的是()。A、.1e0B、3.0e0.2C、E9D、9.12E标准答案:A知识点解析:C程序的合法实数有两种表示形式,一种是小数形式,另一种是指数形式,对于用指数形式表示的实数来说,需要注意的是字母e或E之前必须要有数字,且字母e或E后面的指数必须为整数,所以选项A)为正确答案。35、以下叙述中不正确的是()。A、预处理命令行都必须以#号开始,结尾不加分号B、在程序中凡是以#号开始的语句行都是预处理命令行C、C程序在执行过程中对预处理命令进行处理D、预处理命令可以放在程序中的任何位置标准答案:C知识点解析:本题考查预处理命令的特点。编译预处理命令的特点有:①为了区分一般的语句,预处理命令行都必须以≠}开始,结尾不加分号;②预处理命令可以放在程序中的任意位置;③在程序中凡是以#开始的语句都是预处理命令行。36、以下程序的输出结果是()。#inelude<stdio.h>#defineF(x)2.84+x#definew(y)printf("%d",(int)(y))#defineP(y)w(y)main(){intx=2;P(F(5)*x);}A、12B、13C、14D、16标准答案:A知识点解析:本题考查带参数的宏定义及相关运算。“P(F(5)*x)=P(2.84+5*2)=P(12.84)”,调用“w(12.84)”,输出“(int)(12.84)=12”。37、设有下面的定义:structst{inta;floatb;}d;int*p;要使P指向结构变量d中的a成员,正确的赋值语句是()。A、*p=d.a;B、p=&a;C、p=d.a;D、p=&d.a;标准答案:D知识点解析:本题主要考查按结构数组元素方式引用结构成员。结构体变量的成员引用方法有3种:①结构体变量名.成员名;②指针变量名->成员名;③(*指针变量名).成员名。因为p是指针变量,所以应该将地址值赋给p。38、交换两个变量的值,不允许用临时变量,应该使用下列()位运算符。A、&B、^C、‖D、~标准答案:B知识点解析:按逻辑位运算的特定作用主要有3点:①用按位与运算将特定位清0或保留特定位:②用按位或运算将特定的位置设置为1;③用按位异或运算将某个变量的特定位翻转或交换两个变量的值。39、如果需要打开一个已经存在的非空文件“FILE”并进行修改,正确的语句是()。A、fp=fopen("FILE","ftr");B、fp=fopen("FILE","a+");C、fp=fopen("FILE","w+");D、fp=fopen("FILE","r+");标准答案:D知识点解析:本题考查打开文件函数fopen(),打开文件函数fopen()的调用形式为:fp=fopen(文件名,文件使用方式)。“文件使用方式”说明:方式“r”为以输入方式打开一个文本文件;方式“a+”为以读/写方式打开一个文本文件,保留文件中原有的数据;方式“w+”为以读/写方式建立一个新的文本文件;方式“r+”为以读/写方式打开一个文本文件。二、程序填空题(本题共1题,每题1.0分,共1分。)40、给定程序中,函数fun的作用是:不断从终端读入整数,由变量a统计大于0的个数,用变量C来统计小于0的个数,当输入0时结束输入,并通过形参pa和pb把统计的数据传回主函数进行输出。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include<stdio.h>voidfun(int*px,int*py){/**********found**********/int___1___;sCarlf("%d",&k);/**********found**********/while___2___{if(k>0)a++;if(k<0)c++;/**********found**********/___3___;}*px=a;*py=c;}main(){intx,y;fun(&x,&y);printf("x=%dy=%d\n",x,y);}标准答案:(1)a=0,c=0,k(2)(k!=0)(3)scanf("%d",&k);知识点解析:本题中函数fun的功能是不断从终端读入整数,由变量a统计大于0的个数,用变量c来统计小于0的个数,当输入0时结束输入,然后通过形参pa和pb把统计的数据传回主函数进行输出。因为此函数对于数字的大小有不同的处理方式,所以根据题意首先要区别大于0、小于0和等于0的数字,然后进行统计和程序的进行。然后我们就能想到要使用条件语句来进行,while或者if都可,再利用自增运算符既可以统计,得到结果。三、程序修改题(本题共1题,每题1.0分,共1分。)41、给定程序MODI1.C中函数fun的功能是:将字符串中的字符按逆序输出,但不改变字符串中的内容。例如,若字符串为abed,则应输出:dcba。请改正程序中的错误,使它能计算出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include<stdio.h>/**********found**********/fun(chara){if(*a){fun(a+1);/**********found**********/printf("%c"*a);}}main(){chars[10]="abcd";printf(”处理前字符串=%s\n处理后字符串=",s);fun(s);printf("\n");}标准答案:(1)viidfun(char*a)(2)printf("%c",*a);知识点解析:本题中函数的功能是将字符串中的内容逆序。题干中给出的fun函数通过递归调用自身,实现字符串的逆序。(1)主函数中“fun(s);”语句中的s是数组名,所以在fun函数中参数的定义应该是指针型,“fun(chara)”改为“voidfun(char*a)”。(2)printf函数的调用形式是:printf(格式字符串,输出项表),在格式字符串和输出项表之间有“,”,因此,第二个标识处应该是“printf("%c",*a);”。四、程序设计题(本题共1题,每题1.0分,共1分。)42、请编写函数fun:在形参指针所指的4个整数中找出最大值和最小值,最大的放在a中,最小的放在d中。注意:部分源程序存在PROG1.C中,请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。#inolude<stdio.h>voidNONO();voidfun(int*a,int*b,int*c,int*d){}main(){inta,b,c,d;printf("请输入4个整数:");scanf("%d%d%d%d",&a,&b,&c,&d);printf("原始顺序:%d,%d,%d,%d\n",a,b,c,d);fun(&a,&b,&C,&d);printf("处理后:%d,%d,%d,%d\n",a,b,c,d);NONO();}voidNONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*fp,*wf;inti,a,b,c,d;fp=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<5;i++){facanf(fp,"%d%d%d%d",&a,&b,&c,&d);fun(&a,&b,&c,&d);fprintf(wf,"a=%d,d=%d\n",a,d);}fclose(fp);fclsee(wf);}标准答案:voidfun(int*a,int*b,int*c,int*d){intt;if(*a<*b){t=*a;*a=*b;*b=t;}if(*a<*c){t=*a;*a=*c;*c=t;}if(*a<*d){t=*a;*a=*d;*d=t;}if(*b<*c){t=*b;*b=*c;*c=t;}if(*b<*d){t=*b;*b=*d;*d=t;}if(*c<*d){t=*c;*c=*d;*d=t;}}知识点解析:本题中的函数功能主要是在形参指针所指的4个整数中找出最大值和最小值,最大的放在a中,最小的放在d中。这个题目类似于排序,但是又不是严格的排序,只要重新排序最大值和最小值的位置即可。所以类似于排序,这一题需要相互比较4个数字,然后进行位置的调换。基本思路就是比较相邻的两个数字,如果靠近a的数字比靠近d的数字要大,就不用进行交换,如果靠近a的数字比靠近d的数字小,就进行交换,这样的话最大的数字就会慢慢交换到a的位置,然后最小的数字就会慢慢交换到d的位置。所以根据分析我们就要用到if语句来进行判断和处理,只要经过几轮的if判断大小然后交换,就能实现题目条件所给出的位置的重置,得到要求的结果。首先在主函数main中我们需要的就是四个数字,这四个数字需要手动输入,件程序代码第13~15行,四个数字输入完城后就可以进入fun函数进行数据处理了。进入到fun函数中,只要从a到d进行比较,按照一开始的规则即可,如果a大于b,不变,比较a与c,若a小b,a与b交换位置,交换过后a就大于b了,这样就进行a与c的比较;a与c的比较同理,这样的循环比较,就能发现,每比较一次,较大的数字就能交换到a的位置,较小的数字就离a越来越远,也就是到了d的位置,这样就完成了题目所给出的要求了,最大的数字放在a中,最小的数字放在d中。当新的排序排好后,就可以返回主函数进行输出了。国家二级(C语言)机试模拟试卷第3套一、选择题(本题共39题,每题1.0分,共39分。)1、设已有定义:floatx;,则以下对指针变量p进行定义且赋初值的语句中正确的是()。A、int*p=(float)x;B、float*p=&x;C、floatp=&x;D、float*p=1024;标准答案:B知识点解析:指针是用来存放地址的变量,用(类型名*指针变量名)的形式定义。赋值时应将某个变量地址即&x赋给指针变量,所以选择B。2、设已有定义:floatx;,则以下对指针变量p进行定义且赋初值的语句中正确的是()。A、int*p=(float)x;B、float*p=&x;C、floatp=&x;D、float*p=1024;标准答案:B知识点解析:指针是用来存放地址的变量,用(类型名*指针变量名)的形式定义。赋值时应将某个变量地址即&x赋给指针变量,所以选择B。3、—棵二叉树的前序遍历结果是ABCEDF,中序遍历结果是CBAEDF,则其后序遍历的结果是()。A、DBACEFB、CBEFDAC、FDAEBCD、DFABEC标准答案:B知识点解析:由于该二叉树的前序遍历结果是ABCEDF,显然A结点为根结点,所以后序遍历时A结点是最后遍历的,其后序遍历的结果为CBEFDA。4、以下选项中,不合法的C语言用户标识符是()。A、a_bB、AaBcC、a--bD、_1标准答案:C知识点解析:C语言规定,变量命名必须符合标识符的命名规则,C选项中包含了非法字符“一”,所以错误。标识符由字母、数字或下划线组成,且第一个字符必须是大小写英文字母或者下划线,而不能是数字。5、设有定义:inta=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知识点解析:C语言中if语句后面只跟一条语句时,可以省略大括号。即if语句仅作用于紧随其后的那条语句或者是复合语句的内容,所以A项执行三条语句组成的复合语句;BD两项执行大括号中的三条语句;而C项只执行c=a;。6、C语言中规定,程序中各函数之间()。A、既允许直接递归调用也允许间接递归调用B、不允许直接递归调用也不允许间接递归调用C、允许直接递归调用不允许间接递归调用D、不允许直接递归调用允许间接递归调用标准答案:A知识点解析:本题考查函数调用的基本概念。在函数调用时,只要符合函数的使用,程序中的各个函数间既可以直接调用其他函数,也可以递归调用其自身。7、以下不构成无限循环的语句或语句组是()。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中do后面的语句只执行了一次便结束了循环;B选项中条件while(1)永远成立,所以是死循环;C选项中n的值为10,而循环体为空语句,所以while(n)永远为真,进入死循环;D选项中for语句第二个表达式为空,所以没有判别条件,进入死循环。8、有以下程序:#include<stdio.h>main(){FlLE*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);}以上程序执行后abc.dat文件的内容是()。A、ChinaB、ChinangC、ChinaBeijingD、BeijingChina标准答案:B知识点解析:本题考查函数fwrite的使用。函数fwrite的调用形式为:intfwrite(char*pt,unsignedn,FILE*fp):其功能是把pt所指向的n*size个字节输出到fp所指文件中,第二次调用该函数时,从文件的第一个位置开始写入,之前已有的会被覆盖掉,如果第二次写入的长度没有第一次的长,则后面短出的部分保留原样。9、关系模型允许定义3类数据约束,下列不属于数据约束的是()。A、实体完整性约束B、参照完整性约束C、属性完整性约束D、用户自定义的完整性约束标准答案:C知识点解析:关系模型允许3类数据约束,它们是:实体完整性约束该约束要求关系的主键中属性值不能为空值,这是数据库完整性的最基本要求。参照完整性约束该约束是关系之间相关联的基本约束,它不允许关系引用不存在的元组:即在关系中的外键要么是所关联关系中实际存在的元组,要么就为空值。用户定义的完整性约束用户定义的完整性就是针对某一具体关系数据库的约束条件,它反映某一具体应用所涉及的数据必

温馨提示

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

最新文档

评论

0/150

提交评论