2022-2023年山东省青岛市全国计算机等级考试C语言程序设计预测试题(含答案) 2022-2023年山东省青岛市全国计算机等级考试C语言程序设计预测试题(含答案)学校:________班级:________姓名:________考号:________ 一、单选题(20题)1.在C语言中,函数返回值的类型最终取决于()。 A.函数定义时在函数首部所说明的函数类型 B.return语句中表达式值的类型 C.调用函数时主调函数所传递的实参类型 D.函数定义时形参的类型 2.下列叙述中正确的是() A.一个算法的空间复杂度打,则其时间复杂度也必定大 B.一个算法的空间复杂度大,则其时间复杂度也必定小 C.一个算法的时间复杂度大,则其空间复杂度也必定小 D.算法的时间复杂度与空间复杂度没有直接相关 3.现有1GB数据进行排序,计算资源只有1GB内存可用,下列排序方法中最可能出现性能问题的是() A.堆排序B.插入排序C.归并排序D.快速排序E.选择排序F.冒泡排序 4.有以下程序:main{inta[]=(2,4,6,8,10},y=0,x,*P;p=&a[1];for(x=1;x<3;x++)y+=p[x];printf(“%d\n,y”);}程序运行后的输出结果是()。A.10B.11C.14D.15 5.以下程序的输出结果是()。main{inta=1,b;for(b=1,b<=10;b++){if(a>=8)break;if(a%2==1){a+=5;continue;}a=3;}printf(“%d\n”,b);}A.A.3B.4C.5D.6 6.可以判断一个有向图中是否含有回路的方法为()。 A.广度优先遍历B.深度优先遍历C.拓扑排序D.求最短路径 7.设有6个结点的无向图,该图至少应有()条边才能确保是一个连通图。 A.5B.6C.7D.8 8.下列叙述中正确的是()。 A.只能在循环体内和switch语句体内使用break语句 B.eotinue语句的作用是结束整个循环的执行 C.在循环体内使用break语句或continue语句的作用相同 D.从多层循环嵌套中退出时,只能使用got0语句 9.下列二维数组的说明中,不正确的是()。 A.floata[][4]={0,1,8,5,9}; B.inta[3][4] C.#defineN5floata[N][3] D.inta[2][9.5]; 10.若某链表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点。则采用()存储方式最节省运算时间。 A.单链表B.双链表C.单循环链表D.带头结点的双循环链表 11.下面是有关C语言字符数组的描述,其中错误的是()。 A.不可以用赋值语句给字符数组名赋字符串 B.可以用输入语句把字符串整体输入给字符数组 C.字符数组中的内容不一定是字符串 D.字符数组只能存放字符串 12.设有以下语句:inta=1,b=2,c;c=a^(b<<2);执行后,c的值为()。A.6B.7C.8D.9 13.以下是if语句的基本形式:if (表达式)语句,其中表达式A.A.必须是逻辑表达式B.必须是关系表达式C.必须是逻辑表达式或关系表达式D.可以是任意合法的表达式 14.第 42 题 若有说明语句 chara[]=”Itismine”; char*p=”Itismine”; 则以下不正确的叙述是 A.a+1表示的是字符t的地址 B.p指向另外的字符串时,字符串的长度不受限制 C.p变量中存放的地址值可以改变 D.a中只能存放10个字符 15.算法能正确地实现预定功能的特性称为算法的()。 A.正确性B.易读性C.健壮性D.高效率 16.针对二分查找算法,假设一个有序数组有136个素,那么要查找到第10个素,需要比较的素为() A.68,34,17,9,13,11,10 B.68,34,17,8,12,10 C.69,35,18,10 D.68,34,18,9,13,11,10 17.有以下程序#include<stdio.h>main(){charcl,c2;c1=A+8-4c2=A+8-5;printf(“%C,%d ”,cl,c2);}已知字母A的ASCIl码为65,程序运行后的输出结果是()。A.E,69B.D,69C.E,DD.输出无定值 18.以下程序的运行结果是______。#include<stdio.h>main(){inta[]:{1,2,3,4,5,6,7,8,9,10,11,12):int*p=a+5,*q=NULL:*q=*(p+5):printf(“%d%d ”,*p,*q);} A.运行后报错B.66C.612D.55 19.若以下选项中的变量已正确定义,则正确的赋值语句是()。 A.x1=26.8%3B.1+2=x2C.x3=0x12D.x4=1+2=3 20.有两个关系R和T如下: 则由关系R得到关系T的操作是()。A.选择B.投影C.交D.并 二、2.填空题(20题)21.设有以下程序,为使之正确运行,请在下划线中填入应包含的命令行。(注:try_me()函数在a:myfile.txt中有定义。) 【】 main() {printf(” ”); try_me(); printf(” ”);} 22.数据库系统中实现各种数据管理功能的核心软件称为【】。 23.一棵二叉树第六层(根结点为第一层)的结点数最多为______个。 24.阅读下面语句,则程序的执行结果是【】。 #include”stdio.h” main() {inta=-1,b=1,k; if((++a<0)&&!(b--<=0)) printf(“%d,%d ”,a,b); elseprintf(“%d,%d ”,b,a);} 25.当输入1、3、2时,程序运行的结果为【】。 #include<math.h> main() {floata,b,c,disc,x1,x2,p,q; do {scanf(“%f,%f,%f”,&a,&b,&c); disc=b*b-4*a*c; }while(disc<=0); p=-b/(2*a);q=sqrt(disc)/(2*a); x1=p+q;x2=p-q; printf(” x1=%6.2f;x2=%6.2f ”,x1,x2); } 26.下面程序的运行结果是:【】。 voidswap(int*a,int*b) {int*t; t=a;a=b;b=t; } main() {intx=3,y=5,*p=&x,*q=&y; swap(p,q); printf(“%d%d ”,*p,*q); } 27.按数据流的类型,结构化设计方法有两种设计策略,它们是变换分析设计和______。 28.表达式pow(2.8,sqrt(float(x)))值的数据类型为______型。 29.下列程序段中循环体的执行次数是______。 a=15; b=0; do{b+=2;a-=2+b;}while(a>=0); 30.一个项目具有一个项目主管,一个项目主管可管理多个项目,则实体“项目主管”与实体“项目”的联系属于【】。 31.下面程序的输出结果是【】。 #defineMAX3 inta[MAX]; main() {fun1();{un2(A);printf(” ”);} funl() {intk,t=0; for(k=0;k<MAX;k++,t++)a[k]=t+t; } fun2(intb[]) {intk; for(k=0;k<MAX;k++)printf(“%d”,*(b+k)); } 32.设一棵二叉树的中序遍历结果为ABCDEFG,前序遍历结果为DBACFEG,则后序遍历结果为【】。 33.按照逻辑结构分类,结构可以分为线性结构和非线性结构,栈属于______。 34.下列程序的输出结果是【】。 intt(intx,inty,ntcp,intdp) {cp=x*x+y*y; dp=x*x-y*y; } main() {inta=4,b=3,c=5,d=6; t(a,b,c,d); printf(“%d%d ”,c,d); } 35.下列程序的循环次数是______。 x=2; do {x=x*x;} while(!x); 36.结构化程序设计方法的主要原则可以概括为自顶向下、逐步求精、______和限制使用goto语句。 37.实现算法所需的存储单多少和算法的工作量大小分别称为算法的【】。 38.以下程序从终端读入数据到数组中,统计其中正数的个数,并计算它们之和,请填空。 #include<stdio,h> main() inti,a[20],sum,count; sum=count=0; for(i=0;i<20;i++)scanf(“%d”,【】); for(i=0;i<20;i++) {if(a[i]>0) {count++; sum+=【】; } prinff(“sum=%d,count=%d ”,sum,count); } 39.若有如下程序: sub(int*y) {while(–(*y)); printf(“%d”,(*y)–);} main() {intx=10; sub(&x); } 则程序运行后的输出结果是【】。 40.队列是限定在表的一端进行插入和在另一端进行删除操作的线性表。允许插入的一端称作______。 三、1.选择题(20题)41.在不同进制的四个数中,最小的一个数是() A.()2B.(75)8C.(37)10D.(2A)16 42.以下程序的功能是:按顺序读入10名学生4门课程的成绩,计算出每位学生的平均分并输出,程序如下。main(){intn,k;floatscore;sum,ave;sum=0.0;for(n=1;n<=10;n++){for(k=1;k<=4;k++){scanf(“%f”,&score);sum+=score;}ave=sum/4.0;printf(‘NO%d:%f ”,n,ave);}}上述程序运行后结果不正确,调试中发现有一条语句出现在程序中的位置不正确。这条语句是()。 A.sum=0.0; B.sum+=score; C.ave=sun/4.0; D.printf(“NO%d:%f ”,n,ave); 43.以下不能正确进行字符串赋初值的语句是 A.charstr[5]=”good!”; B.charstr[]=”good!”; C.char*srt=”good!”; D.charstr[5]={‘g’,’o’,’o’,’d’}; 44.下列程序的输出结果是______。#include<stdio.h>main(){union{intk;chari[2];}*S,a;s=&a;s->i[0]=0x39;s->i[1]=0x38;printf(“%x ”,s->k);} A.3839B.3938C.D. 45.软件系统生命周期的第一个阶段是______。 A.软件分析阶段B.软件设计阶段C.软件运行阶段D.软件维护阶段 46.在顺序表(3,6,8,10,12,15,16,18,21,25,30)中,用二分法查找关键码值11,所需的关键码比铰次数为______。 A.2B.3C.4D.5 47.下列程序的输出结果是______。main(){char*s=”1221″;intk=0,a=0,b=0;do{if(k%2==0){a=a+s[k]-‘0’;continue;}b=b+s[k]-‘0’;}while(s[++k]);printf(“k=%da=%db=%d ”,k,a,b);} A.k=3a=4b=3B.k=3a=3b=3C.k=4a=3b=3D.k=4a=2b=3 48.在C语言中,可以把整数以二进制形式存放到文件中的函数是() A.fprintf()函数B.fread()函数C.fwrite()函数D.fputc()函数 49.下列程序的输出结果是______。main(){inti=3;switch(i){case1:case2:printf(“%d”,i);case3:case4:break;default:printf(“OK”);}} A.0B.3C.OKD.没有任何输出 50.现有定义inta;doubleb;floatc;chark;,则表达式a/b+c-k值的类型为: A.intB.doubleC.floatD.char 51.在软件开发过程中,软件结构设计是描述______。 A.数据存储结构B.软件体系结构C.软件结构测试D.软件控制过程 52.下面是对宏定义的描述,不正确的是______。 A.宏不存在类型问题,宏名无类型,它的参数也无类型 B.宏替换不占用运行时间 C.宏替换时先求出实参表达式的值,然后代入形参运算求值 D.宏替换只不过是字符替代而已 53.对长度为n的线性表进行顺序查找,在最坏情况下所需要的比较次数为()。 A.log2nB.n/2C.nD.n+1 54.下列能正确定义且赋初值的语句是()。 A.intn1=n2=10; B.charc=32; C.floatf=f+1.1; D.doublex=12.3E2.5; 55.在结构化程序设计中,模块划分的原则是()。 A.各模块应包括尽量多的功能 B.各模块的规模应尽量大 C.各模块之间的联系应尽量紧密 D.模块内具有高内聚度,模块间具有低耦合度 56.若有说明:intn=2,*p=&n,*q=p;,则以下非法的赋值语句是 A.p=q;B.*p=*q;C.n=*q;D.p=n; 57.以下程序段中,能够通过调用函数fun(),使main()函数中的指针变量p指向一个合法的整型单的是()。 A.main(){int*p;fun(p);…}intfun(int*p){ints;p=&s;} B.main{int*pfun(&p);…}ihtfun(intp){ints;*p=&s;} C.main(){int*p;fun(&p);}intfun(intp){*p=(int*)malloc(2);} D.main(){int*p;fun(p);}intfun(int*p){p=(int*)malloc(sizeo(int));} 58.若有定义:inta[2][3];,以下选项中对a数组素正确引用的是 A.a[2][!1]B.a[2][3]C.a[0][3]D.a[1>2][!1] 59.内聚性是对模块功能强度的衡量,下列选项中,内聚性较弱的是() A.顺序内聚B.偶然内聚C.时间内聚D.逻辑内聚 60.有以下程序intf(intb[][4]){inti,j,s=0;for(j=0;j<4;j++){i=j;if(i>2)i=3-j;s+=b[i][j];}returns;}main(){inta[4][4]={{1,2,3,4},{0,2,4,6},{3,6,9,12),{3,2,1,0}};printf(“%d ”,f(a));}执行后的输出结果是 A.12B.11C.18D.16 四、选择题(20题)61.假设线性表的长度为n,则在最坏情况下,冒泡排序需要的比较次数为()。 A.log2nB.n2 C.n/2D.n(n-1)/2 62.执行下面的程序后,a的值为()。main{inta,b;for(a=1,b=1;a<=10;a++){if(b%3==l){b+=3;continue;}b-=5;}}A.7B.8C.9D.10 63.有以下程序: 程序运行后的输出结果是()。 A.0B.1C.2D.3 64. 65.以下选项中,不能作为合法常量的是()。 A.1.234e05B.1.234e+5C.1.234e0.5D.1.234e0 66. 67.一间工厂可有多个工人,则实体工厂和工人之间的联系是 A.一对一B.一对多C.多对一D.多对多 68.阅读下面程序,则执行后的结果为 #include”stdio.h” fun1() {intk=20; returnk; } fun2() {inta=15; returna;} fun3(inta,intb) {intk; k=(a-b)*(a+b); printf(“%d\n”,k);} main() {un3(fun1(),fun2());} A.0B.184 C.175D.编译不通过 69. 70.以下程序的输出结果是______。intx=3;main(){inti;for(i=1;i<x;i++)incre();}incre(){staticintx=1;x*=x+1;printf(“%d”,x);} A.33B.22C.26D.25 71.有以下程序程序的运行结果是()。 A.3B.1C.2D.0 72.第 11 题 若有定义:char*st=”howareyou”;下列程序段中正确的是 A.chara[11],*p;strcpy(p=a+1,&st[4]); B.chara[11];strcpy(++a,st); C.chara[11];strcpy(a,st); D.chara[],*p;strcpy(p=&a[1],st+2); 73. 有以下程序 #include<stdio.h> intfun(chars[]) {intn=0; while(*s<=9&&*s>=0){n=10*n+*s-o;s++;) return(n); } main {chars[10]={6,1,*,4,*,9,*,0,*); printf(“%d”,fun(s)); } 程序运行的结果是()。 A.9B.61490C.61D.5 74.已知inti=10;表达式“20-0<=i<=9”的值是()。 A.0B.1C.19D.20 75. 76.有以下程序:main{inta=1,b=3,C=5,*P;int*p1=&a,*p2=&b,*p3=&c;*p=*p1*(*p2);}执行后的输出结果是()。A.1B.2C.3D.4 77.对长度为n的线性表排序,在最坏情况下,比较次数不是n(n-1)/2的排序方法是 A.插入排序B.冒泡排序C.直接插入排序D.堆排序 78. 79.有下列程序: main() {inti,j,x=0; for(i=0,i<2;i++) {x++; for(j=0;j<=3;j++) {if(j%2)continue; x++: } x++: } printf(“x=%d\n”x); } 程序执行后的输出结果是()。 A.x=4B.x=8C.x=6D.x=12 80.fscanf函数的正确调用形式是 A.fscanf(文件指针,格式字符串,输出表列);B.fscanf(格式字符串,输出表列,文件指针); C.fscanf(格式字符串,文件指针,输出表列);D.fscanf(文件指针,格式字符串,输入表列); 五、程序改错题(1题)81.下列给定程序中,函数fun()的功能是:将P所指字符串中的所有字符复制到b中,要求在每复制3个字符之后插入1个空格。 例如,若给a输入字符串:“ABCDEFGHIJK”,调用函数后,字符数组b中的内容为:“ABCDEFGHIJK”。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。 试题程序: 六、程序设计题(1题)82.请编写函数proc,其功能是:将str所指字符串中除下标为偶数、同时ASCIl码值为奇数的字符外,其余的字符都删除,串中剩余字符所形成的一个新串放在t所指的数组中。例如,若str所指字符串中的内容为ABCDEFGl2345,其中字符B的ASCIl码值为偶数,所在素的下标为奇数,因此必须删除;而字符A的ASCIl码值为奇数,所在数组中的下标为偶数,因此不应当删除。依此类推,最后t所指的数组中的内容应是ACEG。 注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数proc的花括号中填人所写的若干语句。 试题程序: #include<stdlib.h> #include<conio.h> #include<stdio.h> #include<string.h> voidproc(char*str,chart[]) { } voidmain { charstr[100],t[100]; system(“CLS”); printf(” Pleaseenterstringstr:”); scanf(“%S”,str); proc(str,t); printf(” TheresultiS:%s ”,t); 参考答案 1.A解析:在C语言中,应当在定义函数时指定函数值的类型。凡不加类型说明的函数,默认按整型处理。在定义函数时对函数值说明的类型一般应该和return语句中的表达式类型一致。如果函数值的类型和return语句中的表达式类型不一致,则以函数值的类型为准,由系统自动进行转换,即函数类型决定返回值的类型。 2.D 3.C 4.C由题目的语句P=&a[1]可知,P指向a数组中下标为1的素“4”,又因为P为指针变量,所以P[x]与*(p+x)等价,因而在for循环语句中,第一次循环P[1]指向a数组中下标为2的素“6”,第二次循环p[2]指向a数组中下标为3的素“8”,所以y=6+8=14,因而选项C为正确答案。 5.B当b=1时,a=1,第二个if语句成立,此时a=6,返回for循环;当b=2,两个if语句都为假,此时a=3,再返回循环;当b=3,第二个if成立,此时a=8,继续循环;当b=4,第一个if成立,退出for循环体时b为4,a为8。 6.C 7.A:在一个无向图G中,若从顶点Vi到顶点Vj有路径相连,则称Vi和Vj是连通的。连通图是指任意两个结点之间都有一个路径相连。6个节点的无向图,至少要5个边才能确保是任意两个节点之间都有路径相连。下图是一种可能的连接方式:故本题选A。 8.A本题考查循环跳出的知识点:①break语句可以出现在switch循环体内及语句体内,它的作用是跳出循环体,不能用于其他的语句;②continue语句的作用是结束本次循环,即跳过循环体中下面尚未执行的语句,而接着判定循环条件是否成立,确定下一次循环是否继续执行,执行contiune语句不会使整介循环终止;③循环体内使用break语句会使循环提前终止;④从多层循环嵌套中退出时,可以使用90t0语句或者break语句。 9.D解析:C语言规定,对于二维数组,只可以省略第一个方括号中的常量表达式,而不能省略第二个方括号中的常量表达式:二维数组的一般定义格式是:类型说明符数组名[常量表达式][常量表达式]。 10.D 11.D 用来存放字符量的数组称为字符数组。字符数组也可以是二维或多维数组,对一个字符数组,如果不作初始化赋值,则必须说明数组长度,还可用printf函数和scarlf函数一次性输出/输入一个字符数组中的字符串,而不必使用循环语句逐个地输入/输出每个字符。通常用一个字符数组来存放一个字符串。所以D选项不正确。 12.D本题考查两个知识点,按位异或左移把b左移2位化成二进制c=a(b<<2)=a^(000010<<2)=a^001000=0000001^O01000=9,故选择D。 13.D 14.D在C程序中,可以用字符数组存放一个字符串,然后输出该字符串,也可以用字符指针指向一个字符串。 题目中用字符数组a[]来存放字符串’Itismine’,a为数组名,表示首素的地址,即字母I的地址。a+1表示数组中第二个素t的地址,选项A正确。当用字符串指针指向字符串时,只是将字符串的第一个素的地址赋给指针,当该指针指向其他字符串时,只需将该字符串的第一个素地址赋给这个指针即可,和字符串的长度没有关系,选项B也是正确的。指针变量的值为素的地址,和素具体的值没有关系,当指针指向不同的素时,存放的地址也会发生改变,故选项C是正确的。数组a初始化时没有指定数组长度,系统自动根据初值个数确定数组长度,题目中只是将10个有效字符存放到数组中,不能说明这个数组只能存放10个字符。 15.A 16.B 17.A本值输出两个值,%c为输出一个字母,0/4d输出一个数字。“A”的ASCIl码为65,再加4之后为69,也就是字母E,所以本题A正确。 18.A 19.C解析:赋值的一般形式为:变量名:表达式;,赋值的方向为由右向左,即将:右侧表达式的值赋给:左侧的变量,执行步骤是先计算再赋值。选项A中运算符%的运算对象必须为整数,而选项A中26.8不为整数,故选项A不正确;选项B将一个变量赋值给一个常量,这在C语言中是不允许的,故选项B不正确;选项D中也是将一个常量3赋值给一个常量,故选项D不正确;所以,4个选项中选项C符合题意。 20.A 21.#include<a:myfile.txt>#include<a:\myfile.txt>解析:本题考查了函数的存储分类的概念。如果没有特别说明,函数的存储范围是从定义函数的位置到文件的结尾,如果其他文件想使用这个函数,需要用#include文件包含命令将定义函数的文件包含进来。 22.数据库管理系统数据库管理系统(DBMS) 23.3232解析:二叉树的一个性质是,在二叉树的第k层上,最多有2k-1(k≥1)个结点。由此,26-1=32.所以答案为32。 24.101,0解析:与运算两边的语句必须同时为真时,结果才为真,当执行完if((++a<0)&&!(b–<=0))时,a,b的值已经发生了变化。 25.×1=-1.00;x2=-2.00 26.3535解析:在主函数中通过定义和赋初值使p和q分别指向了x和y,执行函数调用“swap(p,q)”,把p和q中的地址值传给了形参指针变量a和b,a和b分别指向了实参x和y。在函数swap()中交换了指针变量a和b的值,并没有交换a和b指向的实参的值,所以函数调用返回后x和y依然是原来的值。 27.事务分析设计事务分析设计解析:典型的数据流图有两种,即变换型和事务型。按照这两种类型把设计方法分为两类,即变换分析设计和事务分析设计。 28.floatfloat解析:在此表达式中x是float类型的变量,经过开方所得到的结果仍是float类型,再和2.8进行运算时,应该先将2.8转换成float类型再运算,最后结果仍是float型。 29.33解析:本题考查do…while语句形式: do循环体 while表达式 首先执行循环体语句,然后检测循环控制条件表达式的值,若为真,则重复执行循环体语句,否则退出循环。第1次循环:b+=2,b=2,a-=2+b,a=11;第2次循环:b=4,a=5;第3次循环:b=6,a=-3,此时再判断循环条件不满足,退出循环。 30.一对多一对多解析:由于一个项目主管可以管理多个项目,而一个项目只能有一个项目主管,“项目主管”这个实体与“项目”这个实体的管理关系属于一对多。 31.24 32.ACBEGFDACBEGFD解析:①确定根节点。在前序遍历中,首先防问根结点,因此可以确定前序序列DBACFEG中的第一个结点D为二叉树的根结点。 ②划分左子树和右子树。在中序遍历中,访问根结点的次序为居中,首先访问访问左子树上的结点,最后访问右子树上的结点,可知,在中序序列ABCDEFG中,以根结点D为分界线,子序列ABC在左子树中,子序列EFG在右子树中。如下图所示。 ③确定左子树的结构。对于左子树ABC,位于前序序列最前面的一个结点为了树的根结点,根据前序遍历结果,B为该了树的根结点,中序序列中位于该根结点前面的结点构成左子树上的结点子序列,位于该根结点后面的结点构成右子树上的结点子序列,所以A为该左子树的左结点,C为右结点。现在可确定左子树结构如下: ④确定右子树的结构。同理,可知右子树的结构。 本二叉树恢复的结果如图所示。 根据后序遍历的原则,该二叉树后序遍历的结果为ACBEGFD。 33.线性结构线性结构解析:数据的逻辑结构是指数据素之间的逻辑关系,分为线性结构和非线性结构。常见的线性结构有线性表、栈和队列等,常见的非线性结构有树、二叉树等。 34.5656解析:本题中a,b,c,d是实参,x,y,cp,dp是形参。C语言规定,实参变量对形参变量的数据传递是“值传递”,即单向传递,只由实参传给形参,而不能由形参传回来给实参。在内存中,实参单与形参单是不同的单。在调用函数时,给形参分配存储单,并将实参对应的值传递给形参,调用结束后,形参单被释放,实参单仍保留并维持原值。因此,程序的输出结果是56。 35.11解析:do…while语句的功能是:首先执行循环体语句,然后检测循环控制条件表达式的值,若为真,则重复执行循环体语句,否则退出循环;do…while语句的特点是先执行后判断,因此循环体至少执行1次.本程序中x=2不符合循环条件,所以只循环1次。 36.模块化模块化 37.空间复杂度和时间复杂度算法的复杂性是指对一个在有限步骤内终止算法和所需存储空间大小的估计。算法所需存储空间大小是算法的空间复杂性,算法的计算量是算法的时间复杂性。 38.&a[i]a[i]&a[i] a[i]解析:scanf的格式为:scanf(格式控制,地址表列),因此,第一处应该填写地址,由于是循环输入,所以填&a[i]。依据题意第二处应该填写a[i],以实现sum=sum+a[i]的求和。 39.00解析:while循环的条件为即当*y非零时执行循环,-(*y)先对*y的值减1,再使用*y的值,不再执行while循环时最后*y的值为0,输出函数中的(*y)–,是先使用*y的值再对*y减1,就是先输出0。 40.队尾队尾解析:在队列中,允许插入的一端叫做“队尾”,允许删除的一端叫做“队头”。 41.C 42.A解析:本题程序中使用了两层for循环,外层循环的作用是控制人数,循环一次是求一个人的成绩和,然后除以4得到平均成绩。每个人的成绩总和一开始时都必须清0,否则就会出现后面人的总成绩越来越大。“sum=O.O;”应在外层循环中。选项A正确。 43.A解析:本题考核的知识点是字符数组和字符指针变量的初始化。选项A定义了一个字符数组str,具有5个素,但赋初值的时候,初值个数却是6个(有一个’\0’),故选项A错误的;选项B定义了一个字符数组str并给它赋初值,由于省去了长度定义,长度由初值个数确定,相当于str[6],选项B正确;选项C定义了一个字符型指针变量并用一个字符串给它赋初值,使该字符型指针指向了该字符串,选项C正确;选项D是对字符型数组中单个素依次赋初值,选项D正确。所以,4个选项中A为所选。 44.A解析:在主函数定义了—个共用体变量a,及—个指向该变量的指针s。执行s->i[0]=0x39;s->i[1]=0x38;,将分别共用体的第—字节及第二字节存入十六进制数据0x39及0x38,由于在共用体中,变量共同占用存储空间,在输出s->k时,实际上就是输出开始写入的数据,而对于PC机,在存放血型数据时,低位在前,高位在后,故本题输出为3839。 45.A解析:软件工程的第一个阶段是软件分析阶段。软件分析阶段的工作是由软件分析员和用户一起来做的。软件分析的结果是分析人员写出的分析报告,该分析报告实际上就是软件系统的系统总体设计方案。 46.C解析:二分法查找是用关键码与线性表的中间素比较,然后根据比较结果来判断是结束查找,还是在左边或者右边子表按相同的方法继续查找。本题中,与11比较的关键码分别为15,8,10,12四个。 47.C解析:将数字字符串中下标值能被2整除的素值(字符)转换为数字累加到变量a中,将数字字符串中下标值不能被2整除的素值(字符)转换为数字累加到变量b中,循环结束时,a、b的值均为3,k是字符结束符的下标值,为4。 48.C 49.D解析:在题中,i的值为3,由于“case3:”后面没有break语句,所以继续向下执行“case4:”后面的语句,由于“case4:”后面的语句为break强行退出switch语句,所以,本题没有任何输出。 50.B解析:双目运算中两边运算量类型转换规律: 运算数1运算数2转换结果类型 短整型长整型短整型->长整型 整型长整型整型->长整型 字符型整型字符型->整型 有符号整型无符号整型有符号整型->无符号整型 整型浮点型整型->浮点型 在a/b的时候,a、b的类型不一致,根据类型转换规则,把整型转换成double类型,之后的加、减类似。转化规则为char,short->int->unsigned->long->double←float。 51.B解析:从工程管理解度来看,软件设计分两步完成:概要设计和详细设计。概要设计(又称结构设计)将软件需求转化为软件体系结构、确定系统级接口、全局数据结构或数据库模式。 52.C解析:宏替换实质上就是字符替代,它不可能进行计算,故C错误。带参数的宏与函数相比,宏在程序编译之前已经将代码替换到程序内,执行时不会产生类似于函数调用的问题,可以说不占用运行时间。 53.C本题考查的是顺序查找。在进行顺序查找过程中,如果线性表中的第一个素就是被查找素,则只需做一次比较就查找成功,查找效率最高;但如果被查找的素是线性表中的最后一个素,或者被查找的素根本就不在线性表中,则为了查找这个素需要与线性表中所有的素进行比较,这是顺序查找的最坏情况。所以对长度为n的线性表进行顺序查找,在最坏情况下需要比较n次。故本题答案为C。 54.B解析:C语言规定,可以在定义变量的同时给变量赋初值,称为变量初始化。在选项A)中在给n1和n2进行赋初值,但变量02没有定义;在选项C)中定义变量f时,不能在赋值表达式的右边出现变量f自身,所以选项C)错误:在选项D)用指数表达式的常量中,字母E后面的数应该为整数,而不应该为小数形式。因此,选项B)正确。 55.D解析:本题考查软件工程中软件设计的概念和原理。人们在开发计算机软件的长期实践中积累了丰富的经验,总结这些经验得到如下的启发式规则: (1)改进软件结构,提高模块独立性;通过模块的分解或合并,力求降低耦合提高内聚。低耦合也就是降低不同模块间相互依赖的紧密程度,高内聚是提高一个模块内各素彼此结合的紧密程度。 (2)模块的规模应适中。一个模块的规模不应过大,过大的模块往往是由于分解不够充分:过小的模块开销大于有益操作,而且模块过多将使系统接口复杂。因此过小的模块有时不值得单独存在。 (3)模块的功能应该可以预测,但也要防止模块功能过分局限。如果模块包含的功能太多,则不能体现模块化设计的特点:如果模块的功能过分的局限,使用范围就过分狭窄。 经过上述分析,本题的正确答案是选项D。 56.D解析:本题中首先定义了一整型变量n并赋初值为2,接着定义了一个整型指针变量p并让它指向n,接着又定义了一指向指针的指针变量q。选项A中给指针变量p赋值q,故这个赋值语句正确。选项B中*p=*q就是将*q的值赋给指针变量p所指向的变量n,故这个赋值语句不是非法的赋值语句。选项C中是将*q的值赋给变量n,故这个表达式不是非法的赋值语句。选项D中p为一指针变量,应该将一地址赋给它,而在此选项的表达式中将变量n而不是n的地址赋给它,故这个表达式不合法。 57.C解析:在选项A中,main()函数中定义了一个指针变量p,调用fun()函数时把p传给形参p,在函数中让p指向局部变量s,由于函数调用返回后,局部变量s将被释放,因此无法实现让实参p指向一个整型单,故选项A错误。选项B中实现的也是让实参p,指向一个在函数fun()中定义的局部变量s,因此也是错误的;选项C在函数fun()中分配了两个字节的内存单并把首地址赋值给形参p指向的变量,即main()函数的指针变量p中,由于整型变量占两个字节,因此,选项C是正确的;选项D在主函数中定义了一个指针地址变量p,并把指针变量的值传给形参变量p,在fun()函数中分配了一个整型单并把首地址赋值给行参指针变量p,由于C语言中变量作为参数是传值的,所以并没有改变对应实参指针变量的值,因此选项D也是错误的。所以,C选项为所选。 58.D解析:C语言中数组下标是从0开始的,所以二维数组a[2][3]的第一维下标取值为0、1;第二维的下标取值为0、1、2,因而选项A)、B)、C)都是错误的,选项D)表示数组素a[0][0]。 59.BB)【解析】内聚是从功能角度来衡量模块的联系,它描述的是模块内的功能联系。内聚有如下种类,它们之间的内聚度由弱到强排列: 偶然内聚——模块中的代码无法定义其不同功能的调用。但它使该模块能执行不同的功能,这种模块为巧合强度模块。 逻辑内聚——这种模块把几种相关的功能组合在一起,每次被调用时,由传送给模块的参数来确定该模块应完成哪一种功能。 时间内聚——这种模块顺序完成一类相关功能,比如初始化模块,它顺序地为变量置初值。 过程内聚——如果一个模块内的处理素是相关的,而且必须以特定次序执行,则称为过程内聚。 通信内聚——这种模块除了具有过程内聚的特点外,还有另外一种关系,即它的所有功能都通过使用公用数据而发生关系。 顺序内聚——如果一个模块内各个处理素和同一个功能密切相关,而且这些处理必须顺序执行,处理素的输出数据作为下一个处理素的输入数据,则称为顺序内聚。 功能内聚——如果一个模块包括为完成某一具体任务所必需的所有成分,或者说模块中所有成分结合起来是为了完成一个具体的任务,此模块则为功能内聚模块。 60.D解析:本题考核的知识点是二维数组的定义、赋初值和对;维数组素的引用。分析程序可知,函数f()中的for循环作用,是将数组前三行中的对角线上的素,即b[0][0]、b[1][1],b[2][2]和第一行的第四列素即b[0][3]累加到变量s中,然后将s的值返回。在主函数中首先定义了一个4行4列的二维数组,接着通过输出语句输出函数f(a)的返回值。调用f(a)的返回值为a[0][0]+a[1][1]+a[2][2]+a[0][3]=1+2+9+4=16。所以,4个选项中选项D符合题意。 61.D冒泡排序;依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。 62.D本题考查continue的用法,continue语句的作用是结束本次循环,直接进行下次循环。所以在程序中,只有当a=10时,才退出循环,故选择D选项。 63.B第一次执行外循环i的值为1,满足条件,判断第一次内循环,j的值为3,不满足条件,跳出内循环。第二次执行外循环i的值为2,同理也不满足内循环条件,跳出内循环。第三次执行外循环i的值为3,此时进入内循环判断条件时,条件成立,执行m=m%j,m的值为1,跳出内循环,跳出外循环打印m的值。 64.B 65.CC语言的语法规定,字母e(E)之前必须有数字,且e(E)后面的指数必须是整数,而选项c)中,e(E)后面的指数是小数,所以不合法。 66.D 67.B常见的实体之间的联系有一对一、一对多、多对一、多对多。如果对于实体集A中的每一个实体(工厂),实体集B中有n个实体(工人)(n≥0)与之联系,反之,对于实体集B中的每一个实体(工人),实体集A中至多只有一个实体(工厂)与之联系,则称实体集A与实体集B有一对多联系。 68.C本题主要考查函数的嵌套调用。在本题中,程序首先定义了三个子程序即函数fun1、函数fun2和函数fun3。 从程序中可以看出,函数fun1和函数fun2都很简单,分别定义一个整型变量,并赋初值,然后返回这个变量。 在函数fun3中,函数带有两个形参,然后定义一个整型变量k来保存(a-b)*(a+b)运算的结果,最后输出k的值。 在主函数中,直接调用函数fun3,调用该函数的同时调用函数fun1和fun2,用函数fun1和fun2的返回值作为函数fun3的形参,此时形参a和b的值分别是20和15。执行(a-b)*(a+b);语句结果为5*35=175,将该结构保存至变量k中,因此,本题程序的最终输出结果是175,正确答案选C。 69.A 70.C解析:C语言规定如果全局变量与局部变量同名,则在局部变量的作用域内全局变量不起作用。程序开头定义的变量x为全局变量,函数i
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/77282.html