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

下载本文档

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

文档简介

国家二级(C语言)机试模拟试卷37(共9套)(共344题)国家二级(C语言)机试模拟试卷第1套一、选择题(本题共39题,每题1.0分,共39分。)1、算法的空间复杂度是指()。A、算法程序的长度B、算法程序中的指令条数C、算法程序所占的存储空间D、算法执行过程中所需要的存储空间标准答案:D知识点解析:算法的空间复杂度是指执行这个算法所需要的内存空间。一个算法所占用的存储空间包括算法程序所占的空间、输入的初始数据所占的存储空间以及算法执行中所需要的额外空间。其中额外空间包括算法程序执行过程中的工作单元以及某种数据结构所需要的附加存储空间。如果额外空间量相对于问题规模来说是常数,则称该算法是原地工作的。在许多实际问题中,为了减少算法所占的存储空间,通常采用压缩存储技术,以便尽量减少不必要的额外空间。2、结构化程序设计的3种结构是()。A、顺序结构,分支结构,跳转结构B、顺序结构,选择结构,循环结构-C、分支结构,选择结构,循环结构D、分支结构,跳转结构,循环结构标准答案:B知识点解析:程序设计语言仅仅使用顺序、选择和重复(循环)三种基本控制结构就足以表达出各种其他形式结构的程序设计方法。遵循程序结构化的设计原则,按结构化程序设计方法设计出的程序易于理解、使用和维护;可以提高编程工作的效率,降低软件的开发成本。3、设一棵满二叉树共有15个结点,则在该满二叉树中的叶子结点数为()。A、7B、8C、9D、10标准答案:B知识点解析:在具有n个结点的满二叉树,其非叶子结点数为int(n/2),而叶子结点数等于总结点数减去非叶子结点数。本题n=15,故非叶子结点数等于int(15/2)=7,叶子结点数等于15-7=8。4、设有表示学生选课的三张表,学生S(学号,姓名,性别,年龄,身份证号),课程C(课号,课名),选课sC(学号,课号,成绩),则表SC的关键字(键或码)为()。A、课号,成绩B、学号,成绩C、学号,课号D、学号,姓名,成绩标准答案:C知识点解析:学号是学生表s的主键,课号是课程表c的主键,所以选课表SC的关键字就应该是与前两个表能够直接联系且能唯一定义的学号和课号,所以选择C。5、有以下程序:#include<stdio.h>main(){intx=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\n",a,b);}程序的运行结果是()。A、a=2,b=2B、a=2,b=1C、a=1,b=1D、a=1,b=0标准答案:B知识点解析:case常量表达式只是起语句标号作用,并不是该处进行条件判断。在执行switch语句时,根据switch的表达式,找到与之匹配的case语句,就从此case子句执行下去,不在进行判断,直到碰到break或函数结束为止。所以执行内层switch(y)时只执行了a++,此时a的值为1。然后执行外层case2语句的a++;b++;a为2,b为1。所以结果为B)。6、有以下程序段:#include<stdio.h>inti,n;for(i=0;0;i<8;i++){n=rand()%5;switch(n){ease1:ease3:printf("%d\n",n);break;ease2:ease4:printf("%d\n",n);continue;case0:exit(0);}printf("%d\n",n);}以下关于程序段执行情况的叙述,正确的是()。A、for循环语句固定执行8次B、当产生的随机数n为4时结束循环操作C、当产生的随机数n为1和2时不做任何操作D、当产生的随机数n为0时结束程序运行标准答案:D知识点解析:case常量表达式只是起语句标号作用,并不是该处进行条件判断。在执行switch讲句时,根据switch的表达式,找到与之匹配的case讲句,就从此case子句执行下去,不再进行判断,直到碰到hreak或函数结束为止。简单的说break是结束整个循环体,而continue是结束单次循环。B选项中当产生的随机数n为4时要执行打印操作。C选项中当产生的随机数为1和2时分别执行case3与case4后面语句的内容。由于存在break语句所以for循环不是同定执行8次,执行次数与产生的随机数n有关系。7、定义如下变量和数组: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]);A、159B、147C、357D、369标准答案:C知识点解析:本题主要考查二维数组的使用。题中利用for循环来输出x数组中的指定元素:①当i=0时,输出x[0][2]=3;②当i=1时,输出x[1][1]=5;③当i=2时,输出x[2][0]=7。8、有以下程序#include<stdio.h>main(){FILE*fp;inti=20,j=30,k,n;fp=fopen("d1.dat","w");fprintf(fp,"%d\n",i);fprintf(fp,"%d\n",j);fclose(fp);fp=fopen("d1.dat","r");fscanf(fp,"%d%d",&k,&n);printf("%d%d\n",k,n);fclose(fp);}程序运行后的输出结果是()。A、2030B、2050C、3050D、3020标准答案:A知识点解析:分析程序段,首先以只写方式打开文件,利用fprintf函数将i和j的值写入到文件d1.dat中,然后关闭文件:再以只读方式打开文件,利用格式化输入函数fscanf将文件中的数据赋值给k和n,最后输出k和n的值,分别是20和30。9、一个栈的初始状态为空。现将元素1、2、3、4、5、A、B、C、D、E依次入栈,然后再依次出栈,则元素出栈的顺序是()。A、12345ABCDEB、EDCBA54321C、ABCDE12345D、54321EDCBA标准答案:B知识点解析:栈是先进后出的原则组织数据,所以入栈最早的最后出栈,所以选择B。10、内聚性是对模块功能强度的衡量,下列选项中,内聚性较弱的是()。A、顺序内聚B、偶然内聚C、时间内聚D、逻辑内聚标准答案:B知识点解析:内聚是从功能角度来衡量模块的联系,它描述的是模块内的功能联系。内聚有如下种类,它们之间的内聚度由弱到强排列:偶然内聚一一模块中的代码无法定义其不同同功能的调用。但它使该模块能执行不同的功能,这种模块为巧合强度模块。逻辑内聚——这种模块把几种相关的功能组合在一起,每次被调用时,由传送给模块的参数来确定该模块应完成哪一种功能。时间内聚——这种模块顺序完成一类相关功能,比如初始化模块,它顺序地为变量置初值。过程内聚——如果一个模块内的处理元素是相关的,而且必须以特定次序执行,则称为过程内聚。通信内聚——这种模块除了具有过程内聚的特点外,还有另外一种关系,即它的所有功能都通过使用公用数据而发生关系。顺序内聚一一如果一个模块内各个处理元素和同一个功能密切相关,而且这些处理必须顺序执行,处理元素的输出数据作为下一个处理元素的输入数据,则称为顺序内聚。功能内聚——如果一个模块包括为完成某一具体任务所必需的所有成分,或者说模块中所有成分结合起来是为了完成一个具体的任务,此模块则为功能内聚模块。11、下列选项中,不能作为合法常量的是()。A、1.234e04B、1.234e0.4C、1.234e+4D、1.234e0标准答案:B知识点解析:用指数形式表示的实型常量需注意两点:①e或E后面的指数必须是整数:②指数必须是不超过数据表示范围的正负整数,并且在e或E前必须有数字。12、有以下程序:#include<stdio.h>intfun(){staticintx=1:x+=1:returnx;}main()inti,s=1;for(i=1;i<=5;i++)s+=fun();printf("%d\n",s);}程序运行后的输出结果是()。A、120B、1C、6D、21标准答案:D知识点解析:fun函数中的变量x为静态的局部变量,占用固定的内存单元,下一次调用时仍可以保留上次调用时的值。也就是说,如果多次调用fun函数,x的定义只在第一次调用时有效,从第二次调用开始,x的定义卡相当于不存在,直接使用上次x的值,fun函数被调用了5次,每次调用后的返回值累加到s上,5次调用后,x的值为6,s的值为1+2+3+4+5+6=21,因此D选项正确。13、以下叙述中正确的是()。A、调用函数时,函数名必须与被调用的函数名完全一致B、函数调用时,不必区分函数名称的大小写C、函数名允许用数字开头D、在函数体中只能出现一次return语句标准答案:A知识点解析:调用函数的时候只有保证调用语句的函数名和被调函数的函数名、参数列表一致才能保证调用的正确性,A)正确。C语言对大小写敏感,选项B)错。用户自定义的函数名需要遵循用户标识符的命名规则,由字母、数字、下划线组成并且第一个字符不能为数字,选项C)错。一个函数每次只能使用一个return语句,但是该函数体中可以有多个返回点,也就是有多条return语句,每次只从其中一点返回,选项D)错。答案选A)。14、算法的有穷性是指()。A、算法程序的运行时间是有限的B、算法程序所处理的数据量是有限的C、算法程序的长度是有限的D、算法只能被有限的用户使用标准答案:A知识点解析:算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。有穷性是指算法程序的运行时间是有限的。15、有以下程序#includeintfun(intas*intb){if(b==0)returna;elsereturn(fun(--a,--b));}main(){pfintf("%d\n",fun(4,2));}程序的运行结果是()。A、1B、2C、3D、4标准答案:B知识点解析:由程序可知,函数fun(inta,intb)是一个递归函数。所以当主函数中调用fun(4,2)时,其执行过程如下:fun(4,2)->fun(3,1)->fun(2,0),其返回值为2。所以正确答案为选项B)。16、有以下程序:#include<stdio.h>main(){inta=6,b=7,m=1;switch(a%2){case0:m++;break;case1:m++:switch(b%2){defaut:m++;case0:m++;break;}}printf("%d\n",m);}程序运行后的输出结果是()。A、1B、2C、3D、4标准答案:B知识点解析:本题考查switch语句。因为a=6,所以a%2=0,因此第一个switch语句,执行case0,将m加1,遇到break语句跳出switch语句,输出m值为2。17、设有以下说明,则不正确的叙述是()。unionun{inta;charb:floatc;}arr;A、arr所占的内存长度等于成员c的长度B、arr的地址和它的各成员的地址都是同一地址C、arr可以作为函数参数D、不能在定义arr时对它初始化标准答案:C知识点解析:本题主要考查联合体的内存使用:联合体所占用的内存空间为最长的成员所占用的空间,int占2个字节,char占1个字节,float占4个字节,所以arr所占的内存长度等于成员c的长度;arr的地址和它的各成员的地址都是同一地址;不能直接对arr赋值,即不能在定义arr时对它初始化;arr也不可以作为函数参数。18、下列有关数据库的描述,正确的是()。A、数据库设计是指设计数据库管理系统B、数据库技术的根本目标是要解决数据共享的问题C、数据库是一个独立的系统,不需要操作系统的支持D、数据库系统中,数据的物理结构必须与逻辑结构一致标准答案:B知识点解析:数据库设计的目的实质上是设计出满足实际应用需求的实际关系模型。数据库技术的主要目的是有效地管理和存取大量的数据资源,包括:提高数据的共享性,使多个用户能够同时访问数据库中的数据;减小数据的冗余,以提高数据的一致性和完整性;提供数据与应用程序的独立性,从而减少应用程序的开发和维护代价。19、数据库设计的四个阶段是:需求分析、概念设计、逻辑设计和()。A、编码设计B、测试阶段C、运行阶段D、物理设计标准答案:D知识点解析:数据库设计目前一般采用生命周期法,即将整个数据库应用系统的开分解成目标独立的若干阶段,它们是:需求分析阶段、概念设计阶段、逻辑设计阶段、物理设计阶段、编码阶段、测试阶段、运行阶段、进一步修改阶段。在数据库设计中采用上面几个阶段中的前四个阶段,并且重点以数据结构和模型设计为主线。20、已知chara;intb;floatC;doubled;则表达式a-b+c-d结果为()型。A、doubleB、floatC、intD、char标准答案:A知识点解析:C语言中允许进行不同数据类型的混合运算,但在实际运算时,要先将不同类型的数据转化成同一类型再进行运算。类型转换的一般规则是:①运算中将所有char型转换成int型,float型转换成double型;②低级类型服从高级类型,并进行相应的转换,数据类型由低到高的顺序为:char->-int->unsigned->long->float->double;③赋值运算中最终结果的类型,以赋值运算符左边变量的类型为准,即赋值运算符右端值的类型向左边变量的类型看齐,并进行相应转换。21、以下叙述正确的是()。A、只能在循环体内和switch语句体内使用break语句B、contiune语句的作用是结束整个循环的执行C、在循环体内使用break语句或continue语句的作用相同D、从多层循环嵌套中退出时,只能使用goto语句标准答案:A知识点解析:本题考查循环的4个知识点:①break语句可以出现在循环体内及switch语句体内,不能用于其他的语句;②continue语句的作用是结束本次循环,即跳过循环体中下面尚未执行的语句,而接着转去判定循环条件是否成立,从而确定下一次循环是否继续执行,也就是说执行contiune语句不会使整个循环终止:③在循环体内使用break语句会使循环提前终止;④从多层循环嵌套中退出时,可以使用goto语句或者break语句。22、有以下程序#includetypedefstruct{intb,p;}A;voidf(Ac)/*注意:c是结构变量名*/{intj;c.b+=1;c.p+=2;}main(){inti;Aa={1,2};f(a);printf("%d,%d\n",a.b,a.p);}程序运行后的输出结果是()。A、1,2B、2,4C、1,4D、2,3标准答案:A知识点解析:暂无解析23、一个栈的初始状态为空。现将元素1,2,3,A,B,C依次入栈,然后再依次出栈,则元素出栈的顺序是A、1,2,3,A,B,CB、C,B,A,1,2,3C、C,B,A,3,2,1D、1,2,3,C,B,A标准答案:C知识点解析:栈的修改是按后进先出的原则进行的,所以顺序应与入栈顺序相反,故选C。24、以下叙述中正确的是()。A、使用typedef定义新类型名后,新类型名与原类型名实际上是等价的B、结构体类型中的各个成分均不能是数组或指针C、结构体类型的变量,不能在声明结构体类型时一起定义D、元素为结构体类型的数组,只能在声明过结构体类型之后单独进行定义标准答案:A知识点解析:本题考查typedef的使用方法。typedef对已存在的类型使用一个新的名字,结构体类型中的成分可以是数组和指针,所以B选项错误;结构体类型的变量可以在声明结构体的时候一起定义,所以C选项错误;D选项中二者可以一起定义。25、设有定义:struetcomplex{intreal,unreal;}data1={1,8},data2;则以下赋值语句中错误的是()。A、data2=(2,6);unreal;B、data2=data1;C、data2.real=data1.real;D、data2.real=data1.标准答案:A知识点解析:结构体变量建议在定义的时候进行初始化。结构体常见的几种初始化方法如下:(1)structaa1={.b=1,.c=2};(2)structaa1={b:1,c:2};(3)structaa1={1,2};计算机内核喜欢用第一种,使用第一种和第二种时,成员初始化顺序可变。因此,可以判断选项A错误。答案为A选项。26、以下叙述中正确的是A、复合语句在语法上包含多条语句,其中不能定义局部变量B、花括号对{}只能用来表示函数的开头和结尾,不能用于其他目的C、空语句就是指程序中的空行D、当用scanf从键盘输入数据时,每行数据在没按下回车键(Enter键)前,可以任意修改标准答案:D知识点解析:复合语句可以包含多条语句,在其中可以定义局部变量,所以A错误。花括号对{}不仅用来表示函数的开头和结尾,也可以用于表示复合语句,所以B错误。C语言中的语句必须以分号";"结束,所以空语句表示为";",不是空行,所以C错误。27、关于结构体类型的说明和变量定义,以下选项正确的是()。A、stmctREC;{charc;intm;floats;};RECt1,t2;B、typedefstruct{charc;intm;floats;}REC;RECt1,c2;C、typedefstructREC;{charc;intm;floats;}t1,t2;D、struct{charc;intm;floats;}REC;RECt1,t2;标准答案:B知识点解析:选项A和C在REC后面不能有分号,D项中的REC已经是定义好的机构体变量,故不能用其定义变量;B项中使用了typedef,所以REC是前面定义的结构体类型的别名,所以可以用来定义变量。28、有以下程序:voidss(char*s,chart){while(*S){if(*s=t)*s=t-’a’+’A’;S++:}}main(){charstrl[100]=’’ABCddfefdbd’’,c=’d’;ss(strl,c);printf(’’%s\n’’,strl);}程序运行后的输出结果是()。A、ABCDDEFEDBDB、ABCDDfefDbDC、ABCAAfefAbAD、ABCdd~fdbd标准答案:B知识点解析:函数ss(char*s,chart)的功能是将指针s所指向的字符串中存在的字符”t”均改写成大写字*;所以main函数中引用函数ss后使得数组strl中的小写字*”d”均变成了大写字*”D”,然后输出数组strl,结果为:ABCDDflefDbD。29、以下叙述中正确的是A、C语言程序所调用的函数必须放在main函数的前面B、C语言程序总是从最前面的函数开始执行C、C语言程序中main函数必须放在程序的开始位置D、C语言程序总是从main函数开始执行标准答案:D知识点解析:C语言所调用的函数可以放在调用它的函数前,也可以放在调用它的函数后,所以A错误,C语言程序总是从main函数开始执行,所以B错误,main函数的位置可以放在开始,也可以放在中间,也可以放在最后,所以C错误。30、若输入bcdefgh、m、abcdefg,以下程序的输出结果为()。#include<stdio.h>#include<string.h>main(){inti;charstring[20],str[3][20];for(i=O;i<3;i++)gets(str[i]);if(strcmp(str[0],str[1])>0)strcpy(string,str[0]);elsestrcpy(string,str[1]);if(strcmp(str[2],string)>0)strcpy(string,str[2]);printf("%s",string);}A、bcdefghB、mC、abcdefgD、bcdefgh或abcdefg标准答案:B知识点解析:本题考查字符比较函数和字符复制函数:strcmp(s1,s2);函数功能:比较字符串str1和str2比较的是字符的ASCII码的值,当str1<str2时,返回值为负数;当str1=str2时,返回0;当str1>str2,返回值为正数。31、有以下程序#include<stdio.h>main(){FILE*fp;inti=20,j=30,k,n;fp=fopen("d1.dat","w");fprintf(fp,"%d\n",i);fprintf(fp,"%d\n",j);fclose(fp);fp=fopen("d1.dat","r”);fscanf(fp,"%d%d",&k,&n);printf("%d%d\n",k,n);fclose(fp);}程序运行后的输出结果是()。A、2030B、2050C、3050D、3020标准答案:A知识点解析:分析程序段,首先以只写方式打开文件,利用fprintf函数将i和j的值写入到文件d1.dat中,然后关闭文件;再以只读方式打开文件,利用格式化输入函数fscanf将文件中的数据赋值给k和n,最后输出k和n的值,分别是20和30。32、对于长度为n的线性表,在最坏情况下,下列各排序法所对应的比较次数中正确的是()。A、冒泡排序为n(n一1)/2B、简单插入排序为nC、希尔排序为nD、快速排序为n/2标准答案:A知识点解析:在最坏情况下,冒泡排序所需要的比较次数为n(n—1)/2;简单插入排序所需要的比较次数为n(n-1)/2;希尔排序所需要的比较次数为O(n1.5);堆排序所需要的比较次数为O(nlog2n)。33、有以下程序:#include<stdio.h>main(){FILE*fp;inta[10]={1,2,3,0,0),i;fp=fopen("d2.dat","wb");fwrite(a,sizeof(int),5,fp);fwrite(a,sizeof(int),5,fp);fclose(fp);fp=fopen("d2.dat","rb");fread(a,sizeof(int),10,fp);fclose(fp);for(i=0;i<10;i++)printf("%d,",a[i]);}程序的运行结果是()。A、1,2,3,0,0,0,0,0,0,0,B、1,2,3,1,2,3,0,0,0,0,C、123,0,0,0,0,123,0,0,0,0,D、1,2,3,0,0,1,2,3,0,0,标准答案:D知识点解析:首先用函数fopen()以“wb”的方式打开文件“d2.dat”,然后调用两次fwrite函数将数组a的5个无素,依次输出到文件fp中(共10个字节),然后关闭文件。再次打开文件,他用文件指针指向文件的开头,调用fread函数从文件fp中读取这10个字节的数据到数组a中,此时数组a的内容就变为{1,2,3,0,0,1,2,3,0,0},因此最后的输出结果为“1,2,3,0,0,1,2,3,00”。34、有以下程序#include<stdio.h>main(){inty=9;for(;y>0;y--)if(y%3==0)printf("%d",--y);}程序的运行结果是()。A、741B、963C、852D、875421标准答案:C知识点解析:y的初值为9,所以在for循环中,当y的值为9、6或3时,if语句的条件成立,执行输出语句,输出表达式--y的值。因为自减符号在y的前面,所以首先y自减1,然后再输出y的值,故输出结果为852。35、设有函数定义:voidsub(intk,charch){…}则以下对函数sub的调用语句中,正确的是A、sub(1,97);B、sub(2,’97’);C、n=sub(3,’a’);D、sub(4,"a");标准答案:A知识点解析:函数的参数有两个,第一个是整型,第二个是字符类型,在调用函数时,实参必须一个是整型,一个是字符型。A选项中97为字符’a’的ASCII码,可以作为字符传入函数,A选项正确。B选项’97’不是合法字符,字符单引号里面只能有一个字符,B选项错误。函数sub返回类型为空,即不返回任何值,故C选项中将函数返回值赋给n是不正确的调用方法,C选项错误。D选项"a"为字符串,也不是合法的字符,D选项错误。36、有以下程序#include<stdio.h>main(){inta=1,b=1;for(;a--;)b--;printf("%d,%d\n",a,b);}程序运行后的输出结果是A、-1,0B、0,0C、-1,-1D、1,1标准答案:A知识点解析:题干中语句for(;a--;),条件a--!=0先判断a!=0成立,则进入循环,然后a减1,起始a=1不等于0,满足条件进入for循环,然后a自减1为0,b自减1为0,继续循环;再跳回for语句时,a!=0不成立,不会进入循环,但是a也要自减1为-1,循环结束;因此最后输出a=-1,b=0.因此答案为A选项。37、已知chara;intb;floatc;doubled;则表达式a-b+c-d结果为()型。A、doubleB、floatC、intD、char标准答案:A知识点解析:C语言中允许进行不同数据类型的混合运算,但在实际运算时,要先将不同类型的数据转化成同一类型再进行运算。类型转换的一般规则是:①运算中将所有char型转换成int型,float型转换成double型:②低级类型服从高级类型,并进行相应的转换,数据类型由低到高的顺序为:char->int->unsigned->long->float->double;③赋值运算中最终结果的类型,以赋值运算符左边变量的类型为准,即赋值运算符右端值的类型向左边变量的类型看齐,并进行相应转换。38、若有代数式,(其中e仅代表自然对数的底数,1不是变量),则下列能够正确表示该代数式的C语言表达式是()。A、sqrt(abs(n^x+e^x))B、sqrt(fabs(pow(n,x)+pow(x,e)))C、sqrt(fabs(pow(n,x)+exp(x)))D、sqrt(fabs(pow(x,n)+exp(x)))标准答案:C知识点解析:n和e的x幂次方,要分别调用C语言的数学库函数“doublepow(n,x)”和“doubleexp(x)”,因为这两个函数的返回值都为double型,对两者的和计算绝对值,调用库函数“doublefabs(pow(n,x)+exp(x))”,求出和的绝对值,再调用开平方函数“doublesqrc(fabs(pow(n,x)+exp(x)))”,这样计算出的结果就是题干中表达式的值。39、已有定义“inta=3:”和输出语句“printf("%8x".a);”,a);”以下正确的叙述是()。A、整型变量的输出格式符只有%d一种B、%x是格式符的一种,它可以适用于任何一种类型的数据C、%x是格式符的一种,其变量的值按十六进制数输出,但%8x是错误的D、%8x是正确的格式符,其中数字8规定了输出字段的宽度标准答案:D知识点解析:本题考查printf函数的格式。“%8x”表示以十六进制无符号形式输出整型数据。“8”表示指定输出数据的宽度为8位。二、程序填空题(本题共1题,每题1.0分,共1分。)40、给定程序中,函数fun的功能是:将s所指字符串中的所有数字字符移到所有非数字字符之后,并保持数字字符串和非数字字符串原有的先后次序。例如,形参s所指的字符串为:def35adh3kjsdf7。执行结果为:defadhkjsdf3537。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#includevoidfun(char*s){inti,j=0,k=0;chart1[80],t2[80];for(2=0;s[i]!=’\0’;i++)if(s[i]>=’0’&&s[i]<=’9’){/**********found**********/t2[j]=s[i];____1____;}elset1[k++]=s[i];t2[j]=0;t1[k]=0;/**********found**********/for(i=0;i标准答案:(1)j++(2)s[i]=t1[i](3)j知识点解析:第一空:如果s[i]是数字字符,则将s[i]保存在t2数组中,同时变量j自增,准备下次保存数字字符,故第一空处应为“i++”。第二空:语句“for(i=0;i三、程序修改题(本题共1题,每题1.0分,共1分。)41、使用VC++2010打开考生文件夹下modil中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun和funx的功能是:用二分法求方程23-4x2+3x-6=0的一个根,并要求绝对误差不超过0.001。例如,若给m输入-100,给n输入90,则函数求得的一个根为2.000。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<math.h>doublefunx(doublex){return(2*x*x*x-4*x*x+3*x-6);}doublefun(doublem,doublen){/*********found*********/intr;r=(m+n)/2;/*********found*********/while(fabs(n-m)<0.001){if(funx(r)*funx(n)<0)m=r;elSen=r;r=(m+n)/2;}returnr;}main(){doublem,n,root;printf("Entermn:\n");scanf("%lf%lf",&m,&n);root=fun(m,n);printf("root=%6.3f\n",root);}标准答案:(1)doubler;(2)while(fabs(n-m)>0.001)知识点解析:(1)程序中会发现r=(m+n)/2,而m和n都是double型的,并且根据题意可知,变量r需要定义为double型。(2)绝对误差不超过0.001,所以循环条件应为fabs(n-m)>0.001。四、程序设计题(本题共1题,每题1.0分,共1分。)42、使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,规定输入的字符串中只包含字母和*号。请编写函数fun,其功能是:除了字符串前导的*号之外,将串中其他*号全部删除。在编写函数时,不得使用C语言提供的字符串函数。例如,字符串中的内容为:“****A*BC*DEF*G*******”,删除后,字符串中的内容应当是:“****ABCDEFG”。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include<stdio.h>voidfun(char*a){}main(){chars[81];voidNONO();printf(’’Enterastring:\n’’);gets(s);fun(s);printf(’’Thestringafterdeleted:\n’’);puts(s);NONO();}voidNONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*in,*out;inti;chars[81];in=fopen(’’in.dat’’,’’r’’);out=fopen(’’out.dat’’,’’w’’);for(i=0;i<10;i++){fscanf(in,’’%s’’,s);fun(s);fprintf(out,’’%s\n’’,s);}felose(in);fclose(out);}标准答案:voidfun(char*a){inti=0:chat*p=a;while(*p&&*p==’*’){a[i]=*p;i++:p++;}while(*p){if(*p!=’*’){a[i]=*p;i++;}p++;}a[i]=’\0’;}知识点解析:函数fun的功能:除了字符串前导的*号之外,将串中其他*号全部删除。解答本题,(1)定义一个临时指针p,初始指向原串首地址;(2)利用循环语句把字符串前导t号拷贝到原串;(3)继续移动指针,把串中和串尾的非*号字符拷贝到原串;(4)为修改后的字符串赋结束字符’\0’。要删除字符串中的指定字符,我们通常采用保留非指定字符的方法。可以将非指定字符保留在原串,即将需要保留的字符从原串的起始位置重新赋值;也可以保留到新串,即新建一个字符串,存放要保留的字符。国家二级(C语言)机试模拟试卷第2套一、选择题(本题共40题,每题1.0分,共40分。)1、为了使模块尽可能独立,要求()。A、模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强B、模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱C、模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱D、模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强标准答案:B知识点解析:系统设计的质量主要反映在模块的独立性上。评价模块独立性的主要标准有两个:一是模块之间的耦合,它表明两个模块之间互相独立的程度;二是模块内部之间的关系是否紧密,称为内聚。一般来说,要求模块之间的耦合尽可能地弱,即模块尽可能独立,而要求模块的内聚程度尽量地高。2、语句“printf("a\bhow\’are\’y\\\bou\n");”的输出结果是()。A、a\bhow\’are\’y\kbouB、a\bhowk\’are\’y\bouC、how’are’youD、ahow’are’y\bou标准答案:C知识点解析:“\b”格式符表示退格。功能是将它后面的字母把它前面的字母覆盖,导致“\b”格式符前面的字母不能输出;“\”格式符表示输出单引号字符;“\”格式符表示输出反3、有以下程序:#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。4、有以下程序:#include<stdio.h>intfun(intx[],intn){staticintsum=0,i;for(i=0;i<n;i++)sum+=x[i];returnsum;}main(){inta[]={1,2,3,4,5},b[]={6,7,8,9},s=0;s=fun(a,5)+fun(b,4);printf("%d\n",s);}程序执行后的输出结果是()。A、55B、50C、45D、60标准答案:D知识点解析:内部静态变量是始终存在的,当函数被调用退出后,内部静态变量会保存数据,再次调用该函数时,以前调用时的数值仍然保留着。fun(a,5)的值是15,再次调用后sum=15,所以fun(b,4)=45,s:45+15=60。因此D选项正确。5、字符串"\\\"ABCDEF\"\"的长度是()。A、11B、10C、5D、3标准答案:B知识点解析:本题涉及字符串的两个最基本的概念。①字符串的长度是指字符串中字符的个数,但不包含字符串结束符;②以反斜线“\”开头的特殊字符序列,意思是把反斜线后面的字符序列转换成特定的含义,而不是原来的含义,不包含在字符串长度之内,“\”连同后面的字符为一个长度。6、已知函数的调用形式:fread(buffer,size,count,fp);其中buffer代表的是()。A、一个整型变量,代表要读入的数据项总数B、一个文件指针,指向要读的文件C、一个指针,是指向的输入数据放在内存中的起始位置D、一个存储区,存放要读的数据项标准答案:C知识点解析:数据块输入/输出函数的调用形式为:fread(buffer,size,count,fp)。fread函数参数说明:“buffer”是一个指针,对fread来说,它是读入数据的存放地址;“size”是要读写的字节数;“count”是要进行读写多少个size字节的数据项;“fp”是指文件型指针。7、下列语句组中,不正确的是()。A、char*s;s="Olympic";B、chars[]="Olympic";C、char*s;s={"Olympic"};D、chars[]={"Olympic"};标准答案:C知识点解析:S是一个字符指针变量,s代表其地址,C将字符串赋给地址,因此选项C)错误。8、在下列选项中,没有构成死循环的是()。A、inti=100;while(1){i=i0+1;if(i>100)break;}B、for(;;);C、intk=10000;do{k++;}while(k>10000);D、ints=36;while(s)--s;标准答案:D知识点解析:选项D)中,首先定义的变量s的值为36,因为语句--s;所以当s=0时循环会结束;选项A)由于while(1)永远成立,循环构成死循环;选项B)中for循环没有使循环结束的限定条件,也构成死循环;选项C)中由于k永远大于10000,所以循环无法停止。9、下列关于return语句的叙述中,正确的是()。A、一个自定义函数中必须有一条return语句B、一个自定义函数中可以根据不同情况设置多条return语句C、定义成void类型的函数中可以有带返回值的return语句D、没有return语句的自定义函数在执行结束时不能返回到调用处标准答案:B知识点解析:一个自定义函数中可以没有return语句,没有return语句的自定义函数执行完函数体结束时,自动返回到函数调用处,并带回不确定的值;定义成void类型的函数中不能有带返回值的return语句;所以选项A、C、D错误。一个自定义函数中可以根据不同情况设置多条return语句,根据程序执行流程,选择执行其中一条return语句带值返回。故B选项正确。10、以下各项中,不是C语言字符型或字符串常量的是()。A、It,sB、0C、’a=0’D、’\010’标准答案:C知识点解析:C选项是一个赋值表达式。A、B两项是字符串常量,D选项是字符型常量。11、在黑盒测试方法中,设计测试用例的主要根据是()。A、程序内部逻辑B、程序外部功能C、程序数据结构D、程序流程图标准答案:B知识点解析:黑盒测试是对软件已经实现的功能是否满足需求进行测试和验证,黑盒测试完全不考虑程序内部的逻辑结构和内部特性,只根据程序的需求和功能规格说明,检查程序的功能是否符合它的功能说明,所以本题选择B。12、下列关于C语言文件的叙述中正确的是()。A、文件由一系列数据依次排列组成,只能构成二进制文件B、文件由结构序列组成,可以构成二进制文件或文本文件C、文件由数据序列组成,可以构成二进制文件或文本文件D、文件由字符序列组成,其类型只能是文本文件标准答案:C知识点解析:本题考查文件的概念,文件是由数据序列组成,可以构成二进制文件或文本文件,所以答案为C选项。13、以下叙述中正确的是()。A、计算机只接收由0和1代码组成的二进制指令或数据B、计算机只接收由0和1代码组成的十进制指令或数据C、计算机可直接接收并运行C源程序D、计算机可直接接收并运行任意高级语言编写的源程序标准答案:A知识点解析:二进制数中只有两个字符0和1,表示具有两个不同稳定状态的元器件。例如,电路中有无电流,有电流用1表示,无电流用0表示。类似的还比如电路中电压的高低,晶体管的导通和截止等。二进制数运算简单,大大简化了计算中运算部件的结构,故选项A正确。14、有以下程序:#includemain(){inta1,a2;charc1,c2;scanf(”%d%c%d%c”,&a1,&c1,&a2,&c2);prinff(“%d,%c,%d,%c”,a1,c1,a2,c2);}若想通过键盘输入,使得a1的值为12,a2的值为34,c1的值为字符a,c2的值为字符b,程序运行后的输出结果是:12,a,34,b。则正确的输入格式是(以下一代表空格,代表回车)()。A、12一a34一一bB、12一a一34一bC、12,a,34,bD、12a34b标准答案:D知识点解析:在输入多个数据时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。所以应按选项D的顺序输入数据。15、有以下程序:#includemain(){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赋给了v,所以选项D)正确。16、设有定义:structcomplex{intreal,unreal;datal={1,8},data2;则以下赋值语句中错误的是()。A、data2=(2,6);B、data2=datal;C、data2=real=datal.real;D、data2.real=datal.unreal;标准答案:A知识点解析:A选项中可以在声明变量的同事为data2赋值,但是data2=(2,6);应写作data2={2,6}。所以选择A。17、sizeof(char)是()。A、一种函数调用B、一个整型表达式C、—个字符型表达式D、一个不合法的表达式标准答案:B知识点解析:“sizeof(char)”是一个C语言的关键字,它不是函数调用。“sizeot”的功能是计算出运算对象在计算机的内存中所占用的字节数量,该表达式的返回值是一个整数,而不是一个字符型表达式。18、以下选项中能表示合法常量的是()。A、1,200B、1.5E2.0C、’\’D、\007标准答案:D知识点解析:A选项中整型常量应表示为1200,不能包含“,”。B选项中E后面的指数必须为整数。C选项中转义字符以“\”开始,若要表示字符“\”,应写为“\\”。19、下面4个关于C语言的结论中错误的是()。A、可以用do…while语句实现的循环一定可以用while语句实现B、可以用for语句实现的循环一定可以用while语句实现C、可以用while语句实现的循环一定可以用for语句实现D、do…while语句与while语句的区别仅是关键字“while”出现的位置不同标准答案:D知识点解析:本题考查几个循环语句的关系。①do…while语句、while语句、for语句所实现的循环可以相互替代;②do…while语句和while语句的区别是do…while语句至少执行一次,再判断循环条件,while语句是先判断条件再执行。20、若有以下程序段:intr=8;pfinff("%d\n",r>>1);输出结果是()。A、16B、8C、4D、2标准答案:C知识点解析:C语言中“>>”是二进制的右移运算符,右移相当于将原数做除二操作,它将原数右移相应位数,并将移出的位信息舍去,在高位补0。本题中8的二进制为00001000,右移一位得到00000100,所以输出4。21、待排序的关键码序列为(15,20,9,30,67,65,45,90),要按关键码值递增的顺序排序,采取简单选择排序法,第一趟排序后关键码15被放到第()个位置。A、2B、3C、4D、5标准答案:B知识点解析:选择排序的基本思想是扫描整个线性表,从中选出最小的元素,将它交换到表的最前面,然后对剩下的子表采用同样的方法,直到子表为空。所以第一趟排序后,将选出最小的元素9放在第一个位置,元素15则被交换放在第三个位置。22、有以下程序:#include<stdio.h>voidf(int*q){inti=0;for(;i<5;i++)(*q)++;}main(){inta[5]={1,2,3,4,5},i;f(a);for(i=0;i<5;i++)printf("%d,",13.[i]);}程序运行后的输出结果是()。A、6,2,3,4,5,B、2,2,3,4,5,C、1,2,3,4,5,D、2,3,4,5,6,标准答案:A知识点解析:本题考查的是函数的地址调用,将数组名作为数组首地址进行传递,然后取首个数组元素值进行加1运算,循环5次。因此A选项正确。23、支持子程序调用的数据结构是()。A、栈B、树C、队列D、二叉树标准答案:A知识点解析:在高级语言中,函数的调用是通过栈来实现的。在进行函数调用时,系统将所需的信息压入栈中,如函数的局部变量、返回值等。24、有以下程序:#include<stdio.h>main(){FILE*fp;intk,n,a[6]={1,2,3,4,5,6};fp=fopen("d2.dat","w");fprintf(fp,"%d%d%d\n",a[0],a[1],a[2]);fprintf(fp,"%d%d%d\n",a[3],a[4].a[5]);fclose(fp);fp=fi)pen("(d2.dat","r");fscanf(fp,"%d%d",&k,&n);printf("%d%d\n",k,n);fclose(fp);}程序运行后的输出结果是()。A、12B、14C、1234D、123456标准答案:D知识点解析:fprintf()函数向文本文件输出数据,将输出的内容按格式输出到硬盘的文本文件中。执行两次fprintf后,文件中的内容为“123456”,所以D选项正确。25、下列选项中,能正确定义数组的语句是()。A、intnun[0..2008];B、intBum[];C、intN=2008;intnum[N];D、#defineN2008intnum[N];标准答案:D知识点解析:C语言不允许定义动态数组,定义数组的大小必须为常量表达式。A选项错误,C语言中数组没有此类型的定义方法;B选项错误,定义数组应指明数组大小,如果不指明数组大小,需要给定初俩的个数;C选项错误,N为变量,不能用来定义数组大小。因此D选项正确。26、设有以下语句:typedefstruetTr{charc;inta14]:}CIN;则下面叙述中正确的是()。A、CIN是struetTT类型的变量B、Tr是struet类型的变量C、可以用TT定义结构体变量D、可以用CIN定义结构体变量标准答案:D知识点解析:本题考查typedef重新声明一种结构体类型,其中CIN为结构体类型名,而不是结构体变量,所以D选项正确。27、有以下程序:#include<stdio.h>main(){intx;scanf("%d",&x);if(x<=3);elseif(x!=10)printf("%d\n",x);}程序运行时,输入的值在哪个范围才会有输出结果()。A、小于3的整数B、不等于10的整数C、大于3或等于10的整数D、大于3且不等10的整数标准答案:D知识点解析:根据代码可知如果x的值小于等于3,执行空语句,不进行打印操作。如果x的值大于3,再判断x的值是否不等于10,如果不等于10就打印x的值,所以选择D选项。28、设有关键码序列(Q,G,M,Z,A,N,B,P,X,H,Y,S,T,L,K,E),采用堆排序法进行排序,经过初始建堆后关键码值B在序列中的序号是()。A、1B、3C、7D、9标准答案:B知识点解析:建堆的算法:首先将要排序的所有关键码放到一棵完全二叉树的各个结点中(这时的二叉树不具备堆的特性),然后,从i=[n/2](n为结点的个数)的结点Ki开始,逐步把以K[n/2],K[n/2]-1,K[n/2]-2,…为根的子树排成堆,直到以K1为根的树排成堆,就完成了建堆过程。此题中,n=16,i=[16/2]=8,即从第8个结点开始,建堆完成后如下图:所以经过初始建堆后关键码值B在序列中的序号是3。29、有以下程序:#includemain(){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正确。30、程序测试的目的是()。A、执行测试用例B、发现并改正程序中的错误C、发现程序中的错误D、诊断和改正程序中的错误标准答案:C知识点解析:暂无解析31、下列叙述中正确的是A、程序执行的效率与数据的存储结构密切相关B、程序执行的效率只取决于程序的控制结构C、程序执行的效率只取决于所处理的数据量D、以上说法均错误标准答案:A知识点解析:程序执行的效率与数据的存储结构、数据的逻辑结构、程序的控制结构、所处理的数据量等有关。32、有以下程序:#include<stdio.h>nlain(){FILE*fp;inti,a[6]={1,2,3,4,5,6},k;fp=fopen("datadat","w+b");fwite(&a[0],sizeof(int),1,fp);for(i=1;i<6;i++){fseek(fp,0L,0);fwrite(&a[i],sizeof(int),1,fp);}fseek(fp,0L,0);fread(&k,sizeof(int),1,fp);felose(fp);printf("%d\n",k);}程序运行后的输出结果是()。A、123456B、21C、6D、654321标准答案:C知识点解析:首先使用fopen函数以只写方式打开文件datAdat,返回文件指针fp然后通过调用Write函数,将起始地址为&a[0]、单位长度为sizeof(int)的一个元素写入文件,即写入a[0];接着for循环从数组a的第二个元素起,每次首先使用fseek()函数将指针fp定位到文件datAtdat的开始位置,写入起始地址&a[i]、单位长度为sizeof(int)的一个元素,即写入a[i];此时数组元素按照逆序写入文件:654321,盾环结束后,使用fseek()函数再将指针fp定位到文件开始位置,调用fread()函数,从fp所指位置读取单化长度为sizeo(int)的一个元素到变量k中,即k=6,最后调用fclose()函数关闭文件,输出k的值6,故答案为C。33、若有以下程序#include<stdio.h>main(){FILE*fp;inti,a[6]={1,2,3,4,5,6},k;fp=fopen("data.dat","w+b");for(i=0;i<6;i++){fseek(fp,0L,0);fwrite(&a[5-i],sizeof(int),1,fp);}rewind(fp);fread(&k,sizeof(int),1,fp);fclose(fp);printf("%d",k);}则程序的输出结果是A、6B、1C、123456D、21标准答案:B知识点解析:本题考查文件操作函数,fseek用于二进制方式打开的文件,移动文件读写指针位置。将文件内部的位置指针重新指向一个流(数据流/文件)的开头。所以最后只保留了1,答案为B。34、设有定义:doublea,b,c;若要求通过输入分别给a、b、c输入1、2、3,输入形式如下(注:此处□代表一个空格)□□1.0□□2.0□□3.0<回车>则能进行正确输入的语句是A、scanf("%lf%lf%lf",a,b,c);B、scanf("%lf%lf%lf",&a,&b,&c);C、scanf("%f%f%f",&a,&b,&c);D、scanf("%5.1lf%5.1lf%5.1lf",&a,&b,&c);标准答案:B知识点解析:scanf函数的一般形式为scanf(格式控制,变量1地址,变量2地址,…),其中,格式字符串要与数据类型保持一致,所以格式字符串中应为%lf,后面应该为变量地址,所以需要加上符号"&",所以选择B。35、以下叙述中正确的是A、只要适当地修改代码,就可以将do-while与while相互转换B、对于"for(表达式1;表达式2;表达式3)循环体"首先要计算表达式2的值,以便决定是否开始循环C、对于"for(表达式1;表达式2;表达式3)循环体",只在个别情况下才能转换成while语句D、如果根据算法需要使用无限循环(即通常所称的"死循环"),则只能使用while语句标准答案:A知识点解析:B选项中,for语句中需要先求解先求解表达式1;C选项中,for语句使用最为灵活,它完全可以取代while语句;D选项中,对于死循环,也可以使用for语句。因此A选项正确。36、若有定义语句:chara=’\82’;则变量aA、说明不合法B、包含1个字符C、包含2个字符D、包含3个字符标准答案:A知识点解析:定义语句:chara=’\82’;反斜杠’\’后面跟三位八进制数据表示一个ASCII码,八进制没有数字8,因此A选项正确。37、关于C语言的变量名,以下叙述正确的是A、变量名不可以与关键字同名B、变量名不可以与预定义标识符同名C、变量名必须以字母开头D、变量名是没有长度限制的标准答案:A知识点解析:合法的标识符由字母(大、小写均可)、数字和下划线组成,并且必须以字母或下划线开头。关键字是指被C语言保留的,不能用作其他用途的标识符,它们在程序中都代表着固定的含义,用户不可重新定义,A选项正确。预定义标识符是系统已经有过定义的标识符,用户可以重新定义,所以可以作为变量名,B选项错误。变量名除了以字母开头以外,还可以以下划线开头,C选项错误。变量名没有长度限制,但不可超过编译器可以辨识的范围,D选项错误。38、有如下程序#include<stdio.h>main(){intx=072;printf("X=%d.\n",x+1);}程序运行后的输出结果是A、X=115B、X=73C、X=59.D、X=72.标准答案:C知识点解析:x定义为072,表示x为一个八进制数,%d代表十进制整数输出,x需要转化成十进制为58,在输出时,x+1=59,再输出,答案为C选项,另外输出时不能忘记"."。39、以下程序的输出结果是()。#include<stdio.h>main(){inta[3][3]={0,1,2,0,1,2,0,1,2},i,j,s=1;for(i=0;i<3.i++)for(j=i,j<=i0++)s+=a[i][a[j][j];printf("%d\n",s);}A、3B、4C、1D、9标准答案:B知识点解析:当外层循环为i时,内层循环j只能取j=i,所以s+=a[i][a[j][j]],其实就是s+=a[i][a[i][i]],当i=0时,s=s+a[0][a[0][0]]=s+a[0][0]=1,当i=1时S=S+a[1][a[1][1]]=s+a[1][1]=1+1=2,当i=2时,s=s+a[2][a[2][2]]=s+a[2][2]=2+2=4。40、有以下程序:#include<stdio.h>main(){inti,j;for(i=3;i>1;i——){for(j=1;j<=2;j++)printf("%d",i+j);printf("\n");}}程序运行的结果是()。A、234345B、43254345C、233423D、4534标准答案:D知识点解析:外层主循环i从3减到1执行了3次(最后一次循环条件不成立,不执行),嵌套的循环j从1增到2,每轮执行2次。每次输出i+j的值,就可以得到如D选项的输出结果。每次换行发生在外循环完成一次循环之后。二、程序填空题(本题共1题,每题1.0分,共1分。)41、程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是重写形参filename所指文件中最后一个学生的数据,即用新的学生数据覆盖该学生原来的数据,其他学生的数据不变。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#include#defineN5typedefstructstudent{longsno;charname[10];floatscore[3];}STU;voidfun(char*filename,STUn){FILE*fp;/**********found**********/fp=fopen(_____1_____,"rb+");/**********found**********/fseek(_____2_____,一(long)sizeof(STU),SEEKEND);/**********found**********/fwrite(&n,sizeof(STU),1,_____3_____);fclose(fp);}main(){STUt[N]=f{10001,"MaChao",91,92,77),{10002,"CaoKai",75,60,88},{10003,"LiSi",85,70,78},{10004,"FangFang",90,82,87},{10005,"ZhangSan",95,80,88}};STUn={10006,"ZhaoSi",55,70,68},ss[N];inti,j;FILE*fp;fp=fopen("student.dat","wb");fwrite(t,sizeof(STU),N,fp);fclose(fp);fp=fopen("student.dat","rb");fread(ss,sizeof(STU),N,fp);fclose(fp);printf("\nTheoriginaldata:\n\n");for(j=0;j标准答案:(1)filename(2)fp(3)fp知识点解析:第一空:“fp=fopen(__1__,"rb+");”补充fopen的参数,fopen的调用形式是:fp=fopen(文件名,文件使用方式),因此第一空处应填文件名“filename”。第二空:此处是补充fseek函数的参数,fseek的调用形式是:fseek(fp,offset,position),其中第一个参数是文件型指针,故第二空处应填文件型指针变量“fp”。第三空:fwrite的调用形式是(buffer,size,count,fb),最后一个参数是文件型指针,故第三空处应填“fp”,将新的学生数据写在最后一个学生数据位置。三、程序修改题(本题共1题,每题1.0分,共1分。)42、给定程序MODI1.C中函数fun的功能是:根据整型形参m,计算如下公式的值。例如,若m=2000,则应输出:0.000160。请改正程序中的语法错误,使它能计算出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!1#include<stdio.h>2/**********foundv/3fun(intm)4{doubley=0,d;5inti;6/**********found**********/7for(i=100,i<=m,i+=100)8{d=(double)i*(double)i;9y+=1.0/d;10}11return(y);12}13main()14{intn=2000;15printf(’’\nTheresultis%1f\n’’,fun(n));16}标准答案:(1)doublefun(intm)(2)for(i=100;i<=m;i+=100)知识点解析:函数为累计相加,计算公式的值。(1)第一个标识下的fun函数的定义,根据题干中给出的公式中的分数部分,可知应该具有double类型返回值。所以应将“fun(intm)”改为“doublefun(intm)”。(2)第二个标识下的for循环过程是实现对公式的求解,C语句中for循环中的多个循环条件表达式是以分号为分隔符,所以第二个标识下“for(i=100,i<=m,i+=100)”改为“for(i=100;i<=m;i+=100)”。四、程序设计题(本题共1题,每题1.0分,共1分。)43、已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。请编写函数fun,函数的功能是:找出成绩最低的学生记录,通过形参返回主函数(规定只有一个最低分)。注意:部分源程序存在文件PROG1.C文件中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。1#include<stdio.h>2#include<string.h>3#defineN104typedefstructss5{charnum[10];ints;)STU;6voidfun(STUa[],STU*s)7{8}9main()10{STUa[N]={{’’A01’’,81},{’’A02”,89},{’’A03’’,66},{’’A04’’,87},{’’A05’’,77},{’’A06’’,90},{’’A07’’,79},{’’A08’’,61},{’’A09’’,80},{’’A10’’,71}},m;11inti;voidNONO();12printf(’’*****Theoriginaldata*****\n’’);13for(i=0;i<N;i++)printf(’’No=%sMark=%d\n’’,a[i].num,a[i].s);14fun(a,&m);15printf(’’*****THE

温馨提示

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

评论

0/150

提交评论