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

下载本文档

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

文档简介

国家二级(C语言)机试模拟试卷29(共9套)(共340题)国家二级(C语言)机试模拟试卷第1套一、选择题(本题共39题,每题1.0分,共39分。)1、在数据流图中,带有箭头的线段表示的是()。A、控制流B、数据流C、模块调用D、事件驱动标准答案:B知识点解析:数据流图中带箭头的线段表示数据流,沿箭头方向传递数据的通道,一般在旁边标注数据流名。2、下列特征中不是面向对象方法的主要特征的是()。A、多态性B、标识惟一性C、封装性D、耦合性标准答案:D知识点解析:面向对象设计方法与面向过程设计方法有本质的不同,其基本原理是:使用现实世界的概念抽象地思考问题从而自然地解决问题。其特点包括:标识惟一性、多态性、封装性、模块独立性、继承和多态性好。3、下列选项中,不属于数据库管理的是()。A、数据库的建立B、数据库的调整C、数据库的监控D、数据库的校对标准答案:D知识点解析:数据库管理一般包括:数据库的建立、数据库的调整、数据库的重组、数据库的安全性控制与完整性控制、数据库的故障恢复和数据库的监控。4、下面说法正确的是()。A、一个C程序可以有多个主函数B、一个C语言的函数中只允许有一对花括号C、C程序的书写格式是自由的,一个语句可以写在一行上,也可以写在多行内D、在对C程序进行编译时,可以发现注释行中的拼写错误标准答案:C知识点解析:本题涉及C语言基本的3个知识点:①C语言规定一个程序只允许有一个主函数,一个函数内可以允许有多个花括号;②C程序的注释部分仅仅是方便程序员阅读,提高程序的可读性和可移植性,它并不参与程序的编译,所以编译器也就不会发现注释中的错误。5、下列不合法的用户标识符是()。A、j2_KEYB、DoubleC、4dD、_8_标准答案:C知识点解析:在C语言程序中,合法标识符的命名规则是:标识符可以由字母、数字和下划线组成,并且第一个字符必须是字母或下划线。6、下列叙述中错误的是()。A、用户所定义的标识符允许使用关键字B、用户所定义的标识符应尽量做到“见名知意”C、用户所定义的标识符必须以字母或下划线开头D、用户定义的标识符中,大、小写字母代表不同标识标准答案:A知识点解析:在C语言中,合法标识符的命名规则是:标识符可以由字母、数字和下划线组成,并且第一个字符必须为字母或下划线,凡是要求标识符的地方都必须按此规则命名。在C语言的标识符中,大写字母和小写字母被认为是两个不同的字符。在选择标识符时,应注意做到“见名知义”,即选择具有一定含义的英文单词或汉语拼音作为标识符,以增加程序的可读性。7、关于“while(条件表达式)循环体”,以下叙述中正确的是()。A、循环体的执行次数总是比条件表达式的执行次数多一次B、条件表达式的执行次数总是比循环体的执行次数多一次C、条件表达式的执行次数与循环体的执行次数一样D、条件表达式的执行次数与循环体的执行次数无关标准答案:B知识点解析:考查while循环的执行过程。先计算括号内表达式的值,若不为0则执行循环体语句,若为0则跳出wlaile循环,所以条件表达式的执行次数总是比循环体的执行次数多一次.答案选B。8、设已有定义:floatX;,则以下对指针变量P进行定义且赋初值的语句中正确的是()。A、int*P=(float)X;B、float*P=&x;C、floatP=&x;D、float*P=1024;标准答案:B知识点解析:指针是用来存放地址的变量,用(类型名+指针变量名)的形式定义。赋值时应将某个变量地址即&x赋给指针变量,所以选择B。9、下面对软件特点描述不正确的是()。A、软件是一种逻辑实体,具有抽象性B、软件开发、运行对计算机系统具有依赖性C、软件开发涉及软件知识产权、法律及心理等社会因素D、软件运行存在磨损和老化问题标准答案:D知识点解析:与硬件不同,软件在运行、使用期间不存在磨损、老化问题。10、下述程序的输出结果是()。#include<stdio.h>voidmain(){chara=1,b=2;charc=a^b<<2:printf(’’\n%d’’,c);}A、9B、10C、12D、2标准答案:A知识点解析:本题主要考查C语言最基本的算术运算“左移(<<)”和“异或(^)”。“左移”或“右移”运算表达式的一般形式为:x<<n或x>>n。“左移(<<)”运算的规则是将x的二进制位全部向左移动n位,将左边移动的高位舍弃,右边空出的位补0;“右移(>>)”运算的规则是将x的二进制位全部向右移动n位,将右边移出的低位舍弃,左边高位空出要根据原来符号位的情况进行补充,对无符号数则补0,对有符号数,若正数则补0,若为负数则补1。“异或”运算是当两个运算量的相应位相同时结果为0,不相同时结果为1。b=2的二进制为(00000010)b<<2后为00001000,a=1的二进制为00000001,所以c=a^b<<2为00001001,转化为十进制后为9。11、下列叙述中,不属于设计准则的是()。A、提高模块独立性B、使模块的作用域在该模块的控制域中C、设计成多入口、多出口模块D、设计功能可预测的模块标准答案:C知识点解析:大量软件设计表明,以下的设计准则是可以借鉴为设计的指导和对软件结构图进行优化,这些准则是:提高模块独立性;模块规模适中;深度、宽度、扇出和扇入适当;使模块的作用域在该模块的控制域中;应减少模块的接口和界面的复杂性;设计成单入口、单出口的模块;设计功能可预测的模块。12、有以下程序:#includeintfun(int*k){intb=0;b=*k+b:return(b);}main(){inta[10]={1,2,3,4,5,6,7,8},i;for(i=2;i<4;i++){printf(“%d”,fun(&a[i]));}printf(“\n”);}程序运行后的输出结果是()。A、1012B、810C、34D、1028标准答案:C知识点解析:b是局部变量,因此当i=2时,fun的返回值值为3,i=3时fun返回值为413、下列关于线性链表的叙述中,正确的是()。A、各数据结点的存储空间可以不连续,但它们的存储顺序与逻辑顺序必须一致B、各数据结点的存储顺序与逻辑顺序可以不一致,但它们的存储空间必须连续C、进行插入与删除时,不需要移动表中的元素D、以上三种说法都不对标准答案:C知识点解析:一般来说,在线性表的链式存储结构中,各数据结点的存储序号是不连续的,并且各节点在存储空间中的位置关系与逻辑关系也不一致。线性链表中数据的插入和删除都不需要移动表中的元素,只需改变节点的指针域即可。故C选项正确。14、以下叙述中正确的是()。A、转义字符要用双引号括起来,以便与普通的字符常量区分开B、字符常量在内存中占2个字节C、字符常量需要用单引号括起来D、字符常量是不能进行关系运算的标准答案:C知识点解析:A选项中,转义字符是以反斜线“\”开头,后跟1个或几个字符;B选项中,字符常量在内存中占1个字节;D选项中,字符常量可以进行关系运算,不能参与数值运算。因此C选项正确。15、以下程序段中完全正确的是()。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。16、交换两个变量的值,不允许用临时变量,应该使用下列()位运算符。A、&B、^C、||D、~标准答案:B知识点解析:按逻辑化运算的特定作用主要有3点:①用按位与运算将特定位清0或保留特定位;②用按位或运算将特定的位置设置为1;③用按位异或运算将某个变量的特定位翻转或交换两个变量的值。17、数据库管理系统是()。A、操作系统的一部分B、在操作系统支持下的系统软件C、一种编译系统D、一种操作系统标准答案:B知识点解析:数据库管理系统是数据库的机构,它是一种系统软件,负责数据库中数据组织、数据操纵、数据维护、控制及保护和数据服务等。是一种在操作系统之上的系统软件。18、有以下程序:#includemain(){intc=0,k;for(k=1;k<3;k++)switch(k){default:c+=k;case2:c++;break;case4:c+=2;break;}printf(”%d\n”,c);}程序运行后的输出结果是()。A、3B、5C、7D、9标准答案:A知识点解析:程序执行过程:当k=1时:c=0→1→2;当k=2时:c=2→3;当k=3时for循环结束。输出结果为3。19、有以下程序:#inciude<stdio.h>main(){inti,j;for(i=3;i>=1;i--){for(j=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,打印回车换行符,结束内循环。20、有以下程序#include<stdio.h>main(){inta=-2,b=2;for(;,++a&&--b;)printf("%d,%d,",a,b);}程序执行后的输出结果是()。A、0,1,B、-1,1,0,1,C、-1,1,0,0,D、-1,1,标准答案:D知识点解析:程序中a初值为-2,for循环执行++a后结果为-1,b初值为2,for循环执行--b后结果为1,所以for循环的循环条件-1&&1的值为真,执行printf语句输出-1,1;接着下一次循环时,++a结果为0,--b结果为0,0&&0结果为假,for循环结束,本题答案为D。21、以下叙述中正确的是()。A、charc1,c2,*c3,c4[40];是合法的变量定义语句B、数组下标的下限由数组中第一个非零元素的位置决定C、数组下标的下限由数组中第一个被赋值元素的位置决定D、数组下标的下限是1标准答案:A知识点解析:二维数组的第一维数据表示行数,第二维数据表示列数,所以num[2][4]中的数据应为两行四列,和大括号中定义的内容不一致,选项A)错误,答案选A)。22、有以下程序:#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选项正确。23、设有定义:chars[81];inti=0;,以下不能将一行(不超过80个字符)带有空格的字符串正确读入的语句或语句组是()。A、gets(s);B、while((s[i++]=getchar())!=’\n’);s[i]=’\0’;C、scanf("%s",s);D、do{seanf("%c",&s[i]);}while(s[i++]!=’\n’).s[i]=’\0’;标准答案:C知识点解析:字符串的输入有两种方式:①scanf()函数;②gets()函数。C项,s代表输入一个字符数组,遇到空格时会默认字符串输入结束,所以不能正确读入带有空格的字符串。24、字符串“\\\”ABCDEF\“\\”的长度是()。A、11B、10C、5D、3标准答案:B知识点解析:本题涉及字符串的两个最基本的概念。①字符串的长度是指字符串中字符的个数,但不包含字符串结束符;②以反斜线“\”开头的特殊字符序列,意思是把反斜线后而的字符序列转换成特定的含义,而不是原来的含义,不包含在字符串长度之内,“\”连同后面的字符为一个长度。25、下列叙述中错误的是()。A、在C语言中,对二进制文件的访问速度比文本文件快B、在C语言中,随机文件以二进制代码形式存储数据C、语句FILEfp;定义了一个名为fp的文件指针D、C语言中的文本文件以ASCⅡ码形式存储数据标准答案:C知识点解析:在C语言中,文件指针实际上是指向一个结构体类型的指针,一般称这个结构体类型名为FILE,可以用此类型名来定义文件指针。定义文件类型指针变量的一般形式为:FILE*指针变量名:选项C中少了“*”所以选项C错误。26、若有定义语句:doublex[5]={1.0,2.0,3.0,4.0,5.0},*p=x,则错误引用x数组元素的是()。A、*pB、x[5]C、*(p+1)D、*x标准答案:B知识点解析:直接引用一维数组元素的表达式为:数组名[下标]。数组大小为n时,下标的取值范围为0~(n-1),所以本题中x的下标为0~4,x[5]溢出,B项错误。还可以通过指针引用一维数组元素。指针p指向该数组,所以*p表示x[0],A项正确;指针p+1指向数组x的第二个元素的地址,*(p+1)表示x[1],C项正确;数组名x为x数组元素的首地址,*x表示对x[0]的引用,D项正确。27、若有以下程序:#includemain(){inti,j;for(i=3;i>=1;i--){for(j=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,打印回车换行符,结束内循环。28、下面不属于需求分析阶段任务的是()。A、确定软件系统的功能需求B、确定软件系统的性能需求C、需求规格说明书评审D、制定软件集成测试计划标准答案:D知识点解析:需求分析阶段的工作有:需求获取;需求分析;编写需求规格说明书;需求评审,所以选择D。29、有以下函数:intaaa(char*s){char*t=s:while(*t++);t--;return(t-s);}以下关于aaa函数功能叙述正确的是()。A、将串s复制到串tB、比较两个串的大小C、求字符串s的长度D、求字符串s所占字节数标准答案:C知识点解析:本题重点考察的知识点whik循环语句的应用。aaa()函数中,首先定义了一个字符指针t指向形参s,然后通过一个while循环让指针t不断递增,直到t指向字符串结束标识处。当t指向结束标识处时,由于后缀++运算符的原因,它还会被再递增1,所以接下来的t--;语句让它回到结束标识处。最后返回t-s,s还是指向字符串第1个字符处,而t指向了字符串结尾,故返回值为字符串的长度值。因此C选项正确。30、有以下程序#include<stdio.h>main(){inta=1,b=2;for(;a<8;a++){b+=a;a+=2;}printf("%d,%d\n",a,b);}程序运行后的输出结果是A、9,18B、8,11C、7,11D、10,14标准答案:D知识点解析:第一次循环a的值为1,满足条件,执行b+=a,与a+=2,则b的值变为3,a的值变为3,执行a++,a的值为4,满足条件进入第二次循环,执行完循环体后b的值为7,a的值为6,执行a++,a的值为7,满足条件进入第三次循环,执行完循环体后b的值为14,a的值为9,执行a++,a的值变为10,所以选择D选项。31、设有关键码序列(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。32、以下叙述正确的是()。A、在C语言中分号是语句的组成部分B、C语言程序由C语句组成,可以省略main函数C、分号是C语句之间的分隔符D、所有程序行都必须用分号结束标准答案:A知识点解析:C程序的入口函数是main(),C程序中有且只有一个main函数,故选项B错误。分号是C语言一条语句的结束标志,不是分隔符,C语言分隔符是用来分隔多个变量、数据项、表达式等的符号,包括逗号、空白符、分号和冒号等,选项C错误。C语言的程序不是以分号结束的,因为C语言是面向过程的,从main函数开始在main函数里结束,选项D错误。故答案为A选项。33、有如下程序#includemain(){inti,data;seallf(“%d”,&data)for(i=0;i<5;i++){if((idata&&i%3==0))continue;printf(“%d,”,i);}}程序运行时,从键盘输入:13<回车>后,程序输出结果为()。A、0,2,4,B、1,3,5,C、0,1,2,3,4,5,D、0,1,2,3,标准答案:A知识点解析:程序通过scanf()函数,输入data的值13,for循环中,i的值遍历0~4,对每个i的值执行if语句判断,其中:i>data始终为假;所以表达式i>data&&i%3==0始终为假;所以if语句的判断条件需要看i34、设有定义:structcomplex{intreal,unreal;}a={1,8},b;则以下赋值语句中错误的是()。A、b=(2,9);B、b=a;C、b.real=a.real;D、b.real=a.unreal;标准答案:A知识点解析:结构体赋值时,应该用大括号;选项B和C是正常赋值表达式,选项D中的结构体元素虽然不对应,但合法引用后进行运算时,只会进行赋值,如果数据格式不一致系统会进行格式转换。35、一棵二叉树中共有80个叶子结点与70个度为1的结点,则该二叉树中的总结点数为A、219B、229C、230D、231标准答案:B知识点解析:二叉树中,度为0的节点数等于度为2的节点数加1,即n2=n0-1,叶子节点即度为0,则n2=79,总结点数为n0+n1+n2=80+70+79=229,答案为B。36、有三个关系R、S和T如下:则由关系R和S得到关系T的操作是A、交B、差C、并D、选择标准答案:A知识点解析:用于查询的3个操作无法用传统的集合运算表示,引入的运算为投影运算、选择运算、笛卡尔积。常用的扩充运算有交、除、连接及自然连接等。选择,从关系中找出满足给定条件的元组的操作称为选择,题目中无给定条件,故D选项错误。差:R-S结果是属于R但不属于S的记录组成的集合,T中元组"c32"同时属于R和S,B选项错误。并:R∪S是将S中的记录追加到R后面,T中元组少于R,故C选项错误。交:R∩S结果是既属于R又属于S的记录组成的集合,与题目中结果相符,故A选项正确。37、有如下程序#include<stdio.h>voidchange(int*array,intlen){for(;len>=0;len--)array[len]-=1;}main(){inti,array[5]={2,2};change(array,4);for(i=0;i<5;i++)printf("%d,",array[i]);printf("\n");}程序运行后的输出结果是A、1,1,-1,-1,-1,B、1,0,-1,1,-1,C、1,1,1,1,1,D、1,-1,1,-1,1,标准答案:A知识点解析:首先给array一维数组赋初值[2,2,0,0,0],再调用change函数,对array数组中的每一个数进行减1处理,最后使用一个for循环语句进行输出,因此答案为A选项。38、能从任意一个结点开始没有重复地扫描到所有结点的数据结构是A、循环链表B、双向链表C、二叉链表D、有序链表标准答案:A知识点解析:在单链表的第一个结点前增加一个表头结点,队头指针指向表头结点,最后一个结点的指针域的值由NULL改为指向表头结点,这样的链表称为循环链表。在循环链表中,只要指出表中任何一个结点的位置,就可以从它出发没有重复地扫描到表中其他所有的结点。双向链表与二叉链表都可以扫描到所有结点,但是会有重复。有序链表如果是单链表的情况下,不能扫描到所有结点。故A选项正确39、下述程序的输出结果是()。#include<stdio.h>voidmain(){chara=1,b=2;charc=a^b<<2;printf("\n%d",c);}A、9B、10C、12D、2标准答案:A知识点解析:本题主要考查C语言最基本的算术运算“左移(<<)”和“异或(^)”。“左移”或“右移”运算表达式的一般形式为:x<<n或x>>n。“左移(<<)”运算的规则是将x的二进制位全部向左移动n位,将左边移动的高位舍弃,右边空出的位补0;“右移(>>)”运算的规则是将x的二进制位全部向右移动n位,将右边移出的低位舍弃,左边高位空出要根据原来符号位的情况进行补充,对无符号数则补0,对有符号数,若为正数则补0,若为负数则补1。“异或”运算是当两个运算量的相应位相同时结果为0,不相同时结果为1。b=2的二进制为(00000010)b<<2后为00001000,a=1的二进制为00000001,所以c=a^b<<2为00001001,转化为十进制后为9。二、程序填空题(本题共1题,每题1.0分,共1分。)40、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun的功能是:将形参n中,各位上为偶数的数取出,并按原来从高位到低位相反的顺序组成一个新数,作为函数值返回。例如,输入一个整数27638496,函数返回值为64862。请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>unsignedlongfun(unsignedlongn){unsignedlongx=0;intt;while(n){t=n%10;/*********found*********/if(t%2==【1】)/*********found*********/x=【2】+t;/*********found*********/n=【3】;}returnx;}main(){unsignedlongn=-1;while(n>99999999||n<0){printf("Pleaseinput:(0<n<100000000):");scanf("%ld",&n);}printf("\nTheresult;is:%ld\n",fun(n));}标准答案:(1)0(2)10*x(3)n/10知识点解析:填空1:定义变量t用来存放某数的各个位数值,此处判断t是否为偶数,即对2求余结果是否为0。填空2:将t作为x的个位数,原来x的各个位上升1位,即x=10*x+t。填空3:每循环一次,通过除法运算,去掉数值最后一位。三、程序修改题(本题共1题,每题1.0分,共1分。)41、使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun的功能是:将长整型数中各位上为奇数的数依次取出,构成一个新数放在t中。高仍在高位,低位仍在低位。例如,当s中的数为87653142时,t中的数为7531。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdlib.h>#include<stdio.h>#include<conio.h>voidfun(longs,long*t){intd;longs1=1;/*********found*********/t=0;while(s>0){d=s%10;/*********found*********/if(d%2==0){*t=d*s1+*=t;s1*=10;}s/=10;}}voidmain(){longs,t;system("CLS");printf("\npleaseenters:");scanf("%ld",&s);fun(s,&t);printif("Theresultis:%ld\n",t);}标准答案:(1)*t=0;(2)if(d%2!=0)或if(d%2==1)知识点解析:(1)由函数定义可知,变量t是指针变量,所以对t进行赋初值0是不对的。因为t指向的是存放新数的变量,所以此处应给新数赋初值0,即木t=0;(2)变量d表示数s各位上的数,此处的if条件应为判断d是否为奇数。四、程序设计题(本题共1题,每题1.0分,共1分。)42、请编写函数fun,该函数的功能是:删除一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。例如,若一维数组中的数据是:2223445666677899101010删除后,数组中的内容应该是:2345678910注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容。仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>#defineN80intfun(inta[],intn){}voidmain(){inta[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10},i,n=20;printf("Theoriginaldata:\n");for(i=0;i<n;i++)printf("%3d",a[i]);n=fun(a,n);printf("\n\nThedataafterdeleted:\n");for(i=0;i<n;i++)printf("%3d",a[i]);printf("\n\n");}标准答案:intfun(inta[],intn){inti,j=1;for(i=1;i<n;i++)if(a[j一1]!=a[i])/*若该数与前一个数不相同,则要保留*/a[j++]=a[i];returnj;/*返回不相同数的个数*/}知识点解析:该程序的流程是:定义变量i和j,其中j用于控制删除后剩下的数在数组中的下标,i用于搜索原数组中的元素。j始终是新数组中最后一个元素的下一个元素的下标,所以if语句中的条件是a[j一1]!=a[i],其中a[j—1]就是新数组中的最后一个元素,若条件成立,则表示出现了不同的值,所以a[j]要保留到新数组中。注意本题中i和j的初值都要从1开始,该算法只能用于数组已排序的题目中。国家二级(C语言)机试模拟试卷第2套一、选择题(本题共38题,每题1.0分,共38分。)1、为了使模块尽可能独立,要求()。A、模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强B、模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱C、模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱D、模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强标准答案:B知识点解析:系统设计的质量主要反映在模块的独立性上。评价模块独立性的主要标准有两个:一是模块之间的耦合,它表明两个模块之间互相独立的程度;二是模块内部之间的关系是否紧密,称为内聚。一般来说,要求模块之间的耦合尽可能地弱,即模块尽可能独立,而要求模块的内聚程度尽量地高。2、在数据流图中,带有箭头的线段表示的是()。A、控制流B、数据流C、模块调用D、事件驱动标准答案:B知识点解析:数据流图中带箭头的线段表示数据流,沿箭头方向传递数据的通道,一一般在旁边标注数据流名。3、下面关于数据库三级模式结构的叙述中,正确的是()。A、内模式可以有多个,外模式和模式只有一个B、外模式可以有多个,内模式和模式只有一个C、内模式只有一个,模式和外模式可以有多个D、模式只有一个,外模式和内模式可以有多个标准答案:B知识点解析:数据库的三级模式结构是指数据库系统的外模式、模式和内模式。一个数据库可以有多个外模式,但只有一个模式和一个内模式。4、下列方法中,不属于软件调试方法的是()。A、回溯法B、强行排错法C、集成测试法D、原因排除法标准答案:C知识点解析:软件调试主要采用以下三种方法:强行排错法:作为传统的调试方法,其过程可概括为设置断点、程序暂停、观察程序状态、继续运行程序。回溯法:该方法适合于小规模程序的排错、即一旦发现了错误,先分析错误征兆,确定最先发现“症状”的位置。原因排除法:原因排除法是通过演绎和归纳,以及二二分法来实现。5、设有定义:chars[81];inti=0;以下不能将一行(不超过80个字符)带有空格的字符串正确读入的语句或语句组是()。A、scanf("%s",s);B、while((s[i++]=getchar())!=’\n’);s[i]=’\0’;C、gets(s);D、do{scanf("%c",&s[i]);}while(s[i++]!=’\n’);s[i]=’\0’;标准答案:A知识点解析:函数scanf()输入字符串时默认空格为间隔符,所以不能输入空格,答案选A6、以下叙述中错误的是()。A、可以给指针变量赋一个整数作为地址值B、函数可以返回地址值C、改变函数形参的值,不会改变对应实参的值D、当在程序的开头包含头文件stdio.h时,可以给指针变量赋NULL标准答案:A知识点解析:不能将一个整数直接赋给指针变量作为地址,所以A)是错误的。函数的返回值可以是地址,即指针。函数调用中形参值的变化不会传递给实参。7、有以下程序#includemain(){FILE*fp;inti=20,j=30,k,n;fp=fopen("dl.dat","w");fprintf(fp,"%d\n",i);fprintf(fp,"%d\n",j);fclose(fp);fp=fopen("dl.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。8、有以下程序:#include<stdio.h>main(){intx=1,y=0;if(!x)y++;elseif(x==0)if(x)y+=2;elsey+=3;printf("%d\n",y);}程序运行后的输出结果是()。A、3B、2C、1D、0标准答案:D知识点解析:在ifelse语句中else总是与离它最近的if配对。本题目中x为1所以!x为0,所以执行elseif语句中的内容,判断(x==0)是否成立,因为x为1所以条件不成立,所以elseif内部的if…else语句不再执行,所以y的值还是初始值0。9、有以下程序:intfl(doublea){returna*a;)intf2(intx,inty){doublea,b;a=f1(x);b=n(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。10、有以下程序:#include<stdio.h>main(){intb[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1;for(i=0;i<3;i++)for(j=i;j<=i;j++)t+=b[i][b[j][i]];printf("%d\n",t);}程序运行后的输出结果是()。A、3B、4C、1D、9标准答案:B知识点解析:每次内循环只循环一次就结束,第一次外循环时t=t+b[0][b[0][o]]=1+b[0][0]=1+0=1;第二次外循环时t=t+b[1][b[1][1]]=1+b[1][1]=1+1=2;第三次外循环时t=t+b[2][b[2][2]]=2+b[2][2]=2+2=4。11、当用“#defineF37.5f”定义后,下列叙述正确的是()。A、F是float型数B、F是char型数C、F无类型D、F是字符串标准答案:D知识点解析:字符替换定义格式为:#define标识符(形参表)形参表达式。题中F是代表形参表达式的标识符(字符串)。12、两个或两个以上的模块之间关联的紧密程度称为()。A、耦合度B、内聚度C、复杂度D、连接度标准答案:A知识点解析:耦合度是模块间互相连接的紧密程度的度量;内聚度是一个模块内部各个元素间彼此结合的紧密程度的度量。13、程序测试的目的是()。A、为被测程序设计正确的测试用例B、发现并改正程序中的错误C、发现程序中的错误D、改正程序中的错误标准答案:C知识点解析:程序测试是使用人工或自动手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别,即为发现错误而执行程序的过程,而不是改正错误。故正确答案为C。14、有以下程序:#include<stdio.h>doublefun(doublea){doublex;x=a-(int)a;returnx;}main(){doublea=3.1415:printf("%f\n",fun(a));}程序的运行结果是()。A、0.141500B、3.141500C、3.000000D、0.000000标准答案:A知识点解析:这里考查了强制转换的概念。在fun函数中,x=a-(int)a,表示x取值为a的小数部分,因此,输入a为3.1415,输出x=0.141500,故A选项正确。15、以下程序的输出结果是()。#includemain()structst{p=aa;{intx;int*y;}*p;printf("%d\n",++(p->x));}intdt[4]={1,2,3,4};structstaa[4]={2,&dt[0],3,&dt[0],4,&dt[0],5,&dt[0],};A、1B、2C、3D、4标准答案:C知识点解析:程序首先将指针p指向结构体数组aa的首地址,通过p->x引用了结构体数组aa[0]的第一个成员2;++(p->x)是将p->x的值加1,所以输出结果为3。16、数据结构主要研究的是数据的逻辑结构、数据的运算和()。A、数据的方法B、数据的存储结构C、数据的对象D、数据的逻辑存储标准答案:B知识点解析:数据结构是研究数据元素及其之间的相互关系和数据运算的一门学科,它包含3个方面的内容,即数据的逻辑结构、存储结构和数据的运算。17、sizeof(char)是()。A、一种函数调用B、一个整型表达式C、一个字符型表达式D、一个不合法的表达式标准答案:B知识点解析:“sizeof(char)”是一个C语言的关键字,它不是函数调用。“sizeof”的功能是计算出运算对象在计算机的内存中所占用的字节数量,该表达式的返回值是一个整数,而不是一个字符型表达式。18、有以下程序#includemain(){printf("%d\n",NULL);}程序运行后的输出结果是()。A、0B、变量无定义,输出不确定C、-1D、1标准答案:A知识点解析:考查运算符与表达式,方法是想办法得到个位数字和十位数字,然后个位数字*10+十位数字即可将个位数和十位数对换。A)中,n/10*10将整数中的十位部分提取出来,然后用n-n/10*10即得该整数的个位数字,n/10得到十位数字,(n-n/10*10)*10+n/10即完成对换,A)正确。同时易得选项B)、C)、D)三个选项都不正确,答案选A)。19、数据库管理系统是()。A、操作系统的一部分B、在操作系统支持下的系统软件C、一种编译系统D、一种操作系统标准答案:B知识点解析:系统软件主要包括:①操作系统软件;②各种语言的解释程序和编译程序;③各种服务性程序;④各种数据库管理系统。数据库管理系统属于系统软件,负责数据库中的数据组织、数组操纵、数据维护、控制和保护以及数据服务等。20、有以下程序:#include<stdio.h>#include<string.h>main(){charp[20]={’a’,’b’,’c’,’d’},q[]="abc",r[]="abcde";streat(p,r);strepy(p+strlen(q),q);printf("%d\n",strlen(p));}程序运行后的输出结果是()。A、11B、9C、6D、7标准答案:C知识点解析:strcpy:字符串拷函数;strlen:求字符串长度函数(注意:不包含字符串结束标识符‘\0’);streat:字符串连接函数。执行完语句strcat(p.r);后,p数组中存储的元素为a,b,c,d,a,b,c,d,p;执行语句strcpy(p+strlen(q),q);得到的结果是将q所指向的字符串拷贝至p+strlen(q)开始的存储位置,因为strlen的值为3,即从p+3开始存储q中的元素,所以执行完strcpy(p+strlen(q),q)语句后,字符数组p[20]的仔储元素为a,b,c,a,b,c;所以strlen(p)的结果为6因此C选项正确。21、算法的时间复杂度是指()。A、算法的长度B、执行算法所需要的时间C、算法中的指令条数D、算法执行过程中所需要的基本运算次数标准答案:D知识点解析:算法的时间复杂度,是指执行算法所需要的工作量,可以用算法在执行过程中所需基本运算的执行次数来度量算法的工作量。22、以下叙述中正确的是()。A、int*p1;int**p2;int*p3;都是合法的定义指针变量的语句B、指针变量只能通过求地址运算符(&)来获得地址值C、语句p=NULL;与p=\0;是等价的语句D、语句p=NULL;执行后,指针p指向地址为0的存储单元标准答案:A知识点解析:在指针运算中,"*"为取值运算符,"&"为取地址运算符。表达式"p=NULL;"表示把空指针赋给指针变量p,而若要p指向变量x的地址需使用"p=&x;"的形式,所以答案选A)。23、学生选修课程的关系模式为SC(S#,Sn,Sd,Sa,C#,G)(其属性分别为学号、姓名、所在系、年龄、课程号和成绩);C(C#,Cn,P#)(其属性分别为课程号、课程名、先选课)。关系模式中包含对主属性部分依赖的是()。A、S#→SdB、(S#,C#)→CC、C#→CnD、C#→P#标准答案:A知识点解析:若X→Y,但Y不完全函数依赖于X,则称Y对X部分依赖。关系模式Sc中,主键为(S#,C#),但显然有S#→Sd,S#→Sa,存在非主属性对主属性的部分依赖。故本题答案为A选项。24、if语句的基本形式是:if(表达式)语句,以下关于“表达式”值的叙述中正确的是()。A、必须是逻辑值B、必须是整数值C、必须是正数D、可以是任意合法的数值标准答案:D知识点解析:if语句中的表达式可以是任意合法的数值,如常量、变量表达式。所以D选项正确。25、设有以下说明,则不正确的叙述是()。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也不可以作为函数参数。26、下列叙述中正确的是()。A、算法就是程序B、设计算法时只需要考虑数据结构的设计C、设计算法时只需要考虑结果的可靠性D、以上三种说法都不对标准答案:D知识点解析:算法是指解题方案的准确而完整的描述,算法不等于程序,也不等于计算方法,所以A错误。设计算法时不仅要考虑对数据对象的运算和操作,还要考虑算法的控制结构。27、以下叙述中错误的是()。A、算法正确的程序可以有零个输入B、算法正确的程序最终一定会结束C、算法正确的程序可以有零个输出D、算法正确的程序多于相同的输入一定有相同的结果标准答案:C知识点解析:算法的特征:①有穷性。一个算法(对任何合法的输入)在执行有穷步后能够结束,并且在有限的时间内完成。②确定性。算法中的每一步都有确切的含义。③可行性。算法中的操作能够用已经实现的基本运算执行有限次来实现。④输入:一个算法有零个或者多个输入,零个输入就是算法本身确定了初始条件。⑤输出:一个算法有一个或者多个输出,以反映出数据加工的结果。所以C选项错误。28、下列叙述中正确的是()。A、在switch语句中,不一定使用break语句B、在switch语句中必须使用defaultC、break语句必须与switch语句中的case配对使用D、break语句只能用于switch语句标准答案:A知识点解析:defauh语句在switch语句中可以省略,所以B错误;switch语句中并非每个case后都需要使用break语句,所以C错误;break语句还可以用于for等循环结构中,所以D错误。29、下述程序的输出结果是()。#includevoidmain(){chara=1,b=2;charc=a^b<<2:pfintf("ha%d",c);}A、9B、10C、12D、2标准答案:A知识点解析:本题主要考查C语言最基本的算术运算“左移(<<)”和“异或(^)”。“左移”或“右移”运算表达式的一般形式为:x<>n。“左移(<<)”运算的规则是将x的二进制位全部向左移动n位,将左边移动的高位舍弃,右边空出的位补0;“右移(>>)”运算的规则是将x的二进制位全部向右移动n位,将右边移出的低位舍弃,左边高位空出要根据原来符号位的情况进行补充,对无符号数则补0,对有符号数,若为正数则补0,若为负数则补1。“异或”运算是当两个运算量的相应位相同时结果为0,不相同时结果为1。b=2的二进制为(00000010)b<<2后为00001000,a=1的二进制为00000001,所以c=a^b<<2为00001001,转化为十进制后为9。30、有以下程序:#includemain(){FILE*fp;inta[10]={1,2,3,0,0},i;fp=fopen(“d2.dat”,“wh”);fwrite(a,sizeof(int),5,fp);fwrite(a,sizeof(int),5,fp);felose(fp);fp:fopen(“d2.dat”,”rb”);fread(a,sizeof(int),10,fp);felose(fp);for(i=0;i<10;i++)prinff(“%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知识点解析:本题考查文件操作函数,两次fWrite后,fp文件中已经写入1,2,3,0,0,1,2,3,0,0然后将文件fp中的内容重新写入数组a中,最后输出a为1,2,3,0,0,1,2,3,0,0,所以选项D正确。31、以下关于C语言数据类型使用的叙述中错误的是()。A、若要处理如“人员信息”等含有不同类型的相关数据,应自定义结构体类型B、若要保存带有多位小数的数据,可使用双精度类型C、若只处理“真”和“假”两种逻辑值,应使用逻辑类型D、整数类型表示的自然数是准确无误差的标准答案:C知识点解析:C语言中没有逻辑类型,所以C错误。若要保存带有多位小数的数据,可以用单精度类型也可以用双精度类型。处理包含不同类型的相关数据可以定义为结构体类型。整数类型可以无误差的表示自然数。32、阅读以下程序#include<stdio.h>main(){intcase;floatprintF;printf("请输入2个数:");scanf("%d%f",&case,&printF);printf("%d%f\n",case,printF);}该程序在编译时产生错误,其出错原因是A、定义语句出错,case是关键字,不能用作用户自定义标识符B、定义语句出错,printF不能用作用户自定义标识符C、定义语句无错,scanf不能作为输入函数使用D、定义语句无错,printf不能输出case的值标准答案:A知识点解析:C语言中标识符的定义中区分大小写,所以printF与printf不一样,可以作为标识符。而case是C语言中的关键字,不能作为变量名,scanf是标准的输入函数,printf是标准的输出函数,所以选择A选项。33、有以下程序:#include<stdio.h>main(){intaE4][4]=t{1,4,3,2},{8,6,5,7},{3,7,2,5},{4,8,6,1}};inti,j,k,t;for(i=0;i<4;i++)for(j=0;j<3;j++)for(k=j+1;k<4;k++)if(a[j][i]>a[k][i]){t=a[j][i];a[j][i]=a[k][i];a[k][i]=t;}/*按列排序*/for(i=0;i<4;i++)printf(’’%d,’’,a[i][i]);}程序运行后的输出结果是()。A、hellobeijingB、HelloBeijingC、HELLOBEIJINGD、hELLOBeijing标准答案:C知识点解析:主程序渎取整个字符串存于s中,调用fun函数,字符指针c指向数组s。函数fun的功能是把指针c所指向的字符数组中的所有小写字符转换为大写。gets函数可以把空格作为字符串的一部分输入,以回车作为输入结束。如果*c为小写字符,则*c=*c-32(转大写)。因此C选项正确。34、以下关于long、int和short类型数据占用内存大小的叙述中正确的是()。A、均占4个字节B、根据数据的大小来决定所占内存的字节数C、由用户自己定义D、由C语言编译系统决定标准答案:A知识点解析:scanf()函数中格式控制字符串是为了输入数据用的,无论其中有什么字符,在输入数据时,按照一一对应的位置原样输入这些字符。35、设有如下定义:structsk{intm;floatx;}data,*q;若要使q指向data中的m域,正确的赋值语句是()。A、q=&data.m;B、*q=data.m;C、q=(structsk*)&data.m;D、q=(structsk*)data.m;标准答案:C知识点解析:利用强制类型转换(structsk*)把整数&data.m转换成结构体变量指针赋给结构体指针变量q。36、下列说法不正确的是()。A、int*fun():----fun是一个返回int指针的函数B、int(*fun)();---fun是一个返回int指针的函数C、int(*array[5])();----array是一个有5个元素的数组,每一个元素都是一个函数指针,指向一个返回int的函数D、int(*fun(int))(int);----fun是带有一个int参数的函数,返回值是一个函数指针,这个指针指向带有一个int参数并返回int的函数标准答案:B知识点解析:该函数中fun是一个函数指针。指向一个返回int的函数。37、在软件生命周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段是()。A、需求分析B、详细设计C、软件设计D、概要设计标准答案:A知识点解析:软件生命周期的主要活动阶段为:可行性研究和计划制定、需求分析、软件设计、软件实现、软件测试、运行和维护。其中需求分析是对开发软件提出的需求进行分析并给出详细定义,即准确地确定软件系统的功能,编写软件规格说明书及初步的用户手册,提交评审。38、有以下程序#include<stdio.h>intnew_div(doublea,doubleb){returna/b+0.5;}main(){printf("%d",new_div(7.8,3.1));}程序运行后的输出结果是A、1B、2C、3D、0标准答案:C知识点解析:new_div()的返回值是int类型,因此,a/b(a,b均为double类型)+0.5的小数部分被将被截断。经计算,7.8/3.1+0.5=2.516+0.5=3.016,故打印的结果为3。故答案为C选项二、程序填空题(本题共1题,每题1.0分,共1分。)39、给定程序中,函数fun的功能是:有N×N矩阵,根据给定的m(m<=)值,将每行元素中的值均右移m个位置,左边置为0。例如,N=3,m=2,有下列矩阵123456789程序执行结果为00l004007请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!1#include<stdio.h>2#defineN43voidfun(int(*t)[N],intm)4{inti,j;5/**********found**********/6for(i=0;i<N;__1__)7{for(j=N-1-m;j>=0;j--)8/**********found**********/9t[i][j+__2___]=t[i][j];10/**********found**********/11for(j=0;j<__3__;j++)12t[i][j]=0;13}1415main()16{intt[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10},i,j,m;17printf(’’\nTheoriginalarray:\n’’);18for(i=0;i<N;i++)19{for(j=0;j<N;j++)20printf(’’%2d’’,t[i][j]);21printf(’’\n’’);22}23printf(’’Inputm(m<=%d):’’,N);scanf(’’%d’’,&m);24fun(t,m);25printf(’’\nTheresultis:\n’’);26for(2=0;i<N;i++)27{for(j=0;j<N;j++)28printf(’’%2d’’,t[i][j]);29printf(’’\n’’);30}31}标准答案:(1)i++(2)m(3)m知识点解析:函数fun的功能是将每行元素中的值均右移m个位置。第一空:题目要求对每行元素中的值均右移m个位置,故第一空处循环变量每次增1,共循环N次,完成对N行的移位操作,因此第一空处应为“i++”。第二空:循环“for(j=N-1-m;j>=0;j--)”是进行行元素中的值右移m个位置,即把t[i][j]元素放置在t[i][j+m]上,因此第二空应为“m”。第三空:循环“for(j=0;j<__3__;j++)”是对空出来的位置补0,每行元素的前m位数据已经移动到后面,每行空处m个元素,因此第三空为“m”。三、程序修改题(本题共1题,每题1.0分,共1分。)40、给定程序MODll.C中函数fun的功能是:将S所指字符串中的字母转换为按字母序列的后续字母(但Z转换为A,Z转换为a),其他字符不变。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#includeVOidfun(char*s){/**********found***********/while(*s!=‘@’){if(*s>=‘A’&&*s<=‘Z’||*s>=‘a’&&*s<=‘z’){if(*s==‘Z’)*s=‘A’;elseif(*s==‘z’)*s=‘a’,else*s+=1;}/**********found***********/(*s)++,}}main(){chars[80];printf(“\nEnterastringwithlencjth<80.:\n\n”);gets(s);printf(“\nThestring:\n\n”);puts(s);fun(s);printf(“\n\nTheCords:\n\n”);puts(s);}标准答案:(1)while(*s)或while(*s!=‘\0’)或while(*s!=0)(2)s++;知识点解析:函数的功能是将字符串中的字母改为该字母序列的后续字母。(1)第一个错误标识下的“while(*s!=‘@’)”语句原意是s不指向字符串尾就进入下而的循环,所以对于指针判断不为尾符的语句应该是“while(*s)”或者“while(*s!=‘\0’)”或者“while(*s!=0)”。(2)第二个标识下“(*s)++;”是对字符内容加1,而原题是对字符位置加1,所以将其改为“s++;”。四、程序设计题(本题共1题,每题1.0分,共1分。)41、请编写函数fun,函数的功能是:统计一行字符串中单词的个数,作为函数值返回。一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干个空格隔开,一行的开始没有空格。注意:部分源程序在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#innclude#include#defineN80intfun(char*s){}main(){charline[N];intnum=0;voidNONO();printf("Enterastring:\n");gets(line);num=fun(line);printf("Thenumberofwordis:%d\n\n",num);NONO();}voidNONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FTLE*rf,*wf;inti,num;charline[N],*p;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fgets(line,N,rf);p=strchr(line,’\n’);if(p!=NULL)*p=0;num=fun(line);fprintf(wf,"%d\n",num);}fclose(rf);fclose(wf);}标准答案:inti,n=0;//字符统计初始值设置为0for(i=0;i=’a’&&s[i]<=’z’&&s[i+1]=’’||s[i+1]==’\0’)//单词判断条件n++;//单词统计计数器加1}returnn;//返回统计值知识点解析:(1)首先,求得字符串的长度。(2)只要小于字符串的长度,就刘‘字符进行循环判断。(3)根据题下要求,只要字符是小写字母,并且下一个紧靠的字符是空格或者尾符,那么单词统计计数器就加1。国家二级(C语言)机试模拟试卷第3套一、选择题(本题共39题,每题1.0分,共39分。)1、下列哪一条不属于数据库设计的任务?()A、设计数据库应用结构B、设计数据库概论结构C、设计数据库逻辑结构D、设计数据库物理结构标准答案:A知识点解析:数据库设计工作量大而且过程复杂,既是一项数据库工程也是一项庞大的软件工程。考虑数据库及其应用系统开发全过程,将数据库设计分为以下6个阶段:需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施和数据库的运行和维护。2、以下关于逻辑运算符两侧运算对象的叙述中正确的是()。A、可以是任意合法的表达式B、只能是整数0或非0整数C、可以是结构体类型的数据D、只能是整数0或1标准答案:A知识点解析:C语言的逻辑运算符比较特别,它的操作数没有明确的数据类型,可以是任意合法的表达式,所以选择A。3、有以下程序:#include<stdio.h>intf(intx);main(){intn=1,m;m=f(f(f(n)));printf("%d\n",m);}intf(intx){returnx*2;}程序运行后的输出结果是()。A、8B、2C、4D、1标准答案:A知识点解析:第一次调用m=f(f(f(1))),第二次为m=f(f(2)),第三次为m=f(4),即返回值为8。4、有以下程序:#include<stdio.h>unsignedfun(unsignednum){unsignedk=1;do{k*=num%10;num/=10;}while(num);returnk;}main(){unsignedn=26;printf("%d\n",fun(n));}程序运行后的输出结果是()。A、12B、10C、16D、8标准答案:A知识点解析:程序首先执行main函数,执行printf("%d\n",fun(n));即输出表达式fun(6)的值,为了计算该表达式,需要调用函数func。此时main将n中的26作为实参传递给fun的num,即num值为26,接着执行do—while语句。第1次循环,执行k*=num%10,即k=k*(num%10)=1*(26%10)=6;执行num/=10,即num=num/10=26/10=2;while后面循环条件为num,此时num为2,是非0值,即表示循环条件成立,继续执行循环体。此时k为6,num为2,执行do—while中的语句后,k为12,num为0。由于while后面循环条件为num,此时num为0,表示循环条件不成立,结束循环,执行returnk,即返回至main函数中的被调用处,执行main函数,执行printf语句,输出结果为12。5、若二维数组a有m列,则在a[i][j]前的元素个数为()。A、j*m+iB、i*m+jC、j*m+i+lD、i*m+j+l标准答案:B知识点解析:二维数组的元素可以看成是按矩阵形式存放的,总是先存放第一行的元素,再存放第二行的元素。数组第一维的下标是i,说明它前面还有i行,有i*m个元素,数组第二维的下标是j,说明它前面还有j列,有i个元素,所以共有i*m+j个元素。6、有两个关系R和T如下:则由关系R得到关系T的操作是()。A、选择B、交C、投影D、并标准答案:C知识点解析:关系T是由关系R的第1、3列的元组组成,这是对关系R进行投影运算的结果。可以简单理解为:选择运算是对行的操作,投影运算是对列的操作。7、有以下程序#includemain(){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。8、数据库系统在其内部具有3级模式,用来描述数据库中全体数据的全局逻辑结构和特性的是()。A、外模式B、概念模式C、内模式D、存储模式标准答案:B知识点解析:概念模式,也称逻辑模式,是对数据库系统中全局数据逻辑结构的描述,是全体用户应用公共数据视图。它不涉及具体的硬件环境与平台,与具体的软件环境也无关。9、若在定义语句:inta,b,c,*p=&c;之后,接着执行以下选项中的语句,则能正确执行的语句是()。A、scanf("%d",a,b,c);B、scanf("%d%d%d",a,b,c):C、scanf("%d",p);D、scanf("%d",&p);标准答案:C知识点解析:程序语句“inta,b,c,*p=&c;”定义了3个整型变量a,b,c和一个整型指针变量p,并且把变量c的地址赋给p。scanf函数的一般形式为“scanf("格式控制字符串",地址列表)”。其中的地址列表应当是存放输入数据变量

温馨提示

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

评论

0/150

提交评论