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

下载本文档

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

文档简介

国家二级(C语言)机试模拟试卷21(共9套)(共342题)国家二级(C语言)机试模拟试卷第1套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:根据形参c中指定的英文字母,按顺序打印出若干后继相邻字母,输出字母的大小写与形参c一致,数量由形参d指定。若输出字母中有字母Z或z,则应从A或a开始接续,直到输出指定数量的字母。例如:c为’Y’,d为4,则程序输出ZABC;c为’z’,d为2,则程序输出ab。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在文件BIANK1.C中,不得增行或删行,也不得更改程序的结构!#include<stdio.h>#pragmawarning(dLsable:4996)voidfun(charc,intd){inti;charA[26],a[26],*ptr;/*********found*********/for(i=0;i<【1】;i++){A[i]=’A’+i;a[i]=’a’+i;}/*********found*********/if((c>=’a’)&&(c【2】’z’))ptr=a;elseptr=A;/*********found*********/for(i=1;i<=d;i++)printf("%c",ptr[(c-ptr[0]+i)%【3】]);}main(){charc;intd;printf("pleaseinputc&d:\n");scanf("%c%d",&c,&d);fun(c,d);}标准答案:(1)26(2)<=(3)26知识点解析:函数fun()中首先将大写字母按照字母表的顺序存放到数组A中,将小写字母按照字母表的顺序存放到数组a中;然后判断输入的字符c,若字符c是小写字母,则将指针ptr指向数组a,若是大写字母,将指针ptr指向数组A;然后使用变量i遍历1到d,输出ptr所指数组中,偏移量为c-ptr[0]+i的元素,若偏移量c-ptr[0]+i>=26,则对26求余,循环输出数组开始部分的元素。注意:题意要求输出当前字符的后继字符,所以c-ptr[0]+i是将当前字符c减去ptr所指元素,然后与i相加,得到后继第i个字符的下标。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODII.C中,函数fun的功能是:分别统计出形参str所指的字符串中的大写字母和小写字母的个数,并传递回主函数输出。例如,若str所指的内容为”BAY23Kill”,其中大写字母数为4,小写字母数为3,则应输出:c0=4,c1=3。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include<stdio.h>#include<string.h>#pragmawarninq(disable:4996)voidfun(char*str,int*c0,int*c1){intk;/*********found*********/c0=c1=0;/*********found*********/for(k=1;k<strlen(str);k++){/*********found*********/if((str[k]>=’A’)&&(str[k]<=’z’))*c0++;if((str[k]>=’a’)&&(str[k]<=’z’))(*c1)++;}}main(){charstr[100];intc0,c1;printf("inputstring:");scanf("%s",str);fun(str,&c0,&c1);printf("c0=%d,c1=%d\n",c0,c1);}标准答案:(1)*c0=*c1=0;(2)fof(k=0;k知识点解析:函数fun()的参数分别是str,c0,c1,其中str指向待处理的字符串,c0所指变量用来统计字符串中大写字母的个数,c1所指变量用来统计字符串中小写字母的个数。首先对c0和c1所指变量赋初值为0,然后遍历字符串str,若当前字符str[i]的ASCII码在’A’到’z’之间,则对c0所指变量的值自增1,若当前字符str[i]的ASCII码在’a’到’z’之间,则对c1所指变量的值自增1,由于c0和c1都是指针变量,所以在使用地址中存储的数据时,需要对它们进行解引用。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,其功能是:统计出x所指数组中能被e整除的元素个数,通过函数值返回主函数;同时,计算不能被e整除的元素之和,放到形参sum所指的存储单元中。例如,当数组x内容为1,7,8,6,10,15,11,13,29,31,整数e内容为3时,输出结果应该是:n=2,sum=110注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。#include<stdio.h>#pragmawarning(disable:4996)#defineN10intfun(intx[],inte,int*sum){}main(){voidNONO();intx[N]={1,7,8,6,10,15,11,13,29,31},e=3,n,sum;n=fun(x,e,&sum);printf("n=%d,sum=%d\n",n,sum);NONO();}voidNONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/inti,j,X[10],n,e,sum;FILE*rf,*wf;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<5;i++){for(j=0;j<10;j++)fscanf(rf,"%d",&x[j]);fscanf(rf,"%d",&e);n=fun(x,e,&sum);fprintf(wf,"%d,%d\n",n,sum);}fclose(rf);fclose(wf);}标准答案:intfun(intx[],inte,int*sum){inti,count=0;*sum=0;for(i=0;i知识点解析:程序首先定义循环变量i,整型变量count,count赋初值为0,count用来统计可以被e整除的元素个数;由于sum是main函数传入的指针变量,用来存放不能被e整除的元素之和,所以程序需要对sum所指变量赋初值为0;接着通过for循环变量数组x,将x[i]对e求余,若余数为0,则当前x[i]可以被e整除,将count自增1,若余数不为0,则x[i]不能被e整除,将x[i]累加到sum所指变量中,最后将count作为函数返回值返回。国家二级(C语言)机试模拟试卷第2套一、选择题(本题共39题,每题1.0分,共39分。)1、下列叙述中正确的是()。A、程序执行的效率与数据的存储结构密切相关B、程序执行的效率只取决于程序的控制结构C、程序执行的效率只取决于所处理的数据量D、以上说法均错误标准答案:A知识点解析:程序执行的效率与数据的存储结构、数据的逻辑结构、程序的控制结构、所处理的数据量等有关。2、设数据元素的集合D={1,2,3,4,5},则满足下列关系R的数据结构中为线性结构的是()。A、R={(1,2),(3,4),(5,1)}B、R={(1,3),(4,1),(3,2),(5,4)}C、R={(1,2),(2,3),(4,5)}D、R={(1,3),(2,4),(3,5)}标准答案:B知识点解析:关系R中的每个结点由两个部分构成,分别是数据域和指针域。选项B)中可以看出,元素序列为5→4→1→3→2,符合线性结构的条件。选项A)、选项C)和选项D)中分别有两个根结点,不符合线性结构的条件。所以答案选B)。3、下列不合法的用户标识符是()。A、j2_KEYB、DoubleC、4dD、_8_标准答案:C知识点解析:在C语言程序中,合法标识符的命名规则是:标识符可以由字母、数字和下划线组成,并且第一个字符必须是字母或下划线。4、设有定义:doublex=2.12;,则以下各项中不能完整输出变量x值的语句是()。A、printf("x=%5.of\n",x);B、printf("x=%f\n",x);C、printf("x=%lf\n",x);D、printf("x=%O.5f\n",x);标准答案:A知识点解析:本题考查printf函数的格式输出,“格式控制字符串”部分为“%f”表示按照浮点型输出,选项B正确;加入长度格式符1即“%1”表示按照双精度浮点型输出,选项C正确;若要控制输出精度,则需以“.”开头,后跟十进制整数,如“%.2f”或“%O.2f”,选项D正确;控制输出宽度则是用整数表示,如“%5f”,选项A中“%5.Of’’表示输出宽度为5,右对齐,小数点后保留位数为0,所以结果输出为2,不能完整输出x,答案选A。5、若定义函数int*func(),则函数func的返M值为()。A、一个实数B、一个指向整型变量的指针C、一个指向整型函数的指针D、一个整型函数的入口地址标准答案:B知识点解析:今题考查函数返回值。fun函数的返回值类型为int*类型,即函数返回一个指向整型变量的指针。6、若有定义语句:char*s1="OK",*s2="ok";以下选项中,能够输出“OK”的语句是()。A、if(strcmp(s1,s2)!=0)puts(s2);B、if(strcmp(s1,s2)!=0)puts(s1);C、if(strcmp(s1,s2)==1)puts(s1);D、if(strcmp(s1,s2)==0)puts(s1);标准答案:B知识点解析:strcmp(s1,s2)是字符串比较函数,比较规则是两个字符串自左向右逐个字符相比(按照ASCII码值大小),以第一个不相同的字符的大小作为比较结果。因为;’0’<’0’,所以strcmp(s1,s2)为负值,只有B选项正确。7、下列模式中,能够给出数据库物理存储结构与物理存取方法的是()。A、内模式B、外模式C、概念模式D、逻辑模式标准答案:A知识点解析:数据库管理系统的三级模式结构由外模式、模式和内模式组成。外模式,或子模式,或用户模式,是指数据库用户所看到的数据结构,是用户看到的数据视图。模式,或逻辑模式,是数据库中对全体数据的逻辑结构和特性的描述,是所有用户所见到的数据视图的总和。外模式是模式的一部分。内模式,或存储模式,或物理模式,是指数据在数据库系统内的存储介质上的表示,即对数据的物理结构和存取方式的描述。8、软件生命周期是指()。A、软件产品从提出、实现、使用维护到停止使用退役的过程B、软件从需求分析、设计、实现到测试完成的过程C、软件的开发过程D、软件的运行维护过程标准答案:A知识点解析:通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期。也就是说,软件产品从考虑其概念开始,到该软件产品不能使用为止的整个时期都属于软件生命周期。9、设变量x和y均已正确定义并赋值,以下if语句中,在编译时将产生错误信息的是()。A、it(x++);B、if(x>y&&y!=0);C、ifi(x>y)x-elsey++;D、if(y<0){;}elsex++;标准答案:C知识点解析:选项C)中,if(x>y)后面的“x一”是一个表达式而不是一个语句,所以在编译时会产生错误信息。10、下列说法正确的是()。A、int(**def)[10];----def指向一个指针,该指针指向10个整型变量构成的数组B、int*(*gh[10]);---gh指向一个指针,该指针指向10个整型变量构成的数组C、int*(*gh[10]);---gh是一个指针,指向由10个指向整型变量的指针构成的数组D、A,C均正确标准答案:D知识点解析:int*(*gh[10]):--gh是一个指针,指向由10个指向整型变量的指针构成的数组,int(**def)[10]----def指向一个指针,该指针指向10个整型变量构成的数组。11、有以下程序:intf1(doublea){returna*a;}intf2(intx,inty}{doublea,b;a=f1(x);b=f1(y);returna+b;}main(){doublew;w=f2(2.1,4.0);}程序执行后,变量w的值是()。A、20.21B、20C、20.0D、0.0标准答案:C知识点解析:本题考查函数调用的使用。计算w的时候,先调用f2函数,f2函数的公式是“a+b”,计算a和b的时候又调用到f1函数,f1的函数是“a*a”,因此,w的计算公式为:w=(double)[(int)(2.1*2.1)+(int)(4.0*4.0)]=20.0。12、若有说明“intm[3][4]={3,9,7,8.5},(*q)[4];”和赋值语句“q=m;”,则对数组元素“m[i][j](其中0<=i<3,0<=j<4)”值的正确引用为()。A、(q+i)[j]B、*q[i][j]C、*(*q[i]+j)D、*(*(q+i)+j)标准答案:D知识点解析:*(q+i)指向第i行首地址,*(*(q+i)+i)代表第i行第i个元素。13、以下选项中正确的定义语句是()。A、doublea;b;B、doublea=b=7;C、doublea=7,b=7;D、double,a,b;标准答案:C知识点解析:同一类型变量的定义时,不同变量之间需要用“,”分隔;定义变量时初始化赋值时不能用等号连接;变量类型说明后面不能用逗号,而是用空格分离。14、若变量已正确定义,有以下程序段:i=0:doprintf("%d,",i);while(i++);printf("%d\n",i);其输出结果是()。A、0,0B、0,1C、1,1D、程序进入无限循环标准答案:B知识点解析:do…while循环的执行过程如下:①执行do后面的循环体中的语句。②计算while后一对圆括号中表达式的值。当值为非0时,转去执行步骤①;当值为0时,执行步骤③。③退出do…while循环。对于本题变量i的初始值等于“0”,接着执行do后面的循环体中的语句,输出变量i的值0。再判断while后面括号中表达式i++的值,其值为0,所以循环结束。此时变量i的值经过自加已经变为1,所以再次输出i的值“1”。15、有以下程序:#include<stdio.h>voidfun(inta,intb){intt;t=a;a=b;b:t;}main(){intc[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("\n");}程序运行后的输出结果是()。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中的元素的值并没有变化,选择A。16、以下程序的输出结果是()。#include<stdio.h>intm=13;intfun(intx,inty){intm=2;return(x*y-m);}main(){inta=7,b=6;printf(’’%d’’,fun(a,b)/m);}A、1B、3C、7D、10标准答案:B知识点解析:本题考查的是函数调用时的参数的作用域。在函数调用时,当全局变量和局部变量的名称相同时,在局部变量的作用域内,局部变量起作用,因而在fun函数内m的应该等于2,main中的m为13,所以返回值为7×6-2=40,而fun(a,b)/m值为40/13=3。17、若有以下程序段:intr=8;pfinff("%d\n",r>>1);输出结果是()。A、16B、8C、4D、2标准答案:C知识点解析:C语言中“>>”是二进制的右移运算符,右移相当于将原数做除二操作,它将原数右移相应位数,并将移出的位信息舍去,在高位补0。本题中8的二进制为00001000,右移一位得到00000100,所以输出4。18、不能正确表示数学式的表达式是()。A、a/c*bB、a*b/cC、a/b*cD、a*(b/E、C标准答案:C知识点解析:/号和*号的优先级处于平级,结合性都是自左至右。所以选择C,表示。19、以下关于typedef的叙述错误的是()。A、用typedef可以增加新类型B、typedef只是将已存在的类型用一个新的名字来代替C、用typedef可以为各种类型说明一个新名,但不能用来为变量说明一个新名D、用typedef为类型说明一个新名,通常可以增加程序的可读性标准答案:A知识点解析:typedef并不是增加了新类型。而是用一个新名字替代已存在的类型,不能为变量说明一个新名,使用typedef可以增强程序的可移植性。所以A选项错误。20、若有以下程序段:intr=8:prinff(“%d\n”,r>>1);程序运行后的输出结果是()。A、16B、8C、4D、2标准答案:C知识点解析:本题考查位运算,属于基础知识,题目中将整型变量8,二进制表达为00001000,右移一位为00000100,即4.选项C正确。21、待排序的关键码序列为(15,20,9,30,67,65,45,90),要按关键码值递增的顺序排序,采取简单选择排序法,第一趟排序后关键码15被放到第()个位置。A、2B、3C、4D、5标准答案:B知识点解析:选择排序的基本思想是扫描整个线性表,从中选出最小的元素,将它交换到表的最前面,然后对剩下的子表采用同样的方法,直到子表为空。所以第一趟排序后,将选出最小的元素9放在第一个位置,元素15则被交换放在第三个位置。22、在三级模式之间引入两层映像,其主要功能之一是()。A、使数据与程序具有较高的独立性B、使系统具有较高的通道能力C、保持数据与程序的一致性D、提高存储空间的利用率标准答案:A知识点解析:数据库管理系统在数据库的三级模式之间提供了两层映像,保证了数据库中数据的较高的逻辑独立性和物理独立性。23、有以下程序#includevoidmain(){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。24、以下叙述中正确的是()。A、复合语句在语法上包含多条语句,其中不能定义局部变量B、花括号对{}只能用来表示函数的开头和结尾,不能用于其他目的C、空语句就是指程序中的空行D、当用scanf从键盘输入数据时,每行数据在没按下回车键(Enter键)前,可以任意修改标准答案:D知识点解析:复合语句可以包含多条语句,在其中可以定义局部变量,所以A错误。花括号对{}不仅用来表示函数的开头和结尾,也可以用于表示复合语句,所以B错误。C语言只有分号“;”组成的语句称为空语句,空语句是什么也不执行的语句,显然空语句不是空行。所以C错误。25、以下叙述中正确的是()。A、在C语言中,预处理命令行都以"#"开头B、预处理命令行必须位于C源程序的起始位置C、#include必须放在C程序的开头D、C语言的预处理不能实现宏定义和条件编译的功能标准答案:A知识点解析:考查文件包含处理。文件包含命令的功能是把指定的文件添加到预处理部分,从而把指定的文件和当前的源程序文件连接起来,该文件则包含了程序要调用的函数的声明。由此,选项B)、C)、D)表述错误。答案选A)。26、下列叙述中正确的是()。A、有一个以上根结点的数据结构不一定是非线性结构B、只有一个根结点的数据结构不一定是线性结构C、循环链表是非线性结构D、双向链表是非线性结构标准答案:B知识点解析:线性结构应满足:有且只有一个根结点与每个结点最多有一个前件,也最多有一个后件,所以B正确。所以有一个以上根结点的数据结构一定是非线性结构,所以A错误。循环链表和双向链表都是线性结构的数据结构。27、由以下while构成的循环,循环体执行的次数是()。intk=0;while(k=1)k++;A、有语法错误,不能执行B、一次也不执行C、执行一次D、无限次标准答案:D知识点解析:本题考查while语句,while语句的语义是:计算表达式的值,当值为真(非O)时,执行循环体语句。k=1为赋值语句,即k的值等于1。while(k=1)=while(1),是死循环,执行无限次。因此D选项正确。28、某循环队列的存储空间为Q(1:m),初始状态为front=rear=m。现经过一系列的入队操作和退队操作后,front=m,rear=m-1,则该循环队列中的元素个数为()。A、m-1B、mC、1D、0标准答案:A知识点解析:循环队列长度为m,由初始状态为front=rear=m,可知此时循环队列为空。入队运算时,首先队尾指针进1(即lear+1),然后在lear指针指向的位置插入新元素。特别的,当队尾指针rear=m+1时,置rear=1。退队运算时,排头指针进1(即front+1),然后删除front指针指向的位置上的元素,当排头指针front=m+1时,置front=1。从排头指针front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素均为队列中的元素。如果rear-front>0,则队列中的元素个数为rear-front个;如果rear-front<0,则队列中的元素个数为rear-front+m。该题中m-1<m,即rear-front<0,则该循环队列中的元素个数为(m-1)-m+m=m-1。故选A选项。29、若有以下程序#include<stdio.h>voidsp(int*a){intb=2;*a=*a*2;printf("%d,",*a);a=&b;*a=*a*2;printf("%d,",*a);}main(){intk=3;sp(&k);printf("%d\n",k);}则程序的输出结果是A、6,12,12B、6,4,3C、6,4,6D、9,4,9标准答案:C知识点解析:首先在主函数中给整型变量k赋值为3,调用sp函数,将变量k的地址作为实参传递给形参指针变量a;在sp函数中,*a=*a*2;即结果为6,通过printf()函数输出。整型变量b的地址赋给指针变量a,再执行*a=*a*2;,即结果为4,通过printf()函数输出。返回主函数,输出k的值6。因此C选项正确。30、下面描述中不属于数据库系统特点的是A、数据共享B、数据完整性C、数据冗余度高D、数据独立性高标准答案:C知识点解析:数据库系统的特点为高共享、低冗余、独立性高、具有完整性等,C错误。31、下面属于系统软件的是A、财务管理系统B、数据库管理系统C、编辑软件WordD、杀毒软件标准答案:B知识点解析:计算机软件按功能分为应用软件、系统软件、支撑软件(或工具软件)。系统软件是管理计算机的资源,提高计算机的使用效率,为用户提供各种服务的软件,如操作系统、数据库管理系统、编译程序、汇编程序和网络软件等,B选项正确。A、C、D选项为应用软件。32、若有定义:inta;floatb;doublec;,程序运行时输入:a=1,b=2,c=3<回车>,能把值1输入给变量a、值2输入给变量b、值3输入给变量c的输入语句是A、scanf("a=%d,b=%f,c=%lf",&a,&b,&c);B、scanf("%d%f%lf",&a,&b,&c);C、scanf("a=%d,b=%lf,c=%lf",&a,&b,&c);D、scanf("a=%d,b=%f,c=%f",&a,&b,&c);标准答案:A知识点解析:格式字符d,输入十进制整数;格式字符f,输入浮点数;格式字符lf,输入双精度浮点数。除了格式说明字符和附加格式字符外,如果还有其他字符,则在输入数据时要求按一一对应的位置原样输入这些字符。程序运行时输入:a=1,b=2,c=3,则scanf函数格式控制串对应的应该是"a=%d,b=%f,c=%lf",A选项正确。33、下面可以作为软件设计工具的是A、系统结构图B、数据字典(DD)C、数据流程图(DFD图)D、甘特图标准答案:A知识点解析:程序设计分为:结构化程序设计,面向对象的程序设计。结构化设计方法使用的描述方式是系统结构图,所以A选项正确。34、有如下程序#include<stdio.h>main(){inti,*ptr;intarray[5]={5,3,1};for(ptr=array,i=0;i<5;i++,ptr++){if(*ptr==0)putchar(’X’);elseputchar(’A’+*ptr);}printf("\n");}程序运行后的输出结果是A、FDBXXB、FFFXXC、FDBBBD、ABCDE标准答案:A知识点解析:在对数组进行初始化时,如果对数组的全部元素赋以初值,定义时可以不指定数组长度,如果被定义数组的长度与初值个数不同,则数组长度不能省略;如果在说明数组时给出了长度,但没有给所有的元素赋予初始值,而只依次给前面的几个数组元素赋予初值,那么C语言将自动对余下的元素赋初值,则array={5,3,1,0,0}。程序执行过程为:执行for循环,将数组首地址赋给指针ptr,依次遍历每一个元素,如果数组元素为0则输出’X’,如果不为0则按照字母表输出字符’A’后第array[i]个字符。程序运行后的输出结果为:FDBXX,A选项正确。35、有以下程序#include<stdio.h>main(){inta,b;for(a=0;a<3;a++){scanf("%d",&b);switch(b){default:printf("%d,",b++);case1:printf("%d,",b++);case2:printf("%d,",b++);}}}程序运行时输入:123<回车>,则输出结果是A、1,2,3,2,3,3,B、1,2,3,C、1,2,2,3,4,5,D、1,1,1,2,2,3标准答案:C知识点解析:程序在执行switch语句时,根据switch后面表达式的值找到匹配的入口标号,执行对应的case语句,之后不再进行判断,继续执行此case后面的语句,并且各个case和default的出现次序不影响执行结果,即题目中的default放在开始位置,与放在最后是一样的结果;运算符"++"放在变量后面时,表示先执行其他操作,再将变量+1。本题,第一次循环输入b=1,执行case1,输出1,再执行case2,输出2,第二次循环输入b=2,执行case2输出2,第三次循环,输入b=3,没有case与其对应,故执行default输出b=3,接着执行case1:,输出4,再执行case2,输出b=5,至此退出for语句。因此,最后输出为1,2,2,3,4,5,答案为C选项。36、在源程序的开始处加上#include<stdio.h>进行文件引用的原因,以下叙述正确的是A、stdio.h文件中包含标准输入输出函数的函数说明,通过引用此文件以便能正确使用printf、scanf等函数B、将stdio.h中标准输入输出函数链接到编译生成的可执行文件中,以便能正确运行C、将stdio.h中标准输入输出函数的源程序插入到引用处,以便进行编译链接D、将stdio.h中标准输入输出函数的源程序插入到引用处,以便进行编译链接标准答案:A知识点解析:stdio.h文件中包含标准输入输出函数的函数说明,预处理指令#include<stdio.h>是使程序可以去该文件中找到printf,scanf等函数以便使用,因此答案为A选项。37、下列叙述中正确的是A、软件是程序、数据和文档B、软件是程序和数据C、软件是算法和数据结构D、软件是算法和程序标准答案:A知识点解析:计算机软件由两部分组成:一是机器可执行的程序和数据;二是机器不可执行的,与软件开发、运行、维护、使用等有关的文档。故选A选项38、若文件指针fp已正确指向文件,ch为字符型变量,以下不能把字符输出到文件中的语句是A、fget(fp,ch);B、fputc(ch,fp);C、fprintf(fp,"%c",ch);D、fwrite(&ch,sizeof(ch),1,fp);标准答案:A知识点解析:fgetc()从文件读入一个字符到指定变量。fputc()将指定字符写入fp文件中,fprintf(),fwrite()均是写入文件操作函数。因此选项B,C,D错误。答案为A选项39、下列关于类、对象、属性和方法的叙述中,错误的是()。A、类是对一类具有相同的属性和方法对象的描述B、属性用于描述对象的状态C、方法用于表示对象的行为D、基于同一个类产生的两个对象不可以分别设置自己的属性值标准答案:D知识点解析:类是对一类具有相同的属性和方法对象的描述,属性用于描述对象的状态,方法用于表示对象的行为,基于同一个类产生的两个对象是可以分别设置自己的属性值。二、程序填空题(本题共1题,每题1.0分,共1分。)40、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun的功能是:将N×N矩阵中元素的值按列向右移动1个位置,右边被移出矩阵的元素绕回左边第1列。例如,N=3,有下列矩阵123456789计算结果为:312645978请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#defineN4voidfun(int(*t)[N]){inti,j,x;for(i=0;i<【1】;i++){x=t[i][【2】];for(j=N-1;j>0;j--)t[i][j]=t[i][j-1];t[i][【3】]=x;}}main(){inti,j,t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10};printf("Theorriginalarray:\n");for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%2d",t[i][j]);printf("\n");}fun(t);printf("\nTheresultis:\n");for(i=0;i<N;i++){for(j=0;j<N;j++)pr2ntf("%2d",t[i][j]);printf("\n");}}标准答案:(1)N(2)N-1(3)0知识点解析:填空1:因为是N×N的矩阵,所以行列数是相同的。第一个for循环用来循环行,因此填入一个循环界限N。填空2:此语句将移出矩阵的元素暂存,移出矩阵的元素的列下标为N-1,因此填入N-1。填空3:此语句将移出矩阵的元素放人最左边,也就是第一列,第一列元素的列下标为0,因此填入0。三、程序修改题(本题共1题,每题1.0分,共1分。)41、给定程序MODI1.C中函数fun的功能是:求整数x的y次方的低3位值。例如,整数5的6次方为15625,此值的低3位值为625。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#includelongfun(intx,inty,long*p){inti;longt=1;/*************found*************/for(i=1;i标准答案:(1)for(i=1;i<=y;i++)(2)t=t%1000;知识点解析:(1)第一个标识下的“for(i=1;i四、程序设计题(本题共1题,每题1.0分,共1分。)42、请编写函数fun,其功能是:计算并输出当x<0.97时下列多项式的值,直到|Sn一Sn-1|<0.000001为止。例如,在主函数中从键盘给x输入0.21后,输出为:s=1.100000。注意:部分源程序在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include{}includedoublefun(doublex){}NONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf;inti;doublesfx;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%1f",&x);s=fun(x);fprintf(wf,"%lf\n",s);}fclose(rf);fclose(wf);}main(){doublex,s;printf("Inputx:");scanf("%lf”,&x);s=fun(x);printf("s=%f\n",s);NONO();}标准答案:intn=1;/*循环计数*/doublesn=1;/*累计数*/doublexn=1,xn1=0;/*x的n值,以及x的n-1值;*/while(fabs(xn—xnl)>=0.000001)/*绝对值是否满足条件*/{xn=xn*x*(0.5一n+1)/n;/*表达式分解以后xn=(xn一1)*x*(0.5一n+1)/n*/n+=1;sn+=xn;/*sn累加上xn*/}return(sn);知识点解析:(1)根据题干中给出的数列,推出每一项分子是在前一项分子的基础上乘以(0.5.n+1)*x,分母则为阶乘,也就是在前一项分母的基础上乘以n。(2)在循环中求得每一项,然后对其进行累加求和。国家二级(C语言)机试模拟试卷第3套一、选择题(本题共40题,每题1.0分,共40分。)1、算法的有穷性是指()。A、算法程序的运行时间是有限的B、算法程序所处理的数据量是有限的C、算法程序的长度是有限的D、算法只能被有限的用户使用标准答案:A知识点解析:算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。有穷性是指算法程序的运行时间是有限的。2、数据库系统的核心是()。A、数据模型B、软件开发C、数据库设计D、数据库管理系统标准答案:D知识点解析:数据库管理系统DBMS是数据库系统的核心。DBMS是负责数据库的建立、使用和维护的软件。:DBMS建立在操作系统之上,实施对数据库的统一管理和控制。用户使用的各种数据库命令以及应用程序的执行,最终都必须通过DBMS。另外,DBMS还承担着数据库的安全保护工作,按照DBA所规定的要求,保证数据库的完整性和安全性。3、在面向对象方法中,不属于"对象"基本特点的是()。A、一致性B、分类性C、多态性D、标识唯一性标准答案:A知识点解析:对象有如下一些基本特点:标识唯一性、分类性、多态性、封装性、模块独立性好。所以选择A)。4、某二叉树中度为2的结点有10个,则该二叉树中有()个叶子结点。A、9B、10C、11D、12标准答案:C知识点解析:根据二叉树的性质3:对任何一棵二叉树,度为0的结点(即叶子结点)总是比度为2的结点多一个。5、下列4个程序中,完全正确的是()。A、#includemain();{/*programming*/printf("programming!\n");}B、#includemain(){/*/programming/*/pfintf("programming!ha");}C、#includemain(){/*/programming*/*/printf("programming!\n");}D、includemain(){/*programming*/printf("programming!\n");}标准答案:B知识点解析:选项A中,main()函数后面的分号是错误的,C语言在函数名后面不能有分号;在C语言中注释内容必须放在“/*”和“*/”之间,“/*”和“*/”必须成对出现,按语法规定在注释之间不可再嵌套“/*”和“*/”,选项C的程序段中注释语句之间有嵌套;C语言用#include命令行来实现文件包含的功能。#include命令行的形式为:#include“文件名”,选项D中的include前面少了一个≠符号。6、在pnntf的格式字符中,e格式字符的作用是()。A、以十六进制无符号形式输出整数B、以带符号的十进制形式输出整数C、以指数形式输出实数D、以字符形式输出,且只输出一个字符标准答案:C知识点解析:本题考查printf函数的格式。格式字符“e”或者“E”都表示以指数形式输出单精度或双精度数。7、下列定义数组的语句中,正确的是()。A、#defineN10intx[N];B、intN=10;intx[N];C、intx[0…10];D、intx[];标准答案:A知识点解析:数组说明的一般形式为:类型说明符数组名[常量表达式]。B选项中N是变量,不能用变量定义数组长度。C选项中数组长度是非法的一串数字。定义数组时必须为其指明长度,D选项中数组长度为空,所以非法。8、C语言中允许用外部说明来指定变量、函数和其他标识符的特征,这里所说的外部指的是()。A、冠以关键字externB、位置在函数体外部C、作用范围是全程的D、位置在函数的外部标准答案:D知识点解析:C语言中允许用位置在函数外部的说明来指定变量、函数和其他标识符的特征。9、将E-R图转换为关系模式时,实体和联系都可以表示为()。A、属性B、键C、关系D、域标准答案:C知识点解析:从E-R图到关系模式的转换是比较直接的,实体与联系都可以表示成关系,E-R图中属性也可以转换成关系的属性。10、对关系S和R进行集合运算,结果中既包含S中的所有元组也包含R中的所有元组,这样的集合运算称为()。A、并运算B、交运算C、差运算D、积运算标准答案:A知识点解析:关系的并运算是指由结构相同的两个关系合并,形成一个新的关系,新关系中包含两个关系中的所有元组。11、设有下面的定义: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。12、有以下程序:#include<stdio.h>main(){chara=4:printf("%d\n",a=a<<1);}程序运行后的输出结果是()。A、16B、8C、40D、4标准答案:B知识点解析:本题考查位运算,题目中将4向左移一位然后重新赋值给a,4左移一位为8,程序运行结果为8,选项B正确。13、在E-R图中,用来表示实体联系的图形是()。A、椭圆形B、矩形C、菱形D、三角形标准答案:C知识点解析:在E-R图中实体集用矩形,属性用椭圆,联系用菱形。14、以下关于结构化程序设计的叙述中正确的是A、结构化程序使用goto语句会很便捷B、在C语言中,程序的模块化是利用函数实现的C、一个结构化程序必须同时由顺序、分支、循环三种结构组成D、由三种基本结构构成的程序只能解决小规模的问题标准答案:B知识点解析:滥用goto语句将使程序的流程毫无规律,可读性差,对于初学者来说尽量不要使用,所以A错误,一个结构化程序可以包含顺序、分支、循环结构中的一种或多种,所以C错误,由三种基本结构构成的程序可以解决任何复杂的问题,所以D错误。15、以下数据结构中,属于非线性数据结构的是()。A、栈B、线性表C、队列D、二叉树标准答案:D知识点解析:二叉树属于非线性结构。栈是一种特殊的线性表,这种线性表只能在固定的一端进行插入和删除操作;队列可看作是插入在一端进行,删除在另一端进行的线性表。16、以下叙述中正确的是()。A、程序设计的任务就是编写程序代码并上机调试B、程序设计的任务就是确定所用数据结构C、程序设计的任务就是确定所用算法D、以上三种说法都不完整标准答案:D知识点解析:程序设计是指设计、编程、调试程序的方法和过程,通常分为4个阶段:①问题建模;②算法设计;③编写代码;④编译调试。17、在三级模式之间引入两层映像,其主要功能之一是()。A、使数据与程序具有较高的独立性B、使系统具有较高的通道能力C、保持数据与程序的一致性D、提高存储空间的利用率标准答案:A知识点解析:数据库管理系统在数据库的三级模式之问提供了两层映像,保证了数据库中数据的较高的逻辑独立性和物理独立性。18、下列程序的运行结果为()。#include<stdio.h>voidabc(char*str){inta,b,i,j;for(i=j=0;str[i]!=’\0’;i++)if(str[i]!=’a’)str[j++]=str[i];str[j]=’\0’;}voidmain(){charstr[]="abcdef";abc(str);printf("str[]=%s",str);}A、str[]=bcdefB、str[]=abcdefC、str[]=aD、str[]=ab标准答案:A知识点解析:本题考查函数调用是的参数传递。通过函数abc的执行,将字符串中的字母a去掉,保留剩下的,由于是通过指针调用,所以改变字符串的结果。19、下列关于栈叙述正确的是()。A、算法就是程序B、设计算法时只需要考虑数据结构的设计C、设计算法时只需要考虑结果的可靠性D、以上三种说法都不对标准答案:D知识点解析:算法是指解题方案的准确而完整的描述,算法不等于程序,也不等于计算方法,所以A)错误。设计算法时不仅要考虑对数据对象的运算和操作,还要考虑算法的控制结构。20、以下叙述中正确的是()。A、在C语言程序中,main函数必须放在其他函数的最前面B、每个后缀为.C的C语言源程序都可以单独进行编译C、在C语言程序中,只有main函数才可单独进行编译D、每个后缀为.C的C语言源程序都应该包含一个main函数标准答案:B知识点解析:C语言是一种成功的系统描述语言,具有良好的移植性,每个后缀为.C的C语言源程序都可以单独进行编译。21、有以下程序:#includemain(){char*s={"ABC"};do{printf("%d",*s%10);s++:}while(*s);}注意:字母A的ASCII码值为65,程序运行后的结果是()。A、5670B、656667C、567D、ABC标准答案:C知识点解析:每进行一次循环,将输出s指向字母的ASCII码值除以10的余数。字符A的ASCII码值为65,第一次输出65%10的余数5,执行s++后,指针指向字母B;第二次输出66%10的余数6,执行s++后,指针指向字母c;第三次输出67%10的余数7,执行s++后,指针指向串结束标志’\0’,’\0’对应ASCII值为0,即*s等于0,退出循环。因此,输出结果为567。22、有以下程序:#include<stdio.h>#defineN8voidfun(int*x,inti){*x=*(x+i)+1;}main(){inta[N]={1,2,3,4,5,6,7,8},i;fun(a,2);for(i=0;i<N/2;i++){printf(’’%d’’,a[i]);}printf(’’\n’’);}程序运行后的输出结果是()。A、1313B、3234C、4234D、1234标准答案:C知识点解析:函数“fun(int*x,inti)”的功能是把数组元素x[i]的值加1赋给x[0]。所以在主函数中执行fun(a,2)后,数组元数a[0]的值等于4。然后在for循环语句中,输出数组a中的前4个元素的值,分别是4、2、3、4。23、以下函数实现按每行8个输出w所指数组中的数据:#includevoidfun(int:*w,intn){inti;for(i=0;iA、if(i/8==0)printf(“\n”);B、if(i/8==0)continue;C、if(i%8==0)printf(“\n”);D、if(i%8==0)continue;标准答案:C知识点解析:要按照每行8个输出数据的话,横线处语句的功能应该为:当i是8的倍数时(即i%8==0),输出一个换行符。因此C选项正确。24、若有以下程序:#includemain(){inta=-2,b=0;do{++b;}while(a++);printf("%d,%d\n",a,b);}则程序的输出结果是()。A、1,3B、0,2C、1,2D、2,3标准答案:A知识点解析:本题重点考查do…while语句及do…while的循环语句保证会执行一次(表达式的真值在每次循环结束后检查),++b即变量b自增l后再参与运算,而a++则表示a参与运算后再自增l。所以第一次循环结束后,b=1,a=-1;第二次循环后,b=2,a=0,这里是先对while的判断为真,然后a才自增为零的,所以还会进行第三次循环;第三次循环后,b=3,a=1。因此A选项正确。25、设有定义:intk=0;以下选项的四个表达式中与其他三个表达式的值不相同的是()。A、++kB、k+=1C、k++D、k+1标准答案:C知识点解析:++k,先使k的值自增1后再使用,k++是先取得k的值再将k的值自增1,所以C选项中表达式的值为0,而其他三个表达式的值均为1,所以选择C。26、有以下程序:#includemain(){char’b,c;inti:b=‘a’:c=‘A’:for(i=0;i<6;i++){if(i%2)putchar(i+b);elseputchar(i+c);}printf(“\n”);}程序运行后的输出结果是()。A、abcdefB、ABCDEFC、aBcDeFD、AbCdEf标准答案:D知识点解析:函数的含义是如果i的值能被2整除,以字符格式打印输出i+c的值,如果i的值不能被2整除,打印i+b的值。第一次i值为0,执行else语句打印字符‘A’,第二次i值为1,打印1+b的值即字符‘b’,第三次i值为2,打印字符‘c’,依此类推选择D选项。27、计算机能直接执行的程序是()。A、源程序B、目标程序C、汇编程序D、可执行程序标准答案:D知识点解析:计算机能直接执行的程序是二进制的可执行程序,扩展名为.exe。所以选择D选项。28、以下叙述中正确的是()。A、C语言规定必须用main作为主函数名,程序将从此开始执行B、可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行C、C语言程序将从源程序中第一个函数开始执行D、main的各种大小写拼写形式都可以作为主函数名,如MAIN,Main等标准答案:A知识点解析:C语言中的主函数只能是main()函数,不能任意指定,所以B选项错误。C语言从主函数main()开始,到主函数main()结束,所以C选项错误。主函数必须写成小写的main,不能混淆大小写,所以D选项错误。29、有以下程序:#includemain(){intc,d;c=13&5:d=10&&5;printf("%d,%d\n",c,d);}程序的运行结果是()。A、5,1B、1,1C、18,1D、13,1标准答案:A知识点解析:“&”按位与运算,13=1101B,5=101B,执行语句c=13&5;结果为101B=5,即c=5。“&&”逻辑与运算,10与5均为真,结果为真,即d=1。30、以下函数findmin拟实现在数组中查找最小值并作为函数值返回,但程序中有错导致不能实现预定功能。#defineMAX2147483647intfindmin(intx[],intn){inti,min;min=MAX;for(i=0;i<n;i++){if(min<x[i])min=x[i];)returnmin;}造成错误的原因是()。A、定义语句inti,min;中min未赋初值B、赋值语句min=MAN;中,不应给min赋MAX值C、语句if(rain<X[i])min=X[i];中判断条件设置错误D、赋值语句min=MAX;放错了位置标准答案:D知识点解析:在C语言中,一个整型变量占用4个字节的内存单元,并按整型数的存储方式存放数据,允许存放的数值范围是:-2147483648~2147483647。所以在这个题目中定义的宏变量MAX的值就是整数范围内最大的数值,因而对于任意一个整数来说,其值都比MAX小,而判断最小值,是当找到的数比min小时,才交换。31、一棵二叉树共有25个结点,其中5个是叶子结点,则度为1的结点数为()。A、16B、10C、6D、4标准答案:A知识点解析:根据二叉树的性质3:在任意一棵二叉树中,度为0的叶子结点总是比度为2的结点多一个,所以本题中度刀z的节点是5一1=4个,所以度为1的结点的个数是25—5一4=16个。32、数据管理技*发展的三个阶段中,()没有专门的软件对数据进行管理。Ⅰ.人工管理阶段Ⅱ.文件系统阶段Ⅲ.数据库阶段A、仅ⅠB、仅ⅢC、Ⅰ和ⅡD、Ⅱ和Ⅲ标准答案:A知识点解析:数据管理技*发展的三个阶段中,只有人工管理阶段,没有操作系统,没有管理数据的软件,数据处理方式是批处理。在文件系统阶段,操作系统中已经有了专门数据管理软件,一般称为文件系统。在数据库系统阶段,出现了统一管理数据的专门软件系统,即数据库管理系统。33、当输入为"Fool&Swalow"时,下面程序的执行结果是()。#includemain(){charc;while(c!=’?’){c=getchar();putchar(c);}}A、SwalowB、FoolC、Fool?D、?Swalow标准答案:C知识点解析:本程序是通过getchar()函数读入字符,并通过putchar()函数将字符逐个输出,当用户输入“?”时停止输出。34、当输入为"Fool&Swalow"时,下面程序的执行结果是()。#include<stdio.h>main(){charc;while(c!=’?’){c=getchar();putchar(c);}}A、SwalowB、FoolC、Fool?D、?Swalow标准答案:C知识点解析:本程序是通过getch()函数读入字符,并通过putchar()函数将字符逐个输出,当用户输入“?”时停止输出。35、有以下程序#include<stdio.h>main(){intx=010,y=10;printf("%d,%d\n",++x,y--);}程序运行后的输出结果是A、10,9B、11,10C、010,9D、9,10标准答案:D知识点解析:整型常量有3种表示方法,分别是十进制数表示法、八进制数表示法和十六进制数表示法,八进制整常量以O作为前缀。自增和自减运算符的两种用法:前置运算,运算符放在变量之前,规则是先使变量的值增(或减)1,然后以变化后表达式的值参与其他运算;后置运算,运算符放在变量之后,规则是变量先参与其他运算,然后再使变量的值增(或减)1。x=010=8,y=10,++x先自加后取值,输出9,y--先取值输出10,再自减y=9,D选项正确。36、某二叉树的中序序列为BDCA,后序序列为DCBA,则前序序列为A、DCBAB、BDCAC、ABCDD、BADC标准答案:C知识点解析:二叉树遍历可以分为3种:前序遍历(访问根结点在访问左子树和访问右子树之前)、中序遍历(访问根结点在访问左子树和访问右子树两者之间)、后序遍历(访问根结点在访问左子树和访问右子树之后)。本题中中序序列为BDCA,后序序列为DCBA,可知A为根结点,BDC为左侧结点,C是B右子结点,D是C右子结点,故前序序列为ABCD,C选项正确。37、以下涉及字符串数组、字符指针的程序段,没有编译错误的是A、char*str,name[5];str="C/C++";B、char*str,name[6];name="Hello";C、charstr1[7]="prog.c",str2[8];str2=str1;D、charline[];line="//////";标准答案:A知识点解析:字符数组只能进行初始化,不能直接对字符数组赋值,B、D错误;C选项中,str2与str1是常量不能相互赋值。A选项中定义一个字符指针str,然后把一串字符的首地址赋给str,不会发生编译错误,答案为A选项。38、有如下程序#include<stdio.h>main(){inta=9,b;b=(a>>3)%4;printf("%d,%d\n",a,b);}程序运行后的输出结果是A、9,1B、4,0C、4,3D、9,3标准答案:A知识点解析:首先,程序执行完成后,a值不变始终为9,a转化成2进制数后逻辑即1001>>3=>0001右移三位得到值为1,1再对4求余得到余数1赋给b值,答案为A选项。39、C语言规定,在一个C程序中,main()函数的位置()。A、必须在系统调用的库函数之后B、必须在程序的开始C、必须在程序的最后D、可以在任意位置标准答案:D知识点解析:每个C程序有且只有一个主函数(main),且程序必须从“main()”函数开始执行,而且“main()”函数可以放在程序中的任意位置。40、有以下程序:#include<stdio.h>#include<string.h>structA{inta;charb[l0];doublec;};structAf(structAt):main(){structAa={1001,"ZhangDa",1098.0};a=f(a):printf("%d,%s,%6.1f\n",a.a,a.b,a.c);}structAf(structAt){t.a=1002:strcpy(t.b,"ChangRong"):t.c=1202.0:returnt;}程序运行后的输出结果是()。A、1001,ZhangDa,1098.0B、1002,ZhangDa,1202.0C、1001,ChangRong,1098.0D、1002,ChangRong,1202.0标准答案:D知识点解析:函数f对结构体进行修改,并返回新的结构体;main函数先定义了一个结构体变量a并为它赋初值,然后调用函数f修改结构体变量的成员值,最后输出新的结构体变量成员。二、程序填空题(本题共1题,每题1.0分,共1分。)41、给定程序中,函数fun的功能是:求出形参ss所指字符串数组中最长字符串的长度,将其余字符串右边用字符“*”补齐,使其与最长的字符串等长。ss所指字符串数组中共有M个字符串,且串长<N。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!1#include<stdio.h>2#include<string.h>3#defineM54#defineN205voidfun(char(*ss)[N])6{inti,j,n,len=0;7for(i=0;i<M;i++)8{len=strlen(ss[i]);9if(i==0)n=len;10if(len>n)n=len;11}12for(i=0;i<M;i++){13/**********found**********/14n=strlen(__1__);15for(j=0;j<len-n;j++)16/**********found**********/17ss[i][__2__]=’*’;18/**********found**********/19ss[i][n+j+__3__]=’\0’;20}21}22main()23{charss[M][N]={’’shanghai’’,’’guangzhou’’,’’beijing’’,’’tianjing’’,’’cchongqing’’};24inti;25printf(’’Theoriginalstringsare:\n’’);26for(i=0;i<M;i++)printf(’’%s\n’’,ss[i]);27printf(’’\n’’);28fun(ss);29printf(’’Theresuitis:\n’’);30for(i=0;i<M;i++)printf(’’%s\n’’,ss[i]);31}标准答案:(1)ss[i](2)n+j(3)1知识点解析:函数fun的功能是求出形参ss所指字符串数组中最长字符串的长度。第一空:第一个循环求最长字符串的长度“len”,在第二个循环内在其他字符串的后面补“*”,使其达到长度“len。”在“for(j=0;j<len-n;j++)”语句中,“i<len-n”是在字符串的后面填“len-n”个“*”,故n是字符串“ss[i]”的长度,因此第一空应为“ss[i]”。第二空:循环“for(j=0;j<len-n;j++)”目的是在字符串的后面填len-n个“*”,第二空处应为“n+j”。第三空:字符串以“\0”结束,因此需在字符串后加结束符,故第三空应为“1”。三、程序修改题(本题共1题,每题1.0分,共1分。)42、使用VC++2010打开考生文件夹下modil中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun的功能是:从11个学生的成绩中统计出低于平均分的学生人数,此人数作为函数值返回,平均分存放在形参aver所指的存储单元中。例如,输入8名学生的成绩:80.5、60、72、90.5、98、51.5、88、64则低于平均分的学生人数为4(平均分为75.5625)。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#2nclude<stdlib.h>#include<stdio.h>#include<conio.h>#defineN20intfun(float*s,intn,float*caver){floatave,t=0.0;intcount=0,k,i;for(k=0;k<n;k++)/*********found*********/t=s[k];ave=t/n;for(i=0;i<n;1;i++)if(s[i]<ave)count++;/*********found*********/*aVer=&aVe;returncount;}voidmain(){floats[30],aver;intm,i;system("CLS");printf("\nPleaseenterm:");scanf("%d",&m);printf("\nPleaseenter%dmark:\n",m);for(i=0;i<m;i++)scanf("%f",s+i);printf("\nThenumberofstudents:%d\n",fun(s,rm,&aver));printf("Ave=%f\n",aver);}标准答案:(1)t+=s[k];(2)*aver=ave;知识点解析:根据题目要求,可利用循环语句累计n个学生的总分,求得平均成绩后,再利用循环语句和条件选择语句进行后面的操作。若小于平均值,则将该值存放于aver存储单元中。t=s[k]是循环叠加错误,*aver=&ave为语法指向的错误。四、程序设计题(本题共1题,每题1.0分,共1分。)43、使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写一个函数intfun(int*s,intt,int*k),用来求出数组的最大元素在数组中的下标并存放在k所指向的存储单元中。例如,输入如下整数:876675896101301401980431451777则输出结果为6,980。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<conio.h>#include<stdio.h>#include<stdtib.h>intfun(int*s,intt,int*k){}voidmain(){FILE*wf;inta[10]={876,675,896,101,301,401,980,43l,451,777},k;system("CLS");fun(a,10,&k);printf("%d,%d\n",k,a[k]);/*********found*********/wf=fopen("out.dat","w");fprintf(wf,"%d,%d",k,a[k]);fclose(wf);/*********found*********/}标准答案:inttun(Int*s,intt,int*k){inti;*k=0;/*k所指的数是数组的下标值*/for(i=0;i<t;i++)if(s[*k]<s[i])*k=i;/*找到数组的最大元素,把该元素的下标赋给k所指的数*/returns[*k];/*返回数组的最大元素*/}知识点解析:本题中直接使用指针变量k,使用时要注意对k进行指针运算。程序一开始让k指向数组中的第一个元素,即*k=0。国家二级(C语言)机试模拟试卷第4套一、选择题(本题共40题,每题1.0分,共40分。)1、有以下程序:#include<stdio.h>intfun(inta,intb){if(b=—0)ret

温馨提示

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

评论

0/150

提交评论