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

下载本文档

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

文档简介

国家二级(C语言)机试模拟试卷10(共9套)(共303题)国家二级(C语言)机试模拟试卷第1套一、程序填空题(本题共1题,每题1.0分,共1分。)1、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.C。在此程序中,函数fun的功能是:将a所指4×3矩阵中第k行的元素与第0行元素交换。例如,有下列矩阵:123456789101112若k为2,程序执行结果为:789456123101112请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:部分源程序在文件BIANK1.C中。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#defineN3#defineM4/*********found*********/voidfun(int(*a)[N],int【1】){inti,temp;/*********found*********/for(i=0;i<【2】;i++){temp=a[0][i];/*********found*********/a[0][i]=【3】;a[k][i]=temp;}}main(){intx[M][N]={{1,2,3},{4,5,6},{7,8,9),{10,11,12)},i,j;printf("Thearraybeforemoving:\n\n");for(i=0;i<M;i++){for(j=0;j<N;j++)printf("%3d",x[i][j]);printf("\n\n");}fun(x,2);printf("Thearrayaftermoving:\n\n");for(i=0;i<M;i++){for(j=0;J<N;j++)printf("%3d",x[i][j]);printf("\n\n");}}标准答案:(1)k(2)N(3)a[k][i]知识点解析:填空1:变量k在函数体fun中已经使用,但在函数体中没有定义,肯定是在函数的形参中定义的,所以应填k。填空2:数组共N列,所以应填N。填空3:这部分语句实现的功能是变量值的交换,所以应填a[k][i]。二、程序修改题(本题共1题,每题1.0分,共1分。)2、使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun的功能是:读入一个字符串(长度<20),将该字符串中的所有字符按ASCII码值升序排序后输出。例如,若输入“edcba”,则应输出“abede”。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件MODl1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<string.h>#include<Stdio.h>voidfun(chart[]){charc;inti,j;/*********found*********/for{i=strlen(t);i;i--)for(j=0;j<i;j++)/*********found*********/if(t[j]<t[j+1]){c=t[j];t[j]=t[j+1];t[j+1]=c;}}main(){chars[81];printf("\nPleaseenteracharacterstring:");gets(s);printf("\n\nBeforesorting:\n%s",s);fun(s);printf("\nAftersortingdecendingly:\n%s",s);}标准答案:(1)for(i=strlen(t)-1;i;i--)或for(i=strlen(t)-1;i>0;i--)(2)if(t[j]>t[j+1])知识点解析:(1)本题是利用选择法对数组元素进行比较排序。所谓选择法,是依次用当前取得的元素和其后面的元素进行比较,在第一个元素和其后面的元素顺次比较时,可以借助中间变量来对两个数进行交换,要保证第一个元素始终存放数组中的最大数,以后依次挑选出次大数,这样最终的数组就是有序的。strlen函数所求得的字符串长度,数组最大下标表示为字符串长度减1,所以要减1。(2)这里是一个分析逻辑错误,题中要求按升序排序,所以应改为if(t[j]>t[j+1])。三、程序设计题(本题共1题,每题1.0分,共1分。)3、使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写一个函数fun,它的功能是:将ss所指字符串中所有下标为奇数位置的字母转换为大写(若该位置上不是字母,则不转换)。例如,若输入“abc4Efg”,则应输出“aBc4EFg”。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<conio.h>#include<Stdio.h>#include<string.h>#include<stdlib.h>voidfun(char*ss){}voidmain(){FILE*wf;chartt[81],s[81]="abc4Efg";system("CLS");printf("\nPleaseenteranstringwithin80characters:\n");gets(tt);printf("\n\nAfterchanging,thestring\n%s",tt);fun(tt);printf(“\nbecomes\n%s\n",tt);/*****************/wf=fopen("out.dat","w"),fun(s),fprintf(wf,"%s",s);fclose(wf);/*****************/}标准答案:voidfun(char*ss){inti;for(i=0,ss[i]!=’\0’;i++)/*将ss所指字符串中所有下标为奇数位置的字母转换为大写*/if(i%2==1&&ss[i]>=’a’&&ss[i]<=’z’)ss[i]=ss[i]-32;}知识点解析:该题要求将给定字符串中奇数位置的字母转换为大写,需要先判断奇数位置以及是否是小写字母,如果是再通过其转换方法进行转换。从C语言的学习中知道,只要将小写字母减去32即转成大写字母,将大写字母加上32即转成小写字母。本程序用if语句实现转换功能。国家二级(C语言)机试模拟试卷第2套一、选择题(本题共40题,每题1.0分,共40分。)1、在C语言中,只有在使用时才占用内存单元的变量的是()。A、auto和registerB、extern和registerC、auto和staticD、static和register标准答案:A知识点解析:C语言中,动态存储区域中存放的变量在使用时才分配内存空间。auto变量的存储单元是分配在内存的动态存储区中,每当进入函数体时自动分配存储单元。register变量也是自动类变量。static说明的变量为静态变量,静态变量在内存的静态存储中占据着永久的存储单元,直至程序运行结束。extern说明的变量为外部变量,属于全局变量,全局变量在整个程序运行期间都占用内存空间。2、下列关于C语言文件的叙述中正确的是()。A、文件由一系列数据依次排列组成,只能构成二进制文件B、文件由结构序列组成,可以构成二进制文件或文本文件C、文件由数据序列组成,可以构成二进制文件或文本文件D、文件由字符序列组成,其类型只能是文本文件标准答案:C知识点解析:C语言将文件看作是一个字符(字节)的序列,即由一个一个字符(字节)数据顺序组成。根据数据的组成形式,可将文件分为两种:①ASCII文件,又称文本(text)文件,它的每一个字节可放一个ASCII码,代表一个字符;②二进制文件,是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。所以C文件就是一个字节流或一个二进制流。3、下列叙述中正确的是()。A、栈是一种先进先出的线性表B、队列是一种后进先出的线性表C、栈与队列都是非线性结构D、以上三种说法都不对标准答案:D知识点解析:栈是一种先进后出的线性表,队列是一种先进先出的线性表,栈与队列都是线性结构。4、以下关于C语言的叙述中正确的是()。A、预处理命令通常位于函数体外面,但也可以位于函数体中间B、C语言中的变量定义须在其他语句之前C、在C语言程序的书写中,一个语句必须单占一行D、一个C语言源程序可以由一个或多个源文件组成,每个源文件可由自己的main函数标准答案:A知识点解析:源程序中可以有预处理命令(include命令仅为其中的一种)。C语言中的变量可以在使用之前的任何位置进行定义。C语言程序的书写中,多个语句可以位于一行,但为了增强可读性,一般每行只有一条语句。一个C语言源程序可以由一个或多个源文件组成,但仅可以有一个main函数。5、有关return语句说法不正确的是()。A、系统默认的返回值类型为整型,故当函数的返回值为int型时,在函数定义时,返回值的类型说明可以省略。B、当函数有返回值时,凡是允许表达式出现的地方,都可以调用该函数。C、当函数没有返回值时,函数的返回值类型可以说明为void型,它表示“无类型”或“空类型”。D、函数的返回值类型必须与return语句中的表达式值的类型一致,但C语言也允许不同;这时,系统以函数定义时的返回值类型说明为准,并自动地将return语句中表达式的值转换为函数的返回值类型。标准答案:D知识点解析:函数的返回值类型一般与return语句中的表达式值的类型一致,但C语言也允许不同;这时,系统以函数定义时的返回值类型说明为准,并自动地将return语句中表达式的值转换为函数的返回值类型。6、若有定义inta[5],*p=a;则正确引用数组元素的是()。A、*&a[5]B、*a+2C、*(p+5)D、*(a+2)标准答案:D知识点解析:本题考查通过指针引用数组元素。用指针引用数组有以下3种形式:①(p+n)与(a+n)表示数组元素a[n]的地址:②*(p+n)与*(a+n)表示数组元素a[n];③p[n]=*(p+n),都表示数组元素a[n]。选项A、B没有这种引用形式;选项C,*(p+5)是引用数组的第6个元素,而数组一共有5个元素,出现越界;选项D,*(a+2)引用数组的第3个元素。7、若输入’’abcdef’’、’’abdef’’,以下程序的输出结果为()。#include<stdio.h>#include<string.h>main(){intn;chars1[201,s2[20],*p1,*p2;scanf(’’%s’’,s1);scanf(’’%s’’,s2);p1=s1;p2=s2;n=strcmp(p1,p2);printf(’’%d\n’’,n);}A、-B、0C、’’abcdef’’D、’’abdef’’标准答案:A知识点解析:本题考查两个知识点:①字符串比较函数strcmp(s1,s2),若s1>s2,则返回1;若s1=s2,则返回0;若s1<s2,则返回-1。②字符串依次比较的是它们相同位置上字符的ASCII码值。8、在数据处理中,其处理的最小单位是()。A、数据B、数据项C、数据结构D、数据元素标准答案:B知识点解析:数据元素是由多个数据项组成,数据是能够被计算机识别、存储和加工处理的信息载体,数据处理的最小单位是数据项。9、软件按功能可以分为:应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的是()。A、编译程序B、操作系统C、教务管理系统D、汇编程序标准答案:C知识点解析:编译软件、操作系统、汇编程序都属于系统软件,只有教务管理系统才是应用软件。10、设变量已正确定义并赋值,以下正确的表达式是()。A、x=y+z+5,++yB)int(15.8%5)B、x=y*5=x+zC、x=25%5.0标准答案:A知识点解析:B与D选项中取模运算符%的左右两个操作数均应为整数,所以B、D错误。C选项中不能将x+y的值赋给表达式y*5,所以C错误。11、有以下程序#include<stdio.h>voidmain(){inta=1,b=0;printf(’’%d,’’,b=(a++)+(a++));printf(’’%d\n’’,a+b);}程序运行后的输出结果是()。A、4,6B、2,5C、3,5D、2,6标准答案:B知识点解析:在主函数中定义了两个整型变量a和b,并把它们的初值分别设置为1和0;在第二条语句中,首先计算b=a+a,然后a自增两次,因此第二句结束时,b=2,a=3,然后第三句,a+b=5。12、以下函数按每行8个输出数组中的数据:voidfun(int*w,intn){inti;for(i=0;i<n;i++){________printf("%d",w[i]);}printf("\n");}下画线处应填入的语句是()。A、if(i/8==0)printf("\n");B、if(i/8==0)continue;C、if(i%8==0)printf("\n");D、if(i%8==0)continue;标准答案:C知识点解析:每行输出8个数组数据,即输出8个后就输出一个换行,所以,应该对8取余,当结果为0时输出换行符,即填入语句“if(i%8==0)printf("\n");”。13、若有chars[3][3]={"AAA","BBB","CCC"};说明语句,则与它等价的语句是()。A、char**s={"AAA","BBB","CCC"};B、char*s[31={"AAA","BBB","CCC"};C、chars[][5]:{"AAA","BBB","CCC"};D、chars[][3]={"AAA","BBB","CCC"};标准答案:D知识点解析:二维字符数组在定义时可省略第一维的维数,根据初始化有3个字符串,所以选项D)中数组有3行,与已知说明语句等价。14、在数据管理技术发展的三个阶段中,数据共享最好的是()。A、人工管理阶段B、文件系统阶段C、数据库系统阶段D、三个阶段相同标准答案:C知识点解析:数据库系统阶段实现了数据共享,具有数据的集成性,这使得数据可被多个应用所共享,还可以极大地减少数据冗余性。A项,在人工管理阶段,数据不保存,没有对数据进行管理的软件,数据不能共享;B项,文件系统阶段是数据库系统发展的初级阶段,它提供了简单的数据共享与数据管理能力,但是这种能力十分有限。从人工管理阶段到文件系统阶段再到数据库系统阶段,对数据共享的能力在不断增强。15、有如下程序段:intx=12:doubley=3.141593;printf("%d%8.6f",x,y);其输出结果是()。A、123.141593B、123.141593C、12,3.141593D、123.1415930标准答案:A知识点解析:printf函数中格式字符“%8.6”的含义是:变量y的输出宽度为8(包括小数点),小数点后面保留6位小数,且右对齐。所以选择A。16、关于字符常量,以下叙述正确的是()。A、空格不是一个字符常量B、字符常量能包含大于一个的字符C、单引号中的大写字母和小写字母代表的是相同的字符常量D、所有的字符常量都可以作为整型量来处理标准答案:D知识点解析:本题考查字符常量的4个知识点:①空格是一个字符常量,而且单引号中的空格不可以省略;②字符常量只能包含一个字符;③单引号中的大写字母和小写字母代表的是不相同的字符常量;④所有的字符常量都作为整型量来处理,在计算机内部,其对应的整数值就是ASCII码值。17、若a是数值类型,则逻辑表达式(a==1)||(a!=1)的值是A、1B、0C、2D、不知道a的值,不能确定标准答案:A知识点解析:逻辑或"||"要求只要两边的运算对象有一个非零,结果就为真,虽然不知道a的值,但是若a为1,则左边运算对象为1,若a的值不是1,则右边运算对象的值为1,所以总能保证一边非零,所以结果为真,即1。18、若有以下定义:intx[10],*pt=x;则对x数组元素的正确引用是()。A、pt+3B、*&x[10]C、*(pt+10)D、*(x+3)标准答案:D知识点解析:没有A选项的引用形式。*与&放在一起作用抵消,所以B选项错误,最大只能引用到x[9]。*(pt+i)表示引用指针pt所指元素后的第i个元素,所以c选项错误,最大只能为*(pt+9)。因此D选项正确。19、有以下程序#include<stdio.h>main(){FILE*pf;char*s1="China",*s2="Beijing";pf=fopen("abc.dat","wb+");fwrite(s2,7,1,pf);rewind(pf);/*文件位置指针回到文件开头*/fwrite(s1,5,1,pf);fclose(pf);}以上程序执行后abc.dat文件的内容是A、ChinaB、ChinangC、ChinaBeijingD、BeijingChina标准答案:B知识点解析:本题考查文件操作函数,fwrite和rewind函数,题目中先是将s2字符串写入adc.dat中,然后将写指针回到文件开头,然后写入s1字符串,那么s1字符串就将前五个字符覆盖,所以最终结果为Chinang,选项B正确。20、设有一联合体变量定义如下: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’。21、以下选项中可用做C程序合法实数的是()。A、3.0e0.2B、.1e0C、E9D、9.12E标准答案:B知识点解析:A选项中e后面的指数必须为整数,所以错误C语言规定,F之前必须要有数字,所以C选项错误E后面必须要有数字,且必须为整数,所以D选项错误。22、下面关于数据库三级模式结构的叙述中,正确的是()。A、内模式可以有多个,外模式和模式只有一个B、外模式可以有多个,内模式和模式只有一个C、内模式只有一个,模式和外模式可以有多个D、模式只有一个,外模式和内模式可以有多个标准答案:B知识点解析:数据库的三级模式结构是指数据库系统的外模式、模式和内模式。一个数据库可以有多个外模式,但只有一个模式和一个内模式。23、下列选项中属于面向对象设计方法主要特征的是()。A、继承B、自顶向下C、模块化D、逐步求精标准答案:A知识点解析:面向对象基本方法的基本概念有对象、类和实例、消息、继承与多态性,所以选择A、24、若有以下程序:#includevoidfun(inta[],intn){intt,i,j;for(i=1;ia[j]){t=a[i];a[i]=a[j];a[j]=t;}}main(){inte[10]:{10,9,8,7,6,5,4,3,2,1},i;fun(c,10);for(i=0;i<10;i++)printf("%d,",e[i]);printf("\n");}则程序的输出结果是()。A、1,10,3,8,5,6,7,4,9,2,B、10,9,8,7,6,5,4,3,2,1,C、2,9,4,7,6,5,8,3,10,1,D、10,1,8,3,6,5,4,7,2,9,标准答案:D知识点解析:本题主要考查for的嵌套循环。该题首先对一维数组进行初始化,c[0]到c[9]依次赋值为10到1;fun(c,10);语句调用fun函数,fun函数的功能是将一维数组偶数位元素的数值由小到大排序;最后将排好序的新的一维数组进行输出。因此D选项正确。25、有以下程序:#include#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+1=3*a+1=10,f((a+1))=(a+1)*(a+1)*(a+1)=64,所以答案为A选项。26、设文件指针fp已定义,执行语句fp=fopen("file","w");后,以下针对文本文件file操作叙述的选项中正确的是()。A、只能写不能读B、写操作结束后可以从头开始读C、可以在原有内容后追加写D、可以随意读和写标准答案:A知识点解析:考查文件操作函数fopen的基础知识,以"w"方式打开文件,只能写不能读。选项A正确。27、以下程序段中的变量已正确定义for(i=0;i<4;i++,i++)for(k=1;k<3;k++);printf("*");该程序段的输出结果是()。A、*B、****C、**D、********标准答案:A知识点解析:暂无解析28、下列叙述中正确的是()。A、在C程序的函数中不能定义另一个函数B、在C程序中main函数的位置是固定的C、C程序中所有函数之间都可以相互调用D、每个C程序文件中都必须要有一个main函数标准答案:A知识点解析:暂无解析29、程序测试的主要目的是()。A、设计测试程序B、验证程序的正确性C、发现程序中的错误D、改正程序中的错误标准答案:D知识点解析:程序测试的主要目的是改正程序中的错误。30、若有说明intm[3][4]={3,9,7,8.5),(*q)[4];和赋值语句q=m;,则对数组元素m[i][j](其中0<=i<3,0<-j<4)值的正确引用为()。A、(q+i)[j]B、*q[i][1]C、*(*q[i]+j)D、*(*(q+i)+j)标准答案:D知识点解析:*q+i)指向第i行首地址,*(*(q+i)+j)代表第i行第j个元素。31、有以下程序:voidss(char*s,chart){while(*S){if(*s=t)*s=t-’a’+’A’;S++:}}main(){charstrl[100]=’’ABCddfefdbd’’,c=’d’;ss(strl,c);printf(’’%s\n’’,strl);}程序运行后的输出结果是()。A、ABCDDEFEDBDB、ABCDDfefDbDC、ABCAAfefAbAD、ABCdd~fdbd标准答案:B知识点解析:函数ss(char*s,chart)的功能是将指针s所指向的字符串中存在的字符”t”均改写成大写字*;所以main函数中引用函数ss后使得数组strl中的小写字*”d”均变成了大写字*”D”,然后输出数组strl,结果为:ABCDDflefDbD。32、下列二维数组初始化语句中,正确且与语句inta[][3]={1,2,3,4,5}等价的是()。A、inta[2][]={{1,2,3},{4,5}};B、inta[][3]={1,2,3,4,5,0};C、inta[][3]={{1,0},{2,0},{3,0}};D、inta[2][]={{1,2,3},{4,5,6)};标准答案:B知识点解析:此题考查的是二维数组的初始化。题干中数组a的第二个下标为3,由此可知数组a是一个2行3列的数组,初始化时未赋初值的元素的值自动为0,所以与选项B是等价的,最后一个元素的值为0。33、下列队列的描述中,正确的是()。A、队列属于非线性表B、队列在队尾删除数据C、队列按“先进后出”进行数据操作D、队列按“先进先出”进行数据操作标准答案:D知识点解析:队列是只允许在一端删除,在另一端插入的顺序表,允许删除的一端叫做队头,允许插入的一端叫做队尾。队列的操作数是依据先进先出的原则进行的。因此队列亦称作先进先出的线性表,或后进后出的线性表。34、C语言源程序名的后缀是()。A、.exeB、.CC、.objD、.cp标准答案:B知识点解析:由C语言构成的指令序列称为C源程序,源程序文件的后缀为“.c”。源程序经过C编译程序编译生成后缀为“.obj”的二进制文件(称为目标文件),然后由称为“连接程序”(Link)的软件把目标文件与C语言提供的各种库函数连接起求,生成后缀为“.exe”的可执行文件。35、定义结构体数组structstu{intnum;charname[20];}x[5]={1,"ZHAO",2,"QIAN",3,"SUN",4,"LEE",5,"ZHOU");for(i=1;i<5;i++)printf("%d%c",x[i].num,x[i].name[2]);程序执行后的输出结果是()。A、2A3N4E50B、1H213U4EC、1A2N3E40D、1A2N3E40标准答案:A知识点解析:本题主要考查结构体数组。x[i]Inum是结构体x[i]中的num成员,x[i]-name[2]是结构体x[i]中name成员的第3个元素。第一次循环,i=1,输出x[1].num,x[1].name[2]的值,即2A;第二次循环,i=2,输出x[2].num,x[2].name[2]的值,即3N;第三次循环,i=3,输出x[3].num,x[3].name[2]的值,即4E;第四次循环,i=4,输出x[4].num,x[4].name[2]的值,即50。36、有C语言表达式2*3+4+15%3,关于其执行顺序,以下叙述正确的是A、先执行2*3得6,再执行6+4得10,再执行15%3得0,最后执行10+0得10B、先执行2*3得6,再执行15%3得5,最后执行6+4+5得15C、先执行15%3得0,再执行2*3得6,最后执行6+4+0得10D、先执行15%3得3,再执行4+3得7,再执行2*3得6,最后执行6+7得13标准答案:A知识点解析:首先运算符"*"和运算符"%"有相同优先级,并且优先级都高于运算符’+’,再根据运算结合性,乘法和取余运算都满足从左到右的运算规则,C,D选项错误;因为15%3=0,排除B选项,答案为A选项。37、有以下程序#include<stdio.h>intk=5;voidf(int*s){s=&k;*s=k;}main(){intm=3;f(&m);printf("%d,%d\n",m,k);}程序运行后的输出结果是A、3,3B、5,5C、3,5D、5,3标准答案:C知识点解析:函数f()的功能是:定义一个临时的整型指针变量s,指向全局变量k,然后用k的值对s指向的内存地址进行赋值,结果当然是k的值不变;另外在调用函数f()过程中,虽然使用m的地址初始化s,但是s在f函数内部又被指向k的地址,所以s的后续操作对m没有任何影响,因此最后输出为3,5,答案为C选项。38、深度为7的完全二叉树中共有125个结点,则该完全二叉树中的叶子结点数为A、62B、63C、64D、65标准答案:B知识点解析:在树结构中,定义一棵树的根结点所在的层次为1,其他结点所在的层次等于它的父结点所在的层次加1,树的最大层次称为树的深度。完全二叉树指除最后一层外,每一层上的结点数均达到最大值,在最后一层上只缺少右边的若干结点。深度为6的满二叉树,结点个数为26-1=63,则第7层共有125-63=62个叶子结点,分别挂在第6层的左边62个结点上,加上第6层的最后1个叶子结点,该完全二叉树共有63个叶子结点,故B选项正确。39、下列叙述中正确的是A、软件是程序、数据和文档B、软件是程序和数据C、软件是算法和数据结构D、软件是算法和程序标准答案:A知识点解析:计算机软件由两部分组成:一是机器可执行的程序和数据;二是机器不可执行的,与软件开发、运行、维护、使用等有关的文档。故选A选项40、有以下程序#include<stdio.h>main(){FILE*fp;inti,a[6]={1,2,3,4,5,6},k;fp=fopen("data.dat","w+");for(i=0;i<6;i++)fprintf(fp,"%d\n",a[5-i]);rewind(fp);for(i=0;i<6;i++){fscanf(fp,"%d",&k);printf("%d,",k);}fclose(fp);}程序运行后的输出结果是A、6,5,4,3,2,1,B、1,2,3,4,5,6,C、1,1,1,1,1,1D、6,6,6,6,6,6,标准答案:A知识点解析:fopen("data.dat","w+");w+打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。rewind(fp);使文件fp的位置指针指向文件开始。fprintf(fp,"%d\n",a[5-i]);将a[i]输出到fp指向的文件中。fscanf(fp,"%d",&k);将fp读入到变量k中,第一个for循环将数组中元素倒着输入到fp指向的文件中,rewind()则指向文件开始,因此打印是数组a的倒叙。故打印为6,5,4,3,2,1。答案为A选项二、程序填空题(本题共1题,每题1.0分,共1分。)41、下列给定程序中,函数fun的功能是:在形参ss所指字符串数组中,将所有串长超过k的宁符串中后面的宁符删除,只保留前面的k个字符。ss所指字符串数组中共有N个字符串,且串长小于M。请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<string.h>#defineN5#defineM10/**********found***********/voidfun(char(*SS)【1】,intk){inti=0;/**********found***********/while(i<【2】){/**********found***********/ss[i][k]=【3】;i++;)}main(){charx[N][M]={“Create”,“Nodify”,“Sort”,“skip”,“Delete”};inti;printf(“\nTheoriginalstring\n\n”);for(i=0;i<N;i++)puts(x[i]);printf(“\n”);fun(x,4);printf(“\nThestringafterdeleted:\n\n”);for(i=0,i<N;i++)puts(x[i]);printf(“\n”);}标准答案:(1)[M](2)N(3)‘\0’知识点解析:填空1:根据main函数中的函数调用语句,确定函数定义时的形式参数,所以填入[M]。填空2:while循环语句需要对所有字符串进行操作,因此循环条件是i<N。填空3:字符串结尾加入字符串结束标以‘\0’。三、程序修改题(本题共1题,每题1.0分,共1分。)42、下列给定程序的功能是:建立一个带头结点的单向链表,并用随机函数为各结点数据域赋值。函数fun的作用是求出单向链表结点(不包括头结点)数据域中的最大值,并且作为函数值返回。请改正函数fun中的错误,使它能得出正确的结果。注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:1#include<stdio.h>2#include<conio.h>3#include<stdlib.h>4typedefstructaa5{intctata;6structaa*next;7}NODE;8fun(NODE*h)9{intmax=-1;10NODE*p;11/*********found*********/12p=h;13while(p)14{if(p->data>max)15max=p->data;16/*********found*********/17p=h->next;18}19returnmax;20}21outresult(ints,FILE*pf)22{fprintf(pf,’’\nThemaxinlink:%d\n’’,s);23}24NODE*treatlink(intn,intm)25{NODE*h,*p,*s;26inti;27h=p=(NODE*)malloc(sizeof(NODE));28h->data=9999;29for(i=l;i<=n;i++)30{s=(NODE*)malloc(sizeof(NODE));31s->data=rand()%m;32s->next=p->nexL;33p->next=s;p=p->next;34}35p->next=NULL;36returnh;37}38outlink(NODE*h,FILE*pf)39{NODE*p;40p=h->next;41fprintf(pf,’’\nTheLIST:\n\nHEAD’’);42while(p)43{fprintf(pf,’’->%d’’,p->data);44p=p->next;}45fprintf(pf,’’\n’’);46}47main()48{NODE*head;intm;49system(’’CLS’’);50head=creatlink(12,100);51outlink(head,stdout);52m=fun(head);53printf(’’\nTheRESULT:\n’’);54outresult(m,stdout);55}标准答案:(1)p=h->next;(2)p=p->next;知识点解析:(1)因为链表的头结点没有数据域,所以对指针p进行初始化时,要将p指向头结点的下一个结点。(2)通过指针p的移动遍历链表,因此此处应改为p=p->next;。四、程序设计题(本题共1题,每题1.0分,共1分。)43、编写函数fun,其功能是:根据以下公式求π的值(要求精度0.0005,即某项小于0.0005时停止迭代)。程序运行后,若输入精度0.0005,则程序应输出为3.140578。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>#include<conio.h>#include<math.h>doublefun(doubleeps){}voidmain(){doublex;printf(”Inputeps:”),scanf(”%lf”,&x);printf(”\neps=%lf,PI=%lf\n”,x,fun(x));}标准答案:doublefun(doubleeps){doubles=0.0,s1=1.0;intn=1;while(sl>=eps)/*当某项大于精度要求时,继续求下一项*/s=s+s1;/*求和*/{s1=s1*n/(2*n+1);/*求多项式的每一项*/n++;}return2*s;}知识点解析:首先应该定义double类型变量,并同.赋初值,用来存放多项式的某一项和最后的总和。从第二项开始以后的每一项都是其前面一项乘以n/(2*n+1),程序中用s1来表示每一项,s表示求和后的结果。需注意s1和s的初值都为1.0,因为循环变量从第二项开始累加。国家二级(C语言)机试模拟试卷第3套一、选择题(本题共39题,每题1.0分,共39分。)1、在一棵二叉树上,第5层的结点数最多是()。A、8B、9C、15D、16标准答案:D知识点解析:根据二叉树的性质:二叉树第i(i≥1)层上至多有2i-1个结点。得到第5层的结点数最多是16个。2、设有表示学生选课的三张表,学生S(学号,姓名,性别,年龄,身份证号),课程C(课号,课名),选课SC(学号,课号,成绩),则表SC的关键字(键或码)为()。A、课号,成绩B、学号,成绩C、学号,课号D、学号,姓名,成绩标准答案:C知识点解析:学号是学生表s的主键,课号是课程表c的主键,所以选课表SC的关键字就应该是与前两个表能够直接联系且能唯一定义的学号和课号,所以选择C。3、以下关于逻辑运算符两侧运算对象的叙述中正确的是()。A、可以是任意合法的表达式B、只能是整数0或非0整数C、可以是结构体类型的数据D、只能是整数0或1标准答案:A知识点解析:C语言的逻辑运算符比较特别,它的操作数没有明确的数据类型,可以是任意合法的表达式,所以选择A。4、若有定义inta[5],*p=a;则正确引用数组元素的是()。A、*&a[5]B、*a+2C、*(p+5)D、*(a+2)标准答案:D知识点解析:本题考查通过指针引用数组元素。用指针引用数组有以下3种形式:①(p+n)与(a+n)表示数组元素a[n]的地址:②*(p+n)与*(a+n)表示数组元素a[n];③p[n]=*(p+n),都表示数组元素a[n]。选项A、B没有这种引用形式;选项C,*(p+5)是引用数组的第6个元素,而数组一共有5个元素,出现越界;选项D,*(a+2)引用数组的第3个元素。5、对下列二叉树进行前序遍历的结果为()。A、ABCDEFGHB、ABDGEHCFC、GDBEHACFD、GDHEBFCA标准答案:B知识点解析:遍历就是不重复地访问一叉树的所有结点。二叉树遍历的方法有3种:前序遍历、中序遍历和后序遍历。记住3种遍历的顺序:①前序,访问根→按前序遍历左子树→按前序遍历右子树:②中序,按中序遍历左子树→访问根→按中序遍历右子树;③后序,按后序遍历左子树→按后序遍历右子树→访问根。所以对该二叉树的中序遍历结果为ABDGEHCF。6、有以下程序:#include<stdio.h>main(){charch[]="uvwxyz",*pc;pc=ch;printf("%c\n",*(pc+5));}程序运行后的输出结果是()。A、zB、0C、元素ch[5]的地址D、字符y的地址标准答案:A知识点解析:语句pc=ch;使得指针变量指向字符数组ch的首地址,即指向字符‘u’。则pc+5指向的是字符向后移动5位,指向字符‘z’。所以输出的水pc+5的值即为‘z’。因此A选项正确。7、有以下程序:voidss(char*s,chart){while(*s){if(*s==t)*s=t-’a’+’A’;s++;}}main(){charstrl[100]="abcddfefdbd",c=’d’;ss(strl,c);printf("%s\n",strl);}程序运行后的输出结果是()。A、ABCDDEFEDBDB、abcDDfefDbDC、abcAAfefAbAD、Abcddfefdbd标准答案:B知识点解析:函数ss(char*s,chart)的功能是将指针s所指向的字符串中存在的字符“t”均改写成大写字母;所以main函数中引用函数ss后使得数组str1中的小写字母“d”均变成了大写字母“D”,然后输出数组str1,结果为:abcDDfefDbD。8、设有以下定义:chars1[]="0123";chars2[]={’0’,’1’,’2’,’3’};则以下叙述正确的是()。A、数组s1的长度小于s2的长度B、数组s1和s2的长度相同C、数组s1的长度大于s2的长度D、数组s1和s2完全等价标准答案:C知识点解析:字符数组s1赋值字符串“0123”,字符串中字符依次放人数组中,在最后一个字符后要添加一个结束字符‘\0’,数组s1长度为5。数组s2只需要4个单元即可放下所有初始化值,故数组长度为4。所以数组s1的长度大于s2的长度。9、下列关于线性表的叙述中,不正确的是()。A、线性表可以是空表B、线性表是一种线性结构C、线性表的所有结点有且仅有一个前件和后件D、线性表是由n个元素组成的一个有限序列标准答案:C知识点解析:线性表是一种线性结构,由n(n≥0)个元素组成,所以线性表可以是空表。但是在线性表中,第一个结点没有前件,最后一个结点没有后件,其他结点有且只有一个前件和后件,所以选项C是错误的。10、下列程序的输出结果是()。#includevoidmain(){inta=0,b=1,c=2;if(++a>0||++b>0)++C;printf("%d,%d,%(1",a,b,c);}A、0,1,2B、1,2,3C、1,1,3D、1,2,2标准答案:C知识点解析:本题考查if语句。先判断if语句的条件是否成立,因为++a=1>0,所以条件成立,又因为是进行逻辑或运算,在已知其中一个运算对象为真的情况下,不必判断另外一个运算对象的真假,即不进行++b操作,就可以直接得出整个表达式的值为逻辑1,执行下面的++c。11、有以下程序:#include<stdio.h>main(){inti,t[][3]={9,8,7,6,5,4,3,2,1};for(i=0;i<3;i++)printf("%d",t[2-i][i]);}程序执行后的输出结果是()。A、357B、753C、369D、751标准答案:A知识点解析:二维数组t[][3]实际上指t[3][3]={{9,8,7},{6,5,4},{3,2,1}},通过循环语句for语句可以得到i=0,t[2][0]=3、i=1,t[1][1]=5、i=2,t[0][2]=7、i=3时循环结束即t[2][0]=3、t[1][1]=5、t[0][2]=7。因此A选项正确。12、以下关于宏的叙述错误的是()。A、宏替换不具有计算功能B、宏是一种预处理指令C、宏名必须用大写字母构成D、宏替换不占用运行时间标准答案:C知识点解析:宏名习惯采用大写字母,以便与一般变量区别,但是并没有规定一定要用大写字母。13、以下程序的功能是:通过调用calc函数,把所求得的两数之和值放入变量add中,并在主函数中输出。#includevoidcalc(floatx,floaty,float*sum){________=x+y;}main(){floatx,y,add;scanf("%f%",&x,&y);calc(x,y,&add);pfintf("x+y=%f\n",add);}calc函数中下划线处应填入的是()。A、*sumB、sumC、&sumD、add标准答案:A知识点解析:程序的执行过程为:从键盘读入两个。float类型数据,分别赋给x、y,调用函数calc将两数之和放入指针sum指向的地址,正确的引用形式为(*sum),所以横线处填写*sum。14、设有定义:inta;floatb;执行scanf("%2d%f",&a,&b);语句时,若从键盘输入876543.0,则a和b的值分别是()。A、87和6.0B、876和543.0C、87和543.0D、76和543.0标准答案:A知识点解析:scanf()函数的一般形式为:scan(格式控制,地址表列)。其中,“格式控制”是用双引号括起来的字符串,也称为“转换控制字符串”,它包括两种信息:①格式说明,由“%”和格式字符组成;②普通字符,即需要原样输入的字符。“地址表列”是需要接收输入数据的一系列变量的地址。本题中的“格式控制”是“%2d%f”,“%2d”的意思是要输入一个整数,但该整数最宽只占2个字符,而“%2d”是要输入一个浮点数。题目要求输入的是876空格543.0,所以scanf()函数将87赋给a,将6赋给b。15、若变量已正确定义,以下选项中非法的表达式是()。A、’a’=1/2*(x=y=20,x*3)B、a!=4||’b’C、’a’%4D、’A’+32标准答案:A知识点解析:本题考查用户标识符,用户自己定义的标识符不能与关键字相同,并且尽量避免和预定义标识符相同。本题中scanf为预定义标识符,可以作为用户标识符;case为关键字,不能作为用户标识符,故而答案选A)。16、对于现实世界中事物的特征,在实体-联系模型中使用()。A、属性描述B、关键字描述C、二维表格描述D、实体描述标准答案:A知识点解析:在实体一联系模型中,用属性来描述现实世界中对象的属性所表示的对象的性质、特征和行为。17、若有定义和语句:inta,b;scanf("%d,%d,",&a,&b);以下选项中的输入数据,不能把值3赋给变量a、5赋给变量b的是()。A、3,5B、3,5C、3,5,D、3,5,4标准答案: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)。18、下列关于数据库设计的叙述中,正确的是()。A、在需求分析阶段建立数据字典B、在概念设计阶段建立数据字典C、在逻辑设计阶段建立数据字典D、在物理设计阶段建立数据字典标准答案:A知识点解析:数据字典是在需求分析阶段建立,在数据库设计过程中不断修改、充实和完善的。19、设有以下语句:typedefstruetTr{charc;inta14]:}CIN;则下面叙述中正确的是()。A、CIN是struetTT类型的变量B、Tr是struet类型的变量C、可以用TT定义结构体变量D、可以用CIN定义结构体变量标准答案:D知识点解析:本题考查typedef重新声明一种结构体类型,其中CIN为结构体类型名,而不是结构体变量,所以D选项正确。20、设有说明int(*ptr)[M];其中的标识符ptr是()。A、M个指向整型变量的指针B、指向M个整型变量的函数指针C、一个指向具有M个整型元素的一维数组的指针D、具有M个指针元素的一维指针数组,每个元素都只能指向整型变量标准答案:C知识点解析:根据C语言的语法规则可知,int(*ptr)[M]中的标识符ptr是一个指向具有M个整型元素的一维数组指针。21、对关系S和R进行集合运算,结果中既包含S中的所有元组也包含尺中的所有元组,这样的集合运算称为()。A、并运算B、交运算C、差运算D、积运算标准答案:A知识点解析:关系的并运算是指由结构相同的两个关系合并,形成一个新的关系,新关系中包含两个关系中的所有元组。22、定义无符号整数类为UInt,下面可以作为类UInt实例化值的是()。A、一369B、369C、0.369D、整数集合{1,2,3,4,5}标准答案:B知识点解析:只有B选项369可以用无符号整数来表示和存储。A选项一369有负号,选项C0.369是小数都不能用无符号整数类存储。选项D是一个整数集合得用数组来存储。23、有以下程序段intj;floaty;charname[50];scanf("%2d%f%s",&j,&y,name);当执行上述程序段,从键盘上输入555667777abc后,y的值为()。A、55566B、566C、7777D、566777标准答案:B知识点解析:因为在输入格式控制符中指定变量j的输入格式控制符为“%2d”,即变量.j所占的宽度为2,所以变量j只接收输入数据的前两位,从第3位开始直到空格之间的输入整数都会被保存到变量y中,因为y为浮点型数据,所以输出结果为选项B)。24、有以下程序:#include#includestruetA{inta;charb[10];doublec;};structAf(struetAt);main(){struetAa={1001,“ZhangDa”,1098.0};a=f(a);printf(“%d,%s,%6.1f\n”,a.a,a.b,a.c);}struetAf(struetAt){t.a=1002;strcpy(t.b,“ChangRong”);t.e=1202.0:returnt;}程序运行后的输出结果是()。A、1002,ZhangDa,1202.0B、1002,ChangRong,1202.0C、1001,ChangRong,1098.0D、1001,ZhangDa,1098.0标准答案:B知识点解析:本题考查结构体变量的引用以及作为函数参数,题目虽然看似复杂,其实比较容易,f函数的参数是结构体变量,然后对参数重新赋值并返回,所以该题目的答案为B选项。25、有以下计算公式若程序前面已在命令行中包含math.h文件,不能够正确计算上述公式的程序段是()。A、if(x>=0)y=sqrt(x);if(x<0)y=sqrt(一x);B、if(x>=0)y=sqrt(x);elsey=sqrt(一x);C、y=sqrt(x);D、if(x<0)y=sqrt(一x);标准答案:C知识点解析:本题重点考查的知识点是:sqrt()函数。sqrt()函数的作用是计算平方根,要求输出的参数x必须大于等于0。题目公式的要求是无论x大于等于0还是小于0,y的值都为x绝对值的开方。选项C中调用了sqrt(x)函数,而没有判断x的正负,则y=sqrt(x)会出错。26、设有两行定义语句:intscanf;floatcase;则以下叙述正确的是()。A、第2行语句不合法B、两行定义语句都合法C、第1行语句不合法D、两行定义语句都不合法标准答案:A知识点解析:本题考查用户标识符,用户自己定义的标识符不能与关键字相同,并且尽量避免和预定义标识符相同。本题中scanf为预定义标识符,可以作为用户标识符;case为关键字,不能作为用户标识符,故而答案选A)。27、有以下程序#includeintm1(intx,inty){returnx<=y?x:y;}intm2(intx,inty){returnx<=y?y:x;}intfun(inta,intb){returna+b;}main(){intx=2,y=3,z=1;printf("%d\n",fun(m1(x,y),m2(y,z)));}程序的运行结果是()。A、5B、6C、4D、3标准答案:A知识点解析:暂无解析28、有以下程序#includetypedefstruct{intb,p;}A;voidf(Ac)/*注意:c是结构变量名*/{intj;c.b+=1;c.p+=2;}main(){inti;Aa={1,2};f(a);printf("%d,%d\n",a.b,a.p);}程序运行后的输出结果是()。A、1,2B、2,4C、1,4D、2,3标准答案:A知识点解析:暂无解析29、以下选项中非法的C语言字符常量是A、’\x9d’B、’9’C、’\x09’D、’\09’标准答案:D知识点解析:本题考察字符常量,字符常量是用单引号括起来的一个字符。例如:’a’、’=’、’+’等。转义字符是一种特殊的字符常量。转义字符以反斜线"\"开头,后跟一个或几个字符。D选项中’\09’,\0表示后面的字符是八进制数。又出现9所以是非法的,故D选项正确。30、有以下程序#include<stdio.h>intfuna(inta,intB){returna+b;}intfunb(inta,intB){returna-b;}intsss(int(*t)(),intx,inty){return((*t)(x,y));}main(){intx;x=sss(funa,9,3);x+=sss(funb,8,3);printf("%d\n",x);}程序运行后的输出结果是A、24B、23C、17D、22标准答案:C知识点解析:由x=sss(funa,9,3);可得到x=9+3=12,而后直接传入函数funb,x=x+8-3=12+5=17。因此C选项正确。31、程序中若有以下的说明定义和语句:#include#includestructST{charnum[10];ints;};main(){structSTt,*p;p=&t;…}下列语句不能正确赋值的是()。A、(*p).s=2;p->num[0]=’\0’;B、p->s=12;p->num[0]=0;C、(*p).s=12;(*p).num=’’’’;D、p->s=12;strcpy((*p).mum,’’’’);标准答案:C知识点解析:结构体变量使用,运算符引用结构体成员变量,结构体指针使用一>运算符引用结构体成员变量。另外,由于成员变量num是字符数组,所以不能直接进行赋值,若要对num赋空字符串值,可以把num中第一个元素赋值为0或’0\’,或者用strcpy()函数。32、定义结构体数组structstu{intnum;charname[20];}x[5]={1,"ZHAO",2,"QIAN",3,"SUN",4,"LEE",5,"ZHOU"};for(i=1;i<5;i++)printf("%d%c",x[i].num,x[i].name[2]);程序执行后的输出结果是()。A、2A3N4E5OB、1H213U4EC、1A2N3E4OD、1A2N3E4O标准答案:A知识点解析:本题主要考查结构体数组。x[i].num是结构体x[i]中的num成员,x[i].name[2]是结构体x[il中name成员的第3个元素。第一次循环,i=1,输出x[1].num,x[1].name[2]的值,即2A;第二次循环,i=2,输出x[2].num,x[2].name[2]的值,即3N;第三次循环,i=3,输出x[3].num,x[3].name[2]的值,即4E;第四次循环,i=4,输出x[4].num,x[4].name[2]的值,即50。33、有以下程序#include<stdio.h>structS{inta;int*b;};main(){intx1[]={3,4},x2[]={6,7};structSx[]={1,x1,2,x2};printf("%d,%d\n",*x[0].b,*x[1].b);}程序的运行结果是A、1,2B、3,6C、4,7D、变量的地址值标准答案:A知识点解析:程序的执行过程为:定义整型数组x1,x2并进行初始化,两个数组长度均为2。定义结构体数组x,并为其初始化,则x[0].a=1,x[0].b=x1,x[1].a=2,x[0].b=x2。输出x[0]的成员指针b指向的内存单元值,即数组x1的第一个元素3,输出x[1]的成员指针b指向的内存单元值,即数组x2的第一个元6。程序的运行结果是3,6,B选项正确。34、以下叙述正确的是A、只使用三种基本结构即可解决任何复杂问题B、C语言程序并不是必须要定义main()函数C、只要程序包含了任意一种基本结构,就肯定是结构化程序D、程序中的语法错误只能在运行时才能显现标准答案:A知识点解析:C语言程序必须要定义main()函数,B选项错误;只有同时包含三种基本结构时,程序才是结构化程序,C选项错误;程序中的语法错误在编译时能显现,排除D选项,答案选A。35、某循环队列的存储空间为Q(1:m),初始状态为front=rear=m。现经过一系列的入队操作和退队操作后,front=m,rear=m-1,则该循环队列中的元素个数为A、m-1B、mC、1D、0标准答案:A知识点解析:循环队列长度为m,由初始状态为front=rear=m,可知此时循环队列为空。入队运算时,首先队尾指针进1(即rear+1),然后在rear指针指向的位置插入新元素。特别的,当队尾指针rear=m+1时,置rear=1。退队运算时,排头指针进1(即front+1),然后删除front指针指向的位置上的元素,当排头指针front=m+1时,置front=1。从排头指针front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素均为队列中的元素。如果rear-front>0,则队列中的元素个数为rear-front个;如果rear-front<0,则队列中的元素个数为rear-front+m。该题中m-1<m,即rear-front<0,则该循环队列中的元素个数为(m-1)-m+m=m-1。故选A选项.36、设有定义:chars[81];inti=0;,以下不能将一行(不超过80个字符)带有空格的字符串正确读入的语句或语句组是()。A、gets(s);B、while((s[i++]=getchar())!=’\n’);s[i]=’\0’;C、scanf("%s",s);D、do{scanf("%c",&s[i]);}while(s[i++]!=’\n’);s[i]=’\0’;标准答案:C知识点解析:字符串的输入不能使用scanf("%s",s);而应该使用gets(s)。37、算法的时间复杂度是指()。A、算法的长度B、执行算法所需要的时间C、算法中的指令条数D、算法执行过程中所需要的基本运算次数标准答案:D知识点解析:算法的时间复杂度,是指执行算法所需要的工作量,可以用算法在执行过程中所需基本运算的执行次数来度量算法的工作量。38、当变量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%21=1)标准答案:B知识点解析:本题主要考查的是逻辑表达式。逻辑与运算中只有两边的表达式同时为真.最后结果才为真;参与逻辑或运算的表达式只要有一个为真,最后结果就为真。选项A中表达式的意思是当c等于2或4或6时,表达式的值为真,否则为假,所以不满足题意。选项C中表达式的意思是当c大于等于2且小于等于6,并且c不是奇数时,表达式的值为真,否则为假。此时满足该表达式的c只能取值为2、4、6,所以也不满足题意。选项D中后面一个子表达式(c%2!=1)和选项C中的!(c%2)是等价的,都是判断c不是奇数,因此也不满足题意。故B选项正确。39、若有定义语句:inta[4][10],*P,*q[4];,且0≤i<4,则错误的赋值是()。A、p=aB、q[i]=a[i]C、p=a[i]D、p=&a[2][1]标准答案:A知识点解析:二维数组名是指向指针的指针,所以a和q都为指向指针的指针,而p为指向int类型的指针,p和a不同类型,故A项p=a赋值语句错误。其余选项可以正确赋值,其中D项是用&返回整数的地址,然后复赋值p。二、程序填空题(本题共1题,每题1.0分,共1分。)40、给定程序中,函数fun的功能是将不带头结点的单向链表逆置,即若原链表中从头至尾结点数据域依次为2、4、6、810,逆置后,从头至尾结点数据域依次为10、8、6、4、2。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<stdlib.h>#defineN5typedefstructnode{intdata;structnode*next,}NODE;/**********found***********/【1】fun(NODE*h){NODE*P,*q,*r;p=h;if(p==NULL)returnNULL;q=p一>next;P一>next=NULL:while(q){/**********found***********/r=q一>【2】;q一>nexL=P,p=q,/**********found***********/q=【3】,}returnp,}NODE*creatlist(inta[]){NODE*h,*p,*q,inti;h=NULL;for(i=0;i<N;i++){q=(NODE*)malloc(sizeof(NODE));q一>data=a[i];q一>next=NULL;if(h==NULL)h=p=q,else{P一>next=q;p=q,)}returnh;}voidoutlist(NODE*h){NODE*p;P=h;if(p=NULL)printf(“ThelistisNULL!\n”);else{printf(“\nHead”);do{printf(“一>%d”,p一>data),p=P一>next;)while(P!=NULL);printf(“一>End\n”);}}main(){NODE*head;inta[N]={2,4,6,8,10},head=creatlist(a);printf(“\nTheoriginallist:\n”);outlist(head);head=fun(head);printf(“\nThelistafteriverting:\n”);outlist(head);}标准答案:(1)NODE(2)next(3)r知识点解析:填空1:本题考查了函数指针变量的函数返回值的类型,*fun(NODE*)的返回值为p,而p的数据类型为NODE,因此本空应该填写NODE。填空2:从此空的形式p一>可知本空应该填写next。填空3:本题要求将不带头结点的单向链表逆置,为了使q的指针向后移,此空应该填写r。三、程序修改题(本题共1题,每题1.0分,共1分。)41、使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun的功能是:将s所指字符串中位于奇数位置的字符或ASCII码值为偶数的字符依次放人t所指数组中。例如,字符串中的数据为“AABBCCDDEEFF”,则输出应当是“ABBCDDEFF”。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<conlo.h>#include<stdio.h>#include<string.h>#defineN80voidfun(char*s,chart[]){inti,j=0;for(i=0;i<(int)strlen(s);i++)/*********found*********/if(i%2&&s[i]%2==0)t[j++]=s[

温馨提示

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

评论

0/150

提交评论