版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
国家二级(C语言)机试模拟试卷36(共9套)(共264题)国家二级(C语言)机试模拟试卷第1套一、选择题(本题共39题,每题1.0分,共39分。)1、设有定义:charp[]={’1’,’2’,’3’},*q=p;以下不能计算出一个char型数据所占字节数的表达式是()。A、sizeof(*q)B、sizeof(char)C、sizeof(p)D、sizeof(p[0])标准答案:C知识点解析:数组名表示该数组的首地址,是一个地址常量,所以sizeof(p)求得的是一个地址占用的字节数,即4个字节,答案选C。2、下列关于线性链表的描述中,正确的是()。I、只含有一个指针域来存放下一个元素地址II、指针域中的指针用于指向该结点的前一个或后一个结点(即前件或后件)III、结点由两部分组成:数据域和指针域。A、仅I、IIB、仅I、IIIC、仅II、IIID、全部标准答案:D知识点解析:在定义的链表中,若只含有一个指针域来存放下一个元素地址,称这样的链表为单链表或线性链表。在链式存储方式中,要求每个结点由两部分组成:一部分用于存放数据元素值,称为数据域;另一部分用于存放指针,称为指针域。其中指针用于指向该结点的前一个或后一个结点(即前件或后件)。3、设a和b均为int型变量,且a=6、b=11、c=3,则能使值为3的表达式足()。A、b%(c%4)B、b%(c-a%5)C、b%a-a%5D、(b%a)-(a%4)标准答案:D知识点解析:选项D括号内的运算分别是b%a=11%6=5和a%c=6%4=2,最后得到5-2=3。4、以下各项中,能正确表述算式sin(2πr+30°)的C语言表达式是()。A、sin(2*π*r+30)B、sin(2*3.14*r+30)C、sin(2*3.14*r+3.14*30/180.0)D、sin(2*3.14*r+30*3.14/360.0)标准答案:C知识点解析:考查算术表达式的写法,选项C中没有,π,需要用数值3.14代替,sin函数的参数为弧度,角度30转成弧度应为3.14*30/180。故应选C。5、对于循环队列,下列叙述中正确的是()。A、队头指针是固定不变的B、队头指针一定大于队尾指针C、队头指针一定小于队尾指针D、队头指针可以大于队尾指针,也可以小于队尾指针标准答案:D知识点解析:循环队列的队头指针与队尾指针都不是固定的,随着入队与出队操作要进行变化。因为是循环利用的队列结构所以队头指针有时可能大于队尾指针有时也可能小于队尾指针。6、下列不属于软件工程3个要素的是()。A、工具B、过程C、方法D、环境标准答案:D知识点解析:软件工程包括3个要素,即方法、工具和过程。方法是完成软件工程项目的技术手段;工具支持软件的开发、管理、文档生成;过程支持软件开发的各个环节的控制、管理。7、下列叙述中错误的是()。A、C程序可以由多个程序文件组成B、一个C语言程序只能实现一种算法C、C程序可以由一个或多个函数组成D、一个C函数可以单独作为一个C程序文件存在标准答案:B知识点解析:在一个C语言程序中可以进行多种算法的实现,对算法的个数没有规定,所以B)错误。8、sizeof(char)是()。A、一种函数调用B、一个整型表达式C、一个字符型表达式D、一个不合法的表达式标准答案:B知识点解析:sizeoffchar)是一个C语言的关键字,它不是函数调用。sizeof的功能是计算出运算对象在计算机的内存中所占用的字节数量,该表达式的返回值是一个整数,而不是一个字符型表达式。9、有以下程序#includemain(){inta=1,b=0;printf("%d,",b=a+b);printf("%d\n",a=2*b);}程序运行后的输出结果是()。A、1,2B、1,0C、3,2D、0,0标准答案:A知识点解析:考查数据的输入,printf("%d,",b=a+b);先计算b=a+b,得出b=1,再输出b值。语句printf("%d\n",a=2*b);先计算a=2*b,得出a=2,再输出a值。所以输出结果为A)。10、软件详细设计生产的图如下:该图是()。A、N-S图B、PAD图C、程序流程图D、E-R图标准答案:C知识点解析:N-S图是用方框图来代替传统的程序流程图,所以A不对。PAD图是问题分析图,它是继承程序流程图和方框图之后提出的又一种主要用于描述软件详细设计的图形表示工具,所以B不对。E-R图是数据库中的用于表示E-R模型的图示工具,所以D不对。图中所示表示方法是进行软件详细设计时使用的程序流程图。11、数据结构中,与所使用的计算机无关的是数据的()。A、存储结构B、物理结构C、逻辑结构D、线性结构标准答案:C知识点解析:数据的逻辑结构反映的是数据元素之间的逻辑关系,与使用的计算机无关。12、下列选项中,不能作为合法常量的是()。A、1.234e04B、1.234e0.4C、1.234e+4D、1.234e0标准答案:B知识点解析:用指数形式表示的实型常量需注意两点:①e或E后面的指数必须是整数:②指数必须是不超过数据表示范围的正负整数,并且在e或E前必须有数字。13、以下叙述中错误的是()。A、使用三种基本结构构成的程序只能解决简单问题B、结构化程序由顺序、分支、循环三种基本结构组成C、C语言是一种结构化程序设计语言D、结构化程序设计提倡模块化的设计方法标准答案:A知识点解析:已经证明,由顺序、分支、循环这三种基本结构组成的算法可以解决任何复杂的问题。选项A)叙述有误。14、下列程序的运行结果为()。#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去掉,保留剩下的,由于是通过指针调用,所以改变字符串的结果。15、下列叙述中,不属于软件需求规格说明书的作用的是()。A、便于用户,开发人员进行理解和交流B、反映出用户问题的结构,可以作为软件开发工作的基础和依据C、作为确认测试和验收的依据D、便于开发人员进行需求分析标准答案:D知识点解析:软件需求规格说明书有以下几个方面的作用:①便于用户、开发人员进行理解和交流;②反映出用户问题的结构,可以作为软件开发工作的基础和依据;③作为确认测试和验收的依据。16、设表的长度为20。则在最坏情况下,冒泡排序的比较次数为()。A、190B、20C、19D、90标准答案:A知识点解析:对长度为n的线性表排序,在最坏情况下,冒泡排序需要比较的次数为n(n-1)/2。本题中n=20,20×(20-1)/2=190。故本题答案为A选项。17、有以下程序:#includevoidfun(int*x,ints,inte){inti,j,t;for(i=s,j=e;i<j;i++,j--){t=*(x+i);*(x+i)=*c(x+j);*(x+j)=t;}}main(){intm[]={0,1,2,3,4,5,6,7,8,9},k;fun(m,0,3);fun(m+4,0,5);fun(m,0,9);for(k=0;k<10;k++)pfinff("%d",m[k]);}程序的运行结果是()。A、4567890123B、3210987654C、9876543210D、0987651234标准答案:A知识点解析:程序的执行过程为:定义数组m,并为其赋初值,数组长度为10。调用函数fun(m,0,3)将数组首地址传入函数,函数实现将数组下标值从0到3的元素首尾倒置,for循环结束之后数组为m={3,2,1,0,4,5,6,7,8,9}。调用函数fun(m+4,0,4)将数组下标值为4的元素地址传人函数,函数实现将数组下标值从4到9的元素首尾倒置,for循环结束之后数组为m={3,2,1,0,9,8,7,6,5,4}。调用函数fun(m,0,9)将数组首地址传入函数,函数实现将数组下标值从0到9的元素首尾倒置,for循环结束之后数组为m={4,5,6,7,8,9,0,1,2,3}。依次输出数组元素,结果为4567890123。18、若a、b、C、d都是int型变量且都已经正确赋初值,则以下不正确的赋值语句是()。A、a+d:B、a++;C、a=b=c=d=100;D、a=(b=3)+(d=5);标准答案:A知识点解析:C语言规定,赋值号的右边可以是一个赋值表达式,因此选项C)、选项D)正确;在选项B)中,a++是一个自加1的表达式,a被重新赋值,因此它是一个合法的赋值表达式;选项A)中,a+d是一个算术表达式,虽然最后有一个分号,但这个表达式中没有赋值操作,因此它不是一条赋值语句。19、关于字符常量,以下叙述正确的是()。A、空格不是一个字符常量B、字符常量能包含大于一个的字符C、单引号中的大写字母和小写字母代表的是相同的字符常量D、所有的字符常量都可以作为整型量来处理标准答案:D知识点解析:本题考查字符常量的4个知识点:①空格是一个字符常量,而且单引号中的空格不可以省略;②字符常量只能包含一个字符;③单引号中的大写字母和小写字母代表的是不相同的字符常量;④所有的字符常量都作为整型量来处理,在计算机内部,其对应的整数值就是ASCII码值。20、下列叙述中正确的是()。A、有一个以上根结点的数据结构不一定是非线性结构B、只有一个根结点的数据结构不一定是线性结构C、循环链表是非线性结构D、双向链表是非线性结构标准答案:B知识点解析:线性结构应满足:有且只有一个根结点与每个结点最多有一个前件,也最多有一个后件,所以B正确。所以有一个以上根结点的数据结构一定是非线性结构,所以A错误。循环链表和双向链表都是线性结构的数据结构。21、下列数组定义中错误的是()。A、intX[][3]={0};B、intx[2][3]={{1,2},{3,4},{5,6}};C、intx[][3]={{1,2,3},{4,5,6}};D、intx[2][3]={1,2,3,4,5,6};标准答案:B知识点解析:二维数组的初始化有以下几种形式:①分行进行初始化;②不分行的初始化;⑧部分数组元素初始化;④省略第一维的定义,不省略第二维的定义。在选项B中赋值号左边定义了一个2行3列的二维数组,而右边用3行2列的数字进行赋初值。所以出现了边界的越界溢出错误。22、若定义函数“int*func()”,则函数func的返回值为()。A、一个实数B、一个指向整型变量的指针C、一个指向整型函数的指针D、一个整型函数的入口地址标准答案:B知识点解析:本题考查函数返回值。fun函数的返回值类型为int*类型,即函数返回一个指向整型变量的指针。23、下列程序的输出结果是()。#includevoidfun(int*a,int*b){int*k;k=a;a=b;b=k;}main(){inta=1,b=2,*x=&a,*y=&b;fun(x,y);printf("%d%d",a,b);}A、21B、12C、编译出错D、00标准答案:B知识点解析:本题考查函数调用时的参数传递。分析题目可知fun函数的形参是指向实参的指针,但main()函数中调用fun()函数时,实参是指针变量x、y(分别为指向a和b的指针),a、b的值在函数调用前后未发生变化,因而a=1,b=2,即输出12。24、若有以下程序段:structst{intn;int*m;};.inta=2,b=3,c=5;structsts[3]=({101,&a),{102,&c),{103,&b}};main(){structst*p;p=s;}则以下表达式中值为5的是()。A、(*p).mB、*(p+1)->mC、*(p++)->nD、(p++).(*m)标准答案:B知识点解析:本题考查如何通过指针引用数组元素。首先定义了一个结构体,然后定义了一个结构体变量s[3],并赋了初值。在主程序中,定义了一个指向结构体变量s的指针p,要使表达式的值为5,就应该引用s[1].m的值,使指针p指向s[1],++p可以实现将p指针加1,指向s[1]。25、以下选项中,合法的实数是()。A、1.5E2B、E1.1C、2.10ED、1.9E1.4标准答案:A知识点解析:用尾数指数形式表示浮点数时,E的右侧必须是整数且不能为空。26、有以下程序:#iinclude<stdio.h>main(){inta=7,b=0;do{b+=a;a-=1;}while(a--);printf("%d,%d\n",b,a);}执行后的输出结果是()。A、28,0B、28,1C、16,0D、16,-1标准答案:D知识点解析:分析程序可知,do语句1…while(语句2),每次循环在语句1中a的值减1,在语句2中判断a的值后,a的值又减1,所以在每次循环体执行完后,b累加的a的值分别为7,5,3,1,a的值分别为6,4,2,0,最后当a为0时,while判断条件为false,此时a的值再减1,为-1,到此循环结束,所以b的值为16,a的值为-1,故答案选D。27、有以下程序:#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知识点解析:分析程序可以发现,内层for循环每次只执行一次:即当j=i时。所以可以使用i替换j,去掉for循环,对应外层for循环的i,执行t+=b[i][b[i][i]],所以当i取值0、1、2时,t的值累加b[0][b[0][0]]、b[1][b[1][1]]、b[2][b[2][2]],即b[0][0]、b[1][1]、b[2][2],对应的值为:0、1、2,t取值为4(t初始值为1)。故答案选B。28、已知char**s,下面正确的语句是()。A、s=’’ABCDEF’’;B、*s=’’ABCDEF’’;C、**s=’’ABCDEF’’;D、*s=’A’;标准答案:D知识点解析:本题考查数据文件的基本概念。①文件由数据流形式组成,可以按数据的存放形式分为二进制文件和文本文件;②C语言既能读写文本文件,又可以读写二进制文件。29、关于C语言的输出语句:printf(’’%3d\n’’,1001)的叙述中正确的是()。A、程序运行时输出1001B、程序运行时输出001C、程序运行时输出100D、指定的输出宽度不够,编译出错标准答案:A知识点解析:printf在输出时按照格式来输出,%3d表示输出3位整数,这里的3是最小位数,即最少输出3位,但如果多于3位,则按照实际位数输出。30、下列选项中不属于软件生命周期开发阶段任务的是()。A、软件测试B、概要设计C、软件维护D、详细设计标准答案:C知识点解析:软件生命周期分为软件定义、软件开发及软件运行维护三个阶段,其中开发阶段包括概要设计、详细设计、实现和测试。31、有以下程序(字母A的ASCII代码为65)#include<stdio.h>main(){charc1=’A’,c2=’Y’;printf("%d,%d\n",c1,c2);}程序运行后的输出结果是A、输出格式不合法,输出出错信息B、A,YC、65,90D、65,89标准答案:D知识点解析:一个整数,只要它的值在0~255范围之内,也可以用字符形式输出,输出之前,系统会将该整数转化为相应的ASCII码字符;字符也可以用整型来输出,输出的是对应的ASCII值。’A’的ASCII值为65,’Y’的ASCII值为89,D选项正确。32、以下语句的输出结果是printf("%d\n",strlen("\t\"\065\xff\n"));A、5B、8C、14D、输出项不合法,无正常输出标准答案:A知识点解析:由一对双引号括起来的一串字符为字符串。字符常量是用一对单引号括起来的单个字符,还有一些特殊字符常量,即以"\"开头的转义字符。"\"后可以为某些单个字符也可以为八进制或十六进制数字。’\t’’\"’’\065’’\xff’’\n’共5个字符,A选项正确。33、C语言源程序名的后缀是()。A、.exeB、.CC、.objD、.cp标准答案:B知识点解析:由C语言构成的指令序列称为C源程序,源程序文件的后缀为“.c”。源程序经过C编译程序编译生成后缀为“.obj”的二进制文件(称为目标文件),然后由称为“连接程序”(Link)的软件把目标文件与C语言提供的各种库函数连接起求,生成后缀为“.exe”的可执行文件。34、软件生命周期中,确定软件系统要做什么的阶段是A、需求分析B、软件测试C、软件设计D、系统维护标准答案:A知识点解析:软件生命周期各阶段的主要任务是:问题定义、可行性研究与计划制定、需求分析、软件设计、软件实现、软件测试、运行维护。其中需求分析是指对待开发软件提出的需求进行分析并给出详细定义,也即是确定软件系统要做什么,A选项正确。35、有两个关系R与S如下,由关系R和S得到关系T,则所使用的操作为A、并B、自然连接C、笛卡尔积D、交标准答案:C知识点解析:用于查询的3个操作无法用传统的集合运算表示,引入的运算为投影运算、选择运算、笛卡尔积。常用的扩充运算有交、除、连接及自然连接等。并:RS是将S中的记录追加到R后面。交:RS结果是既属于R又属于S的记录组成的集合。上述两种操作中,关系R与S要求有相同的结构,故A、D选项错误。自然连接:去掉重复属性的等值连接。自然连接要求两个关系中进行,比较的是相同的属性,并且进行等值连接,本题中结果T应为空,B选项错误。若T为笛卡尔积,结果为5元关系,元组个数为4,且计算结果与题目相符,C选项正确。36、一个栈的初始状态为空。现将元素A,B,C,D,E依次入栈,然后依次退栈三次,并将退栈的三个元素依次入队(原队列为空),最后将队列中的元素全部退出。则元素退队的顺序为A、ABCB、CBAC、EDCD、CDE标准答案:C知识点解析:栈所有的插入与删除都限定在表的同一端进行。入栈运算即在栈顶位置插入一个新元素,退栈运算即是取出栈顶元素赋予指定变量。队列指允许在一端进行插入,而在另一端进行删除的线性表。习惯上称往队列的队尾插入一个元素为入队运算,称从队列的队头删除一个元素为退队运算。元素入栈后为ABCDE,退栈并入队后,队中元素为EDC。退队时从队头开始,顺序为EDC,C选项正确。37、若有定义语句:doublex,y,*px,*py;执行px=&x;py=&y;正确的输入语句是A、scanf("%lf%lf",x,y);B、scanf("%f%f"&x,&y);C、scanf("%f%f",x,y);D、scanf("%lf%le",px,py);标准答案:D知识点解析:%lf,%le是针对double的,如果仅用%f,输入的数据可能不能被完全接收,数据的精度可能不足。%f主要针对float类型的变量的输入,选项B错误。根据scanf(格式,变量地址),选择A,C错误。因此,选择D38、设有以下程序段main(){intx[M][N];...Arrlet(x);...}则作为函数Arrlet的形参,以下表示形式非法的是A、intx[M][]B、int(*x)[N]C、intx[][N]D、intx[M][N]标准答案:A知识点解析:C语言规定,二维数组作为实参参数传递时,形参必须要指明二维数组的列数,否则函数内无法识别数组的宽度,行数提供没有任何作用。(*p)[N]与p[][N]以及p[M][N]效果一样。排除法A选项39、有以下程序#include<stdio.h>voidf1(char*a,charb){charc;c=*a;*a=b;b=c;}voidf2(chara,charb){charc;c=a;a=b;b=c;}voidf3(char*a,char*b){charc;c=*a;*a=*b;*b=c;}main(){chart1,t2;t1=’A’;t2=’B’;f3(&t1,&t2);putchar(t1);putchar(t2);t1=’A’;t2=’B’;f2(t1,t2);putchar(t1);putchar(t2);t1=’A’;t2=’B’;f1(&t1,t2);putchar(t1);putchar(t2);printf("\n");}程序运行后的输出结果是A、ABBABBB、BAABBBC、BABABAD、BABAAB标准答案:B知识点解析:f1(*a,b),*a地址传递,b值传递,将b值传给*a,则f1(&t1,t2)调用后输出t1、t2为BB。f2(a,b)值传递,传入的只是a,b的拷贝,不实现交换,则f2(t1,t2)调用后输出t1、t2为AB。f3(*a,*b)为地址传递,可以实现a,b值的交换,则f3(&t1,&t2)调用后输出t1、t2为BA。因此结果为BAABBB。故答案为B选项二、程序填空题(本题共1题,每题1.0分,共1分。)40、下列给定程序中,函数fun的功能是:找出100~x(x≤999)之间各位上的数字之和为15的所有整数,并在屏幕输出;将符合条件的整数的个数作为函数值返回。例如,当n值为500时,各位数字之和为15的整数有:159、168、177、186、195、249、258、267、276、285、294、339、348、357、366、375、384、393、429、438、447、456、465、474、483、492,共有26个。请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:1#include<stdio.h>2intfun(intx)3{intn,s1,s2,s3,t;4/*********found*********/5n=【1】;6t=100;7/*********found*********/8while(t<=【2】)9{s1=t%10;s2=(t/10)%10;10s3=t/100;11if(s1+s2+s3==15)12{printf(’’%d’’,t);13n++;14}15/*********found*********/16【3】;17}18returnn;19}20main()21{intx=-1;22while(x>999||x<0)23{printf(’’Pleaseinput(0<x<=999):’’);24scanf(’’%d’’,&x);}25printf(’’\nTheresultis:%d\n’’,fun(x));26}标准答案:(1)0(2)x(3)t++知识点解析:填空1:变量n用于存放符合条件的整数的个数,应赋初值为0。填空2:根据题目要求,确定循环变量t的取值范围为t<=x。填空3:循环变量t自增1操作。三、程序修改题(本题共1题,每题1.0分,共1分。)41、给定程序MODI1.C中函数fun的功能是:应用递归算法求形参a的平方根。求平方根的迭代公式如下:例如,a为2时,平方根值为:1.414214。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。1#include<stdio.h>2#include<math.h>3/**********found**********/4doublefun(doublea,dounlex0)5{doublexl,y;6x1=(x0+a/x0)/2.0;7/**********found**********/8if(fabs(x1-x0)>0.00001)9y=fun(a,x1);10elsey=x1;11returny;12}13main()14{doublex;15printf(’’Enterx:’’);scanf(’’%1f’’,&x);16printf(’’Thesquarerootof%1fis%if\n’’,x,fun(X,1.0));17}标准答案:(1)doublefun(doublea,doublex0)(2)if(fabs(x1-x0)>0.00001)知识点解析:函数的功能是应用递归算法求某数a的平方根。(1)主函数中“fun(x,1.0)”,x是double型变量,1.0是浮点数,可知fun有两个double型参数,而第一标识下“dotmle”不是C语言关键字,所以应将“doublefun(doublea,dounlex0)”改为“doublefun(doublea,doublex0)”。(2)第二个标识下的if语句是判断进行递归运算的条件,第二标识下变量x0没有定义,根据题意,这里是判断x1和x0的差值的绝对值是否比0.00001大,所以第二个标识下“if(fabs(x1-x0)>0.000011”改为“if(fabs(x1-x0)>0.00001)”。四、程序设计题(本题共1题,每题1.0分,共1分。)42、请编写函数fun,其功能是:计算并输出下列多项式的值:例如,在主函数中从键盘给n输入50后,输出为:s=1.718282。注意:要求n的值大于1但不大于100。部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#includedoublefun(intn){}NONO(){/*清在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf;intn,i;doubles;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%d",&n);s=fun(n);fprintf(wf,"%lf\n",s);}fclose(rf);fclose(wf);}main(){intn;doubles;printf("\nTnputn:");scanf("%d",&n);s=fun(n);printf("\n\ns=%f\n\n",s);NONO();}标准答案:doubles=0,t=1;inti;for(i=1;i<=n;i++){t*=i;s+=1./t;}returns;知识点解析:(1)根据题干中给出的数列,推出每一项分母是在前一项分母的基础上乘当前项数,第n项的项数为n。(2)在循环中求得每一项,然后对其进行累加求和。国家二级(C语言)机试模拟试卷第2套一、程序填空题(本题共1题,每题1.0分,共1分。)1、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun的功能是:将形参s所指字符串中的所有数字字符顺序前移,其他字符顺序后移,处理后新字符串的首地址作为函数值返回。例如,s所指字符串为:asdl23fgh543df,处理后新字符串为:123543asdfghdf。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:部分源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<string.h>#include<stdlib.h>#include<ctype.h>char*fun(char*S){inti,j,k,n;char*p,*t;n=strlen(s)+1;t=(char*)malloc(n*Sizeof(char));p=(char*)malloc(n*sizeof(char));j=0;k=0,for(i=0;i<n;i++){if(isdigit(s[i])){/*********found*********/P[【1】]=s[i];j++;)else{t[k]=s[i];k++;}}/*********found*********/for(i=0,i<【2】;i++)P[j+i]=t[i];P[j+k]=0;/*********found*********/return【3】;}main(){chars[80];prLntf("Pleaseinput:");scanf("%s",s),printf("\nTheresultis:%s\n",fun(s));}标准答案:(1)j(2)k(3)p或(p)知识点解析:填空1:函数中申请了两个内存空间,其中p存放数字字符串,t存放非数字字符串,根据条件可知,p依次存放数字字符串,其位置由j来控制,所以应填j。填空2:利用for循环再把t中的内容依次追加到p中,其中t的长度为k,所以应填k。填空3:处理之后的字符串存放到p中,最后返回p的首地址即可,所以应填p。二、程序修改题(本题共1题,每题1.0分,共1分。)2、使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun的功能是:首先把b所指字符串中的字符按逆序存放,然后将a所指字符串中的字符和b所指字符串中的字符,按排列的顺序交叉合并到c所指数组中,过长的剩余字符接在c所指的数组的尾部。例如,当a所指字符串中的内容为“abcdefg”,b所指字符串中的内容为“1234”时,c所指数组中的内容应为“a4b3c2d1efg”;而当a所指字符串中的内容为“1234”,b所指字符串的内容为“abedefg”时,c所指数组中的内容应该为“1g2f3e4dcba”。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件MODl1.C中。不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<string.h>voidfun(char*a,char*b,char*c){inti,j;charch;i=0;j=strlen(b)-1;/*********found*********/while(i>j)(ch=b[i];b[i]=b[j];b[j]=ch;i++;j--;}while(*a‖*b){/*********found*********/If(*a){*c=*a,c++;a++;)if(*b){*c=*b;c++;b++;)}*c=0;}main(){chars1[100],s2[100],t[200];printf("\nEnterslstring:"),scanf("%s",s1);printf("\nEnters2string:");scanf("%s",s2);fun(sl,s2,t);printf("\nTheresultis:%s\n",t);}标准答案:(1)while(i知识点解析:(1)由i和j定义的初始值可知,此处应该判断i是否小于j,所以应改为while(i三、程序设计题(本题共1题,每题1.0分,共1分。)3、使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,函数fun的功能是:将s所指字符串中下标为偶数同时ASCII值为奇数的字符删除,s所指串中剩余的字符形成的新串放在t所指的数组中。例如,若$所指字符串中的内容为“ABCDEFG12345”,其中字符c的ASCII码值为奇数,在数组中的下标为偶数,因此必须删除;而字符1的ASCII码值为奇数,在数组中的下标为奇数,因此不应当删除,其他依此类推。最后t所指的数组中的内容应是“BDF12345”。注意:部分源程序在文件PROG1.C中。请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdIo.h>#include<string.h>voidfun(char*S,chart[]){}main(){chars[100],t[100];voidNONO();printf("\npleaseenterstringS:");scanf("%s",s);fun(s,t);printf("\nTheresultis:%s\n",t),NONO();}voidNONO()(/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/chars[100],t[100];FILE*rf,*wf;inti;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%s",s);fun(s,t);fprintf(wf,"%s\n",t);}fclose(rf);fclose(wf);}标准答案:voidfun(char*s,chart[]){inti,j=0;for(i=0;i知识点解析:本题是从一个字符串按要求生成另一个新的字符串。我们使用for循环语句来解决这个问题。在赋值新的字符串之前,先对数组元素的下标和ASCII码的值进行判断,将满足要求的元素赋给新的字符串。国家二级(C语言)机试模拟试卷第3套一、选择题(本题共38题,每题1.0分,共38分。)1、下面关于算法的叙述中,正确的是()。A、算法的执行效率与数据的存储结构无关B、算法的有穷性是指算法必须能在执行有限个步骤之后终止C、算法的空间复杂度是指算法程序中指令(或语句)的条数D、以上三种描述都正确标准答案:B知识点解析:算法在运行过程中需辅助存储空间的大小称为算法的空间复杂度。算法的有穷性是指一个算法必须在执行有限的步骤后结束。2、下列二叉树描述中,正确的是()。A、任何一棵二叉树必须有一个度为2的结点B、二叉树的度可以小于2C、非空二叉树有0个或1个根结点D、至少有2个根结点标准答案:B知识点解析:二叉树是由n/>0个结点的有限集合构成,此集合或者为空集,或者由一个根结点及两棵互不相交的左右子树组成,并且左右子树都是二叉树。二叉树可以是空集合,根可以有空的左子树或空的右子树。二叉树不是树的特殊情况,它们是两个概念。二叉树具有如下两个特点:①非空二叉树只有一个根结点;②每一个结点最多有两棵子树,且分别称为该结点的左子树与右子树。3、如果进栈序列为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出”实现。4、下列各选项中,不属于序言性注释的是()。A、程序标题B、程序设计者C、主要算法D、数据状态标准答案:D知识点解析:注释一般为序言性注释和功能性注释。序言性注释常位于程序开头部分,它包括程序标题、程序功能说明、主要算法、接口说明、程序位置、开发简历、程序设计者、复审者、复审日期及修改日期等。功能性注释一般嵌在源程序体之中,用于描述其后的语句或程序的主要功能。5、下列模式中,能够给出数据库物理存储结构与物理存取方法的是()。A、内模式B、外模式C、概念模式D、逻辑模式标准答案:A知识点解析:数据库管理系统的三级模式结构由外模式、模式和内模式组成。外模式,或子模式,或用户模式,是指数据库用户所看到的数据结构,是用户看到的数据视图。模式,或逻辑模式,是数据库中对全体数据的逻辑结构和特性的描述,是所有用户所见到的数据视图的总和。外模式是模式的一部分。内模式,或存储模式,或物理模式,是指数据在数据库系统内的存储介质上的表示,即对数据的物理结构和存取方式的描述。6、下列叙述中,不属于软件需求规格说明书的作用的是()。A、便于用户,开发人员进行理解和交流B、反映出用户问题的结构,可以作为软件开发工作的基础和依据C、作为确认测试和验收的依据D、便于开发人员进行需求分析标准答案:D知识点解析:软件需求规格说明书有以下几个方面的作用:①便于用户、开发人员进行理解和交流;②反映出用户问题的结构,可以作为软件开发工作的基础和依据:③作为确认测试和验收的依据。7、下列不属于软件工程3个要素的是()。A、工具B、过程C、方法D、环境标准答案:D知识点解析:软件工程包括3个要素,即方法、工具和过程。方法是完成软件工程项目的技术手段;工具支持软件的开发、管理、文档生成;过程支持软件开发的各个环节的控制、管理。8、数据库系统在其内部具有3级模式,用来描述数据库中全体数据的全局逻辑结构和特性的是()。A、外模式B、概念模式C、内模式D、存储模式标准答案:B知识点解析:概念模式,也称逻辑模式,是对数据库系统中全局数据逻辑结构的描述,是全体用户应用公共数据视图。它不涉及具体的硬件环境与平台,与具体的软件环境也无关。9、将E-R图转换到关系模式时,实体与联系都可以表示成()。A、属性B、关系C、记录D、码标准答案:B知识点解析:E-R图由实体、实体的属性和实体之间的联系3个要素组成,关系模型的逻辑结构是一组关系模式的集合,将E-R图转换为关系模型:将实体、实体的属性和实体之间的联系转化为关系模式。如表4-1所示。10、以下叙述中正确的是()。A、C程序中注释部分可以出现在程序中任意合适的地方B、C程序的书写格式是固定的,每行只能写一条语句C、构成C程序的基本单位是函数,所有函数名都可以由用户命名D、在对C语言程序进行编译时,可以发现注释行中的拼写错误标准答案:A知识点解析:本题考查的是C语言程序设计的初步知识。选项A),程序中“/*……*/”表示注释部分,注释只是给人看的,对程序的编译和运行不起作用,可以在程序中的任何位置;选项B),C语言的书写格式自由,一行可以写多条语句,一条语句也可以写在不同行上;选项C),一个C程序中必须有且只能有一个由“main”命名的主函数,其他函数由用户自行命名;选项D),程序的注释仅仅是提供阅读之用,并不参与程序的编译,所以编译也就不会发现注释行中的错误。11、下面的程序在编译时产生错误,其出错原因是()。撑include<stdio.h>main(){int1_case;floatpfintF;printf("请输入2个数");scanf("%d%f",&1_case,&pfinff);printf("%d%f\n",1_case,printF);}A、定义语句出错,1_case不能作为变量名B、定义语句出错,printF不能用作用户自定义标识符C、定义语句无错,scanf不能作为输入函数使用D、定义语句无错,pfintf不能输出1_case的值标准答案:A知识点解析:C语言变量名可由数字,字母,下划线构成,但首字符不能为数字。12、以下不正确的转义字符是()。A、’\\’B、’\d’C、’\s’D、’088’标准答案:D知识点解析:“\\”是反斜线符,“’\d’”是整型变量转义字符,“’\s’”是字符串型转义字符,C语言中没有规定“’\088’”为转义字符。13、下面程序的运行结果是()。y=5;x=14;y=((x=3+y,x+6),x-1);pfintf("x=%d,y=%d",y);A、x=27,y=27B、x=12,y=13C、x=15,y=14D、x=y=27标准答案:C知识点解析:本题考查的是逗号表达式。逗号表达式的求解步骤是先求解表达式1,然后依次求解表达式2,直到表达式N的值。整个逗号表达式的值就是最后一个表达式N的值。表达式“(x=3*y,x+6)”中,“x=15”。表达式“y=x-1=14”。14、sizeof(char)是()。A、一种函数调用B、一个整型表达式C、一个字符型表达式D、一个不合法的表达式标准答案:B知识点解析:“sizeof(char)”是一个C语言的关键字,它不是函数调用。“sizeof”的功能是计算出运算对象在计算机的内存中所占用的字节数量,该表达式的返回值是一个整数,而不是一个字符型表达式。15、下列4个程序中,完全正确的是()。A、#include<stdio.h>main();{/*programming*/printf("programming!\n");}B、#include<stdio.h>main(){/*/programming/*/printf("programming!\n");}C、#include<stdio.h>main(){/*/programming*/*/printf("programming!\n");}D、include<stdio.h>main(){/*programming*/printf("programming!\n");}标准答案:B知识点解析:选项A)中,main()函数后面的分号是错误的,C语言在函数名后面不能有分号:在C语言中注释内容必须放在“/*”和“*/”之间,“/*”和“*/”必须成对出现,按语法规定在注释之间不可再嵌套“/*”和“*/”,选项C)的程序段中注释语句之间有嵌套;C语言用#include命令行来实现文件包含的功能。#include命令行的形式为:#include“文件名”,选项D)中的include前面少了一个#符号。16、设变量均已正确定义,若要通过scanf("%d%c%d‰",&a1,&c1,&a2,&c2);语句为变量a1和a2赋数值10和20,为变量c1和c2赋字符X和Y。下列所示的输入形式中正确的是(注:□代表空格字符)()。A、10□X□20□Y<CR>B、10□X20□Y<CR>C、10DX<CI>20Y<CI>D、10X<CR>20Y<CR>标准答案:D知识点解析:在使用scanf函数进行输入数据时,输入的数据之间可以用空格、回车符、制表符(Tab键)等间隔符隔开,但是输入值时也要输入相应的字符,格式符中没有这些字符,所以输入时也不能输入,否则会将这些字符作为对应的字符变量的值赋值给字符变量,如输入10赋值给a1,应直接输入x赋值给c1,否则输入空格后,将空格赋值给c1,同理输入a2、c2。17、两次运行下面的程序,如果从键盘上分别输入3和2,则输出结果是()。#include<stdio.h>main(){intx;scanf("%d",&x);if(x++>2)printf("%d",x);elseprintf("%d\n",x--);}A、4和3B、4和2C、4和1D、3和2标准答案:A知识点解析:本题考查if…else语句。首先,scanf函数通过键盘读入x的值。当x=3时,第一个if语句先判断条件,取x的值3和2比较,然后将x的值加1,if条件成立,执行下面的printf语句,输出x的值4。当x=2时,第一个if语句先判断条件,先取x的值2和2比较,然后将x的值加1(x的值变为3),if条件不成立,执行下面的else语句,先输出x的值3,再将x的值减1。18、以下叙述中不正确的是()。A、在不同的函数中可以使用相同的名字的变量B、函数中的形式参数是局部变量C、在一个函数内定义的变量只在本函数范围内有效D、在一个函数内的复合语句中定义的变量在本函数范围内有效标准答案:D知识点解析:此题考查的是变量的作用范围。选项D)中,在一个函数的复合语句中定义的变量是局部变量,只在定义此变量的复合语句内有效,并不是在整个函数体内都有效。19、运行下面的程序,输入字符串“MicrosoftVisualStudio”,则程序的执行结果是()。#include<stdio.h>main(){charChr[20];scanf("%s",&Chr);printf("%s\n",Chr);}A、MicrosoftVisualStudioB、MC、MicrosoftD、MicrosofWisualStudio标准答案:C知识点解析:当从键盘输入“MicrosoftVisualStudio”时,由于“scanf”输入函数的特点是遇到空格时结束读入字符,因此,该程序只将“Microsoft”这9个字符送到了字符数组str中,并在其后自动加上结束符“\0”。20、若有“doublea;”,则正确的输入语句是()。A、scanf("%lf",a);B、scanf("%f",&a);C、scanf("%lf",&a)D、scanf("%le",a);标准答案:C知识点解析:scanf函数的调用形式是:scanf("格式字符串",输入项地址表)。其中,“格式字符串”是要输入的变量的格式符;“输入项地址表”是要输入的变量的地址。a是double型数据,格式字符串可以用“%lf”,“%f”是浮点型。题中定义变量a为双精度型变量,双精度变量的格式符为“%lf”:变量的地址用取地址符“&”加变量名表示,变量a的地址为“&a”。21、if语句的基本形式为:if(表达式)语句,其中“表达式”()。A、可以是任意合法的表达式B、必须是逻辑表达式C、必须是逻辑表达式或关系表达式D、必须是关系表达式标准答案:A知识点解析:本题考查if表达式。if(表达式)中的表达式可以为任何合法的表达式,一般情况下为逻辑、条件表达式,需要注意的是,当等号(==)误写为赋值号(=)时不会报错的,但是其值恒为1。22、若i、j己定义成int型,则以下程序段中内循环体的总执行次数是()。for(i=6;i>0;i--)forIj=0;j<4;j++){…}A、20B、24C、25D、30标准答案:B知识点解析:本题考查的是嵌套for循环执行次数。对于外层i的循环中任何一个i,内层i的循环中的j都要从0变化到3,j=4时退出循环;然后外层i循环的i减少1,内层循环的.j仍要从0变化到3,j=4时退出循环……直到外层i循环的i变为0,退出i循环。所以执行多重循环时,对外层循环变量的每一个值,内层循环的循环变量都要从初始值变化到终值。对外层循环的每一次循环,内层循环要执行完整的循环语句。外层for语句执行6次,内层for语句执行4次,所以内循环体执行6*4=24次。23、以下选项中非法的字符常量是()。A、’\\’B、’\0201’C、’\xAA’D、’0’标准答案:B知识点解析:选项A)表示的是反斜杠字符;一般可以用1~3位八进制数表示的字符,而选项B)中“’\0201’”有4位八进制数,所以错误;选项C)是用两位十六进制数AA表示的ASCII码字符:选项D)表示的是字符0对应的ASCII码值。24、以下程序的输出结果是()。#include<stdio.h>intm=13;intfun(intx,inty){intm=2;retum(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。25、下面程序运行后的输出结果是()。#include<stdio.h>main(){inta[5]={1,0,4,2,0},b[5]={1,2,3,4,5},i,s=0;for(i=0;i<5;i++)s=s+b[a[i]];printf("%d\n",s);}A、12B、15C、11D、8标准答案:A知识点解析:这道题目是计算一维数组b中某些元素的和。这些元素的下标值是一维数组a中元素值。s=0+b[1]+b[0]+b[4]+b[2]+b[0]==2+1+5+3+1=12。26、已知下列函数定义:fun(int*b,intc,intn,intdata){intk:for(k=0;k<m*n;k++){*b=data;b++;}}则调用此函数的正确写法是(假设变量a的说明为inta[50])()。A、fun(*a,4,5,1);B、fun(&a,4,5,1);C、fun((int*)a,4,5,1);D、fun(a,4,5,1);标准答案:D知识点解析:本题考查函数调用时的参数传递。fun函数的调用形式为“fun(int*b,intm,intn,intdata)”,而调用数组时,用数组名表示一个指向数组第一个元素的指针,因此,调用时的形式为:fun(a,4,5,1)。27、以下程序段的输出结果是()。#include<sldio.b>main(){charp[][4]={"ABC","DEF","GHI"};inti;for(i=0;i<3;i++)puts(p[i]);}A、ABCB、ADGC、ABCDEFGHID、ABC标准答案:C知识点解析:本题首先定义了一个字符串数组p,通过for循环输出p[0]、p[1]、p[2]的值。28、下面程序的运行结果是()。#include<stdio.h>#include<string.h>main(){char*s1="abDuj";char*s2="ABdUG";intt;t=strcmp(s1,s2);printf("%d",t);}A、正数B、负数C、零D、不确定的值标准答案:A知识点解析:本题考查字符串比较函数和字符串的比较原则的两个知识点:①原则是依次比较两个字符串同一位置的一对字符,若它们的ASCII码值相同,则继续比较下一对字符,若它们的ASCII码值不同,则ASCII码值较大的字符所在的字符串较大;若所有字符相同,则两个字符串相等;若一个字符串全部i个字符与另一个字符串的前i个字符相同,则字符串较长的较大。②“strcmp(s1,s2)”的返回值,当“str1<str2”时,返回值<0;当“str1=str2”时,返回0;当“str1>str2”,返回值>0。29、已知:intc[3][4];,则对数组元素引用正确的是()。A、c[1][4]B、c[1.5][0]C、c[1+0][0]D、以上表达都错误标准答案:C知识点解析:此题考查的是数组元素的引用。对于已定义的数组a[M][N],数组元素的正确引用必须满足行下标小于M,列下标小于N,且为正整数。因此,选项A)中列下标溢出;选项B)中行下标出现小数;选项C)满足要求。30、C语言中允许用外部说明来指定变量、函数和其他标识符的特征,这里所说的外部指的是()。A、冠以关键字extemB、位置在函数体外部C、作用范围是全程的D、位置在函数的外部标准答案:D知识点解析:C语言中允许用位置在函数外部的说明来指定变量、函数和其他标识符的特征。31、有以下程序:#include<stdio.h>intfun(intx,inty){if(x==y)retum(x);elsereturn((x+y)/2);}main(){int]]a=1,b=2,c=3;printf("%d\n",fun(2*a,fun(b,c)));}程序运行后的输出结果是()。A、2B、3C、4D、5标准答案:A知识点解析:fun(b,c)即fun(2,3),2!=3,所以返回(2+3)/2=2;fun(2*a,2)即fun(2,2),2==2,所以返回2。32、若有“chars[3][3]={"AAA","BBB","CCC"};”说明语句,则与它等价的语句是()。A、char**s={"AAA","BBB","CCC"};B、char*s[3]={"AAA","BBB","CCC"};C、chars[][5]={"AAA","BBB","CCC"};D、chars[][3]={"AAA","BBB","CCC"};标准答案:D知识点解析:二维字符数组在定义时可省略第一维的维数,根据初始化有3个字符串,所以选项D)中数组有3行,与已知说明语句等价。33、计算机高级语言程序的运行方法有编译执行和解释执行两种,以下叙述中正确的是()。A、C语言程序仅可以编译执行B、C语言程序仅可以解释执行C、C语言程序既可以编译执行又可以解释执行D、以上说法都不对标准答案:A知识点解析:C语言作为计算机高级语言,用它编写的程序必须经过C语言的编译器编译后,转换为二进制的机器码来运行。34、若有如下说明,且int类型占两个字节,则正确的叙述为()。structst{inta;intb[2];}a;A、结构体变量a与结构体成员a同名,定义是合法的B、程序只在执行到该结构体时才为结构体st分配存储单元C、程序运行时为结构体st分配8字节存储单元D、类型名structst可以通过extern关键字提前引用标准答案:A知识点解析:本题主要考查结构体的用法:①结构体变量a与结构体成员a同名,定义合法;②在程序编译的时候结构的定义并不会使系统为该结构分配内存空间,只有在说明结构变量时才分配内存空间;③inta占2个字节,intb[2]占4个字节,共6个;④类型名“structst”不可以通过extern关键字提前引用。35、有以下程序:#include<stdio.h>intfun(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返回值为436、设有一联合体变量定义如下:uniondata{longa;floatb;intc;chard;};uniondatax;执行下列语句后,正确的联合体变量x的值是()。x.a=111111;x.b=2222;x.c=2.1546;x.d=’R’;A、111111B、2222C、2.1546D、R’;标准答案:D知识点解析:本题主要考查的知识点是联合体的内存使用。联合体与结构体的定义相同,其本质区别就在于内存使用方式的不同。联合体所占用的内存空间为最长的成员所占用的空间,各个成员分量全部是从低地址方向开始使用内存单元:联合体中的空间在某一时刻只能保持某一个成员的数据,所以本题执行完一系列赋值后,只得到最后执行的字符’R’。37、若x=2,y=3,则x&y的结果是()。A、0B、2C、3D、5标准答案:B知识点解析:本题主要考查按位与,(&)运算的知识点。“&”是对两个运算量相应的位进行逻辑与,“&”的规则与逻辑与“&&”相同。x=2的二进制为00000010,y=3的二进制为00000011,x&y=00000010,转化为十进制即为2。38、已知一个文件中存放若干工人档案记录,其数据结构如下:structa{charnumber[100];intage;floatp[6];};定义一个数组:structanumber[10];假定文件已正确打开,不能正确地从文件中读入10名工人数据到数组b中的是()。A、fread(b,sizeof(structa),10,fp);B、for(i=0;i<10;i++)fread(b[i],sizeof(structa),1,fp);C、for(i=0;i<10;i++)fread(b+i,sizeof(structa),1,fp);D、for(i=0;i<5;i+=2)fread(b+i,sezeof(structa),2,fp);标准答案:B知识点解析:数据块输入/输出函数的调用形式为:fread(buffer,size,count,fp)。fread函数参数说明:“buffer”是一个指针,对fread来说,它是读入数据的存放地址。对fwrite来说,是要输出数据的地址。“size”是要读写的字节数;“count”是要进行读写多少个size字节的数据项;“fp”是指文件型指针。选项B)中b[i]是一个数组,不是指针,需改为&b[i]。注意:完成一次读操作(fread())后,如果没有关闭流(fclose()),则指针(FILE*fp)自动向后移动前一次读写的长度,不关闭流则继续下一次读操作,接着上次的输出继续输出。二、程序填空题(本题共1题,每题1.0分,共1分。)39、函数fun的功能是:根据所给的年、月、日,计算出该日是这一年的第几天,并作为函数值返回。其中函数isleap用来判别某一年是否为闰年。例如,若输入:200851,则程序输出:2008年5月1日是该年的第122天。请在程序的下划线处填入正确的内容,并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include<stdio.h>intisleap(intyear){intleap;leap=(year&4==0&&year&100!=0‖year&400==0);/**********found**********/Eeturn___1___;}intfun(intyear,intmonth,intday){inttable[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};intdays=0,i;for(i=1;~<month;i++)days=days+table[i];/**********found**********/days=days+___2___;if(isleap(year)&&month>2)/**********found**********/days=days+___3___;reLurndays;}main(){intyear,month,day,days;prntf("请输入年、月、日:");scanf("%d%d%d",&year,&month,&day);days=fun(year,month,day);printf("%d年%d月%d日是该年的第%d天\n",year,month,day,days);}标准答案:(1)leap(2)day(3)1知识点解析:本题中函数fun的功能是根据所给的年、月、日,计算出该日是这一年的第几天,并作为函数值返回,其中,要考虑是否为闰年。这道问题其实很简单,唯一要考虑的变化因素也只有闰年这个变化,而且这个变化导致的程序变化也很简单。首先设置常规的月份天数,这需要一个数组(注意这个数组应该有13个数据,而不是12个,因为月份是从1月份开始的,而数组是从位置0开始的,所以这里应该将数组的第一个数据定义为0,后面12个数据按照常规月份来然后给出我们需要的月份和日数后进行常规统计),这是一般情况,如果是闰年的话且月份超过二月的话就加上1即可,应该这种情况特别给出一个判断函数就行了。第一空:“return___1___;p”这一空出现在isleap函数中,是为了判断我们给出的年份是否为闰年的函数,这里要填的为此函数的返回值。很明显地,这里的数据为leap,判断是否为闰年后,我们还需要返回leap是否是闰年。所以这一空应该填lea。第二空:“days=days+___2___;p”这一空出现在fun函数中,所填的是days的数据结果算式,days即为我们需要统计的天数。这里根据条件和函数的下一步,我们可以看出来这里的days统计是当年份不为闰年时的天数统计,而当年份不为闰年时,只要将给出的月份前面几个月份天数相加,再加上这个月的日期即为这个给出年月目在这一年中的天数,再根据上一步我们知道算式右边的days代表的即为本月前面月份的天数总和,所以这里只需要加上本月的日期就可以得到我们需要的一年中的第几天。所以这一空应该填的是给出的日期day。第三空:“days=days+___3___;p”这一空出现在fun函数中,这里所填也是days的数据,但是我们可以看到这里的days是在判断完为闰年且月份大于2时进行的计算,所以这里的days算法不同于上一步days的算法。根据常识我们都可以知道,闰年大于2的月份是要比普通的年份多一个2月29号的,所以要比普通的日期天数多一天,所以这里应该加上1,所以这一空应该填的是1。三、程序修改题(本题共1题,每题1.0分,共1分。)40、给定程序MODI1.C中函数fun的功能是:逐个比较p、q所指两个字符串对应位置中的字符,把ASCII值大或相等的字符依次存放到c所指数组中,形成一个新的字符串。例如,若主函数中a字符串为:aBCDeFgH,主函数中b字符串为:ABcd,则C中的字符串应为:aBcdeFgH。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。#include<stdio.h>#include<string.h>voidfun(char*p,char*q,char*c){/**********found**********/intk=1;/**********found**********/while(*p!=*q){if(*p<*q)c[k]=*q;elsec[k]=*p;if(*p)p++;if(*q)q++;k++;}}main(){chara[10]="aBCDeFgH",b[10]="ABcd",C[80]={’\0’};fun(a,b,c);printf("Thestringa:");puts(a);printf("Thestringb:");puts(b);printf("Theresult:");puts(c);}标准答案:(1)intk=1改为intk=0;(2)(*p!=*q)改为(*p‖*q);知识点解析:本题中函数fun的功能是:逐个比较p、q所指两个字符串对应位置中的字符,把ASCII值大或相等的字符依次存放到c所指数组中,形成一个新的字符串。While循环为字符串比较的提供前提条件,然后再比较得到p、q两个字符串一一对应的符合条件中可用的一个字符,最终合并得到新的字符串c。(1)第一个错误在fun函数最开始定义的k的初始值。根据fun函数的功能我们可以知道这里k是新字符串c各字符的位置,然后根据比较结果一一对应新字符串个位置的字符。这里犯了一个明显的错误就是:从字符串的第一个字符比较,得到的第一个字符在字符串中的位置不是c[1]而是c[0],所以k的初始值不是1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度个人贷款合同电子合同续签服务3篇
- 2025年度个人货车租赁合同绿色物流服务标准3篇
- 2025年度个人房屋室内装修设计与施工环保评估合同4篇
- 2025年度个人房产投资合作合同范本2篇
- 二零二五年度新型面包砖研发与应用合作协议4篇
- 征收补偿协议书(2篇)
- 2025年度个人旅游住宿无息分期支付合同2篇
- 铁矿粉供应与采购合同2025版5篇
- 财务季度报告模板
- 2024年注册城乡规划师考试题库附参考答案(满分必刷)
- 中央2025年国务院发展研究中心有关直属事业单位招聘19人笔试历年参考题库附带答案详解
- 外呼合作协议
- 小学二年级100以内进退位加减法800道题
- 保险公司2025年工作总结与2025年工作计划
- GB/T 33629-2024风能发电系统雷电防护
- 2024淘宝天猫运动户外羽绒服白皮书-WN8正式版
- 记账实操-砂石企业账务处理分录
- 2024届四川省泸州市江阳区八年级下册数学期末学业质量监测试题含解析
- 全球250个国家中英文名称及缩写
- 深静脉血栓(DVT)课件
- 2023年四川省广元市中考数学试卷
评论
0/150
提交评论