您的当前位置:首页正文

计算机二级C语言试题库

2022-08-03 来源:爱站旅游
导读计算机二级C语言试题库
计算机二级C语言试题库 1有以下程序 main()

{ int a=1,b=2,m=0,n=0,k;

k=(n=b>a)||(m=aprintf(\"%d,%d\\n\ }

程序运行后的输出结果是 A)0,0 B)0,1 C)1,0 D)1,1 2在一个C程序中

A)main函数必须出现在所有函数之前 B)main函数可以在任何地方出现 C)main函数必须出现在所有函数之后 D)main函数必须出现在固定位置 3有以下程序 main()

{ int a=5,b=4,c=3,d=2; if (a>b>c)

printf(\"%d\\n\

else if ( (c-1 >= d) == 1) printf(\"%d\\n\ else

printf(\"%d\\n\ }

执行后输出结果是

A)2 B)3 C)4 D)编译时有错,无结果 4有以下程序 main() { int i;

for (i=0; i<3; i++) switch (i)

{ case 1: printf(\"%d \ case 2: printf(\"%d \ default : printf(\"%d \ } }

执行后输出结果是 5有以下程序 main()

{ int k=4,n=0; for( ; n{ n++;

if(n%3!=0) continue; k--; }

printf(\"%d,%d\\n\ }

程序运行后的输出结果是 A)1,1 B)2,2 C)3,3 D)4,4

6有以下程序 fun(int a, int b) { if(a>b) return(a); else return(b); }

main()

{ int x=3, y=8, z=6, r; r=fun(fun(x,y), 2*z); printf(\"%d\\n\ }

程序运行后的输出结果是 A)3 B)6 C)8 D)12 7有以下程序

int *f(int *x, int *y) { if (*x < *y) return x; else return y; }

main()

{ int a=7,b=8,*p,*q, *r; p=&a; q=&b; r = f(p,q);

printf(\"%d,%d,%d\\n\ }

执行后输出结果是

A)7,8,8 B)7,8,7 C)8,7,7 D)8,7,8

8以下能正确地定义整型变量a,b和c并为其赋初值5的语句是 A)int a=b=c=5; B)int a,b,c=5; C)a=5,b=5,c=5; D)a=c=b=5;

9若二维数组a有m列,则在a[i][j]前的元素个数为 A)j*m+i B)i*m+j C)i*m+j-1 D)i*m+j+1

10下面程序段是输出两个字符串中对应相等的字符。请选择填空 char x[]=”programming”; char y[]=”Fortran”; int i=0;

while(x[i]!=’\\0’&&y[i]!=’\\0’) if(x[i]= =y[i])printf(“%c”,[]); else i++;

A) x[i++] B)y[++i] C)x[i] D)y[i]

11若使用一维数组名作函数实参,则以下正确的说法是 A)必须在主调函数中说明次数组的大小 B实参数组类型与形参数组类型可以不匹配 C在被调函数中,不需要考虑形参数组的大小

D实参数组名与形参数组名必须一致 12以下程序的正确运行结果是 #inclued main()

{int k=4,m=1,p;

p=func(k,m);printf(“%d”,p); p=func(k,m);printf(“%d\\n”,p); }

func(int a,int b) {static int m=0,i=2; i+=m+1; m=i+a+b; return(m); }

A)8,17 B)8,16 C)8,20 D)8,8

13若有说明:int *p,m=5,n;以下正确的程序段是 A) p=&n;scanf(“%d”,&p); B) p=&n;scanf(“%d”,*p); C) scanf(“%d”,&n);*p=n; D) p=&n;*p=m;

14执行以下程序后,a和b的值为 main()

{int a,b,k=4,m=6,*p1=&k,*p2=&m; a=p1==&m;

b=(-*p1)/(*p2)+7; printf(“a=%d\\n”,a); printf(“b=%d\\n”,b);}

A)-1 ,5 B)1,6 C)0,7 D)4,10

15若要用fopen函数打开一个新的二进制文件,该文件要既能读也能写,则文件方式字符串应是

A)”ab+” B)”wb+” C)”rb+” D”ab”

16根据定义和数据的输入方式,输入语句的正确形式为 已有定义:float f1,f2; 数据的输入方式:4.52 3.5

A)scanf(“%f,%f”,&f1,&f2); B) scanf(“%f%f”,&f1,&f2);

C) scanf(“%3.2f %2.1f”,&f1,&f2); D) scanf(“%3.2f%2.1f”,&f1,&f2); 17 分析以下程序运行结果 #include

int func(int n){ if(n==1) return 1;

else

return(n*func(n-1)); }

void main(){ int x;

x=func(5); printf(“%d\\n”,x); }

A)100 B)5 C)1 D)120

18 分析以下程序运行结果 #include void main(){ int y=2,a=1; while(y--!=-1){ do{

a*=y;a++; }while(y--);}

printf(“%d,%d\\n”,a,y);} A)1,-2 B)2,1 C)1,0 D)2,-1 19下面程序段的运行结果是 char a[7]=”abcdef”; charb[4]=”ABC”; strcpy(a,b);

printf(“%c”,a[5]); A)空格 B)\\0 C)e D)f

20下面是对s的初始化,其中不正确的是 A)char s[5]={“abc”}; B)char s[5]={‘a’,’b’,’c’}; C)char s[5]=””; D)char s[5]=”abcdef”;

21执行语句for(i=1;i++<4; );后变量i的值是 A)3 B)4 C)5 D)不定 22以下程序段 x=-1; do

{x=x*x;} while(!x);

A)是死循环 B)循环执行二次 C)循环执行一次 D)有语法错误 23若有以下定义和语句: inion data {int i; char c; float f; }a; int n;

则以下语句正确的是

A)a=5; B)a={2,’a’,1.2}; C)printf(“%d\\n”,a); D)n=a; 24下面程序的运行结果是 main() {

struct cmplx{int x; int y;

}cnum[2]={1,3,2,7};

printf(“%d\\n”,cnum[0].y/cnum[0].x*cunm[1].x); }

A)0 B)1 C)3 D)6

25以下程序的运行结果是 main()

{int k=4,a=3,b=2,c=1; printf(“\\n%d\\n”,k} A)4 B)3 C)2 D)1 二 填空

1 若有以下定义,则计算表达式y+=y-=m*=以后y的值是_____ int m=5,y=2;

2 若有定义:int b=7;float a=2.5,c=4.7;:则下面表达式的值为_____ a+(int)(b/3*(int)(a+c)/2)%4

3 有 int a=3,b=4,c=5;,则以下表达式的值为_____ !(a+b)+c-1&&b+c/2

4 条件”2或x<-10”的c语言表达式是_____

5 以下程序的功能是判断输入的年份是否是闰年.请在[ ]内填入正确内容 main() {int y,f;

scanf(“%d”,&y); if(y%400==0)f=1; else if([5])f=1; else[6];

if(f) printf(“%d is”,y); else printf(“%d is not”,y); printf(“a leap year\\n”); }

6 下面程序的功能是计算100至1000之间有多少个数其各位数字之和是5。请填空 #include main(0

{int i,s,k,count=0;

for(i=100;i<=1000;i++) {s=0;k=i;

while([7]){s=s+k%10;k=[8];} if(s!=5)[9]; else count++;

}

printf(“%d”,count); }

7 下面程序将二维数组a的行和列元素呼唤后存到另一个二维数组b中。请填空 main()

{int a[2][3]={{1,2,3},{4,5,6}}; int b[3][2],I,j;

printf(“array a:\\n”); for(i=0;i<=1;i++) {for(j=0;[10];j++) {printf(“%5d”,a[i][j]); [11]; }

printf(“\\n”); }

printf(“array b:\\n”); for(i=0;[12];i++) {for(j=0;j<=1;j++) printf(“%5d”,b[i][j]); printf(“\\n”); } }

8 以下search函数的功能是利用顺序查找法从数组a的10个元素中对关键字m 进行查找。顺序查找法的思路是:从第一个元素开始,从前向后依次与关键字你叫,直到找到此元素或查找到数组尾部时结束。若找到,返回此元素的下标;若仍未找到,则返回值-1。请填空 #include

int search(int a[10],int m) {int I;

for(i=0;i<=9;i++) if([1])return(i); return(-1); }

main()

{int a[13],m,i,no; ……

no=search([14]);

if([15]) printf(“\\nOK FOUND!%d”,no+1); else printf(“\\nSorry Not Found!”); }

9 若有定义:int a[]={2,4,6,8,10,12},*p=a;则*(p+1)的值是[16],*(a+5)的值是[17] 10 将任意输入的一个偶数n分解为两个素数之和,并给出各种分解方法 #include main() {

int n,i;

int check(int x); do{

scanf(“%d”,&n); }while(n%2!=0); for(i=3;i<=n/2;i++) if(check(i)&&[18])

printf(“%d=%d+%d\\n”,n,i,n-i); }

int check(int x) { int i;

for(i=2;iif([19]) return(0); return(1); }

11 函数调用语句:fgets(buf,n,fp);从fp指向的文件中读入[20]个字符放到buf字符数组中。函数值为[21]

12 设数组a包括10个整型元素。下面程序的功能是求出a 中各相邻元素的和,并将这些和存在数组b中,按每行3个元素的形式输出。请填空 main()

{int a[10],b[10],i; for(i=0;i<10;i++) scanf(“%d”,&a[i]); for([22];i<10;i++) [23]

for(i=1;i<10;i++) { printf(“%3d”,b[i]); if([24]==0) printf(“\\n”); } }

13 如果以下程序输入的是we are students,则输出的结果是[25] #include “stdio.h” void main() { char s[81],*p;

printf(“Input a sentence:\\n”);gets(s); for(p=s;*p;p++)

if(*p==32) //空格键的ASCII值是32 { if(*(p+1)!=32) printf(“\\n”); } else putchar(*p); }

05年9月等级考试二级C语言考前密卷2

选择题(1)~(10)每小题2分,(11)-(50)每小题1分,共60分)

下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。

(1)算法分析的目的是________。

A)找出数据结构的合理性 B)找出算法中输入和输出之间的关系 C)分析算法的易懂性和可靠性 D)分析算法的效率以求改进 答案:D 评析:算法分析是指对一个算法的运行时间和占用空间做定量的分析,一般计算出相应的数掌级,常用时间复杂度和空间复杂度表示。分析算法的目的就是要降低算法的时间复杂度和空间复杂度,提高算法的执行效率。

(2)n个顶点的强连通图的边数至少有________。 A)n-1 B)n(n-1) C)n D)n+l 答案:C

评析:在有向图中,若任意两个顶点都连通,则称该图是强连通图,这样的有向图的形状是环状,因而至少应有n条边。

(3)已知数据表A中每个元素距其最终位置不远,为节省时间,应采用的算法是________。

A)堆排序 B)直接插入排序 C)快速排序 D)直接选择排序 答案:B

评析:当数据表A中每个元素距其最终位置不远,说明数据表A按关键字值基本有序,在待排序序列基本有序的情况.下,采用插入排序所用时间最少,故答案为选项B。 (4)用链表表示线性表的优点是________。

A)便于插入和删除操作 B)数据元素的物理顺序与逻辑顺序相同 C)花费的存储空间较顺序存储少 D)便于随机存取 答案:A

评析:链式存储结构克服了顺序存储结构的缺点:它的结点空间可以动态申请和释放;它的数据元素的逻辑次序靠结点的指针来指示,不需要移动数据元素。故链式存储结构下的线性表便于插入和删除操作。

(5)下列不属于结构化分析的常用工具的是________。 A)数据流图 B)数据字典 C)判定树 D)PAD图 答案:D

评析:结构化分析的常用工具有数据流图、数据字典、判定树和判定表。而PAD图是常见的过程设计工具中的图形设计。

(6)软件开发的结构化生命周期方法将软件生命周期划分成________。 A)定义、开发、运行维护

B)设计阶段、编程阶段、测试阶段 C)总体设计、详细设计、编程调试 D)需求分析、功能定义、系统设计 答案:A

评析:通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期。它可以分为软件定义、软件开发及软件运行维护三个阶段。

(7)在软件工程中,白盒测试法可用于测试程序的内部结构。此方法将程序看做是________。

A) 循环的集合 B)地址的集合 C)路径的集合 D)目标的集合 答案:C 评析:软件的白盒测试方法是把测试对象看做一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。

(8)在数据管理技术发展过程中,文件系统与数据库系统的主要区别是数据库系统具有________。

A)数据无 冗余 B)数据可共享

C)专门的数据管理软件 D)特定的数据模型 答案:D 评析:在文件系统中,相互独立的记录其内部结构的最简单形式是等长同格式记录的集合,易造成存储空间大量浪费,不方便使用。而在数据库系统中,数据是结构化的,这种结构化要求在描述数据时不仅描速数据本身,还要描述数据间的关系,这正是通过采用特定的数据模型来实现的。

(9)分布式数据库系统不具有的特点是________。 A)分布式 B)数据冗余

C)数据分布性和逻辑整体性 D)位置透明性和复制透明性 答案:B

评析:分布式数据库系统具有数据分布性、逻辑整体性、位置透明性和复制透明性的特点,其数据也是分布的;但分布式数据库系统中数据经常重复存储,数据也并非必须重复存储,主要视数据的分配模式而定。若分配模式是一对多,即一个片段分配到多个场地存放,则是冗余的数据库,否则是非冗余的数据库。

(10)下列说法中,不属于数据模型所描述的内容的是________。 A)数据结构 B)数据操作 C)数据查询 D)数据约束 答案:C

评析:数据模型所描述的内容有3个部分,它们是数据结构、数据操作和数据约束。数据操作主要是描述在相应数据结构上的操作类型与操作方式;数据模型中的数据约束主要描述数据结构内数据间的语法、语义联系,它们之间的制约与依存关系,以及数据动态变化的规则,以保证数据的正确、有效与胡容。

(11)在结构化程序设计中,限制使用goto语句的原因是________。 A)提高程序的执行效率

B)提高程序的清晰性和可靠性 C)便于程序的合成

D)该语句对任何结构的程序都不适用 答案:B

评析:在c语言中,限制使用goto语句,其目的是为了提高程序的清晰性与可靠性,一般来说,除了从多重循环中跳出,一般不使用goto语句。 (12)以下选项中合法的实型常数是________。 A)5E2.0 B)E-3 C).2E0 D)1.3E 答案:C

评析:以指数形式表示实数时,字母e(或E)之前必须有数字,且e后面指数必须为整数。

(13)下列叙述中,正确的是________。 A)C语言中既有逻辑类型也有集合类型 B)c语言中没有逻辑类型但有集合类型 B)C语言中有逻辑类型但没有集合类型 B)C语言中没有逻辑类型也没有集合类型 答案:B

评析:在c语言中只提供了整型、浮点型、字符型这几种基本类型,c语言没有提供逻

辑类型,在c中一般用整型来表示逻辑类型。在自定义类型中,c提供了struct,enum及union类型,但没有提供集合类型,在pascal中提供了集合类型set。

(14)已知大写字母A的ASCII码是65,小写字母a的ASCII码是97,则用八进制表示的字符常量’\10l’是________。

A)字符A B)字符a C)字符e D)非法的常量 答案:A

评析:八进制101转换为十进制即为65,而字母A的ASCII码是65,所以用八进制表示的字符常量’\101’是A。

(15)设a和b均为double型常量,且a=5.5 、b=2.5,则表达式(int)a+b/b的值是________。

A)6.500000 B)6 C)5.500000 D)6.000000 答案:D

评析:各类数值型数据在进行混合运算时,不同类型的数据要先转换成同一类型,然后进行运算。转换的规则为:总是转换为精度更大的数据类型,字符数据转换为整数,short型转为int型,float型数据在运算时转换成双精度型,以提高运算精度。 (16)以下四个选项中不能看作一条语句的是________。

A){;} B)a=0,b:0,c=0; C)if(a>0); D)if(b==0)m=l;n=2; 答案:D

评析:选项A为空语句,选项B是一个由逗号运算符表达式形成的语句,选项c为一个条件语句,选项D有两个分号,是由两个语句构成,不能看成一条语句。

(17)已知i、j、k为int型变量,若从键盘输入:1,2,3↙,使i的值为l、j的值为2、k的值为3,以下选项中正确的输入语句是________。 A)scanf(\"%2d%2d%2 dtt,&i,&j,&k); B)scanf(\"%d %d %d\",&i,&j,&k); C)scanf(\"%d,%d,%dfI,&i,&j,&k);

D)scanf(\"i=%d,j=%d,k=%d-t,&i,&j,&k); 答案:C

评析:如果在\"格式控制\"字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符。

(18)关于goto语句的使用,下面正确的是________。 A)goto 2; B)goto g; C)goto g:; D)goto 2; 2:exit(0); g:exit(O); g:exit(O); 2 exit(0); 答案:B

评析:在c中,goto语句后面的标号的命名规则与c语言中标识符的命名规则相同,在goto语句后面的标号后不要加\":\"号,在某一行上添加标号时,在标号的后面要添加\":\"号。 (19)若有以下程序: main()

{int k=2,i=2,m; m=(k+=I*=k);

printf(\"%d,%d、n\",m,i); }

执行后的输出结果是__________。

A)8,6 B)8,3 C)6,4 D) 7,4 答案:C

评析:在赋值符\"=\"之前加上其它运算符,可以构成复合的运算符。此运算为右结合性,即从右往左计算。I*=k即i=i*k=2*2=4,k=k+i=2+4=6,然后将k的值赋给m。 (20)以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。 #define N 10

void arrin(int x[N]) { int i=0; while(i }

在下划线处应填入的是_________。

A)x+i B)&x[i+l] C)x+(i++) D)&x[++I] 答案:C

评析:在c中 ,对于一维数组而言,数组变量表示数组中首元素的的地址。当用scanf函数向数组x的第i个元素中输入整型数据时,只要执行scanf(\"%d\"x+i):由于要循环输入数组中和各个元素,必须要使其地址值不断自增。故本题答案为c。 (21)已有定义:int x=3,y=4,z=5;,则表达式!(x+y)+z-l&&y+z/2的值是_________。 A)6 B)0 C)2 D)1 答案:D

评析:在本题中,运算符的优先级分别为:!>/>+,->&&即:!(3+4)+5-1&&4+5/2=0+5-1&&4+2=4&&6=l。

(22)以下选项中,与k=11++完全等价的表达式是__________。 A)k=n,n=n+1 B)n=n+1,l(=n C)l(=什n D)k+--n+1 答案:A

评析:n++是自增运算,是先使用,然后再使n加1, (28)已定义以下函数: fun(char*p2,char*p1)

{while((*p2=*p1)!=’\0’){pl++;p2++;}} 函数的功能是__________。

A)将p1所指字符串复制到p2所指内存空间 B)将pl所指字符串的地址赋给指针p2

C)对p1和p2两个指针所指字符串进行比较

D)检查p1和p2两个指针所指字符串中是否有’\O’ 答案:A

评析:由于在while循环的条件中执行了*p2=*pl运算,其作用是将*pl中的内容复制到*p2中,而(*p2=*p1)!=’\0’的作用是判断当前字符是否为字符串结束字符’\O’。在循环体中p1++,p2++的目的是移动字 (29)有以下程序

void fun(char*c,int d) {*c=*c+1;d=d+1;

printf(\"%c,%c,\",*c,d); }

main() {char a:。A’,b。’a’;

fun(&b,a);printf(\"%c,%c\n\",a,b); )

程序运行后的输出结果是_________。

A)B,a,B,a B)a,B,a,B C)A,b,A,b D)b,B,A,b 答案:D

评析:将a,b代入函数得+&b=。&b+1=a+l=b,所以打印出第一个字母b; a=a+l=A+l=B,打印出第二个字符B; a=’A’,输出字母A;

b由于是按地址传到函数而被修改,为’b’,输出字母b

(30)以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排序。 void sort(int a[],im n) {intiJ,t;

for(i=O;i for=i+1 0 if(a[i] } main()

{int aa[10]:{1,2,3,4,5,6,7,8,9,10} ,i; sort(&aa[3],5);

for(i=0;i printf(\"\n\"); )

程序运行后的输出结果是________。

A)l,2,3,4,5,6,7,8,9,10, B)10,9,8,7,6,5,4,3,2,1, C)l,2,3,8,7,6,5,4,9,10, D)l,2,10,9,8,7,6,5,4,3, 答案:C

评析:本题并不是对数组的所有元素进行排序,而是对从a[3]开始往后的4个元素进行排序。

(31)对于基类型相同的两个指针变量,不能进行的运算是________。 A)< B)= C)+ D) 答案:C

评析:对于指针变量,除了常规的*、&、=运算外,还可以对其比较地址的大小,计算两指针变量的差值,但对于地址执行+、*、/、%等算术运算都是无意义的。 (32)有以下程序 main()

{char a[]={’a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’\O’};int I,J; i=sizeof(a); j=strlen(a); printf(\"%d,%d\n\",I,J); }

程序运行后的输出结果是________。 A)9,9 B)8,9 C)1,8 D)9,8 答案:D

评析:sizeof()函数是计算字符数组的长度,因为’\0’也是一个字符,要计算在内。strlen()是计算字符串长度的函数,遇到’\0’即认为是字符串结束,不把空字符计入字符串的长度。

(33)以下不能正确定义二维数组的选项是_________。 A)int a[2][2]={{1},{2}} B)int a[][2]={l,2,3,4} C)int a[2][2]={{l},2,3} D)int a[2][]={{1,2},{3,4}} 答案:D

评析:在二维数组进行初始化时,可以省略数组的一个维度,但省略的维数只能是高维部分,不能是低维。对于多维数组的初始化时,也是同样处理,因此,本题答案应选D,其

它选项均能对数组进行正确的初始化。 (34)有一函数 ┏ l x>O y=┨ O x=O

┗ -1 x 以下程序段中不能根据x的值正确计算出y的值的是___________。 A)if(x>O)y=l;else if(x==O)y=0;else y=-l;

B)y=O;if(x>O)y=1;else if(x C)y=0;if(x>=0)if(x>O)y=1;else y=-l; D)if(x>=0)if(x>O)y=l;else y=O;else y=-1; 答案:C 评析:本题应当注意if与else的配对关系。从最内层开始,else总是与它上面最近的(未曾配对的)if配对。

(35)以下程序中的函数reverse的功能是将a所指数组中的内容进行逆置。 void reverse(int a[],im n) {int i,t;

for(i=O;i {t=a[i];a[i]=a[n-l-i];a[n-1-i]=t;} }

main()

{int b[10]={1,2,3,4,5,6,7,8,9,10};int i,s=0; reverse(b,8);

for(i=6;i<10;i++)s+=b[I]; printf(\"%d\n\",s); }

程序运行后的输出结果是

A)22 B)10 C)34 D)30 答案:A

评析:本题并不是将整个数组中的内容逆置,而是逆置前8个元素。逆置后的数组为:8,7,6,5,4,3,2,1,9,10通过for循环计算b[6]+b[7]+b[8]+b[9]即2+1+9+10=22。 (36)执行下面的程序段后,变量k的值为___________。 int k=3,s[2];

s[0]=k;k=s[1]*10;

A)不确定 B)33 C)30 D)10 答案:A

评析:由于本题中未对数组进行初始化,因此程序运行时,数组s中各个元素的值都是不确定的,虽然在代码中对s[O]进行了赋值,但没有对s[1]进行赋值,故执行l(=s[1]+10;后,k的值不确定。 (37)有以下程序 #include main()

{ char’p=\"abcde\0fghjik\O\"; printf(\"%d\n\; }

程序运行后的输出结果是__________。 A)12 B)15 C)6 D)5 答案:D

评析:\"\0\"是字符串结束标志,当遇到此标志时字符串已结束。所以字符串的长度为5。

(38)程序中头文件t)rpel_h的内容是: #define N 5 #define Ml N*3 程序如下:

#include\"type 1.h\" #define M2 N*2 main() { int i; i=MI+M2;

printf(\"%d\n\",i); }

程序编译后运行的输出结果是_________。 A)lO B)20 C)25 D)30 答案:C

评析:宏定义就是用一个指定的标识符(即名字)来代表一个字符串,它的一般形式为: #define 标识符 字符串

这种方法使用户能以一个简单的名字代替一个长的字符串,因此把这个标识符(名字)称为\"宏名\"。

(39)若有以下的程序段,则在执行for语句后,*(*(pt+1)+2)表示的数组元素是________。 int t[3][3],*pt[3],k;

for(k=0;k<3;k++)pt[k]=&t[k][O];

A)t[2][0] B]t[2][2] C]t[1][2] D]t[2][1] 答案:C

评析:在题面中定义了一个二维数组l,及一个一维指针数组pt,在循环语句中分别对指针 数组赋值为二维数组t的第k行首元素的地址。*(pt+1),表示的是数组pt中下标为1的元素的值,而该值为二维数组t的第l行(从第0行算起)的首元素的地址,故*(*(pt+1)+2)表示的是数组t中t[1][2]的元素的值。 (40)以下叙述中错误的是_________。

A)二进制文件打开后可以先读文件的末尾,而顺序文件不可以 B)在程序结束时,应当用fclose函数关闭已打开的文件

C)利用fread函数从二进制文件中读数据,可以用数组名给数组中所有元素读入数 据

D)不可以用FILE定义指向二进制文件的文件指针 答案:D

评析:每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息,这些信息是保存在一个名为FILE的结构体类型的结构体变量中的。而文件又分为ASCII文件和二进制文件,所以,、可以用FILE定义指向二进制文件的文件指针。 (41)有以下程序 #include

main(int argc,char *argv[]) { inti,len=0;

for(i=1;i printf(\"%d\n\;

)

程序编译连接后生成的可执行文件是exl.exe,若运行时输入带参数的命令行是: exl abcd efg 10↙ 则运行的结果是________。 A)22 B)17 C)12 D)9 答案:D

评析:本题主函数带有两个参数,一个int型变量argc,另一个是char型的一维一级指针数组argv。当主函数被执行时,系统自动将根据命令行的情况,分别给主函数的两个参数赋值。argc用于存放命令行中命令字和参数的总和的个数4,argv用来存放命令行中命令字和所有参数的字符串,并规定 argv[0]存放命令字字符串exl,argv[1]用来存放第一个参数的字符串abcd,argv[21用来存放第二个参数的字符串e龟,argv [3]用来存放第三个参数的字符串10。那么for循环将循环3次分别将argv数组中元素的长度累加到len中,所以答案为9。

(42)若有以下说明和定义:__________。 fun(*C){…} main()

{int(*a)()=fun,(*b)(),w[10],c;}

在必要的赋值后,对fun函数调用正确的是_________。

A)a=a(w); B) (*a)(&C); C)b=*b(w); D)fun(b); 答案:B

评析:在主函数中定义了二个指向函数的指针a,b,其中指针a指向函数fun,指针b未初始化。对于选项A、c,其返回类型是错误的,对于D,其调用的参数是错误的,选项B是正确的,其相当于调用函数fhll(&C);。 (43)有以下程序 intfa(intx、 {returnx*x;} int fb(intxl

{returnX*X*x;}

int f(int(*f1)(),int(*f2)(),int x) {return f2(x)-fl(x);) mai n() { int i;

i=f(fa,fb,2);printf(\"%d\n\",i); }

程序运行后的输出结果是 A) 4 B)1 C)4 D)8 答案:C

(28)已定义以下函数: fun(char*p2,char*p1)

{while((*p2=*p1)!=’\0’){pl++;p2++;}} 函数的功能是__________。

A)将p1所指字符串复制到p2所指内存空间 B)将pl所指字符串的地址赋给指针p2

C)对p1和p2两个指针所指字符串进行比较

D)检查p1和p2两个指针所指字符串中是否有’\O’ 答案:A

评析:由于在while循环的条件中执行了*p2=*pl运算,其作用是将*pl中的内容复制到*p2中,而(*p2=*p1)!=’\0’的作用是判断当前字符是否为字符串结束字符’\O’。在循环体中p1++,p2++的目的是移动字 (29)有以下程序

void fun(char*c,int d) {*c=*c+1;d=d+1;

printf(\"%c,%c,\",*c,d); }

main() {char a:。A’,b。’a’;

fun(&b,a);printf(\"%c,%c\n\",a,b); )

程序运行后的输出结果是_________。

A)B,a,B,a B)a,B,a,B C)A,b,A,b D)b,B,A,b 答案:D

评析:将a,b代入函数得+&b=。&b+1=a+l=b,所以打印出第一个字母b; a=a+l=A+l=B,打印出第二个字符B; a=’A’,输出字母A;

b由于是按地址传到函数而被修改,为’b’,输出字母b

(30)以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排序。 void sort(int a[],im n) {intiJ,t;

for(i=O;i for=i+1 0 if(a[i] } main()

{int aa[10]:{1,2,3,4,5,6,7,8,9,10},i; sort(&aa[3],5);

for(i=0;i printf(\"\n\"); )

程序运行后的输出结果是________。

A)l,2,3,4,5,6,7,8,9,10, B)10,9,8,7,6,5,4,3,2,1, C)l,2,3,8,7,6,5,4,9,10, D)l,2,10,9,8,7,6,5,4,3, 答案:C

评析:本题并不是对数组的所有元素进行排序,而是对从a[3]开始往后的4个元素进行排序。

(31)对于基类型相同的两个指针变量,不能进行的运算是________。 A)< B)= C)+ D) 答案:C

评析:对于指针变量,除了常规的*、&、=运算外,还可以对其比较地址的大小,计算两指针变量的差值,但对于地址执行+、*、/、%等算术运算都是无意义的。 (32)有以下程序 main()

{char a[]={’a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’\O’};int I,J;

i=sizeof(a); j=strlen(a); printf(\"%d,%d\n\",I,J); }

程序运行后的输出结果是________。 A)9,9 B)8,9 C)1,8 D)9,8 答案:D

评析:sizeof()函数是计算字符数组的长度,因为’\0’也是一个字符,要计算在内。strlen()是计算字符串长度的函数,遇到’\0’即认为是字符串结束,不把空字符计入字符串的长度。

(33)以下不能正确定义二维数组的选项是_________。 A)int a[2][2]={{1},{2}} B)int a[][2]={l,2,3,4} C)int a[2][2]={{l},2,3} D)int a[2][]={{1,2},{3,4}} 答案:D

评析:在二维数组进行初始化时,可以省略数组的一个维度,但省略的维数只能是高维部分,不能是低维。对于多维数组的初始化时,也是同样处理,因此,本题答案应选D,其它选项均能对数组进行正确的初始化。 (34)有一函数 ┏ l x>O y=┨ O x=O

┗ -1 x 以下程序段中不能根据x的值正确计算出y的值的是___________。 A)if(x>O)y=l;else if(x==O)y=0;else y=-l;

B)y=O;if(x>O)y=1;else if(x C)y=0;if(x>=0)if(x>O)y=1;else y=-l; D)if(x>=0)if(x>O)y=l;else y=O;else y=-1; 答案:C 评析:本题应当注意if与else的配对关系。从最内层开始,else总是与它上面最近的(未曾配对的)if配对。

(35)以下程序中的函数reverse的功能是将a所指数组中的内容进行逆置。 void reverse(int a[],im n) {int i,t;

for(i=O;i {t=a[i];a[i]=a[n-l-i];a[n-1-i]=t;} }

main()

{int b[10]={1,2,3,4,5,6,7,8,9,10};int i,s=0; reverse(b,8);

for(i=6;i<10;i++)s+=b[I]; printf(\"%d\n\",s); }

程序运行后的输出结果是

A)22 B)10 C)34 D)30 答案:A

评析:本题并不是将整个数组中的内容逆置,而是逆置前8个元素。逆置后的数组为:8,7,6,5,4,3,2,1, 9,10通过for循环计算b[6]+b[7]+b[8]+b[9]即2+1+9+10=22。 (36)执行下面的程序段后,变量k的值为___________。 int k=3,s[2];

s[0]=k;k=s[1]*10;

A)不确定 B)33 C)30 D)10 答案:A

评析:由于本题中未对数组进行初始化,因此程序运行时,数组s中各个元素的值都是不确定的,虽然在代码中对s[O]进行了赋值,但没有对s[1]进行赋值,故执行l(=s[1]+10;后,k的值不确定。 (37)有以下程序 #include main()

{ char’p=\"abcde\0fghjik\O\"; printf(\"%d\n\; }

程序运行后的输出结果是__________。 A)12 B)15 C)6 D)5 答案:D

评析:\"\0\"是字符串结束标志,当遇到此标志时字符串已结束。所以字符串的长度为5。

(38)程序中头文件t)rpel_h的内容是: #define N 5 #define Ml N*3 程序如下:

#include\"type 1.h\" #define M2 N*2 main() { int i; i=MI+M2;

printf(\"%d\n\",i); }

程序编译后运行的输出结果是_________。 A)lO B)20 C)25 D)30 答案:C

评析:宏定义就是用一个指定的标识符(即名字)来代表一个字符串,它的一般形式为: #define 标识符 字符串

这种方法使用户能以一个简单的名字代替一个长的字符串,因此把这个标识符(名字)称为\"宏名\"。

(39)若有以下的程序段,则在执行for语句后,*(*(pt+1)+2)表示的数组元素是________。 int t[3][3],*pt[3],k;

for(k=0;k<3;k++)pt[k]=&t[k][O];

A)t[2][0] B]t[2][2] C]t[1][2] D]t[2][1] 答案:C

评析:在题面中定义了一个二维数组l,及一个一维指针数组pt,在循环语句中分别对指针数组赋值为二维数组t的第k行首元素的地址。*(pt+1),表示的是数组pt中下标为1的元素的值,而该值为二维数组t的第l行(从第0行算起)的首元素的地址,故*(*(pt+1)+2)表示的是数组t中t[1] [2]的元素的值。

(40)以下叙述中错误的是_________。

A)二进制文件打开后可以先读文件的末尾,而顺序文件不可以 B)在程序结束时,应当用fclose函数关闭已打开的文件

C)利用fread函数从二进制文件中读数据,可以用数组名给数组中所有元素读入数 据

D)不可以用FILE定义指向二进制文件的文件指针 答案:D

评析:每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息,这些信息是保存在一个名为FILE 的结构体类型的结构体变量中的。而文件又分为ASCII文件和二进制文件,所以,、可以用FILE定义指向二进制文件的文件指针。 (41)有以下程序 #include

main(int argc,char *argv[]) { inti,len=0;

for(i=1;i printf(\"%d\n\; )

程序编译连接后生成的可执行文件是exl.exe,若运行时输入带参数的命令行是: exl abcd efg 10↙ 则运行的结果是________。 A)22 B)17 C)12 D)9 答案:D

评析:本题主函数带有两个参数,一个int型变量argc,另一个是char型的一维一级指针数组argv。当主函数被执行时,系统自动将根据命令行的情况,分别给主函数的两个参数赋值。argc用于存放命令行中命令字和参数的总和的个数4,argv用来存放命令行中命令字和所有参数的字符串,并规定 argv[0]存放命令字字符串exl,argv[1]用来存放第一个参数的字符串abcd,argv[21用来存放第二个参数的字符串e龟,argv [3]用来存放第三个参数的字符串10。那么for循环将循环3次分别将argv数组中元素的长度累加到len中,所以答案为9。

(42)若有以下说明和定义:__________。 fun(*C){…} main()

{int(*a)()=fun,(*b)(),w[10],c;}

在必要的赋值后,对fun函数调用正确的是_________。

A)a=a(w); B) (*a)(&C); C)b=*b(w); D)fun(b); 答案:B

评析:在主函数中定义了二个指向函数的指针a,b,其中指针a指向函数fun,指针b未初始化。对于选项A、c,其返回类型是错误的,对于D,其调用的参数是错误的,选项B是正确的,其相当于调用函数fhll(&C);。 (43)有以下程序 intfa(intx、 {returnx*x;} int fb(intxl

{returnX*X*x;}

int f(int(*f1)(),int(*f2)(),int x)

{return f2(x)-fl(x);) main() { int i;

i=f(fa,fb,2);printf(\"%d\n\",i); }

程序运行后的输出结果是 A) 4 B)1 C)4 D)8 答案:C

(28)已定义以下函数: fun(char*p2,char*p1)

{while((*p2=*p1)!=’\0’){pl++;p2++;}} 函数的功能是__________。

A)将p1所指字符串复制到p2所指内存空间 B)将pl所指字符串的地址赋给指针p2

C)对p1和p2两个指针所指字符串进行比较

D)检查p1和p2两个指针所指字符串中是否有’\O’ 答案:A

评析:由于在while循环的条件中执行了*p2=*pl运算,其作用是将*pl中的内容复制到*p2中,而(*p2=*p1)!=’\0’的作用是判断当前字符是否为字符串结束字符’\O’。在循环体中p1++,p2++的目的是移动字 (29)有以下程序

void fun(char*c,int d) {*c=*c+1;d=d+1;

printf(\"%c,%c,\",*c,d); }

main() {char a:。A’,b。’a’;

fun(&b,a);printf(\"%c,%c\n\",a,b); )

程序运行后的输出结果是_________。

A)B,a,B,a B)a,B,a,B C)A,b,A,b D)b,B,A,b 答案:D

评析:将a,b代入函数得+&b=。&b+1=a+l=b,所以打印出第一个字母b; a=a+l=A+l=B,打印出第二个字符B; a=’A’,输出字母A;

b由于是按地址传到函数而被修改,为’b’,输出字母b

(30)以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排序。 void sort(int a[],im n) {intiJ,t;

for(i=O;i for=i+1 0 if(a[i] } main()

{int aa[10]:{1,2,3,4,5,6,7,8,9,10},i; sort(&aa[3],5);

for(i=0;i printf(\"\n\");

)

程序运行后的输出结果是________。

A)l,2,3,4,5,6,7,8,9,10, B)10,9,8,7,6,5,4,3,2,1, C)l,2,3,8,7,6,5,4,9,10, D)l,2,10,9,8,7,6,5,4,3, 答案:C

评析:本题并不是对数组的所有元素进行排序,而是对从a[3]开始往后的4个元素进行排序。

(31)对于基类型相同的两个指针变量,不能进行的运算是________。 A)< B)= C)+ D) 答案:C

评析:对于指针变量,除了常规的*、&、=运算外,还可以对其比较地址的大小,计算两指针变量的差值,但对于地址执行+、*、/、%等算术运算都是无意义的。 (32)有以下程序 main()

{char a[]={’a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’\O’};int I,J; i=sizeof(a); j=strlen(a); printf(\"%d,%d\n\",I,J); }

程序运行后的输出结果是________。 A)9,9 B)8,9 C)1,8 D)9,8 答案:D

评析:sizeof()函数是计算字符数组 的长度,因为’\0’也是一个字符,要计算在内。strlen()是计算字符串长度的函数,遇到’\0’即认为是字符串结束,不把空字符计入字符串的长度。

(33)以下不能正确定义二维数组的选项是_________。 A)int a[2][2]={{1},{2}} B)int a[][2]={l,2,3,4} C)int a[2][2]={{l},2,3} D)int a[2][]={{1,2},{3,4}} 答案:D

评析:在二维数组进行初始化时,可以省略数组的一个维度,但省略的维数只能是高维部分,不能是低维。对于多维数组的初始化时,也是同样处理,因此,本题答案应选D,其它选项均能对数组进行正确的初始化。 (34)有一函数 ┏ l x>O y=┨ O x=O

┗ -1 x 以下程序段中不能根据x的值正确计算出y的值的是___________。 A)if(x>O)y=l;else if(x==O)y=0;else y=-l;

B)y=O;if(x>O)y=1;else if(x C)y=0;if(x>=0)if(x>O)y=1;else y=-l; D)if(x>=0)if(x>O)y=l;else y=O;else y=-1; 答案:C 评析:本题应当注意if与else的配对关系。从最内层开始,else总是与它上面最近的(未曾配对的)if配对。

(35)以下程序中的函数reverse的功能是将a所指数组中的内容进行逆置。 void reverse(int a[],im n) {int i,t;

for(i=O;i {t=a[i];a[i]=a[n-l-i];a[n-1-i]=t;} }

main()

{int b[10]={1,2,3,4,5,6,7,8,9,10};int i,s=0; reverse(b,8);

for(i=6;i<10;i++)s+=b[I]; printf(\"%d\n\",s); }

程序运行后的输出结果是

A)22 B)10 C)34 D)30 答案:A

评析:本题并不是将整个数组中的内容逆置,而是逆置前8个元素。逆置后的数组为:8,7,6,5,4,3,2,1,9,10通过for循环计算b[6]+b[7]+b[8]+b[9]即2+1+9+10=22。 (36)执行下面的程序段后,变量k的值为___________。 int k=3,s[2];

s[0]=k;k=s[1]*10;

A)不确定 B)33 C)30 D)10 答案:A

评析:由于本题中未对数组进行初始化,因此程序运行时,数组s中各个元素的值都是不确定的,虽然在代码中对s[O]进行了赋值,但没有对s[1]进行赋值,故执行l(=s[1]+10;后,k的值不确定。 (37)有以下程序 #include main()

{ char’p=\"abcde\0 fghjik\O\"; printf(\"%d\n\; }

程序运行后的输出结果是__________。 A)12 B)15 C)6 D)5 答案:D

评析:\"\0\"是字符串结束标志,当遇到此标志时字符串已结束。所以字符串的长度为5。

(38)程序中头文件t)rpel_h的内容是: #define N 5 #define Ml N*3 程序如下:

#include\"type 1.h\" #define M2 N*2 main() { int i; i=MI+M2;

printf(\"%d\n\",i); }

程序编译后运行的输出结果是_________。

A)lO B)20 C)25 D)30 答案:C

评析:宏定义就是用一个指定的标识符(即名字)来代表一个字符串,它的一般形式为: #define 标识符 字符串

这种方法使用户能以一个简单的名字代替一个长的字符串,因此把这个标识符(名字)称为\"宏名\"。

(39)若有以下的程序段,则在执行for语句后,*(*(pt+1)+2)表示的数组元素是________。 int t[3][3],*pt[3],k;

for(k=0;k<3;k++)pt[k]=&t[k][O];

A)t[2][0] B]t[2][2] C]t[1][2] D]t[2][1] 答案:C

评析:在题面中定义了一个二维数组l,及一个一维指针数组pt,在循环语句中分别对指针数组赋值为二维数组t的第k行首元素的地址。*(pt+1),表示的是数组pt中下标为1的元素的值,而该值为二维数组t的第l行(从第0行算起)的首元素的地址,故*(*(pt+1)+2)表示的是数组t中t[1] [2]的元素的值。 (40)以下叙述中错误的是_________。

A)二进制文件打开后可以先读文件的末尾,而顺序文件不可以 B)在程序结束时,应当用fclose函数关闭已打开的文件

C)利用fread函数从二进制文件中读数据,可以用数组名给数组中所有元素读入数 据

D)不可以用FILE定义指向二进制文件的文件指针 答案:D

评析:每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息,这些信息是保存在一个名为FILE的结构体类型的结构体变量中的。而文件又分为ASCII文件和二进制文件,所以,、可以用FILE定义指向二进制文件的文件指针。 (41)有以下程序 #include

main(int argc,char *argv[]) { inti,len=0;

for(i=1;i printf(\"%d\n\; )

程序编译连接后生成的可执行文件是exl.exe,若运行时输入带参数的命令行是: exl abcd efg 10↙ 则运行的结果是________。 A)22 B)17 C)1 2 D)9 答案:D

评析:本题主函数带有两个参数,一个int型变量argc,另一个是char型的一维一级指针数组 argv。当主函数被执行时,系统自动将根据命令行的情况,分别给主函数的两个参数赋值。argc用于存放命令行中命令字和参数的总和的个数4,argv 用来存放命令行中命令字和所有参数的字符串,并规定argv[0]存放命令字字符串exl,argv[1]用来存放第一个参数的字符串abcd,argv [21用来存放第二个参数的字符串e龟,argv[3]用来存放第三个参数的字符串10。那么for循环将循环3次分别将argv数组中元素的长度累加到 len中,所以答案为9。

(42)若有以下说明和定义:__________。

fun(*C){…} main()

{int(*a)()=fun,(*b)(),w[10],c;}

在必要的赋值后,对fun函数调用正确的是_________。

A)a=a(w); B) (*a)(&C); C)b=*b(w); D)fun(b); 答案:B

评析:在主函数中定义了二个指向函数的指针a,b,其中指针a指向函数fun,指针b未初始化。对于选项A、c,其返回类型是错误的,对于D,其调用的参数是错误的,选项B是正确的,其相当于调用函数fhll(&C);。 (43)有以下程序 intfa(intx、 {returnx*x;} int fb(intxl

{returnX*X*x;}

int f(int(*f1)(),int(*f2)(),int x) {return f2(x)-fl(x);) main() { int i;

i=f(fa,fb,2);printf(\"%d\n\",i); }

程序运行后的输出结果是 A) 4 B)1 C)4 D)8

答案:C

05年9月等级考试二级C语言考前密卷3

选择题(1)~(10)每小题2分,(11)-(50)每小题1分,共60分)

下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。

(1)算法能正确地实现预定功能的特性称为算法的__________。 A)确定性 B)易读性 C)健壮性 D)高效性 答案:A 评析:算法的确定性是指算法中的每一个步骤都必须是有明确定义的,不允许有摸棱两可的解释,也不允许有多义性,即每个步骤都是预先定义好的。

(2)数据在计算机存储器内表示时,物理地址与逻辑地址相同并且是连续的,称之为__________。

A)存储结构 B)逻辑结构 C)顺序存储结构 D)链式存储结构 答案:C

评析:如果数据之间在逻辑上有相邻关系时,能够在物理位置上体现出来,则这种存储结构称为顺序存储结构。如果数据之间的逻辑相邻关系在存储时是靠存储地址的指针来体现的,则称为链式存储结构。

(3)从未排序序列中依次取出一个元素与已排序序列中的元素依次进行比较,然后将其放 在已排序序列的合适位置,该排序方法称为__________。

A)希尔排序 B)冒泡排序 C)插入排序 D)选择排序

答案:C

评析:最基本的排序方法有三大类,即选择排序、交换排序和插入排序。 (4)对线性表进行折半查找时,要求线性表必须__________。 A)以顺序方式存储 B)以链接方式存储

C)以顺序方式存储,且结点按关键字有序排列 D)以链接方式存储,且结点按关键字有序排列 答案:C

评析:折半查找算法要求被查找的对象必须采用顺序的存储结构,并且关键字有序排列。

(5)链表不具备的特点是__________。 A)可随机访问任意一个结点

B)插入和删除不需要移动任何元素 C)不必事先估计存储空间 D)所需空间与其长度成正比 答案:A

评析:顺序表可以随机访问任意一个结点,而链表必须从第一个数据结点出发,逐一查找每个结点。

(6)下列描述中正确的是__________。 A)软件是物理产品 B)程序就是软件

C)软件工程由方法、工具和过程三部分组成 D)软件工程是一个机械工程 答案:B

评析:软件是与计算机系统操作有关的程序、规程、规则及任何与之有关的文档和数据。计算机软件是一种逻辑产品,而不是物理产品。软件工程是用工程、科学和数学的原则与方法研制、维护计算机软件的有关技术及管理方法。软件工具可以自动或半自动的生成软件文档。软件工程过程是管理者控制软件开发各环节的基本方法。

(7)软件测试是保证软件质量最关键的步骤,下列关于白盒测试技术描述中不正确的是_______。

A)保证模块中每一独立的路径至少执行一次 B)保证所有判断的每一分支至少执行一次

C)保证每一循环都在边界条件和一般条件下最多执行一次 D)验证所有内部数据结构的有效性 答案:C

评析:软件测试技术中,白盒测试技术和黑盒测试技术是两种基 本的软件测试手段。白盒测试技术有四个原则:保证模块中每一个独立的路径至少执行一次;保证所有判断的每一分支至少执行一次;保证每一循环都在边界条件和一般条件下至少执行一次;验证所有内部数据结构的有效性。

(8)客观世界中任何一个事物都可以看成一个对象。但是从计算机的角度看,一个对象应 该包含两个要素:一个是_______,另一个是需要进行的操作。

A)语句 B)命令 C)算法 D)数据 答案:D

评析:在面向对象的程序设计中,从计算机的角度看,一个对象应该包含两个元素:

数据,相当于家庭中的成员;操作,相当于家庭成员的活动。对象就是一个包含数据与这些数据有关的操作的集合。

(9)下列概念中,不是数据库管理系统必须提供的数据控制功能的是_______。 A)安全性 B)完整性 C)移植性 D)一致性 答案:C

评析:数据库管理系统提供的数据控制功能是指在数据库建立、运行和维护时,由DBMS统一管理、统一控制,以保证数据的安全性、完整性和一致性。

(10)设关系R和关系S的元数分别是3和4,关系T是R和S的笛卡儿积,即T=R×S,则关系T的元数是_______。

A)7 B)9 C)12 D)16 答案:A

评析:笛卡儿积的定义是设关系R和s的元数分别是r和s,R和s的笛卡儿积是一个(r十s)元属性的集合,每一个元组的mr个分量来自R的一个元组,、后s爪分量来自s的一个元组。所以关系T的属性元数是3+4=7。

(11)以下叙述中正确的是_______。

A)C语言中的全部数据类型都是基本类型 B)C语言中的全部数据类型都是构造类型

C)C语言中的数据类型只有两种,即基本类型和构造类型 D)以上都不对 答案:D

评析:c语言中的数据类型有四种,即基本类型、构造类型、指针类型和空类型。 (12)下列可作为C语言赋值语句的是_______。 A)x=3,y=5 B)a=b=6 C)i--; D)y=6 答案:C

评析:此题实际上是考查对c语言中\"语句\"概念的理解。表达式后面只有加上分号才能成为语句,因此,A),B),D)均是表达式,只有C)为语句。且利用自减运算符使i值减l。

(13)以下可以定义为用户标识符的是_______。 A)printf B)net C)3com D)int 答案:B

评析:c语言中的标识符分为两类。一类是系统标识符,即系统定义使用的关键字标识符等。另一类是用户自定义标识符。两类标识符都只能用字母、数字和下划线三种字符组成。且第一个字母必须为字母或下划线。并且用户自定义标识符不能使用系统关键字相同的标识符。

(14)以下选项中,不能作为合法常量的是_______。 A)0X2A B)015 C).2.8e9 D)123.6e0.4 答案:D

评析:c程序中的基本数据类型有整型、实型和字符型。其中整型常量三种形式,即八进制、十进制和十六进制。而实型常量有十进制小数和指数形式两种。

(15)有以下程序 main() {

int a; char c=10: float f=-100.0;double x; clrscrO;

a=f/=c*=(x=6.5);

printf(\"%d,%c,%3.1C%3.1f\n\",a,c,Cx); }

程序运行后的输出结果是_______。

A)1,65,1,6.5 B)1,A,1.5,6.5 C)1,65,1.5,6.5 D)2,65,1.5,6.5 答案:B

评析:在赋值语句a=f/=c*=(x=6.5);中,可得x=6.5,将x的值乘以10赋予c,为65,再将f=100的值除以65,并按照四舍五入的原则,重新赋给f’得到f=-I.5。最后将f的值赋给a,由于a是整型,所以得到a=l。

(16)以下语句序列中错误的是_______。

A)int x=l; B)int x=0; C)int x=2.3; D)int x=l,y=l; x++; (x+1)++; (x++)+1; (x++)+(y一); 答案:B

评析:c语言中的自加、自减运算只能用于变量,而不能用于常量或表达式。 (17)有定义语句:im.a;char b[10],c;则错误的输入语句是__________。 A)scanf(\"%d%s%c\",&a,D,&C); B)scanf(\"%d%s%c\",&a,&b,&C); C)scanf(\"%d%s%d\",&a;b,&C); D)scanf(\"%d%s\"&c,a,%,&C); 答案:D

评析:在scanf()语句中,在给整型变量和字符型赋值时,必须要在变量名前加取地址符号(&),而对字符型数组赋值时,可以不在变量名前不加取地址符号,也可以加取地址符号。而且对于字符型变量既可以赋给整型值,也可以赋给字符型值。

(18)有定义语句:int x,y;,若要通过scan即x=%d,y=%n&x,&y);语句使变量x得到数值11,变量y得到数值12,下面四组输入形式中,正确的是________。

A)1l 12<回车> B)ll,12<回车>

C)x=l l,y=12<回车> D)x=ll,<回车>12,<回车> 答案:C

评析:在scanf()语句中,对于变量的赋值必须与数据的输入格式相一致。特别是一些字符说明。

(19)设有如下程序段: int x=6, y=4;

printf(\"%d\n\",(x%y,x&&y)); 则以下叙述中正确的是__________。

A)输出语句中格式说明符的个数少于输出项的个数,不能正确输出 B)运行时产生出错信息 C)输出值为2 D)输出值为l 答案:D

评析:在逗号表达式(表达式1,表达式2)中,其运算方法是先求表达式1的值,然后求表达2的值,整个逗号表达式的值是表达式2的值。

(20)有以下程序 main() {

int i=1.j=2,k=3; clrscr();

if(i++== j&&k--==j)

printf(\"%d,%d,%d\",i++’j,k); else

printf(\"%d,%d,%d\",++i,++j,k--); }

程序运行后的输出结果是_________。

A)l,2,3 B)2,2,3 C)2,3,2 D)3,3,3 答案:D

评析:按照运算符的优先级,最先计算的是关系运算i++==j,由于此关系式不成立,,它的结果是为\"假\"值,由此可以确定逻辑与运算的结果必然是\"假 \"值,因此参加逻辑与运算的另一个关系表达式\"k--==j\"的值,系统不再对它进行运算。此时变量i的值自加1变成2,然后执行else语句后的 printf语句。

(21)有定义语句:int a=l,b=l,c=3,x;,则以下选项中各程序段执行后,x的值不等于3是__________。

A)if(c else if(b (28)有以下程序 void fun(char *a,char *b) { a=b; (*a)++; }

main() {

char c1=’A’,c2=’a,*p1,*p2; clrscr0; pl=&cl; p2=&c2; fun(p1,p2);

printf(\"%c%c\n\; }

程序运行后的输出结果是__________。 A)Ab B)aa C)Aa D)Bb 答案:A

评析:在函数调用中,可以分值传递和地址传递。若参数传递的是简单数据类型的数值,称为值传递方式。若参数传递的是变量的地址,称为地址传递方式。

(29)若有定义:static int fun(int a,int b),则以下叙述中错误的是_________。 A)定义了一个返回值为整型的静态函数 B)该函数只能被同一文件内的函数调用 C)该函数可以在任何文件中被调用 D)该函数属于内部函数 答案:C

评析:根据函数能否被其他源文件调用,将函数区分为内部和外部函数。如果将函数定义为外部函数,则在函数首部最左端冠以关键字eXtem。如果将函数定义为内部函数,则在函数首部最左端冠以关键字static。内部函数只能被本文件中的其它函数调用。而外部函数则可以被其他任何c程序文件调用。

(30)以下能正确定义一维数组的选项是_________。 A)int num[]; B)int num[0..100];

C)#define N 100; D)int N=100; int num[N]; int num[N]; 答案:C

评析:有二种方法指定数组长度。其一是直接在数组名后面的方括号内输入数组的长度。其二是,在定义数组的同时对其赋值,由实际赋值的元素个数自动确定数组的长度。

(31)有以下程序

fun(int a[] ,intm,int n) { int I,J;

for(i=m;i a[i+ll=a[I]+3; }

main() {

int i,a[6l={2,4,6,8,10,12}; clrscr0; fun(a,2,5);

for(i=O;i<6;i++) printf(\"%\"a[I]); }

程序运行后输出的结果是__________。 答案:B

评析:在调用函数时,既可以用单个的变量作为参数,也可以用数组名作为参数。还可将数组的下标值作为实参使用。在本题中,是将数组名和数组的下标值作为实参。

(32)以下不正确的叙述是__________.

A)在C程序中,逗号运算符的优先级最低。 B)在C程序中,T和t是两个不同的变量

C)若a和b类型相同,在执行了赋值表达式a=b后,b中的值将放入a中,而b中的值不变。

D)当从键盘输入数据时,对于整型变量只能输入整型数据。对于实型变量只能输入实型数据。

答案:D 评析:在c语言中,为方便表达式的运算,对所有的运算符都设定了一定的优先级,其中逗号运算符的优先级最低。c语言中的数据有常量和变量之分,其中变量是区分大小写的,也就是说T和t是两个不同的变量名。将某个变量的值赋给其它的变量之后,并不影响其本身的值。当定义一个整型变量后,可以从键盘上对其输入整型值,也可以是字符型的数据。如果将字符型的值赋给整型变量,则它接受的是字符常量的ASCII码值。实型变量也可以接收整型值。

(33)有以下程序 pf(char *p,int n) { int i;

for(i=0;i p[i]=p[I]+32; }

main() {

char a[]=\"ABCD\";

int i: clrscr(); pf(a,4);

for(i=0;i<4;i++) printf(\"%c\",a[I]); }

程序运行后的输出结果是________。

A)ABCD B)ABCD\0 C)abcd D)abed\0 答案:C

评析:通过指向数组的指针可以引用数组中的任何元素,并且对其进行各种运算。本题中就是通过指向数组的指针将一字符数组中的所有大写字母转换成相应的小写字母。

(34)有以下程序 main() {

int a[3][3],*p,i; clrscr(); p=&a[0][0];

for(i=0;i<9;i++) p[i]:i+2;

printf(\"%d\n\",a[2][11); }

程序运行后的输出结果是_________。 A)3 B)6 C)9 D)2 答案:C

评析:当某个指针变量指向多维数组时,可以用其每次加l来顺序操作数组中的元素。在此题中,a[3][3]={{2,3,4} ,{5,6,7},{8,9,10}}。而最后输出的a[2][1]就是第3行的第2列的元素,即9。

(35)有以下程序 #include

#define F(X,Y)(X)*(Y) main() {

int a=3,b=4; clrscr();

printf(\"%d\n\",F(a--,++b)); }

程序运行后的输出结果是_________。 A)8 B)10 C)12 D)15 答案:D

评析。在带参数的宏定义中,不是简单的字符替换。其方法是:在程序中如果有带实参的宏, (如F(x,Y)),则按#defin

因篇幅问题不能全部显示,请点此查看更多更全内容