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

下载本文档

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

文档简介

国家二级(C语言)机试模拟试卷32(共9套)(共300题)国家二级(C语言)机试模拟试卷第1套一、选择题(本题共39题,每题1.0分,共39分。)1、以下叙述中正确的是()。A、C程序中注释部分可以出现在程序中任意合适的地方B、C程序的书写格式是固定的,每行只能写一条语句C、构成C程序的基本单位是函数,所有函数名都可以由用户命名D、在对C语言程序进行编译时,可以发现注释行中的拼写错误标准答案:A知识点解析:本题考查的是C语言程序设计的初步知识。选项A),程序中/*…*/表示注释部分,注释只是给人看的,对程序的编译和运行不起作用,可以在程序中的任何位置;选项B),C语言的书写格式自由,一行可以写多条语句,一条语句也可以写在不同行上;选项C),一个C程序中必须有且只能有一个由“main”命名的主函数,其他函数由用户自行命名:选项D),程序的注释仅仅是提供阅读之用,并不参与程序的编译,所以编译也就不会发现注释行中的错误。2、有下列程序,其中%u表示按无符号整数输出。main(){unsignedintx=0xFFFF;/*x的初值为十六进制数*/printf(’’%u\n’’,x);}程序运行后的输出结果是()。A、-1B、65535C、32767D、0xFFFF标准答案:B知识点解析:“%u”格式符表示以十进制形式输出无符号整形变量。本题中无符号整形变量x=0xFFFF表示的是十六进制无符号整型变量的最大值65535,所以最后输出的结果为65535。3、以下选项中正确的语句组是()。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’’!’}。4、if语句的基本形式为:if(表达式)语句,其中“表达式”()。A、可以是任意合法的表达式B、必须是逻辑表达式C、必须是逻辑表达式或关系表达式D、必须是关系表达式标准答案:A知识点解析:本题考查if表达式。if(表达式)中的表达式可以为任何合法的表达式,一般情况下为逻辑、条件表达式,需要注意的是,当等号(==)误写为赋值号(=)时不会报错的,但是其值恒为1。5、有以下程序:#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函数从文件fb中读取这10个字节的数据到数组a中,此时数组a的内容就变为{1,2,3,0,0,1,2,3,0,0},因此最后的输出结果为“1,2,3,0,0,1,2,3,0,0”。6、下列程序的运行结果是()。#include<stdio.h>voidmain()voidfun(int*s,int*p){inta[]={2,3,4,5},k,x;{staticintt=3;for(k=0:k<4:k++)*p=s[t]:{fun(a,&x);t--;}printf("%d,",x);}}A、5,4,3,2,B、2,3,4,5,C、2,2,2,2,D、5,5,5,5,标准答案:A知识点解析:分析fun函数程序段,可知fun函数要实现的功能是将s中第(t+1)个元素前面(含该元素)的元素逆置赋给数组p。由于fun函数定义了静态变量t=3,因此,在主函数中调用函数劬(a,&x)时,就是将数组a中前4个元素逆置赋给数组x,最后输出x数组。7、算法的空间复杂度是指()。A、算法在执行过程中所需要的计算机存储空间B、算法所处理的数据量C、算法程序中的语句或指令条数D、算法在执行过程中所需要的临时工作单元数标准答案:A知识点解析:算法的空间复杂度是指算法在执行过程中所需要的内存空间。所以选择A。8、下列不属于软件工程3个要素的是()。A、工具B、过程C、方法D、环境标准答案:D知识点解析:软件工程包括3个要素,即方法、工具和过程。方法是完成软件工程项目的技术手段;工具支持软件的开发、管理、文档生成;过程支持软件开发的各个环节的控制、管理。9、C语言主要是借助以下哪种手段来实现程序模块化()。A、定义函数B、定义常量和外部变量C、使用丰富的数据类型D、使用三种基本结构语句标准答案:A知识点解析:该段程序的作用是将最后一个空格后面的字符串覆盖数组a中的数据,所以for循环执行完毕后,a[]="you!",所以答案选A)。10、下面程序的输出结果是()。typedefunion{longx[1];inty[4];charz[10];}M;Mt;main(){printf("%d\n",sizeof(t));}A、32B、26C、10D、4标准答案:C知识点解析:“联合体”所占用的内存空间为最长的成员所占用的空间。题中联合体的z[10]成员是联合体中占空间最长的成员。11、对序线性表(23,29,34,55,60,70,78)用二分法查找值为60的元素时,需要比较次数为()。A、1B、2C、3D、4标准答案:C知识点解析:根据二分法查找法需要两次:①首先将60与表中间的元素55进行比较,由于60大于55,所以在线性表的后半部分查找。②第二次比较的元素是后半部分的中间元素,将60与表中间的元素70进行比较,由于60小于70,所以在线性表的前半部分查找。③第三次比较的元素是前半部分的中间元素,即60,这时两者相等,即查找成功。12、若有定义: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。13、若有定义语句:intx=12,y=8,z;在其后执行语句:z=0.9+x/y:则z的值为()。A、1B、1.9C、2D、2.4标准答案:A知识点解析:x、y为整数,x/y值为1,加上0.9为1.9,赋值给整型变量z,接收后为1。14、有以下程序#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)。15、有以下程序:#inc1ude#inc1ude"string.h"voidfun(char*s[],intn){char*t,inti,j,for(i=0;istrlen(s[j]){t=s[i];s[i]=s[j];s[j]=t;}}main(){char*ss[]={"bcc","bbcc","xy","aaaacc","aabcc"};fun(ss,5);printf("%s,%s\n",ss[0],ss[4]);}程序的运行结果是()。A、xy,aaaaccB、aaaacc,xyC、bcc,aabccD、aabcc,bcc标准答案:A知识点解析:从main函数入手,定义了一个一维数组并赋初值,接着调用函数fun(),函数的功能是:比较数组中各元素的长度,按元素长度从小到大的顺序排列元素,所以执行“fun(ss,5)”函数后,“*ss[]={"xy","bcc","bbcc","aabcc","aaaacc"}”,所以调用printf函数输出ss[0],ss[4]的值分别为xy,aaaacc。16、有以下程序:#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选项正确。17、有如下程序#include<stdio.h>main(){inti,data;scanf("%d",&data);for(i=0;i<5;i++){if((i<data&&i%2)||(i>data&&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语句的判断条件需要看i<data&&i%2的值,由于i<data始终为真,所以i<data&&i%2的值又取决于i%2的值,也就是说整个if语句的判断条件取决于i%2的值,如果i%2为真,那么if语句成立,执行continue,否则执行printf()函数,所以当i取值l、3时,i%2的为1,if条件成立,执行continue;当i取值0、2、4时,i%2的值为0,if条件不成立,执行printf()函数,输出0,2,4,本题答案为A。18、软件需求规格说明书的作用不包括()。A、软件设计的依据B、软件可行性研究的依据C、软件验收的依据D、用户与开发人员对软件要做什么的共同理解标准答案:B知识点解析:《软件可行性分析报告》是软件可行性研究的依据。19、以下程序的输出结果是()。#includemain(){inta=1,b=3;if((++a<0)&&!(b--<=0))printf(“%d,%d\n”,a,b);elseprintf(“%d,%d\n”,b,a);}A、2.2B、1,3C、3,2D、3.1标准答案:C知识点解析:解答本题的关键在于if语句条件中的表达式。初始时a=1,b=3,所以++a=2>0,因此++a<0为假:因为是进行逻辑与(&&)运算,在&&的一个运算对象为假的前提下不用判断第二个运算对象的真假,就可以直接得出整个表达式的值为逻辑0,所以执行else语句。20、下列叙述中正确的是()。A、在switch语句中,不一定使用break语句B、在switch语句中必须使用defaultC、break语句必须与switch语句中的case配对使用D、break语句只能用于switch语句标准答案:A知识点解析:defauh语句在switch语句中可以省略,所以B错误;switch语句中并非每个case后都需要使用break语句,所以C错误;break语句还可以用于for等循环结构中,所以D错误。21、以下程序段中的变量已正确定义for(i=0;i<4;i++,i++)for(k=1;k<3;k++);printf("*");该程序段的输出结果是()。A、*B、****C、**D、********标准答案:A知识点解析:暂无解析22、下述程序的输出结果是()。#includevoidmain(){inta[5]={1,2,3,4,5};int*p=a,**q=&p;printf("%d",*(p++));printf("%d",**q);}A、22B、11C、34D、12标准答案:D知识点解析:程序首先定义了一个指向一维数组a的指针p,一个指向指针变量p的指针变量q,输出*(p++)是先输出*p即a[0]的值,再将指针p指向数组的下一个元素a[1],输出**q是输出指针p所指向单元的内容,即a[1]的值。23、有以下程序#include<stdio.h>main(){inta=1,b=3,c=5;int*p1=&a,*p2=&b,*p=&c;*p=*p1*(*p2);printf("%d\n",c);}执行后的输出结果是A、1B、2C、3D、4标准答案:C知识点解析:该程序中int*p1=&a,*p2=&b,*p=&c;指定义三个指针变量,并赋值,即使p1指向a;p2指向b;p指向c。*p=*p1*(*p2);该条语句是给p所指的存储单元c赋值,就是p1所指的存储单元的值,即a的值,与p2所指的存储单元b的值相乘,也就是c=a*b,等价于c=1*3=3;因此C选项正确。24、在数据库的三级模式结构中,描述数据库中全体数据的全局逻辑结构和特征的是()。A、内模式B、用户模式C、外模式D、概念模式标准答案:D知识点解析:数据库系统在其内部分为三级模式,即概念模式、内模式和外模式。慨念模式是数据库系统中全局数据逻辑结构的描述,全体用户的公共数据视图。外模式也称子模式或者用户模式,是用户的数据视图,也就是用户所能够看见和使用的局部数据的逻辑结构和特征的描述,是与某一应用有关的数据的逻辑表示。内模式又称物理模式,是数据物理结构和存储方式的捕述,是数据在数据库内部的表示方式。描述数据库中全体数据的全局逻辑结构和特征的是概念模式,故D选项正确。25、有以下程序:#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。26、有以下程序:#inelude<stdio.h>intfun(inta[],intn,intx){int*p=a;while(p<a+n&&*p!=x)p++;if(p<a+n)returnp-a;elsereturn-1;}main(){inta[10]={1,2,3,4,5,6,7,8,9,10};printf("%d\\n",fun(a,10,10));}程序运行后的输出结果是()。A、9B、-1C、10D、0标准答案:A知识点解析:while(p<a+n&&*p!=x)p++;当p=a;n=10,x=10;时while循环条件成立,直到p=a+9,结束循环,执行下一条语句,if条件成立,返回p-a,此时执行p-a=a+9-a=9;因此,输出9。故答案为A选项。27、某二叉树共有730个结点,其中度为1的结点有30个,则叶子结点个数为()。A、不存在这样的二叉树B、351C、1D、350标准答案:A知识点解析:在树结构中,一个结点所拥有的后件个数称为该结点的度,所有结点中最大的度称为树的度。对任何一棵二叉树,度为0的结点总是比度为2的结点多一个。如果有一棵二叉树,结点总数为730,假设度为0的结点个数为n。则有n+30+n-1=730,n=350.5,由于结点个数必须是整数,所以不可能存在题目中这样的二叉树。故选A选项。28、数据库系统的三级模式不包括()。A、数据模式B、内模式C、外模式D、概念模式标准答案:A知识点解析:数据库系统的三级模式是概念模式、内模式和外模式。29、关系数据库管理系统能实现的专门关系运算包括()。A、排序、索引、统计B、选择、投影、连接C、关联、更新、排序D、显示、打印、制表标准答案:B知识点解析:关系数据库管理系统的专门关系运算包括选择运算、投影运算和连接运算。30、若有以下定义,则对a数组元素地址的正确引用是()。inta[5],*p=a;A、p+5B、*a+lC、&a+lD、&a[0]标准答案:D知识点解析:本题考查如何引用数组元素的地址。选项A中,p+5引用的是a[5]的地址,而数组a只有5个元素,即a[0]、a[1]、a[2]、a[3]、a[4],所以引用错误;选项B中,*a+1指的是将数组a的第一个元素加1;选项C中,这种引用方式错误;选项D中,&a[0]引用的是数组的首地址。31、以下叙述中正确的是A、循环发生嵌套时,最多只能两层B、三种循环for,while,do-while可以互相嵌套C、循环嵌套时,如果不进行缩进形式书写代码,则会有编译错误D、for语句的圆括号中的表达式不能都省略掉标准答案:B知识点解析:A选项中,循环发生嵌套时,没有规定层数;C选项中,循环嵌套时,书写代码时没有要求必须缩进;D选项中,for语句的圆括号中的表达式都可以省略掉。因此B选项正确。32、有以下程序:#include#includestmctSTU{inta;charb[10];floatc;};voidfun(structSTUt);main(){structSTUa={1001,’’Tim’’,635.0};fun(a);printf(’’%d,%s,%5.1f\n’’,a.a,a.b,a.c);}voidfun(structSTUt){t.a=1002:strcpy(t.b,’’Dom’’);t.c=701.0;}程序运行后的输出结果是()。A、1001,Tim,635.0B、1002,Dom,701.0C、1002,Dom,701.0D、1001,Tim,701.0标准答案:A知识点解析:此题主要是考查结构体作为子函数参数的值传递还是地址传递的问题,子函数的功能是将形参的值用一个固定的值覆盖,但因为是值传递,所以实参的值不会变化,所以在主函数中的结构体a的值没有发生变化。33、在以下选项中,按照C语言规定,不能出现在标识符中的是()。A、大写字母B、下划线C、数字字符D、连接符标准答案:D知识点解析:按照C语言规定,标识符由字母、数字和下划线组成,且开头必须是字母或下划线,所以选项D不合法。34、下列说法不正确的是A、int*fun();----fun是一个返回int指针的函数B、int(*fun)();---fun是一个返回int指针的函数C、int(*array[5])0;----array是一个有5个元素的数组,每一个元素都是一个函数指针,指向一个返回int的函数。D、int(*fun(int))(int);----fun是带有一个int参数的函数,返回值是一个函数指针,这个指针指向带有一个int参数并返回int的函数。标准答案:B知识点解析:该函数中fun是一个函数指针。指向一个返回int的函数。35、有以下程序#include<stdio.h>main(){intx=0x13;if(x=0x12)printf("True");printf("False\n");}程序运行后的输出结果是A、TrueB、TrueFalseC、FalseD、TrueFalseTrue标准答案:B知识点解析:if(x=0x12)表示x=0x12!=0即x=0x12为假时,执行printf("True"),再执行printf("False\n"),因此答案为B选项,注意赋值操作符"="与相等操作符"=="的区别。36、设有以下程序段floata[8]={1.0,2.0};intb[1]={0};charc[]={"A","B"};chard=="1";以下叙述正确的是A、只有变量c的定义是合法的B、只有变量a,b,c的定义是完全合法的C、所有变量的定义都是完全合法的D、只有变量a,b的定义是完全合法的标准答案:D知识点解析:floata[8]={1.0,2.0};定义了一个包含8个float型元素的数组,并初始化了数组的前2项,其他项是随机数。intb[1]={0},定义了只有一个int型元素的数组,并初始化为0。charc[]={"A","B"};定义一个char型数组,大小有初始化元素决定,但初始化值是字符串,类型不兼容,编译出错。chard="1";定义一个char型变量,但是初始化赋值字符串,类型不兼容,编译出错。因此只有a,b定义和初始化正确。故答案为D选项37、有以下程序段:#include<stdio.h>inti,n;for(i=0;i<8;i++){n=rand()%5;switch(n){case1:case3:printf("%d\n",n);break;case2:case4: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子句执行下去,不再进行判断,直到碰到break或函数结束为止。简单的说break是结束整个循环体,而continue是结束单次循环。B)选项中当产生的随机数n为4时要执行打印操作。C)选项中当产生的随机数为1和2时分别执行case3与case4后面语句的内容。由于存在break语句所以for循环不是固定执行8次,执行次数与产生的随机数n有关系。38、若有以下定义,则对数组元素的正确引用是()。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个元素。39、若定义函数“int*func()”,则函数func的返回值为()。A、一个实数B、一个指向整型变量的指针C、一个指向整型函数的指针D、一个整型函数的入口地址标准答案:B知识点解析:本题考查函数返回值。fun函数的返回值类型为int*类型,即函数返回一个指向整型变量的指针。二、程序填空题(本题共1题,每题1.0分,共1分。)40、程序通过定义学生结构体变量,存储了学生的学号、姓名和三门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是从形参filename所指的文件中读入学生数据,并按照学号从小到大排序后,再用二进制方式把排序后的学生数据输出到filename所指的文件中,覆盖原来的文件内容。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:部分源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!试题程序:1#include<stdio.h>2#defineN53typedefstructstudent{4longsno;5charname[10];6floatscore[3];7}STU;8voidfun(char*filename)9{FILE*fp;inti,j;10STUs[N],t;11/*********found*********/12fp=fopen(filename,【1】);13fread(s,sizeof(STU),N,fp);14fclose(fp);15for(i=0;i<N-1;i++)16for(j=i+1;j<N;j++)17/*********found*********/18if(s[i].sno【2】s[j].sno)19{t=s[i];s[i]=s[j];20s[j]=t;}21fp=fopen(filename,’’wb’’);22/*********found*********/23【3】(s,sizeof(STU),N,fp);24fclose(fp);25}26main()27{STUt[N]={{10005,’’ZhangSan’’,95,80,88},{10003,’’LiSi’’,85,70,78},{10002,’’CaoKai’’,75,60,88},{10004,’’FangFang’’,90,82,87},{10001,’’MaChao’’,91,92,77}},ss[N];28inti,j;FILE*fp;29fp=fopen(’’student.dat’’,’’wb’’);30fwrite(t,sizeof(STU),5,fp);31fclose(fp);32printf(’’\n\nTheoriginaldata:\n\n’’);33for(j=0;j<N;j++)34{printf(’’\nNo:%idName:%-8sscores.’’,t[j].sno,t[j].name);35for(i=0;i<3;i++)36printf(’’%6.2f’’,t[j].score[i]);37printf(’’\n’’);38}39fun(’’student.dat’’);40printf(’’n\nThedataaftersorting:\n\n’’);41fp=fopen(’’student.dat’’,’’rb’’);42fread(ss,sizeof(STU),5,fp);43fclose(fp);44for(j=0;j<N;j++)45{printf(’’\nNo:%1dName:%-8sScores.’’,ss[j].sno,ss[j].name);46for(i=0;i<3;i++)47printf(’’%6.2f’’,ss[j].score[i]);48printf(’’\n’’);49}50}标准答案:(1)’’rb’’(2)>(3)fwrite知识点解析:填空l:题目中要求从形参filename所指的文件中读入学生的数据,以此可以看出本空应该填写’’rb’’。填空2:此处的if语句是比较学号的大小,如果学号大就和学号小的换位,以此本空填写>。填空3:题目要求所有的学生数据均以二进制方式输出到文件中,因此本空填写fwrite。三、程序修改题(本题共1题,每题1.0分,共1分。)41、下列给定程序中函数fun的功能是:将s所指字符串的正序和反序进行连接,形成的新串放在t所指的数组中。例如,当s所指字符串为“ABCD”时,t所指字符串中的内容应为“ABCDDCBA”。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行.也不得更改程序的结构!试题程序:#include<conio.h>#include<stdio.h>#include<string.h>/*********found*********/voidfun(chars,chart){inti,d;d=strlen(s);for(i=0;i<d;i++)t[i]=s[i];for(i=0;i<d;i++)t[d+i]=s[d-1-i];/*********found*********/t[2*d-1]=’\0’;}main(){chars[100],t[100];printf("\nPleaseenterstrings:");scanf("%s",s);fun(s,t);printf("\nTheresultis:%skn",t);}标准答案:(1)voidfun(char*s,char*t)(2)t[2*d]=’\0’;或t[d+i]=’\0’;或t[2*d]=0;或t[d+i]=0;知识点解析:(1)从调用函数来看,函数传递的是数组,所以函数的形参应为指针。(2)循环结束后回文字符的个数为2*d个,因为数组下标是从0开始的,所以最后一个字符的下标为2*d一1,在最后一个字符的后面加上结束符’\0,因此为t[2*d]=’\0’;。四、程序设计题(本题共1题,每题1.0分,共1分。)42、编写函数fun,其功能是:将s所指字符串中除了下标为奇数同时ASCII码值也为奇数的字符之外,其余的所有字符全部删除,串中剩余字符所形成的一个新串放在t所指的数组中。例如,若s所指字符串的内容为“ABCDEFG12345”,其中字符A的ASCII码值为奇数,但所在元素的下标为偶数,因此需要删除;而字符1的ASCII码值为奇数,所在数组中的下标也为奇数,因此不应当删除,其他依此类推。最后t所指数组中的内容应为“135”。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<conio.h>#include<stdio.h>#include<string.h>voidfun(char*s,chart[]){}main(){chars[100],t[100];printf("knPleaseenterstrings:");scanf("%s",s);fun(s,t);printf("knTheresultis:%s\n",t);}标准答案:voidfun(char*s,chart[]){inti,j=0,n;n=strlen(s);for(i=0;i<n;i++)if((i%2)&&(s[i]%2)){t[j++]=s[i];/*将下标为奇数同时ASCII码值为奇数的字符放入数组t中*/}t[j]=’\0’;/*最后加上结束标识符*/}知识点解析:本题要求除了下标为奇数同时ASCII码值也为奇数的字符,其余的所有字符都删除,即要留下下标为奇数同时ASCII码值也为奇数的字符。所以if的条件语句应为:if(i%2!=0&&s[i]%2!=0)。国家二级(C语言)机试模拟试卷第2套一、程序填空题(本题共1题,每题1.0分,共1分。)1、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun的功能是:将形参s所指字符串中下标为奇数的字符按ASCII码大小递增排序,并将排序后下标为奇数的字符取出,存入形参P所指字符数组中,形成一个新串。例如,形参s所指的字符为“baawrskjghzlicda”,执行后p所指字符数组中的字符串应为“aachjlsw”。请在程序的下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>voidfun(char*s,char*p)(inti,j,n,x,t;n=0;for(i=0;s[i]!=’\0’;i++)n++;for(i=1;i<n-2;i=i+2){/*********found*********/【1】;/*********found*********/for(j=【2】+2;j<n;j=j+2)if(s[t]>s[j])t=j;if(t!=i){x=s[i];s[i]=s[t];s[t]=x;}}for(i=1,j=0;i<n;i=i+2,j++)p[j]=s[i];/*********found*********/p[j]=【3】;}main(){chars[80]="baawrskjghzlicda",p[50];printf("\nTheoriginalstringis:%s\n",s);fun(s,p);printf("\nTheresultis:%s\n",p);}标准答案:(1)t=i(2)i或t(3)’\0’或0知识点解析:本题中第1个for循环的作用是得到字符串的长度,第2个for循环的作用是对下标为奇数的字符按ASCII码大小排序,最后将排好序的字符取出。填空1:取出字符串中下标为奇数的字符,所以将下标i赋值给中间变量t。填空2:此处for循环语句的作用是实现对下标为奇数的元素进行排序操作,所以循环变量初值应填入i或t;。填空3:将下标为奇数的字符取出后,存入p所指的数组中,最后不要忘记在数组最后加入字符串结束标识’\0’。二、程序修改题(本题共1题,每题1.0分,共1分。)2、使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun的功能是:用下面的公式求π的近似值,直到最后一项的绝对值小于指定的数(参数num)为止。π/4≈1-1/3+1/5-1/7+…例如,程序运行后,输入0.0001,则程序输出3.1414。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdlib.h>#include<math.h>#include<stdio.h>floatfun(floatnum){ints;floatn,t,pi;t=1;pi=0;n=1;s=1;/*********found*********/while(t>=num){pi=pi+t;n=n+2;s=-s;/*********found*********/t=s%n;}pi=pi*4,returnpi;}voidmain(){floatn1,n2;system("CLS");printf("Enterafloatnumber:");scanf("%f",&n1),n2=fun(n1);printf("%6.4f\n",n2);}标准答案:(1)while(fabs(t)>=num)(2)t=s/n;知识点解析:(1)函数fun中while语句的作用是,当新的一项大于给定参数时,循环累计计算s的值。题目要求最后一项的绝对值小于给定参数,因此循环条件应当是while(fabs(t)>=num)。(2)变量t用来存放最后一项的值,因为每一项均为1或-1除以一个数,所以此处应使用除法运算符“/”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、使用VC++加10打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,编写函数fun,其功能是:删除一个字符串中指定下标的字符。其中,a指向原字符串,删除指定字符后的字符串存放在b所指的数组中,n中存放指定的下标。例如,输入一个字符串“World”,然后输入3,则调用该函数后的结果为“Word”。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdlib.h>#include<stdio.h>#include<conio.h>#defineLEN20voidfun(chara[],charb[],intn){}voidmain(){charstr1[LEN],str2[LEN];intn;system("CLS");printf("Enterthestring:\n");gets(str1);printf("Enterthepositionofthestringdeleted:");scanf("%d",&n);fun(str1,sir2,n);printf("Thenewstringis:%s\n",sir2);}标准答案:voidfun(chara[],chaxb[],intn){inti,k=0;for(i=0;a[i]!=’\0’;i++)if(i!=n)/*将不是指定下标的字符存入数组b中*/b[k++]=a[i];b[k]=’\0’;/*在字符串最后加上结束标识*/}知识点解析:本题要求删除字符串中指定下标的字符,即把非指定下标的字符保留,所以if语句条件表达式的内容是if(i!=n)。字符串最后不要忘记加上字符串结束标识’\0’。国家二级(C语言)机试模拟试卷第3套一、选择题(本题共39题,每题1.0分,共39分。)1、下列叙述中正确的是()。A、循环队列中的元素个数随队头指针与队尾指针的变化而动态变化B、循环队列中的元素个数随队头指针的变化而动态变化C、循环队列中的元素个数随队尾指针的变化而动态变化D、以上说法都不对标准答案:A知识点解析:在循环队列中,用队尾指针rear指向队列中的队尾元素,用队头指针front指向队头元素的前一个位置。因此,从队头指针front指向的后一个位置直到队尾指针rear指向的位置之间,所有的元素均为队列中的元素。因此,循环队列中的元素个数随队头指针和队尾指针的变化而变化,故A选项正确。2、下列关于栈的叙述中,正确的是()。A、栈底元素一定是最后入栈的元素B、栈顶元素一定是最先入栈的元素C、栈操作遵循“先进后出”的原则D、以上说法均错误标准答案:C知识点解析:栈顶元素总是后被插入的元素,也是最先被删除的元素;栈底元素总是最先被插入的元素,也是最后才被删除的元素;栈的修改是按“后进先出”的原则进行的。因此,栈称为“先进后出”表或“后进先出”表,故C选项正确。3、设某二叉树的后序序列为CBA,中序序列为ABC,则该二叉树的前序序列为()。A、BCAB、CBAC、ABCD、CAB标准答案:C知识点解析:后序序列为CBA,中序序列为ABC,则说明A为根结点,并且B和C均在A的右子树上;结点B和C中,后序序列为CB,中序序列为Bc,则说明结点C在结点B的右子树上,根据分析可得,该二叉树的前序序列为ABC。4、结构化程序设计主要强调的是()。A、程序的规模B、程序的效率C、程序设计语言的先进性D、程序易读性标准答案:D知识点解析:结构化程序设计强调的是程序的易读性。5、为了使模块尽可能独立,要求()。A、模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强B、模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱C、模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱D、模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强标准答案:B知识点解析:系统设计的质量主要反映在模块的独立性上。评价模块独立性的主要标准有两个:一是模块之间的耦合,它表明两个模块之间互相独立的程度;二是模块内部之间的关系是否紧密,称为内聚。一般来说,要求模块之间的耦合尽可能地弱,即模块尽可能独立,而要求模块的内聚程度尽量地高。6、在结构化方法中,软件功能属于软件开发中的()阶段。A、详细设计B、需求分析C、总体设计D、编程调试标准答案:C知识点解析:总体设计过程通常由两个主要阶段组成:系统设计,确定系统的具体实现方案;结构设计,确定软件结构。为确定软件结构,首先需要从实现角度把复杂的功能进一步分解。分析员结合算法描述仔细分析数据流图中的每个处理,如果一个处理的功能过分复杂,必须把它的功能适当地分解成一系列比较简单的功能。7、一个算法应当具有五个特性,以下叙述中正确的是()。A、有穷性、确定性、复杂性、有零个或多个输入、有一个或多个输出B、有穷性、确定性、可行性、有零个或多个输入、有一个或多个输出C、有穷性、确定性、可行性、必须要有一个以上的输入、有一个或多个输出D、有穷性、确定性、复杂性、有零个或多个输入、必须要多个输出标准答案:B知识点解析:算法是指为解决某个特定问题而采取的确定且有限的步骤,一个算法应当具有五个特征:有穷性、确定性、可行性、有零个或多个输入、有一个或多个输出。8、关系数据库管理系统所管理的关系是()。A、若干个二维表B、一个DBF文件C、一个DBC文件D、若干个DBC文件标准答案:A知识点解析:在关系数据库中,一个袁就是一个关系,关系数据库管理系统管理的关系就是多个二维表。9、结构化程序设计中,下面对goto语句使用描述正确的是()。A、禁止使用goto语句B、使用goto语句程序效率高C、应避免滥用goto语句D、以上说法均错误标准答案:C知识点解析:结构化程序设计中,要注意尽量避免goto语句的使用,故C选项正确。10、设有如下三个关系表:下列操作中正确的是()。A、T=RnSB、T=RUSC、T=R×SD、T=R/S标准答案:B知识点解析:两个相同结构关系的“并”是由属于这两个关系的元组组成的集合。11、不列选项中,不属于数据库管理的是()。A、数据库的建立B、数据库的调整C、数据库的监控D、数据库的校对标准答案:D知识点解析:数据库管理一般包括:数据库的建立、数据库的调整、数据库的重组、数据库的安全性控制与完整性控制、数据库的故障恢复和数据库的监控。12、以下叙述中错误的是()。A、C程序经过编译、链接步骤之后才能形成一个真正可执行的二进制机器指令文件B、C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令C、用C语言编写的程序称为源程序,它以ASCII代码形式存放在一个文本文件中D、C语言源程序经编译后生成后缀为.obi的目标程序标准答案:B知识点解析:C语言程序编译时将每条可执行语句转换为二进制的机器指令,但非执行语句(如注释语句)不被编译,故B选项错误。13、若有定义:ima=0,b=0,c=0,d=0;,有C语言表达式(a++&&b++)?c++:d++,以下关于其执行顺序的叙述中正确是()。A、先执行a++,表达式a++的值为0,由此即可确定(a++&&b++)值为0,因此执行d++B、先执行a++,表达式a++的值为0;再执行b++,表达式b++的值为0,由此可确定(a++&&b++)值为0,因此执行d++C、先执行a++,表达式a++的值为1;再执行b++,表达式b++的值为1,由此可确定(a++&&b++)值为1,因此执行c++D、先执行b++,表达式b++的值为1;再执行a++,表达式a++的值为1,由此可确定(a++&&b++)值为1,因此执行c++标准答案:A知识点解析:把握前置运算和后置运算的基本运算规则。14、表达式:(int)((double)9/2)-(9)%2的值是()。A、0B、3C、4D、5标准答案:B知识点解析:运算符“/”和“%6”的优先级高于“-”,所以先进行除法和求余运算,再进行减法运算。强制类型转换表达式的形式:(类型名)(表达式)。“%”结果为4,转换成double类型再转换成int类型结果依然为4,(9)%2的结果为1,4-1的最后结果为3。15、在银行业务中,实体客户和实体银行之间的联系是()。A、一对一B、一对多C、多对一D、多对多标准答案:D知识点解析:一个客户可以在多家银行办理业务,一家银行也有多个客户办理业务,所以实体客户和实体银行之间的联系是多对多。16、若有以下程序段:intr=8;print{("%d\n",r>>1);输出结果是()。A、16B、8C、4D、2标准答案:C知识点解析:C语言中“>>”是对二进制的右移运算符,右移相当于将原数做除二操作,它将原数右移相应位数,并将移出的位舍去,在高位补0,将所得的结果再赋值给变量。本题中8的二进制为00001000,右移一位得到00000100,所以是4。17、以下能对一维数组a进行初始化的语句是()。A、inta[5]=(0,1,2,3,4);B、inta(5)={};C、inta[3]={0,1,2);D、inta{5)={10*1};标准答案:C知识点解析:A选项,数组可以看作是若干个相同数据类型元素的有序集合,所以以集合的形式对其初始化,使用{}对其初始化;BD选项,常量表达式只能放在中括号[]中。18、若有定义:inta;floatb;doublec;,程序运行时输入:123<回车>,能把1输入给变量a、把2输入给变量b、把3输入给变量c的输入语句是()。A、scanf("%d%f%lf",&a,&b,&c);B、scanf("%d%f%lf",&a,&b,&c);C、scanf("%d%lf%lf",&a,&b,&c);D、scanf("%d%f%f",&a,&b,&c);标准答案:A知识点解析:在seal3f()函数中,a变量为整数用%d格式字符串,b变量为单精度数用%f格式字符串,c变量为双精度数用%1f格式字符串,只有A选项正确。19、下列数据中属于“字符串常量”的是()。A、"a"B、{ABC}C、abe\0'D、a'标准答案:A知识点解析:在C语言中,若干个字符构成字符串,用单引号标识字符,用双引号标识字符串。A选项,用双引号标识字符串,正确;BC选项,分别用花括号和单引号标识字符串,错误;D选项,标识字符。20、当变量c的值不为2、4、6时,值为“真”的表达式是()。A、(c==2)∣∣(c==4)}∣∣(c==6)B、(c>=2&&c<=6)∣∣(c!=3)∣∣(c!=5)C、(c>=2&&c<=6)&&!(c%2)D、(c>=2&&c<=6)&&(c%2!=1)标准答案:B知识点解析:本题主要考查的是逻辑表达式。逻辑与运算中只有两边的表达式同时为真,最后结果才为真;参与逻辑或运算的表达式只要有一个为真,最后结果就为真。A选项中表达式的意思是当c等于2或4或6时,表达式的值为真,否则为假,所以不满足题意。C选项中表达式的意思是当c大于等于2且小于等于6,并且c不是奇数时,表达式的值为真,否则为假。此时满足该表达式的c只能取值为2、4、6,所以也不满足题意。D选项中后面一个子表达式(c%2!=1)和C选项中的!(c%2)是等价的,都是判断c不是奇数,故也不满足题意。21、有以下程序:#include<stdio.h>main(){floata,b,e,t:a=3;b=7;c=1;if(a>b){t=a;a=b.b=t;}if(a>c){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;)printf("%5.2f,%5.2f,%5.2f",a,b,c);}程序运行后的输出结果是(其中□代表空格)()。A、□□3.00,□□1.00,□□7.00B、□□3.00,□□7.00,□□1.00C、□□1.00,□□3.00,□□7.00D、□□7.00,□□3.00,□□1.00标准答案:C知识点解析:本题考查if语句。该题包含了3个if语句,每个if语句后的{}都不可省略,因为每个{}中都包含了多条语句。首先判断条件a>b,由于3小于7,表达式a>b不成立,因此不执行{t=a;a=b;b=t;};然后判断条件a>c,由于3大于1,因此表达式a>c成立,则执行{t=a;a=c;c=t;},该表达式语句是用来交换a和c的值,执行完后a为1,c为3;然后判断条件b>c,由于7大于c中的3,因此b>c成立,则执行{t=b,b=c;c=t;},过程同上,执行后b为3,c为7。printf语句用来输出a,b,c中的值,并且要求输出的每个数据宽度为5,小数部分保留2位,数据右对齐。最后输出为C选项中所示结果。22、有以下程序:#include<stdio.h>main(){intsum=10,n=1:while(n<3){sum=sum-n;n++;}printf("%d,%d",n,sum):}程序运行后的输出结果是()。A、2,8B、3,7C、3,8D、2,7标准答案:B知识点解析:考查while循环。当循环条件n<3成立的时候,执行循环体{sum=sum-n;n++;)中的语句。循环初值sum为10,n为1。首先判断循环条件n<3成立,开始第1次循环,执行sum=sum-n=10-1=9,执行n++,即将n中的值加1,执行后n为2;此时n中的值为2,sum中的值为9,循环条件n<3成立,继续执行第2次循环,执行sum=sum-n=9-2=7,执行n++,即将n中的值加1,执行后n为3;n为3时,循环条件不成立,结束循环,输出结果为3,7。23、下列叙述正确的是()。A、只能在循环体内和switch语句体内使用break语句B、continue语句的作用是结束整个循环的执行C、在循环体内使用break语句或continue语句的作用相同D、从多层循环嵌套中退出时,只能使用goto语句标准答案:A知识点解析:break语句可以出现在循环体内及switch语句体内,不能用于其他的语句。continue语句的作用是结束本次循环,即跳过循环体中下面尚未执行的语句,而接着转去判定循环条件是否成立,从而确定下一次循环是否继续执行,也就是说执行continue语句不会使整个循环终止。在循环体内使用break语句会使循环提前终止,从多层循环嵌套中退出时,可以使用goto语句或者break语句。24、以下叙述中正确的是()。A、charc1,c2,*c3,c4[40];是合法的变量定义语句B、数组下标的下限由数组中第一个非零元素的位置决定C、数组下标的下限由数组中第一个被赋值元素的位置决定D、数组下标的下限是1标准答案:A知识点解析:选项A正确。charc1,c2,*c3,c4[40]表示定义了两个字符变量c1、c2,一个字符指针c3,一个字符数组c4。数组的下限永远为0,BCD选项错误。25、设有定义: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选项。26、以下叙述中正确的是()。A、语句chara[Z]={"a","b");是合法的,定义了一个包含两个字符的数组B、语句inta[]={0);是不合法的,遗漏了数组的大小C、语句inta[8]={0};是合法的D、语句chara[3];a="ab";是合法的,因为数组有三个字符空间的容量,可以保存两个字符标准答案:C知识点解析:考查一维数组以及字符数组的初始化。初始化的时候可以只给数组的前面一部分元素设定初值,故C选项正确;字符数组中的每个元素为一个字符,需要用单引号,故A选项错误。若对数组全部元素赋初值时,可以不指定数组元素的个数,故B选项错误;定义字符数组时可以将字符串直接赋给该字符数组,其他情况则不可以,故D选项错误。27、有以下程序:#include<stdio.h>intk=5;voidf(int*s){s=&k;}main(){intm=3,*p=&m;f(p);printf("%d%d\n",m,*p);}程序的运行结果是()。A、33B、55C、35D、53标准答案:A知识点解析:考查函数传参。C语言中,数据只能从实参单向传递给形参,指针作为函数参数时,形参仍然作为实参的副本被赋值,形参指针变量的指向改变不能影响实参指针变量的指向,结果不变,答案为A选项。28、有以下程序:#include<stdio.h>main(){intx[3][3]={1,2,3,4,5,6,7,8,9),i;for(i:1;i<3;i++)printf("%d",x[i][3-i]);}程序运行后的输出结果是()。A、2,4B、6,8C、3,7D、2,6标准答案:B知识点解析:二维数组的起始行标和列标均为0,即x[0][0]=1。当i=1时,for循环判断条件成立,输出x[1][2]=6;此时i自增为2,开始第二次for循环,条件成立,输出X[2][1]=8,故B选项正确。29、下列错误的定义是()。A、int*p=&i,i;B、int*p,i;C、inti,*p=&i;D、inti,*P;标准答案:A知识点解析:A选项,先定义一个整型指针变量p,然后将变量i的地址赋给p。然而此时还未定义变量i,因此编译器无法获得变量i的地址,故A选项错误。C选项,先定义变量i,则在内存中为i分配空间,因此i在内存空间的地址就可以确定了,然后再定义p,此时可以为p赋i的地址,故C选项正确。30、有以下程序:#include<stdio.h>main(){inta[2]E3]={{1,2,3},(4,5,6));intb[3][2],i,j;for(i=0;i<=1;i++){for(j=0;j<=2;j++)b[j][i]=a[i][j];}for(i=0;i<=2;i++){for(j=0;j<=1;j++)printf("%d",b[i][j]);}}程序的运行结果是()。A、123456B、135246C、142536D、132546标准答案:C知识点解析:本题考查for循环的嵌套以及二雏数组的赋值和输出。第一个for循环嵌套用来给二维数组b中的各元素赋值,执行完后得到b[3][2]={{1,4},{2,5),{3,6})。第二个for循环嵌套用来输出二雏数组b中的各元素。依次输出为b[0][0],b[0][1],b[1][0],b[1][1].b[2][0],b[2][1],故输出结果为142536。31、若有定义语句:char*sl="GOOD",*s2="good":以下选项中,能够输出“GOOD”语句的是()。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知识点解析:strcrop(s1,s2)是字符串比较函数,比较方式是两个字符串从左至右逐个字符进行比价(按照ASCII码值大小),以第一个不相同字符的大小作为比较结果。由于大写字母的ASCII码值小于小写字母的AsCII码值,所以比较后的结果为负值,故只有B选项符合题意。32、有以下程序:#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(26)的值,为了计算该表达式,需要调用函数fun。此时inain将n中的26作为实参传递给fun的num,即num值为26,接着执行do…while语句。第1次循环,执行k*=num%10,即k=k*(num%10)=1*(26%10)=6;执行nam/=10,即num=nurn/10=26/10=2;while后面循环条件为num,此时nam为2,是非0值,即表示循环条件成立,继续执行循环体。此时k为6,num为2,执行do…while中的语句后,k为12,num为0。由于while后面循环条件为num,此时num为0,表示循环条件不成立,结束循环,执行returnk,即返回至main函数中的被调用处,执行main函数,执行printf语句,输出结果为12。33、在C语言中,只有在使用时才占用内存单元的变量的是()。A、auto和registerB、extern和registerC、auto和staticD、static和register标准答案:A知识点解析:C语言中,动态存储区域中存放的变量在使用时才分配内存空间。auto变量的存储单元是分配在内存的动态存储区中,每当进入函数体时自动分配存储单元。register变量也是自动类变量。static说明的变量为静态变量,静态变量在内存的静态存储中占据着永久的存储单元,直至程序运行结束。extern说明的变量为外部变量,属于全局变量,全局变量在整个程序运行期间都占用内存空间。34、若有如下定义:charps[]={"aa","bb","cc","dd"};,则以下叙述中正确的是()。A、*ps[0]是字符'A'B、*ps[0]是字符串"aa"C、ps[0]是字符'A'D、ps是字符串'aa'标准答案:B知识点解析:对于指针数组,ps[0]代表的就是第一个字符串的地址。35、以下叙述中正确的是()。A、在C语言中,预处理命令行都以#开头B、预处理命令行必须位于C源程序的起始位置C、#include<stdio.h>必须放在C程序的开头D、C语言的预处理不能实现宏定义和条件编译的功能标准答案:A知识点解析:C语言中,凡是以#开头的都被称为编译预处理行,故A选项正确;预处理行可以放在C源程序的任何位置,习惯放在起始位置,故B选项错误;语句#include<stdio.h>必须放在使用文件stdio.h中相关方法的语句之前,但是不一定非要放在C程序开头,故C选项错误;预处理包括宏定义、文件包含和条件编译等,故D选项错误。36、有以下程序:#include<stdio.h>main(){staticchara[]="Program",*ptr;for(ptr=a;ptr<a+7;ptr+=2)putchar(*ptr);}程序运行后的结果为()。A、ProgB、PortoC、rgaD、Por标准答案:B知识点解析:首先定义一个字符型数组a,并对a进行初始化,然后定义字符型指针变量ptr。执行for语句,ptr=a表示将数组a的首地址赋给ptr,ptr<a+7代表循环条件,ptr+=2即ptr=ptr+2。执行putchar(*ptr);即输出*pt所对应的字符。此时ptr指向数组中的第1个元素,即a[0],所以*ptr表示a[0]中的值,即P,此时输出P;然后执行ptr+=2,此时ptr指向数组中的第3个元素,即a[2],输出0;然后执行ptr+=2,此时ptr指向数组中的第5个元素,即a[4],输出r;然后执行ptr+=2,此时ptr指向数组中的第6个元素,即a[5],输出m;然后执行ptr+=2,得到ptr=a+8<a+7,即循环条件不成立,循环结束,最终输出结果为Porm。37、有以下程序:#include<stdio.h>main(){inti;FILE*fp;for(i=0;i<3;i++){fp=fopen("res.txt","w");fputc('K'+i,fp);fclose(fp);}}程序运行后,在当前目录下会生成一个res.txt文件,其内容是()。A、MB、EOFC、KLMD、L标准答案:A知识点解析:通过三次循环,最后i的值定格在2,最后储存值'K'+2='M',所以最后保存的数值为M。注意fclose函数,每次都关闭文件,并且重新回到文件首地址。38、有以下程序:#include<stdio.h>structst{intx;inty;}a[2]={5,7,2,9};main(){printf("%d\n",aE03.y*a[1].x);}程序运行后的输出结果是()。A、10B、18C、14D、63标准答案:C知识点解析:首先是定义结构体st,st中共有两个整型成员x,y。然后定义一个st类型的数组a,a的长度为2,即数组中含有两个st类型的元素,分别是a[0]和a[1]。对a进行初始化,此题是按照存储顺序进行初始化,即将5赋给a[0]中的x(即a[0].x=5),将7赋给a[0]中的y(即a[0].y=7),将2赋给a[1]中的x(即a[1].x=2),将9赋给a[1]中的y(即a[1].y=9)。执行main函数,输出表达式a[0].y*a[1].x的值,即7*2的值14。39、下列关于C语言文件的叙述中正确的是()。A、文件由一系列数据依次排列组成,只能构成二进制文件B、文件由结构序列组成,可以构成二进制文件或文本文件C、文件由数据序列组成,可以构成二进制文件或文本文件D、文件由字符序列组成,其类型只能是文本文件标准答案:C知识点解析:C语言将文件看作是一个字符(字节)的序列,即由一个一个字符(字节)数据顺序组成。根据数据的组成形式,可将文件分为两种:①ASCII文件,又称文本(text)文件,它的每一个字节可放一个ASCII码,代表一个字符;②二进制文件,是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。因此,C文件就是一个字节流或一个二进制流。二、程序填空题(本题共1题,每题1.0分,共1分。)40、下列给定程序中,已建立了一个带头结点的单向链表,链表中的各结点按数据域递增有序链接。函数fun的功能是:删除链表中数据域值相同的结点,使之只保留一个。请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<stdlib.h>#defineN8typedefstructlist{intdata;structlist*next:}SLIST;voidfun(SLIST*h){SLIST*p,*q;p=h->next;if(P!=NULL){q=p->next;while(q!=NULL){if(p->data==q->data){p->next=q->next;/******found******/free(1);/******foun

温馨提示

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

评论

0/150

提交评论