版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2021年广东省珠海市全国计算机等级考试C语言程序设计真题(含答案)学校:________班级:________姓名:________考号:________
一、单选题(20题)1.有以下程序:#include<stdio.h>intshow(char*str){while(*str){putchar(*str+1);str++;}return*str+1;}main(){printf(“%d\n”,show(“ABCD”));}程序运行后的输出结果是()。
A.ABCD0B.BCDE0C.BCDE1D.ABCD1
2.待排序的关键码序列为(33,18,9,25,67,82,53,95,12,70),要按关键码值递增的顺序排序,采取以第一个关键码为基准元素的快速排序法,第一趟排序后关键码33被放到第()个位置。
A.3B.5C.7D.9
3.
4.
5.要求通过while循环不断读入字符,当读入字母N时结束循环,若变量已正确定义,下列正确的程序段是()。
A.while((ch=getchar())!='N')printf("%c",ch);
B.while(ch=getchar()!='N')printf("%c",ch);
C.while(ch=getchar()=='N')printf("%c",ch);
D.while((ch=getchar())=='N')printf("%c",ch);
6.
7.以下程序intaa[3][3]={{2},{4},{6}};main(){inti,*p=&aa[0][0];for(i=0;i<2;i++){if(i==0)aa[i][i+1]=*p+1;else++p;printf("%d",*p);}}的输出是________。
A.23B.26C.33D.36
8.数据库DB、数据库系统DBS、数据库管理系统DBMS之间的关系是()。
A.DB包括DBS和DBMSB.DBMS包括DB和DBSC.DBS包括DB和DBMSD.没有任何关系
9.printf函数中用到格式符%5s,其中数字5表示输出的字符串占用5列。如果字符串长度大于5,则输出按方式()。
A.从左起输出该字串,右补空格B.按原字符长从左向右全部输出C.右对齐输出该字串,左补空格D.输出错误信息
10.请选出可用作C语言用户标识符的一组()。
A.voiddefineWORD
B.a3_b3_123IF
C.For_abccase
D.2aDOsizeof
11.语句:“printf("%d",(a=)&&(b=-2));”的输出结果是()。
A.无输出B.结果是不确定C.-1D.1
12.若有定义“inta,b,c;”以下程序段的输出结果是()。a=11;b=3;c=0;printf(“%d\n”,c=(a/b,a%b));
A.2B.0C.3D.1
13.下列程序的输出结果是______。#include<stdio.h>main(){doubled=3.2;intx,y;x=1.2;y=(x+3.8)/5.0;printf("%d\n",d*y);}
A.3B.3.2C.0D.3.07
14.若在线性表中采用折半查找法查找元素,该线性表应该()A.元素按值有序B.构采用顺序存储结C.元素按值有序且采用顺序存储结构D.元素按值有序且采用链式存储结构
15.有下列程序:main{charp[]={a,h,c},q[]="a";printf("%d%d\n".sizeof(P),sizeof(q));}程序运行后的输出结果是()。A.44B.33C.34D.43
16.以下叙述中正确的是()。
A.预处理命令行必须位于C源程序的起始位置
B.在C语言中,预处理命令行都以“#”开头
C.每个C程序必须在开头包含预处理命令行:#include
D.C语言的预处理不能实现宏定义和条件编译的功能
17.在非线性结构中,每个结点()。
A.无直接前趋
B.只有一个直接前趋和个数不受限制的直接后继
C.只有一个直接前驱和后继
D.有个数不受限制的直接前驱和后继
18.请选出以下程序的输出结果()#include<stdio.h>sub(x,y,z)intx,y,*z;{*2=y-x;}main(){inta,b,c;sub(10,5,&A);sub(7,a,&B);sub(a,b,&C);printf("%d,%d,%d\n",a,b,C);}
A.5,2,3B.-5,-12,-7C.-5,-12,-17D.5,-2,-7
19.若在以下定义和赋值语句,则才s数组的第i行第j列(假设i,j已正确说明并赋值)元素地址的合法引用为ints[2][3]={0},(*p)[3];p=s;
A.*(*(p+i)+j)B.*(p[i]+j)C.(p+i)+jD.(*(p+i))[j]
20.树是结点的集合,它的根结点数目是()。
A.有且只有1B.1或多于1C.0或1D.至少2
二、2.填空题(20题)21.注释说明了程序的功能,它分为【】注释和功能性注释。
22.有以下程序:
voidf(inty,int*x)
{y=y+*x;*x=*x+y;}
main()
{intx=2,y=4;
f(y,&x);
ptintf("%d%d\n",x,y);
}
执行后输出结果是【】。
23.下列程序段是从键盘输入的字符中统计小写字母的个数,用换行符结束循环。请填空。
intn=0,c;
c=getchar();
while(c!='\n')
{if(______)
n++;
}
24.有以下程序:
#include<stdio.h>
main()
{charch1,ch2;intn1,n2;
ch1=getchar();ch2=getchar();
n1=ch1-'0';n2=n1*10+(ch2-'0');
printf("%d\n",n2);;
}
程序运行时输入12<回车>,执行后输出结果是【】。
25.以下程序用来输出结构体变量ex所占存储单元的字节数,请填空。
structst
{charname[20];doublescore;};
main()
{structstex;
pfintf("exsize:%d\n",sizeof(______));}
26.己定义charch='$';inti=l,j;,执行j=!ch&&ii++以后,i的值为【】。
27.设有以下定义和语句,则*(*(P+2)+1)的值为【】。
int[3][2]={10,20,30,40,50,60},(*p)[2];
p=a;
28.下列程序段的输出结果是【】。
intn='c';
switch(n++)
{default:printf("error");break;
case'a':
case'A':
case'b':
case'B':printf("good");break;
case'c':case'C':printf("pass");
case'd':case'D':printf("warn");
}
29.下面程序的运行结果是______。
#defineN10
#defines(x)x*x
#definef(x)(x'x)
main()
{
inti1,i2;
i1-1000/s(N);i2=1000/f(N);
printf("%d%d\n",i1,i2);
}
30.以下程序给指针p分配三个double型动态内存单元,请填空。
#include<stdio.h>
#include<stdlib.h>
main()
{double*p;
p=(double*)malloc(【】);
p[0]=1.5;p[1]=2.5;P[2]=3.5;
printf("%f%f%f\n",p[0],p[1],p[2]);
}
31.一个项目具有一个项目主管,一个项目主管可管理多个项目,则实体“项目主管”与实体“项目”的联系属于______的联系。
32.输出若干学生3门课程的成绩。
#include<stdio.h>
【】
structstudent
{intnum;
floatscore[3];
}
main()
{inti=0,n;
floata[3];
【】*ptr[200];
printf("请输入学生学号和3门课成绩,学号为0表示数据输入结束\n");
do
{ptr[i]=(structstudent*)malloc(sizeof(structstudent));
scanf("%d%f%f%f",&ptr[i]->num,&a[O],&a[1],&a[2]);
ptr[i]->score[O]=a[O];
ptr[i]->score[1]=a[1];
ptr[i]->score[2]=a[2];
if(【】)break;
i++;
}while(1);
n=i-1;
【】;
for(i=O;i<=n;i++)
printf("%-6d%.1f%.1f%.1f\n",ptr[i]->num,ptr[i]->score[0],
ptr[i]->score[1],ptr[i]->score[2]);}
33.下面程序的功能:将字符数组a中下标值为偶数的元素从小到大排列,其他元素不变。请填空。
#include<stdio.h>
#include<string.h>
main()
{chara[]="clanquage",t;
inti,j,k;
k=strlen(A);
for(i=0;i<=k-2;i+=2)
for(j=i+2;j<k;j+=2)
if(【】)
{t=a[i];a[i]=a[j];a[j]=t;}
puts(A);
printf("\n");
}
34.下列程序的输出结果是______。
main()
{inti=0,a=0;
while(i<20)
{for(;;)
{if((i%10)==0)break;
elsei--;}
i+=11;
a+=i;
}
printf("%d\n",A);
}
35.表示“整数x的绝对值大于5”时值为“假”的C语言表达式是______。
36.以下程序中,for循环体执行的次数是【】。
#defineN2
#defineMN+1
#defineKM+1*M/2
main()
{
inti;
for(i=1;i<K;i++)
{…}
…
}
37.栈的3种基本运算是:入栈、退栈和______。
38.下面程序的输出走【】。
main()
{enumem{em1=3,em2=1,em3};
char*aa[]={"AA","BB","CC","DD"};
printf("%s%s%s\n",aa[em1],aa[em2],aa[em3]);
}
39.以下程序的功能是调用函数fun计算:m=1-2+3-4+…+9-10,并输出结果。请填空。
intfun(intn)
{intm=0,f=1,i;
for(i=1;i<=n;i++)
{m+=i*f;
f=______;
}
returnm;
}
main()
{printf("%d\n",【】);}
40.下列程序的输出结果是______。
#include<stdio.h>
main()
{intx=3,y=2,z=1;
if(x<y)
if(y<0)z=0;
elsez+=1;
printf("%d\n",z);
}
三、1.选择题(20题)41.以下对一维实型数组a的正确定义的是______。
A.floata(10);
B.intn=10;floata[n];
C.intn;floata[n];scanf("%d",&n);
D.#defineSIZE10floata[SIZE];
42.有如下程序
main()
{charch[2][5]={"6937","8254"},*p[2];
inti,j,s=0;
for(i=0;i<2;i++)p[i]=ch[i];
for(i=0;i<2;i++)
for(j=0;p[i][j]>′\0′;j+=2)
s=10*s+p[i][j]-′0′;
printf("%d\n",s);}
该程序的输出结果是
A.69825B.63825C.6385D.693825
43.下面程序输出的结果是
main()
{inti;
inta[3][3]={1,2,3,4,5,6,7,8,9};
for(i=0;i<3;i++)
printf("%d",a[2-i][i]);}
A.159B.753C.357D.591
44.下列选项中不会引起二义性的宏定义是()。
A.#defineS(x)x*x
B.#defineS(x)(x)*(x)
C.#defineS(x)(x*x)
D.#defineS(x)((x)*(x))
45.有以下程序structSTU{charname[10];intnum;intScore;{main(){structStus[5]={{"YangSan",20041,703},{"LiSiGuo",20042,580},{"WangYin",20043,680},{"SunDan",20044,550},{"Penghua",20045;537}},*p[5],*t;inti,j;for(i=0;i<5;i++)p[i]=&s[i];for(i=0;i<4;i++)for(j=i+1;j<5;j++)if(p[i]->Score>p[j]->Score){t=p[i];p[i]=p[j];p[i]=t;}printf("%d%d\n",s[1].Score,p[1]->Score);}执行后输出结果是
A.550550B.680680C.580550D.580680
46.下列数组说明中,正确的是______。
A.intarray[][4];
B.intarray[][];
C.intmarray[][][5];
D.intarray[3][];
47.执行下面程序的正确结果是()。main(){floata=1.9;switch(a){case0:printf("0000");case1:printf("1111");case2:printf("3333");}printf("%f",a);}
A.1.9B.111133331.9C.33331.9D.1111233331.9
48.语句int(*ptr)()的含义是()。
A.ptr是一个返回值是血的函数
B.ptr是指向int型数据的指针变量
C.ptr是指向函数的指针,该函数返回一个血型数据
D.ptr是一个函数名,该函数的返回值是指向int型数据的指针
49.下列说法中错误的是A.A.只能在循环体内使用break语句
B.在循环体内使用break语句可以使流程跳出本层循环体,从而提前结束本层循环
C.在while和do…while循环中,continue语句并没有使整个循环终止
D.continue的作用是结束本次循环,即跳过本次循环体中余下尚未执行的语句,接着再一次进行循环判断
50.在软件生命周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段是()。A.概要设计B.详细设计C.可行性分析D.需求分析
51.检查软件产品是否符合需求定义的过程称为()。
A.确认测试B.集成测试C.验证测试D.验收测试
52.若要说明x是整型变量,p为指向x的整型指针变量,则正确的说明是______。
A.ihtx,*p=&x;
B.intx,p=&x;
C.intx,*p=*x;
D.int*p=&x,x;
53.下面程序的功能是输出以下形式的金字塔图案:****************main(){inti,j;for(i=1;i<=4;i++;){for(j=1;j<=4-i;j++)printf("");for(j=1;;j<=________;j++)printf("*");printf("\n");}}在下划线处应填入的是______。
A.iB.2*i-1C.2*i+1D.i+2
54.下列程序的输出结果是#include"stdio.h”"main(){inti,a=0,b=0;for(i=1;i<10;i++){if(i%2==0){a++;continue;}b++;}printf("a=%d,b=%d",a,b);}
A.a=4,b=4B.a=4,b=5C.a=5,b=4D.a=5,b=5
55.若有以下说明和定义typedeint*INTEGER;INTEGERp,*q;以下叙述正确的是
A.p是int型变量
B.p是基类型为int的指针变量
C.q是基类型为int的指针变量
D.程序中可用INTEGER代替int类型名
56.若有下列说明和语句,则对结构体变量st中成员i的引用方式不正确的是()。Structstu{inti;intname;}st,*p;p=&st;
A.st.iB.*p.iC.(*p).iD.p->i
57.在结构化程序设计方法中,下面哪种内聚的内聚性最弱?
A.逻辑内聚B.时间内聚C.偶然内聚D.过程内聚
58.fscanf函数的正确调用形式是()。
A.fscanf(文件指针,格式字符串,输出表列);
B.fscanf(格式字符串,输出表列,文件指针);
C.fscanf(格式字符串,文件指针,输入表列);
D.fscanf(文件指针,格式字符串,输入表列);
59.可在C程序中用作用户标识符的一组标识符是()。
A.voiddefineWORD
B.as_b3_123If
C.For-abccase
D.2cDOSIG
60.算法的有穷性是指A.算法程序的运行时间是有限的
B.算法程序所处理的数据量是有限的
C.算法程序的长度是有限的
D.算法只能被有限的用户使用
四、选择题(20题)61.下列程序的输出结果是()。#include<stdio.h>main{inta[2][3]={{1,2,3),{4,5,6)),(*p)[3],i;p=a;for(i=0;i<3;i++){if(i<2)p[1][i]=p[1][i]-1;elsep[1][i]=1;}printf("%d\n",a[o][1]+a[1][1]+a[1][2]);}A.8B.7C.12D.9
62.下列对于软件测试的描述正确的是()。
A.软件测试的主要目的是发现程序中的错误
B.软件测试的目的是证明程序是否正确
C.软件测试的目的是使程序运行结果正确
D.软件测试是证明软件中没有错误
63.
64.下列选项中非法的字符常量是()。
A.'\t'B.'\039'C.','D.'\n'
65.有以下程序:
程序运行后的输出结果是()。
A.let=4B.m=2C.m=6D.m=5
66.设“intx=2,y=1;”,则表达式(!x||Y--)的值是()。
A.0B.1C.2D.-1
67.下面四个选项中,均是不合法的用户标识符的选项是()。
A.
B.
C.
D.
68.下面叙述中,正确的是
A.C语言编译时不检查语法B.C语言的子程序有过程和函数两种
C.C语言的函数可以嵌套定义D.C语言的函数可以嵌套调用
69.有以下程序:
程序运行后的输出结果是()。
A.0,0B.1,0C.3,2D.1,2
70.有定义语句:“int*p[4];”,以下选项中与此语句等价的是()。
A.intp[4];B.int**P;C.int*(p[4]);D.int(*p)[4];
71.
若有定义和语句:
int**pp),*P,a=20,b=10;
pp=&p;p=&a;p=&b;printf("%d,%d\n",*P,*PP);
则输出结果是()。
A.20,10B.20,20C.10,20D.10,10
72.信息隐蔽的概念与下述哪一种概念直接相关()。
A.软件结构定义B.模块独立性C.模块类型划分D.模块耦合度
73.下面的函数调用语句中func函数的实参个数是
func(f2(A1,A2),(A3,A4,A5),(A6,max(A7,A8)));
A.3B.4C.5D.8
74.
75.以下不合法的字符常量是()。
A."、、"B.’\”’C.’\018’D.\xcc"
76.有以下程序
A.357B.753C.369D.751
77.
78.
有以下程序段:
intx=3;
do
{printf("%d",x-=2);)
while(!(--x));
其输出结果是()。
A.1B.30C.1-2D.死循环
79.设有定义:
doublea[10],*s=a;
以下能够代表数组元素a[3]的是()。
A.($s)[3]B.}(s+3)C.*s[3]D.}s+3
80.有以下程序
main()
{
inta[3][2]={0},(*ptr)[2],i,j;
for(i=0;i<2;i++)
{
ptr=a+i;
scanf("%d",ptr);
ptr++;
}
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
printf("%2d",a[i][j]);
printf("\n");
}
}
若运行时输入:123<回车>,则输出结果是
五、程序改错题(1题)81.程序改错题(共l8分)下列给定程序中,函数fun的功能是:传人一个整数m,计算如下公式的值。例如,若输入5,则应输出一0.283333。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:
六、程序设计题(1题)82.使用VC++2010打开考生文件夹下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,str2,n); printf(“Thenewstringis:%s\n”,str2);}
参考答案
1.C函数putchar每次输出一个字符。表达式“*str+1”将对字符加1,因此字符串“ABCD”的每个字符都加1,字符串结束标识‘\\0’也会加1,输出1,结果为BCDE1。故本题答案为C选项。
2.BB.【解析】快速排序的基本思想是:从表中选取一个元素(如本题中的33),将表中小于此元素的移到前面,大于此元素的移到后面,结果把线性表分割成两部分(两个子表),此元素插入到其分界线的位置处。然后分别对两个子表再次分割……本题中33作为分割的中界线,第一趟排序后排在比它小的18、9、25、12后面。
3.B
4.A
5.A解析:while循环的执行过程如下:(1)计算while后面圆括号中表达式的值.当值为非0时,执行步骤(2);当值为0时,执行步骤(4)。(2)执行循环体一次。(3)转去执行步骤(1)。(4)退出循环。在选项A)中,表达式(ch=getchar())!='N'表示输入的字符不等于N,如果这个条件表达式成立,则执行循环体,打印输出输入的字符。如果这个条件表达式不成立,即输入的字符等于N,则退出循环.所以选项A)为正确答案。
6.C
7.A解析:观察题目,可以发现,*p=&aa[0][0]语句实际是将数组aa的首地址赋给了指针变量p,将i的值带入for循环中,i=0时,aa[0][1]=3,*p=2;*p输出的是指针所指向的数组值,此时p所指向的是aa[O][0],输出2,而i=1时执行了++p操作使指针向后移动指向了aa[0][1],所以在输出*p时应为3。
8.CC。【解析】数据库系统(DBS)由数据库(DBS)、数据库管理系统(DBMS)、数据库管理员、硬件平台和软件平台五个部分组成,可见DB和DBMS都是DBS的组成部分。
9.B
10.B解析:C语言规定,标识符只能由字母、数字和下划线三种符号组成,而且第一个字符必须是字母或下划线。A)中的void与C语言的关键字重名,不合法;C)中的case和C语言的关键字重名,不合法;D)中的2a是数字开头,而且sizeof与C语言的关键字重名,不合法。
11.D因为在逻辑表达式中,两边的赋值表达式都成立,即值为1,故选择D选项。
12.AC语言中,逗号运算符可以把两个以上(包含两个)的表达式连接成一个表达式。逗号运算符的优先级是所有运算符中级别最低的,逗号运算符保证左边的子表达式运算结束后才进行右边的子表达式的运算。也就是说,逗号运算符是一个序列点,其左边所有子表达式运算都结束后,才对其右边的子表达式进行运算,并以最右边表达式的值作为整个逗号表达式的值。因此c的值为“a%b”,即“11%3=2”。故本题答案为A选项。
13.C
14.C
15.C语句charp[]={a,b,c);定义了一个一维字符数组p[],并用3个字符a,b,c进行了初始化;而语句q[]="abe"表示定义了一个一维字符数组,并用一个字符串常量"abc"进行了初始化。在C语言中,系统在每个字符串常量的最后自动加入一个字符\0作为字符串的结束符。所以函数sizeof(q)=4,而sizeof(p)=3,因而选项C为正确答案。
16.B本题是对基本知识点的理解,预处理命令行的位置没有规定,只是习惯写在起始位置而已,当需要时才用#include<stdio.h>头文件,预处理的作用就是实现宏定义和条件编译。
17.D
18.B
19.A解析:p+i是数组s的第i+1行的首地址,而*(p+i)则是数组第i+1行第1列的元素的地址,*(p+i)+j则是第i+1行的第j+1列的地址,*(*(p+i)+j)引用的是数组元素s[i][j]的值。注意:通过建立一个指针数组来引用二维数组元素。
20.A树形结构是一类重要的非线性数据结构。树是n(n≥0)个结点的集合,对应任意一棵非空树,它具有以下几点重要的性质。
①有且仅有一个特定的称为根的结点。
②当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,…,TM,其中每一个集合本身又是一棵树,称为子树。
因此,本题的正确答案有且只有一个。
21.序言性序言性解析:注释一般分为序言性注释和功能性注释。
22.8484解析:“值传递”指实参将值传递给形参后,实参与形参再无联系。也就是说对行参的改变将不影响实参;地址传递是指地址或数组名作为形参时的参数传递,这种情况下对形参的改变将对实参产生影响。函数f(y,*x)的作用是让y的值加上指针x所指向变量的值,让指针x所指向变量的值加上y的值。由于形参y是传值的,形参x是传地址的,故调用该函数后,作为实参y的值将不改变,而实参x的值将改变,故最后输出的y值为4,而x的值为8。
23.c>='a'&&c<='z'c>='a'&&c<='z'解析:小写字母在内存中以ASCII的形式存入,且从a到z依次递增,所以可以直接用c>='a'&&c<='z'判断是不是小写字母;c!='\\n'判断是用换行符结束循环。
24.1212解析:字符类型的数据在内存中以相应的ASCII码存放,在C语言中,字符数据可以等价为与其相应的ASCII码的整数,还可以作为整数参加运算。在本题中,n1=ch1-'0'='1-'0'=49-48=1,n2=n1*10+(ch2-'0')=1*10+('2'-'0')=10+2=12,所以,最后输出为12。
25.
26.11解析:本题中的ch是一个字符变量,其初始值为'$'(非0值即为真),所以!ch的结果为假,此时&&右边的i++被“短路”,即不会被计算。由此可见,i的值不会改变,故本题应该填1。
27.6060解析:本题定义了一个3行2列的二维数组a,并定义了一个指向两个元素的一维数组指针p,让p指向二维数组a的首行。*(*(p+2)+1)是引用a[2][1],其值是60。
28.passwarnpasswarn解析:n++是在执行完其所在的语句后再加1,因此,在执行case的时候,n的值依然为'c',执行case'c'后面的语句,先打印出“pass”;在执行完case'c'后,未遇到break跳出switch,便接着执行下面的语句,又打印出warn。所以此题输出结果是passwarn。
29.100010100010解析:首先将程序中的宏替换掉,两处的宏替换后分别为i1=1000/10*10和i2=1000/(10*10),即i1=1000,i2=10,所以最后输出的i1和i2的值分别为1000和10。
30.3*sizeof(double)或243*sizeof(double)或24解析:观察程序可知,本题要求用malloc函数分配三个double型的动态内存单元。
31.1对多(或1:N)1对多(或1:N)
32.#include<alloc.h>structstudentptr[i]->num==Ofree(ptr[i])#include<alloc.h>\r\nstructstudent\r\nptr[i]->num==O\r\nfree(ptr[i])
33.a[j]<a[i]a[j]<a[i]解析:本题考查排序算法,题目中通过双循环嵌套来实现,外层循环跳出待排序的元素,内层循环具体实现a[i]到a[k-2]之间偶数下标元素的排序,每次将最小的放在a[i]中。所以空中填a[j]<a[i]。
34.3232解析:while(表达式)的功能是:首先计算表达式的值,若为真,则执行循环体语句,执行完毕,再计算表达式的值,若仍为真,则重复执行循环体语句,直到表达式的值为假时,结束while语句的执行,继续执行while语句后面的语句:i=0时满足循环条件,也满足if的条件,执行语句得i=11,a=11,第2次循环不满足if的条件,执行i--,i=10,执行i+=11;a+=i后,得i=21,a=32,不满足i<20,循环结束。
35.(x>-5)&&(x<5)(x>-5)&&(x<5)解析:本题考查基本逻辑表达,“整数x的绝对值大于5”时值为“假”,即整数x的绝对值小于等于5,也就是整数x要大于等于-5且要小于等于5。这里“且”用“与(&&)”表示,所以C语言表达式为:(x>-5)&&(x<5)。
36.44解析:将程序中所有的宏替换掉可得:M=2+1,K=2+1*2+1/2=4,所以for循环共循环了K-1+1次,即4-1+1共4次。
37.读栈顶元素读栈顶元素解析:栈的基本运算有3种:入栈、退栈和读取栈顶元素。其中,入栈是指在栈顶插入一个新的元素;退栈是指取出栈顶元素并赋值给一个变量;读栈顶元素是将栈顶元素赋值给一个指定的变量,不删除栈顶元素。
38.DDBBCCDDBBCC解析:C语言对枚举的定义规定:在枚举中声明的各个枚举元素,如果没有明确指出某个枚举元素的值,它的上一个元素存在并有明确值的情况下,这个枚举元素的值为其上一个元素的值+1。在本题中,没有明确说明枚举元素em3的值,则em3=em2+1=1+1=2,进而可知,在printf()打印函数中,要打印的数组元素是aa[3]、aa[1]、aa[2],因此最后的打印结果应当为“DDBBCC”。
39.fun中的答案为-fmain函数中的答案为fun(10)fun中的答案为-f,main函数中的答案为fun(10)解析:根据题意可知函数fun的功能是计算12+3-4+…+n的和,所以空格处应填入-f,main函数中输出1-2+3-4+…+9-10的结果,所以函数的实参为10,函数调用为fun(10)。
40.11解析:ifelse语句的功能是:若表达式的值为真,执行语句1,并跳过其他语句,执行ifelse语句的下一条语句,若表达式的值为假,跳过语句1,执行语句2,依次往下判断。题中,x=3,y=2,第一个if语句的控制条件x<y就不满足,又没有与之配对的else语句,所以直接执行printf语句,在整个过程中变量z的值都没发生变化。
41.D解析:C语言不可动态定义数组,必须是整型常量,选项D中的SIZE是符号常量,也是常量,值为10,所以可以用符号常量来定义数组的长度。
42.C解析:该题稍微难一点。主要要搞清楚以下几点:①定义了一个指针数组char*p[2]后,程序中第一个循环for(i=0;i<2;i++)p[i]=ch[i];的作用,是使指针数组的p[0]元素(它本身是一个指针)指向了二维数组ch的第一行字符串,并使指针数组的p[1]元素指向二维数组ch的第二行字符串,这样,就使指针数组p和二维数组ch建立起了一种对应关系,以后对二维数组ch的某个元素的引用就有两种等价的形式:ch[i][j]或p[i][j]。②对二维数组ch的初始化,使其第一行ch[0]中存入了字符串'6937',第二行ch[1]中的内容为字符串'8254'。③程序中第二个循环中的循环体s=s*10+p[i][j]-\'0\';的功能是这样的,每执行一次,将s中的值乘以10(也即,将s中的数值整体向左移动一位,并在空出来的个位上添一个0),再将当前p[i][j]中的字符量转换为相应的数字,然后把这个数字加到s的个位上。④注意到内层循环的循环条件p[i]\ue009[j]>\'\\0\'是指p[i][j]中的字符只要不是字符串结束标志\'\\0\'就继续循环,语句j+=2;是使下标j每次增加2,也即一个隔一个地从p[i]所指向的字符串中取出字符。经过上述解析后,不难看出,该程序首先从p[0]所指向的字符串'6937'中一个隔一个地取出字符,分别是\'6\'和\'3\',然后从p[1]所指向的字符串'8254'中一个隔一个地取出字符,分别是\'8\'和\'5\',同时经过转换和相加运算后,结果s中的值应该是6385。
43.B解析:本题用循环的方法考查对数组概念的掌握。首先,当i=0时,数组中的位置是a[2][0]=7,当然,如果用排除法,就不用考虑后面的循环,因为在4个选项中,第1个数为7的选项只有B)。本题执行第2次循环时,i的值为1,则pfintf函数中的数组指向为a[1][1]=5,依次循环,可求出答案。
44.D本题考查参数的宏替换。为避免二义性有些参数表达式必须加括号,否则在实参表达式替换时,会出现错误。例如x为(m+n)时替换A:m+n*m+n,所以选项D最符合条件。
45.C解析:本题中首先定义了结构体类型STU,该结构体由一个长度为10的字符数组、两个整型变量num和Score组成。在主函数中,定义了一个长度为5的结构体数组s并赋初值,一个指针数组p和一个指针变量t,接着将数组s中各元素的地址依次赋给指针数组p中的各成员。然后通过两个for循环将数组p按Score的值从小到大的顺序排列。因此最后输出的p[1]->Score的值为550,而数组s[1].Score的值为580。
46.A
47.B解析:switch语句只接受int型变量,如果不是则隐式转换为int,由于C语言中float到int的转换是截尾取整,故在switch中从case1:标号处开始执行,首先输出4个1。此时又因为case2:之前并没有break;之类的跳转语句,所以case2:标号处的语句也被执行,输出4个3。最后以默认的浮点数格式输出变量a,变量a在switch语句中并未被改变,故最后输出为1.900000,所以应该选择B。
48.C解析:本题考查的是指向函数的指针。函数指针定义的基本格式为:类型标识符(指针变量名)()。“类型标识符”为函数返回值的类型。
49.A解析:只能在循环体内和switch语句体内使用break语句,当break出现在循环体中的switch语句体时,其作用是跳出该switch语句体。当break出现在循环体中,但不在switch语句体中时,则在执行break后,跳出本层循环体。continue语句的作用是,跳过本次循环体中余下尚未执行的语句,接着再一次进行循环的条件判定。
50.D通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期。也就是说:软件产品从考虑其概念开始,到该软件产品不能使用为止的整个时期都属于软件生命周期。
软件生命周期的主要活动阶段为:
①可行性研究和计划制定。确定待开发软件系统的开发目标和总的要求,给出它的功能、性能、可靠性以及接口等方面的可行方案,制定完成开发任务的实施计划。
②需求分析。对待开发软件提出的需求进行分析并给出详细定义,即准确地确定软件系统的功能。编写软件,规格说明书及初步的用户手册,提交评审。
③软件设计。系统设计人员和程序设计人员应该在反复理解软件需求的基础上,给出软件的结构、模块的划分、功能的分配以及处理流程。
④软件实现。把软件设计转换成计算机可以接受的程序代码。即完成源程序的编码,编写用户手册、操作手册等面向用户的文档,编写单元测试计划。
⑤软件测试。在设计测试用例的基础上,检验软件的各个组成部分。编写测试分析报告。
⑥运行和维护。将已交付的软件投入运行,并在运行使用中不断地维护,根据新提出的需求进行必要而且可能的扩充和删改。
51.A本题主要考查软件测试的基本知识。软件测试的步骤可分为单元测试(模块测试)、集成测试、确认测试和系统测试。
(1)单元测试是针对每个模块进行的测试,它可从程序的内部结构出发设计测试用例,多个模块可以平行、对立地测试。单元测试主要用于发现详细设计和编程时犯下的错误。单元测试多采用白盒测试,辅之以黑盒测试。
(2)集成测试是在单元测试的基础上,根据模块结构图将各个模块连接起来,必须精心计划,应提交集成测试计划、集成测试规格说明和集成测试分析报告。主要目标是发现与接口有关的问题。集成测试可以发现概要设计时犯的错误。
(3)确认测试用于验证软件的功能和性能及其他特性是否与用户的要求一致。确认测试主要用于发现需求分析时犯下的错误,一般使用黑盒法测试,以表明软件符合需求说明书的要求,应该仔细设计测试用例和测试过程。确认测试必须有用户参加,或以用户为主,用户应参与设计测试用例,通常情况下,主要使用生产中的实际数据进行测试,测试数据通过用户接口输入。
(4)系统测试是将已经通过确认测试的软件,作为整个计算机系统的元素与计算机硬件、外设和网络等其他因素结合在一起,进行一系列的组装测试和确认测试。系统测试的目的是通过与系统的需求定义做比较,发现软件与系统的定义不符合的地方。系统测试可以发现问题定义时犯下的错误。
52.A解析:整型指针变量p指向整型变量x,显然是先定义x,后定义p。定义p时,必须在指针变量名前加*(否则,p只是不同整型变量),取变量x的地址,要用取地址符&。
53.B解析:根据题意可知第二个j循环结束的条件是第i行打印出的'*'的个数。
54.B解析:continue语句的作用是跳过本次循环体中余下尚未执行的语句,接着再一次进行循环条件的判定。当能被2整除时,a就会增1,之后执行continue语句,直接执行到for循环体的结尾,进行i++,判断循环条件。
55.B解析:INTEGER是类型名,由它来间接定义p和*q的类型,因此,p是基类型为int的指针变量,故选项A不正确,选项B正确,q是二级指针变量,它指向基类型是int的指针变量,故选项C,D不正确。所以4个选项中B正确。
56.B解析:本题主要考查结构指针:p=&st,访问结构体的成员,可以通过结构变量访问,即st.i,也可以用等价的指针形式,即(*p).i和p->i。
57.C解析:内聚有很多种类,其中内聚性由弱到强的顺序为:偶然内聚、逻辑内聚、时间内聚、过程内聚.所以本题的答案为C。
58.D解析:fscanf的调用形式是:fscanf(文件指针,格式字符串,输入表列);
59.B解析:C语言规定,标识符是由字母、数字或下划线组成,并且它的第一个字符必须是字母或下划线,关键字不能用作用户标识符。
60.A算法的有穷性,是指算法必须能在有限的时间内做完,即算法必须能在执行有限个步骤之后终止。
61.B本题考查for循环及if…else语句嵌套,第1次执行for循环,p[1][0]=p[1][0]=p[1][0]-1=3;第2次执行for循环,p[1][1]=p[1][1]-1=4;第3次执行for循环,p[1][2]=l,最后输出的是a[0][1]+a[1][1]+a[1][2]=2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- FZT 54133-2020无锑涤纶预取向丝(POY)标准深度与行业前瞻研究报告
- 《GBT 14492-2008一次性使用电石包装钢桶》专题研究报告
- 《GB 4706.33-2008家用和类似用途电器的安全 商用电深油炸锅的特殊要求》专题研究报告
- 道路安全教育培训课内容课件
- 道路危险品运输安全培训课件
- 2026年鲁教版八年级数学上册期末试卷含答案
- 道德的介绍教学课件
- 2026年广东省茂名市高职单招语文试题及答案
- 迪奥dior介绍教学课件
- 新高一化学暑假衔接(人教版):第17讲 元素周期律【教师版】
- 教师三笔字培训课件
- 少年宫乒乓球活动记录文本
- 各品牌挖掘机挖斗连接尺寸数据
- 2021-2022学年云南省曲靖市部编版六年级上册期末考试语文试卷(原卷版)
- 参会人员名单(模板)
- 飞机大战游戏设计与实现
- 数学课如何提高课堂教学容量
- 监理规划毕业设计(论文)
- 京港澳高速公路段改扩建工程施工保通方案(总方案)
- 医用设备EMC培训资料课件
- RoHS培训资料课件
评论
0/150
提交评论