![国家二级(C语言)机试模拟试卷2(共338题)_第1页](http://file4.renrendoc.com/view14/M01/32/3D/wKhkGWa6s9CAQnklAAH2QAZdpos488.jpg)
![国家二级(C语言)机试模拟试卷2(共338题)_第2页](http://file4.renrendoc.com/view14/M01/32/3D/wKhkGWa6s9CAQnklAAH2QAZdpos4882.jpg)
![国家二级(C语言)机试模拟试卷2(共338题)_第3页](http://file4.renrendoc.com/view14/M01/32/3D/wKhkGWa6s9CAQnklAAH2QAZdpos4883.jpg)
![国家二级(C语言)机试模拟试卷2(共338题)_第4页](http://file4.renrendoc.com/view14/M01/32/3D/wKhkGWa6s9CAQnklAAH2QAZdpos4884.jpg)
![国家二级(C语言)机试模拟试卷2(共338题)_第5页](http://file4.renrendoc.com/view14/M01/32/3D/wKhkGWa6s9CAQnklAAH2QAZdpos4885.jpg)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
国家二级(C语言)机试模拟试卷2(共9套)(共338题)国家二级(C语言)机试模拟试卷第1套一、选择题(本题共38题,每题1.0分,共38分。)1、下列叙述中正确的是()。A、线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的B、线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构C、线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构D、线性表的链式存储结构与顺序存储结构在存储空间的需求上没有可比性标准答案:B知识点解析:线性链式存储结构中每个节点都由数据域与指针域两部分组成,增加了存储空间,所以一般要多于顺序存储结构。2、下列叙述中正确的是()。A、栈是一种先进先出的线性表B、队列是一种后进先出的线性表C、栈与队列都是非线性结构D、以上三种说法都不对标准答案:D知识点解析:栈是一种先进后出的线性表,队列是一种先进先出的线性表,栈与队列都是线性结构。3、软件测试的目的是()。A、评估软件可靠性B、发现并改正程序中的错误C、改正程序中的错误D、发现程序中的错误标准答案:D知识点解析:软件测试是为了发现错误而执行程序的过程,测试要以查找错误为中心,而不是为了演示软件的正确功能。不是为了评估软件或改正错误。4、在软件开发中,需求分析阶段产生的主要文档是()。A、软件集成测试计划B、软件详细设计说明书C、用户手册D、软件需求规格说明书标准答案:D知识点解析:需求分析阶段的工作可以概括为:需求获取、需求分析、编写需求规格说明书、需求评审四个方面。所以选择D。5、软件生命周期是指()。A、软件产品从提出、实现、使用维护到停止使用退役的过程B、软件从需求分析、设计、实现到测试完成的过程C、软件的开发过程D、软件的运行维护过程标准答案:A知识点解析:通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期。也就是说,软件产品从考虑其概念开始,到该软件产品不能使用为止的整个时期都属于软件生命周期。6、面向对象方法中,继承是指()。A、一组对象所具有的相似性质B、一个对象具有另一个对象的性质C、各对象之间的共同性质D、类之间共享属性和操作的机制标准答案:D知识点解析:继承是面向对象的方法的一个主要特征,是使用已有的类的定义作为基础建立新类的定义技术。广义地说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们,所以说继承是指类之间共享属性和操作的机制。7、层次型、网状型和关系型数据库划分原则是()。A、记录长度B、文件的大小C、联系的复杂程度D、数据之间的联系方式标准答案:D知识点解析:层次模型的基本结构是树形结构,网状模型是一个不加任何条件限制的无向图,关系模型采用二维表来表示,所以三种数据库的划分原则是数据之间的联系方式。8、一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,则实体工作人员与实体计算机之间的联系是()。A、一对一B、一对多C、多对多D、多对一标准答案:C知识点解析:因为一个人可以操作多个计算机,而一台计算机又可以被多个人.用,所以两个实体之间是多对多的关系。9、有三个关系R、S和T如下:则由关系R和S得到关系T的操作是()。A、自然连接B、差C、交D、并标准答案:B知识点解析:关系T中的元组是R关系中有而S关系中没有的元组的集合,所以进行的是差的运算。10、计算机能直接执行的程序是()。A、源程序B、目标程序C、汇编程序D、可执行程序标准答案:D知识点解析:计算机能直接执行的程序是二进制的可执行程序,扩展名为.exe。所以选择D选项。11、以下叙述中正确的是()。A、C语言规定必须用main作为主函数名,程序将从此开始执行B、可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行C、C语言程序将从源程序中第一个函数开始执行D、main的各种大小写拼写形式都可以作为主函数名,如MAIN,Main等标准答案:A知识点解析:C语言中的主函数只能是main()函数,不能任意指定,所以B选项错误。C语言从主函数main()开始,到主函数main()结束,所以C选项错误。主函数必须写成小写的main,不能混淆大小写,所以D选项错误。12、以下选项中可用做C程序合法实数的是()。A、3.0e0.2B、.1e0C、E9D、9.12E标准答案:B知识点解析:A选项中e后面的指数必须为整数,所以错误。C语言规定,E之前必须要有数字,所以C选项错误。E后面必须要有数字,且必须为整数,所以D选项错误。13、下列定义变量的语句中错误的是()。A、int_int;B、doubleint_;C、charFor;D、noatUS$:标准答案:D知识点解析:C语言规定,变量命名必须符合标识符的命名规则。D选项中包含了非法字符“$”,所以错误。标识符由字母、数字或下划线组成,且第一个字符必须是大小写英文字母或者下划线,而不能是数字。大写字符与小写字符被认为是两个不同的字符,所以For不是关键字for。14、表达式:(int)((double)9/2)-9%2的值是()。A、0B、3C、4D、5标准答案:B知识点解析:先将整型数据9强制转换成double型,然后除以2得到的结果与double型保持一致,即为4.5,然后将4.5强制转换成整型数据4,然后计算9%2的值为1,最后计算4-1的值为3,所以选择B选项。15、设变量均已正确定义,若要通过scanf(’’%d%c%d%c’’,&a1,&c1,&a2,&c2);语句为变量a1和a2赋数值10和20,为变量c1和c2赋字符x和y。以下所示的输入形式中正确的是()。(注:□代表空格字符)A、10□X<回车>20□Y<回车>B、10□X20□Y<回车>C、10X<回车>20Y<回车>D、10□X□20□Y<回车>标准答案:C知识点解析:输入数据的格式必须与scanf()的格式控制串完全匹配,如果A、B、C选项中在数字10后面均输入了空格,则会将空格赋给变量c1,而不是把x赋给c1,所以选择C选项。16、以下选项中不能作为C语言合法常量的是()。A、0.1e+6B、’cd’C、’’\a’’D、’\011’标准答案:B知识点解析:要想表示字符串常量应该用双引号表示,即’’cd’’,单引号用于表示字符常量,所以B选项中的表示方法错误。17、if语句的基本形式是:if(表达式)语句,以下关于“表达式”值的叙述中正确的是()。A、必须是逻辑值B、必须是整数值C、必须是正数D、可以是任意合法的数值标准答案:D知识点解析:if语句中的表达式可以是任意合法的数值,如常量、变量表达式。所以D选项正确。18、有如下嵌套的if语句:if(a<b)if(a<c)k=a;elsek=c;elseif(b<c)k=b;elsek=c;以下选项中与上述if语句等价的语句是()。A、k=(a<b)?((b<c)?a:b):((b>c)?b:c);B、k=(a<b)?((a<c)?a.c):((b<c)7.b:c);C、k=(a<b)?a:b;k=(b<c)?:b:c;D、k=(a<b)?a:b;k=(a<c)?a:c;标准答案:B知识点解析:题目中嵌套语句的含义是当a<b且a<c成立,则将a的值赋给k。如果a<b成立而a<c不成立将c的值赋给k。如果a<b不成立而b<c成立,将b的值赋给k。如果a<b不成立且b<c也不成立,将c的值赋给k。判断条件表达式只有B选项可以表示这个含义。19、有以下程序:#include<stdio.h>main(){intk=5;while(--k)printf(’’%d’’,k-=3);printf(’’\n’’);}程序执行后的输出结果是()。A、1B、2C、4D、死循环标准答案:A知识点解析:一一k先自减再使用,所以第一次判断条件即为while(4),条件为真,执行打印k的值k=4-3,结果为1;第二次判断条件即为while(0),条件为假,结束循环,打印回车换行符。所以选择A选项。20、有以下程序:#include<stdio.h>main(){inti,j;for(i=3;i>=1;i--){for(i=1;j<=2;j++)printf(’’%d’’,i+j);printf(’’\n’’);}}程序运行后的输出结果是()。A、432543B、453423C、233445D、233423标准答案:B知识点解析:第一次执行外循环,i的值为3,第一次执行内循环j的值为1,j<=2条件成立,打印i+j的值,即4;第二次执行内循环j的值为2,j<=2条件成立,打印i+j的值,即5;再判断条件不成立,打印回车换行符,跳出内循环。第二次执行外循环,i的值为2,内循环的执行同第一次一样,所以打印3和4,打印回车换行,结束内循环。第三次执行外循环i的值为1,同理内循环中打印2和3,打印回车换行符,结束内循环。21、有以下程序:#include<stdio.h>main(){intk=5,n=0;do{switch(k){ease1:ease3:n+=1;k--;break;default:n=0;k--;ease2:ease4:n+=2;k--;break;}printf(’’%d’’,n);}while(k>0&&n<5);}程序运行后的输出结果是()。A、02356B、0235C、235D、2356标准答案:C知识点解析:k的值为5,逐个对case语句进行匹配,均不匹配,执行default下的语句n=0;k--。再执行case2:case4:后面的语句n+=2;k--;。执行break语句跳出switch判断,打印n的值,即2。经过第一次循环后,k的值为3,然后进行k>0&&n<5条件判断为真。第二次执行循环体,执行case3:后面的语句n+=1;k--;。再执行break语句跳出循环,此时打印n的值3,此时k的值为2。第三次执行循环体k的值为2,满足条件,执行case2:case4:后面的语句n+=2;k--;。执行break语句跳出循环体,打印n的值5。此时n不满足条件k>0&&n<5,所以结束循环。整个程序的打印结果为235。22、以下关于return语句的叙述中正确的是()。A、一个自定义函数中必须有一条return语句B、一个自定义函数中可以根据不同情况设置多条return语句C、定义成void类型的函数中可以有带返回值的return语句D、没有return语句的自定义函数在执行结束时不能返回到调用处标准答案:B知识点解析:在函数中允许有多个return语句,但每次调用只能有一个return语句被执行,因此只能返回一个函数值。定义成void类型的函数,不允许从该函数取得返回值,也不允许使用return语句,C选项描述错误。没有return语句的函数在执行到函数的最后一条语句后会自动返回到调用处,A、D选项描述错误。因此B选项正确。23、以下程序段完全正确的是()。A、int*p;scanf(’’%d’’,&p);B、int*p;scanf(’’%d’’,p);C、intk,*p=&k;scanf(’’%d’’,p);D、intk,*p;*p=&k;scanf(’’%d’’,p);标准答案:C知识点解析:A选项中错在没有对指针进行初始化,是无效指针,并且在scanf(’’%d’’,&p)中无须再进行取地址操作;B选项中没有对指针进行初始化,是无效指针;D选项中语句*p=&k;的左端*p是指针所指内存空间的值,&k是地址,应为p=&k。因此C选项正确。24、设有定义:doublea[10],*s=a;以下能够代表数组元素a[3]的是()。A、(*s)[3]B、*(s+3)C、*s[3]D、*s+3标准答案:B知识点解析:语句*s=a;表示指针变量s指向一维数组a的首地址。a[3]表示引用数组a的第4个元素,*(s+i)表示引用指针s所指数组a的第i+1个元素,选项A、C、D的表示方法错误,只有B选项正确。25、有以下程序:#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,’’,a[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选项正确。26、有以下程序:#include<stdio.h>intfun(int(*s)[4],intn,intk){intm,i;m=s[0][k];for(i=l;i<n;i++)if(s[i][k]>m)m=s[i][k];returnm:}main(){inta[4][4]={{1,2,3,4},{11,12,13,14},{21,22,23,24},{31,32,33,34}};printf(’’%d\n’’,fun(a,4,0));}程序运行后的输出结果是()。A、4B、34C、31D、32标准答案:C知识点解析:本题重点考察二维数组名作为实参进行参数传递,在主函数中调用了fun函数,实参为二维数组名a和两个整数4、0,这样对应定义:fun函数首部有三种形式,这里采用了第一种形式——行指针,这样在fun函数对s[i][j]进行操作实际上就是对主函数中的a[i][j]进行操作,再分析fun函数的作用便可知,是求二维数组第0列中最大的那个元素。因此C选项正确。27、以下选项中正确的语句组是()。A、char*s;s={’’BOOK!’’};B、char*s;s=’’BOOK!’’;C、chars[10];s=’’BOOK!’’;D、chars[];s=’’BOOK!’’;标准答案:B知识点解析:A选项去掉大括号就正确了;C选项和D选项应在定义时赋初值。因此B选项正确。28、若有定义语句: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’<’o’,所以strcmp(s1,s2)为负值,只有B选项正确。29、有以下程序:#include<stdio.h>voidfun(char**p){++p:printf(’’%s\n’’,*p);}main(){char*a[]={’’Morning’’,’’Afternoon’’,’’Evening’’,’’Night’’};fun(a);}程序运行后的输出结果是()。A、AfternoonB、fternoonC、MorningD、oming标准答案:A知识点解析:本题主函数中定义了一个指针数组a,可以将它看成一个以字符指针为元素的一维数组。和一般的一维数组名能赋给同类型指针变量一样,该字符指针数组也可以赋给指向字符指针的指针,所以数组名a可以用做函数fun()的实参。在fun()函数中,++p操作使形参p往后移动一个字符指针的位置,即指针a[1]的位置。故最后通过printf()函数输出的字符串为“Afternoon”。因此A选项正确。30、有以下程序,程序中库函数islower(ch)用以判断ch中的字母是否为小写字母:#include<stdio.h>#include<ctype.h>voidfun(char*p){inti=0;while(p[i]){if(p[i]==’’&&islower(p[i-1]))p[i-1]=p[i-1]-’a’+’A’;i++;}}main(){chars1[100]=’’abcdEFG!’’;fun(s1);printf(’’%s\n’’,s1);}程序运行后的输出结果是()。A、abcdEFg!B、AbCdEFg!C、abcdEFG!D、aBcDEFG!标准答案:D知识点解析:调用fun函数后,实参数组名s1传给形参指针p,p也指向数组s1。fun函数的功能是遍历字符数组中的所有字符,如果某一个字符是空格并且前一个字符是小写字母的话,就把前一个字符转换为大写。程序中语句p[i-1]=p[i-]-’a’+’A’;即p[i-1]=p[i-1]-32,意思是将p[i-1]中的字符转换为大写。因此D选项正确。31、有以下程序:#include<stdio.h>intf(intx){inty;if(x==0||x==1)return(3);y=x*x-f(X-2);returny;}main(){intz;z=f(3);printf(’’%d\n’’,z);}程序运行后的输出结果是()。A、0B、9C、6D、8标准答案:C知识点解析:主函数中调用f函数,同时将数值3传递给变量x,执行条件不满足条件if(x==0||x==1);跳过return(3);,直接执行语句y=x*x-f(x-2);这里f(x-2)为函数的递归调用,再次调用f函数,此时x=1,判断条件成立,返回3给f(1),y=3*3-3=6,最后将6返回主函数,并进行输出。因此C选项正确。32、有以下程序:#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选项正确。33、有以下结构体说明、变量定义和赋值语句:structSTD{charname[10];intage;charsex;}s[5],*ps;ps=&s[0];则以下scanf函数调用语句有错误的是()。A、scanf(’’%s’’,s[0].name);B、scanf(’’%d’’,&s[0].age);C、scanf(’’%c’’,&(ps->SeX));D、scanf(’’%d’’,ps->age);标准答案:D知识点解析:本题考查结构体的相关知识,题目中需要输入一个变量,scanf要求参数为指针,而D选项中ps->age为一个变量,不是指针,所以错误。34、若有以下语句:typedefstructS{intg;charh;}T;以下叙述中正确的是()。A、可用S定义结构体变量B、可用T定义结构体变量C、S是struct类型的变量D、T是structS类型的变量标准答案:B知识点解析:本题考查typedef重新声明一种结构体类型,那么T为结构体类型,而不是结构体变量,所以B选项正确。35、有以下程序:#include<stdio.h>#include<string.h>structA{inta;charb[10];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、1002,ZhangDa,1202.0B、1002,ChangRong,1202.0C、1001,ChangRong,1098.0D、1001,ZhangDa,1098.0标准答案:B知识点解析:本题考查结构体变量的引用以及作为函数参数,题目虽然看似复杂,其实比较容易,f函数的参数是结构体变量,然后对参数重新赋值并返回,所以该题目的答案为B选项。36、设有宏定义:#defineIsDIV(k,n)((k%n==1)?1:0)且变量m已正确定义并赋值,则宏调用:IsDIV(m,5)&&IsD[V(m,7)为真时所要表达的是()。A、判断m是否能被5和7整除B、判断m被5和7整除是否都余1C、判断m被5或者7整除是否余1D、判断m是否能被5或者7整除标准答案:B知识点解析:本题考查逻辑运算符的相关概念,逻辑与若要为真,那么两边都要为真,即m都能被5和7整除都余1,所以选项B正确。37、有以下程序:#include<stdio.h>main(){inta=1,b=2,c=3,x;X=(a∧b)&c;printf(’’%d\n’’,x);}程序运行后的输出结果是()。A、3B、1C、2D、0标准答案:A知识点解析:本题考查位运算符以及相关运算,∧为按位或,&为按位与,那么a∧b为3,再与c按位与仍然为3,所以答案为A选项。38、有以下程序:#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=fopen(’’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选项正确。二、程序填空题(本题共1题,每题1.0分,共1分。)39、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun的功能是:从形参ss所指字符串数组中,删除所有串长超过k的字符串,函数返回剩余字符串的个数。ss所指字符串数组中共有N个字符串,且串长小于M。请在程序的下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部分源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include<stdio.h>#include<string.h>#defineN5#defineM10intfun(char(*ss)[M],intk){inti,j=0,len;/**********found**********/for(i=0;i<【1】;i++){len=strlen(ss[i]);/**********found**********/if(len<【2】)/**********found**********/strcpy(ss[j++],【3】);}returnj;}main(){charx[N][M]={’’Beijing’’,’’Shanghai’’,’’Tianjin’’,’’Nanjing’’,’’Wuhan’’};inti,f;printf(’’\nTheoriginalstring\n\n’’);for(i=0;i<N;i++)puts(x[i]);printf(’’\n’’);f=fun(x,7);printf(’’Thestringwitchlengthislessthanorequalto7:\n’’);for(i=0;i<f;i++)puts(x[i]);printf(’’\n’’);}标准答案:(1)N(2)k(3)ss[i]知识点解析:填空1:for循环语句作用是遍历字符串数组中的每一个字符串,所以循环变量i的循环条件是i<N。填空2:题目要求删除串长度小于k的字符串,所以if条件语句的条件表达式是:len<=k。填空3:通过字符串拷贝函数将串长不大于k的字符串另存,并记录个数。字符串拷贝函数strcpy,其格式为:strcpy(字符数组名1,字符数组名2)功能:把字符数组2中的字符串拷贝到字符数组1中。字符串结束标识’\0’也一同拷贝。字符数名2,也可以是一个字符串常量。这时相当于把一个字符串赋予一个字符数组。三、程序修改题(本题共1题,每题1.0分,共1分。)40、使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun的功能是:从整数10到55之间,查找能被3整除且有一位上的数值是5的数,把这些数放在b所指的数组中,这些数的个数作为函数值返回。规定函数中a1放个位数,a2放十位数。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件MODI1.C中,不得增行或删行,也不得更改程序的结构!#include<stdio.h>intfun(int*b){intk,a1,a2,i=0;for(k=10;k<=55;k++){/**********found**********/a2=k/10;al=k-a2*10:if((k%3==0&&a2==5)||(k%3==0&&a1==5)){b[i]=k;i++;}}/**********found**********/returnk:}main(){inta[100],k,m;m=fun(a);printf(’’Theresu]tis:\n’’);for(k=0;k<m;k++)printf(’’%4d’’,a[k]);printf(’’\n’’);}标准答案:(1)a2=k/10;(2)returni;知识点解析:(1)a2存放十位数,所以是a2=k/10,此处是一个书写错误,程序中将数字0写成字母0。(2)根据题意,要返回能被3整除的数的个数,从循环体中可以知道其个数是由i来计算的,所以返回的是i。四、程序设计题(本题共1题,每题1.0分,共1分。)41、使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,编写函数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=,lcb:fprintf(wf,’’%c=%d\n’’,ch,fun(a,ch));}fclose(rf);fclose(wf);}标准答案:intfun(char*ss,char*c){inti=0:for(;*ss!=’\0’;ss++)if(*ss==c)i++;/*求出ss所指字符串中指定字符的个数*/returni;}知识点解析:从字符串中查找指定字符,需要使用循环判断结构,循环语句用来遍历字符串,循环条件为字符串没有结束,即当前字符不是’\0’,判断语句用来判断当前字符是否为指定字符。最后返回指定字符的个数。国家二级(C语言)机试模拟试卷第2套一、选择题(本题共40题,每题1.0分,共40分。)1、下列不合法的用户标识符是()。A、j2_KEYB、DoubleC、4dD、_8_标准答案:C知识点解析:在C语言程序中,合法标识符的命名规则是:标识符可以由字母、数字和下划线组成,并且第一个字符必须是字母或下划线。2、若变量都己正确说明,则以下程序段输出结果为()。#inc1udemain(){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、有以下程序:#include<stdio.h>main(){inta[]={2,3,5,4},i;for(i=0;i<4;i++)switch(i%2){case0:switch(a[i]%2){case0:a[i]++;break;case1:a[i]--;}break;case1:a[i]=0;}for(i=0;i<4;i++)printf("%d",a[i]);printf("\n");}程序运行后的输出结果是()。A、3344B、2050C、3040D、0304标准答案:C知识点解析:main函数的函数体是一个for循环语句,for循环中包含一个switch语句,如果判断条件为0,则进入第二个switch语句,如果判断语句为1,则执行“a[i]=0”,最后将数组按顺序输出。所以程序功能是将数组的偶数项设为O,奇数项如果为奇数则减1,为偶数就加1,最后得到结果。4、为了使模块尽可能独立,要求()。A、内聚程度要尽量高,耦合程度要尽量强B、内聚程度要尽量高,耦合程度要尽量弱C、内聚程度要尽量低,耦合程度要尽量弱D、内聚程度要尽量低,耦合程度要尽量强标准答案:B知识点解析:模块独立性是指每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单。耦合性与内聚性是模块独立性的两个定性标准,耦合与内聚是相互关联的。在程序结构中,各模块的内聚性越强,则耦合性越弱。一般较优秀的软件设计,应尽量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性。5、以下叙述中正确的是()。A、C程序中注释部分可以出现在程序中任意合适的地方B、C程序的书写格式是固定的,每行只能写一条语句C、构成C程序的基本单位是函数,所有函数名都可以由用户命名D、在对C语言程序进行编译时,可以发现注释行中的拼写错误标准答案:A知识点解析:本题考查的是C语言程序设计的初步知识。选项A),程序中/*……*/表示注释部分,注释只是给人看的,对程序的编译和运行不起作用,可以在程序中的任何位置;选项B),C语言的书写格式自由,一行可以写多条语句,一条语句也可以写在不同行上;选项C),一个C程序中必须有且只能有一个由“main”命名的主函数,其他函数由用户自行命名;选项D),程序的注释仅仅是提供阅读之用,并不参与程序的编译,所以编译也就不会发现注释行中的错误。6、以下选项中,能用作用户标识符的是()。A、voidB、8_8C、_0_D、unsigned标准答案:C知识点解析:标识符是由若干个字符组成的字符序列,用来命名程序的一些实体。C语言定义标识符应遵循以下六种规则:①标识符由字母、数字或下画线组成;②第一个字符必须是字母或下画线;③标识符最多由274个字符组成;④在标识符中严格区分大小写字母;⑥关键字不能作为自定义的标识符在程序中使用。7、若有以下定义:structtt{charname[10];charsex;}aa={"aaaa",,F,},*p=&aa;则错误的语句是()。A、scanf("%c",aa.sex);B、aa.sex=getchar();C、printf("%c\n",(p).sex);D、printf("%c\n",p->sex);标准答案:A知识点解析:sex是一个char类型变量,不是地址,A项应为scanf("%c",&aa.sex);。8、以下选项中正确的语句组是()。A、chars[];s="HELLO!";B、char*s:s={"HELLO!"}:C、chars[10];s="HELLO!";D、char*s:s="HELLO!";标准答案:D知识点解析:本题考查数组和字符串的赋值。选项A)中数组s没有明确其大小就赋值是错误的。选项B)中不能有大括号,选项C)中的写法应该为{’H’’E’’L’’L’’O’’!’}。9、C源程序中不能表示的数制是()。A、二进制B、八进制C、十进制D、十六进制标准答案:A知识点解析:C语言中整型常量可以用十进制数、八进制数、十六进制数来表示。虽然计算机只能识别二进制数,但二进制不能用来表示整型常量。10、以下选项中,当x为大于l的奇数时,值为0的表达式是()。A、x%2==0B、x/2C、x%2!1=0D、x%2==1标准答案:A知识点解析:算术运算符的优先级高于关系运算符的优先级,所以当x为大于1的奇数时,A选项的值为假,即0。B选项的值为不定值,但绝对不是0。C选项的值为真,即1。D选项的值为真,即1。11、设有条件表达式:(EXP)?i++;j--,则以下表达式中(EXP)完全等价的是()。A、(EXP==0)B、(EXP!=0)C、(EXP==1)D、(EXP!=1)标准答案:B知识点解析:条件表达式的形式为:“表达式1?表达式2:表达式3”。其含义为:当“表达式1”的值为非零时,求出“表达式2”的值,此时“表达式2”的值就是整个条件表达式的值;当“表达式1”的值为零时,求出“表达式3”的值,此时“表达式3”的值就是整个条件表达式的值。对于本题来说,当表达式EXP为非0值时条件成立,即执行语句i++;当EXP等于0时,执行语句j-;这等同于条件表达式“(EXP!=0)?i++j++;”。12、下列关于数据库设计的叙述中,正确的是()。A、在需求分析阶段建立数据字典B、在概念设计阶段建立数据字典C、在逻辑设计阶段建立数据字典D、在物理设计阶段建立数据字典标准答案:A知识点解析:数据字典是在需求分析阶段建立的,并在数据库设计过程中不断修改、充实和完善。13、如果进栈序列为A,B,C,D,则可能的出栈序列是()。A、C,A,D,BB、B,D,C,AC、C,D,A,BD、任意顺序标准答案:B知识点解析:栈的操作原则为后进先出。选项B中出栈顺序可按“A进,B进,B出,C进,D进,D出,C出,A出”实现。14、若有“doublea:”,则正确的输入语句是()。A、scanf("%lf",a);B、scanf("%f",&a);C、scanf("%lf’,&a)D、scanf("%1e",a);标准答案:C知识点解析:scanf函数的调用形式是:scanfl”格式字符串”,输入项地址表)。其中,“格式字符串”是要输入的变量的格式符:“输入项地址表”是要输入的变量的地址。a是double型数据,格式字符串可以用“%lf”,“%f”是浮点型。题中定义变量a为双精度型变量,双精度变量的格式符为“%lf”;变量的地址用取地址符“&”加变量名表示,变量a的地址为“&a”。15、若有定义语句:intx=10;,则表达式x-=x+x的值为()。A、0B、-20C、-10D、10标准答案:C知识点解析:算术运算符+的优先级高于-=,且-=的结合方向为自右向左,所以表达式x一=x+x可以表示成x=x-(x+x)=10-(10+10)=-10,选择C。16、若有定义: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。17、有以下程序:#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,n-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”。18、若有以下定义,则对数组元素的正确引用是()。inta[5],*p=a;A、*&a[5]B、(*a)+2C、*p+4D、*(a+2)标准答案:D知识点解析:本题考查通过指针引用数组元素。选项A)、C)没有这种引用形式;选项B),(*a)+2与*a+2相同,表示第一一个元素的值加2:选项D),*(a+2)引用数组的第3个元素。19、下面程序的运行结果是()。#includemain(){inti:for(i=1;i<=5;i++){if(i%2)printf("*");elseprintf("≠");}}A、*#*#*B、#*#*#*C、*#*#D、#*#*标准答案:A知识点解析:分析程序可知,程序循环5次,然后利用if语句决定每次循环时输出的字符。当i为奇数时,i%2=1,if(i%2)为真,输出“*”;当i为偶数时,i%2=0,if(i%2)为假,执行else语句,输出“#”,所以当i取1、3、5值时输出“*”,当i取2、4值时输出“#”。20、在以下给出的表达式中,与while(E)中的(E)不等价的表达式是()。A、(E>0||E<0)B、(E==0)C、(!E==0)D、(E!=0)标准答案:B知识点解析:while语句中条件表达式E的值不为0即为真,认为满足条件,所以与B选项中表达式的含义正好相反,因此选择B选项。21、若有以下程序:#includemain(){intc[6]={10,20,30,40,50,60},*P,*s;P=c;s=&c[5];printf("%d\n",s-P);}则程序运行后的输出结果是()。A、5B、50C、6D、60标准答案:A知识点解析:本题主要考查数组和指针。首先初始化一维数组c[6],语句p=c;指将c[0]元素的地址赋给指针变量p,语句s=&c[5];指将c[5]元素的地址赋给指针变量s。程序最后输出s—p,即结果为5。因此A选项正确。22、在下列选项中,没有构成死循环的是()。A、inti=100;while(1){i=i()+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,所以循环无法停止。23、以下叙述中错误的是()。A、使用三种基本结构构成的程序只能解决简单问题B、结构化程序由顺序、分支、循环三种基本结构组成C、C语言是一种结构化程序设计语言D、结构化程序设计提倡模块化的设计方法标准答案:A知识点解析:暂无解析24、有以下程序:#include<stdio.h>#definef(x)x*x*xmain(){inta=3,s,t;s=f(a+1);t=f((a+1));printf("%d,%d\n",s,t);}程序运行后的输出结果是()。A、10,64B、10,10C、64,10D、64,64标准答案:A知识点解析:本题考查宏定义的用法,宏定义只是做个简单的替换,所以本题中执行f(a+1)=a+1*a+1*a+l=3*a+1=10,f((a+1))=(a+1)*(a+1)*(a+1)=64,所以答案为A选项。25、有以下程序:#include<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,。26、若有定义语句:inta[2][3],*p[3];则以下语句中正确的是()。A、p=a;B、p[0]=a;C、p[0]=&a[1][2];D、p[1]=&a;标准答案:C知识点解析:A选项错误,因为p是指向一个指针数组,作为数组名,不能指向别的地方。B选项错误,因为p[0]是一个int指针,也就是in*;而a是一个指向指针的指针int**。C选项正确,因为p[0]是一个int*,a[1][2]是int,&a[1][2]是int*,类型吻合。D选项错误,因为a作为数组名,不能取地址。即使能取,p[1]是int*,&a是int***,类型不对。因此C选项正确。27、设栈的存储空间为S(1:m),初始状态为top=m+1。经过一系列入栈与退栈操作后,top=1。现又要将一个元素进栈,栈顶指针top值变为()。A、发生栈满的错误B、2C、mD、0标准答案:A知识点解析:栈是一种特殊的线性表,它所有的插入与删除都限定在表的同一端进行。入栈运算即在栈顶位置插入一个新元素,退栈运算即是取出栈顶元素赋予指定变量。题目中初始状态为top=m+1,可知入栈栈顶指针top=top-1,出栈栈顶指针top=top+1,由于栈长为m,当top=1时栈满,不能再进行入栈操作。故选A选项。28、有以下程序:#include<stdio.h>#include<string.h>main(){chara[]="TEXT",*b="++",c[3]="1";printf("%d,%d,",strlen(a),sizeof(a));printf("%d,%d,",strlen(b),sizeof(b));printf("%d,%d,\n",strlen(c),sizeof(c));}程序运行后的输出结果是()。A、4,5,2,4,1,3,B、4,4,2,2,1,1,C、5,5,3,3,2,2,D、4,4,2,2,1,3标准答案:A知识点解析:sizeof()是运算符,在头文件中typedef为unsignedint,其值在编译时即计算好了,参数可以是数组、指针、对象、函数等。它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。strlen(*char)函数,要在运行时才能计算,参数必须是字符型指针(char*),当数组名作为参数传人时,实际上数组就退化成指针了,它的功能是:返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符NULL,返回的长度大小不包括NuLL。sizeof(a)求数组a所占空间的大小,包括字符串最后的’\0’,所以sizeof(a)=5,strlen()遇到’\0’就结束,strlen(a)=4。strlen(b)是指针指向的字符串长度,sizeof(b)是指针的大小。strlen(c)是字符串的长度,sizeof(c)是数组的长度。因此,输出4,5,2,4,1,3。故答案为A选项。29、数据库系统的三级模式不包括()。A、在需求分析阶段建立数据字典B、在概念设计阶段建立数据字典C、在逻辑设计阶段建立数据字典D、在物理设计阶段建立数据字典标准答案:A知识点解析:数据字典是在需求分析阶段建立,在数据库设计过程中不断修改、充实和完善的。30、在C程序中已经定义三个整型变量x,y,z,要通过语句:scanf(’’%d,%d,%d’’,&x,&y,&z);给x赋值1、给y赋值2、给z赋值3,以下输入形式中错误的是()。(注:口代表一个空格符)A、1,2,3<回车>B、口口口1,2,3<回车>C、1,口口口2,口口口3<回车>D、1口2口3<回车>标准答案:D知识点解析:scanf()的格式中指定了要用逗号分隔输入的数值,所以在输入时必须要有逗号来分隔输入的内容,因此,选项D错误。31、程序中若有以下的说明定义和语句:#include<stdio.h>#include<string.h>structSTR{charhum[10];ints;};main(){structSTRt,*p;p=&t;则不能给变量t的s成员赋整数99,给num成员赋空串的语句组是()。A、(*p).s=99;(*p).num="";B、p->s=99;p->num[0]=0;C、(*p).s=99;p->num[0]=’\0’;D、p->s:99;strcpy((*p).num,"");标准答案:A知识点解析:结构体变量使用“.”运算符引用结构体成员变量,结构体指针使用“->”运算符引用结构体成员变量,main函数中声明结构体STR变量t,和结构体STR指针*p,许将t的地址赋给p,所以使用p访问成员变量时,使用“->”运算符;使用*p访问成员变量时,使用“.”运算符。另外,由于成员变量num是字符数组,所以不能直接进行赋值,若要对num赋空字符串值,可以把num中第一个元素赋值为0或’\0’,或者使用strcpy复制函数将审字符串“”复制到num中,故选项B、C、D正确,选项A错误,因此答案为A。32、以下叙述中正确的是()。A、charc1,c2,*c3,c4[40];是合法的变量定义语句B、数组下标的下限由数组中第一个非零元素的位置决定C、数组下标的下限由数组中第一个被赋值元素的位置决定D、数组下标的下限是1标准答案:A知识点解析:暂无解析33、若有定义typedefint*T;Ta[10];则a的定义与下面哪个语句等价A、int(*a)[10];B、int*a[10];C、int*a;D、inta[10];标准答案:B知识点解析:本题考查typedef的使用方法,typedef对已存在的类型使用一个新的名字,其中本题中int*用T来代替,所以定义Ta[10];就相当于是int*a[10];选项B正确。34、在数据库设计中,将E-R图转换成关系数据模型的过程属于()。A、需求分析阶段B、概念设计阶段C、逻辑设计阶段D、物理设计阶段标准答案:C知识点解析:E-R图转换成关系模型数据则是把图形分析出来的联系反映到数据库中,即设计出表,所以属于逻辑设计阶段。35、关于C语言中循环语句的叙述中正确的是()。A、for语句的循环体至少执行一次B、while语句的循环体至少执行一次C、do…while语句的循环体至少执行一次D、上述说法均正确标准答案:C知识点解析:for(表达式1;表达式2;表达式3)语句,当表达式2为false时,循环体一次都不执行,所以选项A错;while(表达式)当表达式为false时,循环体一次都不执行,所以选项B错误;do一while语句循环体至少执行一次,所以C选项正确。36、有以下程序#include<stdio.h>#include<string.h>main(){chara[]="TEXT",*b="++",c[3]="1";printf("%d,%d,",strlen(a),sizeof(a));printf("%d,%d,",strlen(b),sizeof(b));printf("%d,%d,\n",strlen(c),sizeof(c));}程序运行后的输出结果是A、4,5,2,4,1,3,B、4,4,2,2,1,1,C、5,5,3,3,2,2,D、4,4,2,2,1,3标准答案:A知识点解析:sizeof()是运算符,在头文件中typedef为unsignedint,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。strlen(*char)是函数,要在运行时才能计算。参数必须是字符型指针(char*)。当数组名作为参数传入时,实际上数组就退化成指针了。它的功能是:返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符NULL,返回的长度大小不包括NULL。sizeof(a)求数组a所占空间的大小,包括字符串最后的'\0',所以sizeof(a)=5,strlen()遇到'\0'就结束,strlen(a)=4。strlen(b)是指针指向的字符串长度,sizeof(b)是指针的大小。strlen(c)是字符串的长度,sizeof(c)是数组的长度。因此,输出4,5,2,4,1,3。故答案为A选项37、以下程序段中的变量已正确定义:for(i=0;i<4;i++,i++)for(k=1;k<3;k++);printf("*");程序段的输出结果是()。A、**B、****C、*D、********标准答案:C知识点解析:由于内层循环for(k=1;k<3;k++)后面直接跟了空语句";"所以在循环内部什么操作也不做,跳出外层循环后执行打印语句,所以打印了一个"*",选择C。38、下面程序的输出结果是()。typedefunion{longx[1];inty[4];charz[10];}M;Mt;main(){printf("%d\n",sizeof(t));}A、32B、16C、10D、4标准答案:C知识点解析:“联合体”所占用的内存空间为最长的成员所占用的空间。题中联合体的z[10]成员是联合体中占空间最长的成员。39、以下叙述中正确的是()。A、C程序中注释部分可以出现在程序中任意合适的地方B、C程序的书写格式是固定的,每行只能写一条语句C、构成C程序的基本单位是函数,所有函数名都可以由用户命名D、在对C语言程序进行编译时,可以发现注释行中的拼写错误标准答案:A知识点解析:本题考查的是C语言程序设计的初步知识。选项A),程序中“/*……*/”表示注释部分,注释只是给人看的,对程序的编译和运行不起作用,可以在程序中的任何位置;选项B),C语言的书写格式自由,一行可以写多条语句,一条语句也可以写在不同行上;选项C),一个C程序中必须有且只能有一个由“main”命名的主函数,其他函数由用户自行命名;选项D),程序的注释仅仅是提供阅读之用,并不参与程序的编译,所以编译也就不会发现注释行中的错误。40、下列选项中,不属于数据管理员(DBA)职责的是()。A、数据库维护B、数据库设计C、改善系统性能,提高系统效率D、数据类型转换标准答案:D知识点解析:数据库管理员(DataBaseAdminiswator,DBA)是指对数据库的规划、设计、维护、监视等的人员,其主要工作如下:数据库设计。DBA的主要任务之一是数据库设计,具体地说是进行数据模式的设计;数据库维护。DBA必须对数据库中的数据安全性、完整性、并发控制及系统恢复、数据定期转储等进行实施与维护;改善系统性能,提高系统效率。DBA必须随时监视数据库的运行状态,不断调整内部结构,使系统保持最佳状态与效率。二、程序填空题(本题共1题,每题1.0分,共1分。)41、给定程序的功能是:从键盘输入若干行文本(每行不超过80个字符),写到文件myfile4.txt中,用-1作为字符串输入结束的标志。然后将文件的内容读出显示在屏幕上。文件的读写分别由自定义函数ReadText和WriteText实现。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!1#include<stdio.h>2#include<string.h>3#include<stdlib.h>4voidWriteText(FILE*);5voidReadText(FTLE*);6main()7{FILE*fp;8if((fp=fopen(’’myfile4.txt’’,’’w’’))==NULL)9{printf(’’openfail!!\n’’);exit(0);}10WriteText(fp);11fclose(fp);12if((fp=fopen(’’myfile4.txt’’,’’r’’))==NULL)13{printf(’’openfail!!\n’’);exit(0);}14ReadText(fp);15fclose(fp);16}17/**********found**********/18voidWriteText(FTLE__1__)19{charstr[81];20printf(’’\nEnterstringwith-1toend:\n’’);21gets(sir);22while(strcmp(str,’’-1’’)!=0){23/**********found**********/24fputs(__2__,fw);fputs(’’\n’’,fw);25gets(str);26}27}28voidReadText(FILE*fr)29{charstr[81];30printf(’’\nReadfileandoutputtoscreen:\n’’);31fgets(str,81,fr);32while(!feof(fr)){33/**********found**********/34printf(’’%s’’,__3__);35fgets(str,81,fr);36}37}标准答案:(1)*fw(2)str(3)str知识点解析:第一空:此处是补充函数参数名,参数类型已知是FILE文件指针,“fputs(’’\n’’,fw)”是将字符“\n”写入文件,可知fw是文件指针名,因此第一空处应该是“voidWriteText(FILE*fw)”。第二空:“while(strcmp(str,”-1”)!=0)”循环的结束标志是str字符串等于“-1”时循环退出,如果str不等于“-1”,执行循环体内容:用fputs函数将str字符串写入文件。fputs函数的调用形式是:“fputs(s,fp)”,其中s是指向字符串的指针或字符串数组名,fp是指向将要被写入的文件的文件指针,因此第二处应该是“fputs(str,fw)”。第三空:“while(!feof(fr))”循环的作用是不断读取文件直到到达文件尾,每次最多读81个,将读到的数据放在str字符串里,并用printf输出到屏幕,因此第三处应该是“printf(’’%s’’,str)”。三、程序修改题(本题共1题,每题1.0分,共1分。)42、给定程序MODI1.C中函数fun的功能是:从低位开始取出长整型变量s中奇数位上的数,依次构成一个新数放在t中。高位仍在高位,低位仍在低位。例如,当s中的数为:7654321时,t中的数为:7531。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!1#include<stdio.h>2/**********found**********/3voidfun(longs,longt)4{longs1=10;5*t=s%10;6while(s>0)7{s=s/100;8*t=s%10*s1+*t,9/**********found**********/10s1=s1*100;11}12}13main()14{longs,t;15printf(’’\nPleaseenters:’’);scanf(’’%ld’’,&s);16fun(s,&t);17printf(’’Theresultis:%1d\n’’,t);18}标准答案:(1)voidfun(1ongs,long*t)(2)s1=s1*10;知识点解析:(1)根据“*t=s%10”判断,t应该是个指针变量,所以“voidfun(longs,longt)”语句中的t只需改为“voidfun(10ngs,long*t)”。(2)分析函数内的循环过程可知s1的用途是每次将*t扩大,记录每次得到的奇数位的数字的权值,s1的权值每次增加1位,因此第二个标识下应该是“s1=s1*10;”。四、程序设计题(本题共1题,每题1.0分,共1分。)43、请编写一个函数fun,它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字符串。例如,输入beijingshanghai(为回车键),函数将返回shanghai。注意:部分源程序存在文件PROG1.C中。请勿改动主函数maln和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#includechar*fun(char*s,char*t){}main(){chara[20],b[20];voidNONO();printf("Input1thstring:");gets(a);printf("Input2thstring:");gets(b);printf("%s\n",fun(a,b));NONO();}voidNONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*fp,*wf;inti;chara[20],b[20];fp=fopen("in.dat","r");wf=fopen("out.dat"f"w");for(i=0;i<10,i++){fscanf(fp,"%s%s",a,b);fprintf(wf,"%s\n",fun(a,b));}fclose(fp);fclose(wf);}标准答案:1inti;2char*p=sr*q=t;3intn=0,m=0;4{while(*p)//计算串s的长度n,其中p为临时指针5{n++;6p++;7}8nwhile(*q)//计算串t的长度m,其中q为临时指针9{m++;10q++;11}12if(n>=m)//比较m和n的值,设置p指向较大的指针13p=s;14else15p=t;16returnp;知识点解析:该程序功能是比较两个字符串的长度。解题过程是首先分别求得两个字符串的长度,然后对这两个值进行判断,实现两个字符串长度的比较。进入fun函数,根据前面的分析:(1)首先求得字符串的长度,设变量n和m分别用来求字符串的长度,初值设为0,把字符串中的字符逐个访问,每访问一个字符,n和m分别加1,直到字符串结束;(2)使用两个临时指针变量p、q分别作为访问字符串的变量;(3)根据m和n的值返回串,设置指针p,指向返回串的开始地址。字符数组和字符串、指针作为函数的参数。国家二级(C语言)机试模拟试卷第3套一、选择题(本题共38题,每题1.0分,共38分。)1、以下语句中存在语法错误的是()。A、charss[6][20];ss[1]="right?";B、charss[][20]={"right?"};C、char*ss[6];ss[1]="right?";D、char*ss[]={"right?"};标准答案:A知识点解析:A项错误,数组定义后,不能对数组整体赋值,ss是二维数组,ss[1]是一维字符数组,即字符串,字符串赋值可以使用“strcpy(ss[1],”right”);”的形式,但不能使用赋值的形式。B、D两项正确,在定义时对数组同时进行初始化;C项正确,将常量字符串在内存中的首地址赋给指针数组的一个元素。2、下述程序的输出结果是()。#inc1udevoidmain(){chara=1,b=2;charc=a^.b<<2;printf("\n%d",c);}A、9B、10C、12D、2标准答案:A知识点解析:本题主要考查C语言最基本的算术运算“左移(<<)”和“异或(^)”。“左移”或“右移”运算表达式的一般形式为:x<>n。“左移
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《贷款业务管理》课件
- 《电子产品制造工艺》课件
- 《RA的血液净化》课件
- 《阿里物流简介》课件
- 《华为组织结构图》课件
- 《MBO与股权激励》课件
- 2025至2031年中国伞尖行业投资前景及策略咨询研究报告
- 2025至2030年中国直柄风动砂轮机数据监测研究报告
- 【语文】《烛之武退秦师》课件+2024-2025学年统编版高一语文必修下册
- 《“红领巾”真好教学课件》
- Pt催化剂ECSA计算方法
- 个人简历及简历封面(简单实用)
- 汽车运行材料ppt课件(完整版)
- GB∕T 1732-2020 漆膜耐冲击测定法
- 我国油菜生产机械化技术(-119)
- 2022《化工装置安全试车工作规范》精选ppt课件
- 吞咽障碍筛查表
- 汽车系统动力学-轮胎动力学
- 艾琳歆日内交易2011-2月至4月份图表
- 中国民航国内航空汇编航路314系列航线
- 山西特色文化简介(课堂PPT)
评论
0/150
提交评论