计算机二级C语言试题库_第1页
计算机二级C语言试题库_第2页
计算机二级C语言试题库_第3页
计算机二级C语言试题库_第4页
计算机二级C语言试题库_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

计算机二级C语言试题库

1有以下程序

mainO

{inta=l,b=2,m=0,n=0,k;

k=(n=b>a)||(m=aprintf%d\nz,,k,m);

)

程序运行后的输出结果是

A)0,0B)0,1C)1,0D)1,1

2在一个C程序中

A)main函数必须出现在所有函数之前b)main函数可以在任何地方出现

C)main函数必须出现在所有函数之后D)main函数必须出现在固定位置

3有以下程序

main()

{inta=5,b=4,c=3,d=2;

if(a>b>c)

printf(,,%d\n,z,d);

elseif((c-l>=d)==1)

printf(〃%d\n〃,d+1);

else

printf("%d\n〃,d+2);

}

执行后输出结果是

A)2B)3C)4D)编译时有错,无结果

4有以下程序

main()

{inti;

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

switch(i)

{case1:printf(/z%d",i);

case2:printf(,z%d〃,i);

default:printf('%d”,i);

)

)

执行后输出结果是

5有以下程序

main()

{intk=4,n=0;

for(;n{n++;

if(n%3!=0)continue;

k-;}

printf("%d,%d\n/z,k,n);

)

程序运行后的输出结果是

A)1,1B)2,2C)3,3D)4,4

6有以下程序

fun(inta,intb)

{if(a>b)return(a);

elsereturn(b);

)

main()

{intx=3,y=8,z=6,r;

r=fun(fun(x,y),2*z);

printf(〃%d\n〃,r);

)

程序运行后的输出结果是

A)3B)6C)8D)12

7有以下程序

int*f(int*x,int*y)

{if(*x<*y)

returnx;

else

returny;

1

main()

{inta=7,b=8,*p,*q,*r;

p=&a;q=&b;

r=f(p,q);

printf(〃%d,%d,%d\n〃,*p,*q,*r);

}

执行后输出结果是

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

8以下能正确地定义整型变量a,b和c并为其赋初值5的语句是

A)inta=b=c=5;B)inta,b,c=5;

C)a=5,b=5,c=5;D)a=c=b二5;

9若二维数组a有m歹U,则在a[i][j]前的元素个数为

A)j*m+iB)i*m+jC)i*m+j-lD)i*m+j+l

10下面程序段是输出两个字符串中对应相等的字符。请选择填空

charx口=“programming”;

chary口=“Fortran”;

inti=0;

while(x[i]!=,\0'&&y[i]!=,\0')

if(x[i]==y[i])printf(,[]);

elsei++;

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

11若使用一维数组名作函数实参,则以下正确的说法是

A)必须在主调函数中说明次数组的大小

B实参数组类型与形参数组类型可以不匹配

C在被调函数中,不需要考虑形参数组的大小

D实参数组名与形参数组名必须一致

12以下程序的正确运行结果是

Sinclued

main()

{intk=4,m=l,p;

p=func(k,m);printf(a%dn,p);

p=func(k,m);printf(a%d\nw,p);

}

func(inta,intb)

{staticintm=0,i=2;

i+=m+1;

m=i+a+b;

return(m);

)

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

13若有说明:int*p,m=5,n;以下正确的程序段是

A)p=&n;scanf("%d",&p);

B)p=&n;scanf(w%dw,*p);

C)scanf(“%d",&n);*p=n;

D)p=&n;*p=m;

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

mainO

{inta,b,k=4,m=6,*pl=&k,*p2=&m;

a二pl二二&m;

b=(-*pl)/(*p2)+7;

printf("a二%d\n",a);

printf("b二%d\n",b);}

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

15若要用fopen函数打开一个新的二进制文件,该文件要既能读也能写,则文件

方式字符串应是

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

16根据定义和数据的输入方式,输入语句的正确形式为

已有定义:floatfl,f2;

数据的输入方式:4.52

3.5

A)scanf(;

B)scanf(<<%f%fw,&fl,&f2);

0scanf(rt%3.2f%2.If",&f1,&f2);

D)scanf(rt%3.2f%2.lfw;

17分析以下程序运行结果

#include

intfunc(intn){

if(n==l)

return1;

else

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

)

voidmain(){

intx;

x=func(5);

printf("%d\n",x);

)

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

18分析以下程序运行结果

Sinclude

voidmainO{

inty=2,a=l;

while(y-!=-l){

do(

a*=y;a++;

}while(y—);}

printf(u%d,%d\n,r,a,y);}

A)1,-2B)2,101,0D)2,-l

19下面程序段的运行结果是

chara[7]=wabcdef”;

charb[4]="ABC”;

strcpy(a,b);

printf("%c”,a[5]);

A)空格B)\0C)eD)f

20下面是对s的初始化,其中不正确的是

A)chars[5]={aabcw);B)chars[5]={'a','b','c'};

C)chars[5]=””;D)chars[5]=wabcdefw;

21执行语句for(i=l;i++<4;);后变量i的值是

A)3B)4C)5D)不定

22以下程序段

x=-l;

do

{x=x*x;}

while(!x);

A)是死循环B)循环执行二次

C)循环执行一次D)有语法错误

23若有以下定义和语句:

iniondata

{inti;

charc;

floatf;

}a;

intn;

则以下语句正确的是

A)a=5;B)a={2,*a',1.2};C)printf(<<%d\nw,a);D)n=a;

24下面程序的运行结果是

main()

(

structcmplx{intx;

inty;

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

printf(u%d\nw,cnum[0].y/cnum[0].x*cunm[l].x);

)

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

25以下程序的运行结果是

main()

{intk=4,a=3,b=2,c=l;

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

A)4B)3C)2D)1

二填空

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

intm=5,y=2;

2若有定义:intb=7;floata=2.5,c=4.7;:则F面表达式的值为

a+(int)(b/3*(int)(a+c)/2)%4

3有inta=3,b=4,c=5;,则以下表达式的值为

!(a十b)十cT&&b十c/2

4条件"2或x〈TO”的c语言表达式是

5以下程序的功能是判断输入的年份是否是闰年.请在[]内填入正确内容

main()

{inty,f;

scanf("%d",&y);

if(y%400==0)f=l;

elseif([5])f=l;

else[6];

if(f)printf(a%dis”,y);

elseprintf(a%disnot”,y);

printf("aleapyear\n>,);

}

6下面程序的功能是计算100至1000之间有多少个数其各位数字之和是50请填

#include

main(0

{inti,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];

elsecount十十;

printf(a%dff,count);

}

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

main()

{inta[2][3]={{1,2,3},{4,5,6)};

intb[3][2],I,j;

printf("arraya:\n");

for(i=0;i<=l;i++)

{for(j=0;[10];j++)

{printf(a%5dw,a[i][j]);

[11];

}

printf(“\n”);

)

printf(aarrayb:\n");

for(i=0;[12];i++)

{for(j=0;j<=l;j++)

printf(“%5d”,b[i][j]);

printf("\n”);

}

}

8以下search函数的功能是利用顺序查找法从数组a的10个元素中对关键字m

进行查找。顺序查找法的思路是:从第一个元素开始,从前向后依次与关键字你

叫,直到找到此元素或查找到数组尾部时结束。若找到,返回此元素的下标;若

仍未找到,则返回值请填空

Sinclude

intsearch(inta[10],intn)

{intI;

for(i=0;i<=9;i++)if([l])return(i);

return(-1);

}

main()

{inta[13],m,i,no;

no=search([14]);

if([15])printf(rt\nOKFOUND!%dw,no+1);

elseprintf(a\nSorryNotFound!”);

)

9若有定义:inta[]={2,4,6,8,10,12},*p二a;则*(p+D的值是[16],*(a+5)的值

是[⑺

10将任意输入的一个偶数n分解为两个素数之和,并给出各种分解方法

#include

mainO

intn,i;

intcheck(intx);

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);

}

intcheck(intx)

(

inti;

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

return(1);

}

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

到buf字符数组中。函数值为[21]

12设数组a包括10个整型元素。下面程序的功能是求出a中各相邻元素的和,

并将这些和存在数组b中,按每行3个元素的形式输出。请填空

mainO

{inta[10],b[10],i;

for(i=0;i<10;i++)

scanf(;

for([22];i<10;i++)

[23]

for(i=l;i<10;i++)

{printf(a%3dM,b[i]);

if([24]==0)printf("\n”);

)

)

13如果以下程序输入的是wearestudents,则输出的结果是[25]

Sinclude"stdio.h"

voidmain()

{chars[81],*p;

printf(uInputasentence:\nv);gets(s);

for(p=s;*p;p++)

if(*p==32)〃空格键的ASCH值是32

{if(*(p+1)!=32)printf("\n");}

elseputchar(*p);

)

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

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

下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选

项涂写在答题卡相应位置上,答在试卷上不得分。

(1)算法分析的目的是o

A)找出数据结构的合理性B)找出算法中输入和输出之间的关系

C)分析算法的易懂性和可靠性D)分析算法的效率以求改进

答案:D

评析•:算法分析是指对一个算法的运行时间和占用空间做定量的分析,一般

计算出相应的数掌级,常用时间复杂度和空间复杂度表示。分析算法的目的就是

要降低算法的时间复杂度和空间复杂度,提高算法的执行效率。

(2)n个顶点的强连通图的边数至少有。

A)n-lB)n(n-1)C)nD)n+1

答案:C

评析:在有向图中,若任意两个顶点都连通,则称该图是强连通图,这样的

有向图的形状是环状,因而至少应有n条边。

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

是O

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

答案:B

评析:当数据表A中每个元素距其最终位置不远,说明数据表A按关键字值

基本有序,在待排序序列基本有序的情况.下,采用插入排序所用时间最少,故

答案为选项Bo

(4)用链表表示线性表的优点是。

A)便于插入和删除操作B)数据元素的物理顺序与逻辑顺序相同

C)花费的存储空间较顺序存储少D)便于随机存取

答案:A

评析:链式存储结构克服了顺序存储结构的缺点:它的结点空间可以动态申

请和释放;它的数据元素的逻辑次序靠结点的指针来指示,不需要移动数据元素。

故链式存储结构下的线性表便丁•插入和删除操作。

(5)下列不属于结构化分析的常用工具的是o

A)数据流图B)数据字典C)判定树D)PAD图

答案:D

评析•:结构化分析的常用工具有数据流图、数据字典、判定树和判定表。而

PAD图是常见的过程设计工具中的图形设计。

(6)软件开发的结构化生命周期方法将软件生命周期划分成

A)定义、开发、运行维护

B)设计阶段、编程阶段、测试阶段

C)总体设计、详细设计、编程调试

D)需求分析、功能定义、系统设计

答案:A

评析:通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称

为软件生命周期。它可以分为软件定义、软件开发及软件运行维护三个阶段。

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

做是。

A)循环的集合B)地址的集合C)路径的集合D)目标的集合

答案:c

评析:软件的白盒测试方法是把测试对象看做一个打开的盒子,它允许测试

人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻

辑路径进行测试。

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

系统具有o

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

C)专门的数据管理软件D)特定的数据模型

答案:D

评析•:在文件系统中,相互独立的记录其内部结构的最简单形式是等长同格

式记录的集合,易造成存储空间大量浪费,不方便使用。而在数据库系统中,数

据是结构化的,这种结构化要求在描述数据时不仅描速数据本身,还要描述数据

间的关系,这正是通过采用特定的数据模型来实现的。

(9)分布式数据库系统不具有的特点是_______o

A)分布式B)数据冗余

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

答案:B

评析:分布式数据库系统具有数据分布性、逻辑整体性、位置透明性和复制

透明性的特点,其数据也是分布的;但分布式数据库系统中数据经常重复存储,

数据也并非必须重复存储,主要视数据的分配模式而定。若分配模式是一对多,

即一个片段分配到多个场地存放,则是冗余的数据库,否则是非冗余的数据库。

(10)下列说法中,不属于数据模型所描述的内容的是。

A)数据结构B)数据操化C)数据查询D)数据约束

答案:C

评析:数据模型所描述的内容有3个部分,它们是数据结构、数据操作和数

据约束。数据操作主要是描述在相应数据结构上的操作类型与操作方式;数据模

型中的数据约束主要描述数据结构内数据间的语法、语义联系,它们之间的制约

与依存关系,以及数据动态变化的规则,以保证数据的正确、有效与胡容。

(11)在结构化程序设计中,限制使用got。语句的原因是o

A)提高程序的执行效率

B)提高程序的清晰性和可靠性

C)便于程序的合成

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

答案:B

评析:在c语言中,限制使用goto语句,其目的是为了提高程序的清晰性与

可靠性,一般来说,除了从多重循环中跳出,一般不使用got。语句。

(12)以下选项中合法的实型常数是o

A)5E2.0B)E-3C).2E0D)l.3E

答案:C

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

必须为整数。

(13)下列叙述中,正确的是_______o

A)C语言中既有逻辑类型也有集合类型

B)c语言中没有逻辑类型但有集合类型

B)C语言中有逻辑类型但没有集合类型

B)C语言中没有逻辑类型也没有集合类型

答案:B

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

有提供逻辑类型,在c中一般用整型来表示逻辑类型。在自定义类型中,c提供了

struct,enum及union类型,但没有提供集合类型,在pascal中提供了集合类型

seto

(14)已知大写字母A的AS的I码是65,小写字母a的ASCII码是97,则用八

进制表示的字符常量''101'是o

A)字符AB)字符aC)字符eD)非法的常量

答案:A

评析:八进制101转换为十进制即为65,而字母A的ASCII码是65,所以用

八进制表示的字符常量‘\101'是A。

(15)设a和b均为double型常量,且a=5.5、b=2.5,则表达式设nt)a+b

/b的值是©

A)6.500000B)605.500000D)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的值为1、

j的值为2、k的值为3,以下选项中正确的输入语句是o

A)scanf(〃%2d%2d%2dtt,&i,&j,&k);

B)scanff%d%d%d",&i,&j,&k);

C)scanfCz%d,%d,%dfl,&i,&j,&k);

D)scanfCi=%d,j=%dfk=%d-t,&i,&j,&k);

答案:C

评析:如果在〃格式控制〃字符串中除了格式说明以外还有其它字符,则在输

入数据时应输入与这些字符相同的字符。

(18)关于goto语句的使用,下面正确的是。

A)goto2;B)gotog;C)gotog:;D)goto2;

2:exit(0);g:exit(0);g:exit(0);2exit(0);

答案:B

评析:在c中,got。语句后面的标号的命名规则与c语言中标识符的命名规

则相同,在Noto语句后面的标号后不要加〃:〃号,在某一行上添加标号时,在标

号的后面要添加〃:〃号。

(19)若有以下程序:

mainO

{intk=2,i=2,m;

m=(k+=I*=k);

printf(z,%d,%d、n〃,m,i);

}

执行后的输出结果是O

A)8,6B)8,306,4D)7,4

答案:C

评析:在赋值符"二〃之前加上其它运算符,可以构成复合的运算符。此运算为

右结合性,即从右往左计算。I*=k即i=i*k=2*2=4,k=k+i=2+4=6,然后将k的值

赋给mo

(20)以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。

#defineN10

voidarrin(intx[N])

{inti=0;

while(i}

在下划线处应填入的是o

A)x+iB)&x[i+1]C)x+(i++)D)&x[++I]

答案:C

评析:在c中,对于一维数组而言,数组变量表示数组中首元素的的地址。

当用scanf函数向数组x的第i个元素中输入整型数据时,只要执行scanf(〃%

d〃x+i):由于要循环输入数组中和各个元素,必须要使其地址值不断自增。故本

题答案为c。

(21)已有定义:intx=3,尸4,z=5;,则表达式!(x+y)+zT&&y+z/2的值是

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

答窠:D

评析:在本题中,运算符的优先级分别为:!>/>+「>&&即:!(3+4)+5T&&4+5

/2=0+5-1&&4+2=4&&6=1O

(22)以下选项中,与k=11++完全等价的表达式是。

A)k=n,n=n+lB)n=n+l,1(=nC)1(二什nD)k+—n+1

答案:A

评析:n++是自增运算,是先使用,然后再使n加1,

(28)己定义以下函数:

fun(char*p2,char*pl)

{while((*p2=*pl)!=,\0?){pl++;p2++;}}

函数的功能是。

A)将pl所指字符串复制到p2所指内存空间

B)将pl所指字符串的地址赋给指针p2

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

D)检查pl和p2两个指针所指字符串中是否有‘'0'

答案:A

评析:由于在while循环的条件中执行了*p2二*pl运算,其作用是将*pl中的

内容复制到*p2中,而(*p2=*pl)!=''0'的作用是判断当前字符是否为字符串结

束字符'\0'。在循环体中pl十十,p2十十的目的是移动字

(29)有以下程序

voidfun(char*c,intd)

{*c=*c+1;d=d+1;

printf("%c,%c,〃,*c,d);

)

main()

{chara:<>A',b。'a';

fun(&b,a);printfC%cf%c\n〃,a,b);

)

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

A)B,a,B,aB)a,B,a,BC)A,b,A,bD)b,B,A,b

答案:D

评析:将a,b代入函数得+&b~&b+l=a+l=b,所以打印出第一个字母b;

a=a+1=A+1=B,打印出第二个字符B;

a='A',输出字母A;

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

(30)以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排

序。

voidsort(inta[],imn)

{intij,t;

for(i=0;ifor=i+l0if(a[i]}

mainO

{intaa[10]:{1,2,3,4,5,6,7,8,9,10},i;

sort(&aa[3],5);

for(i=0:iprintf(〃\n");

)

程序运行后的输出结果是O

A)l,2,3,4,5,6,7,8,9,10,B)10,9,8,7,6,5,4,3,2,1,

01,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)对于基类型相同的两个指针变量,不能进行的运算是o

A)<B)=0+D)

答案:C

评析:对于指针变量,除了常规的*、&、=运算外,还可以对其比较地址的大

小,计算两指针变量的差值,但对于地址执行+、*、/、%等算术运算都是无意

义的。

(32)有以下程序

main()

{chara[]={,a','b','c','d'e','f','优,'h','\0r};intI,J;

i=sizeof(a);j=strlen(a);

printf(〃%d,%d\n〃,I,J);

程序运行后的输出结果是

A)9,9B)8,901,8D)9,8

答案:D

评析:sizeofO函数是计算字符数组的长度,因为‘\0'也是一个字符,要

计算在内。strlenO是计算字符串长度的函数,遇到'\0,即认为是字符串结束,

不把空字符计入字符串的长度。

(33)以下不能正确定义二维数组的选项是_____。

A)inta[2][2]={{1},{2}}B)inta[][2]={1,2,3,4}

Ointa[2][2]={{l},2,3}D)inta[2][]={{b2},{3,4})

答案:D

评析:在二维数组进行初始化时,可以省略数组的一个维度,但省略的维数

只能是高维部分,不能是低维。对于多维数组的初始化时,也是同样处理,因此,

本题答案应选D,其它选项均能对数组进行正确的初始化。

(34)有一函数

r1x>0

y=T0x=0

L-1x以下程序段中不能根据x的值正确计算出y的值的是

A)if(x>0)y=l;elseif(x-O)v=0;elsev=-l;

B)y=O;if(x>0)y=l;elseif(xC)y=0;if(x>=0)if(x>0)y=l;elsey="l;

D)if(x>=0)if(x>0)y=l;elsey=0:elsey=-l;

答案:c

评析:本题应当注意if与else的配对关系。从最内层开始,else总是与它

上面最近的(未曾配对的)if配对。

(35)以下程序中的函数reverse的功能是将a所指数组中的内容进行逆置。

voidreverse(inta[],imn)

{inti,t;

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

}

main()

{intb[10]={l,2,3,4,5,6,7,8,9,10};inti,s=0;

reverse(b,8);

for(i=6;i<10;i++)s+=b[I];

printf(〃%d\n",s);

}

程序运行后的输出结果是

A)22B)10C)34D)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的值为o

intk=3,s[2];

s[O]=k;k=s[l]*10;

A)不确定B)33030D)10

答案:A

评析:由于本题中未对数组进行初始化,因此程序运行时,数组s中各个元

素的值都是不确定的,虽然在代码中对s[0]进行了赋值,但没有对s[l]进行赋值,

故执行1(=s[l]+10;后,k的值不确定。

(37)有以下程序

#include

main()

{char'p=//abcde\Ofghjik\0,z;

printf("%d\n”,strlen(p));

)

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

A)12B)1506D)5

答案:D

评析:〃\0〃是字符串结束标志,当遇到此标志时字符串已结束。所以字符串

的长度为50

(38)程序中头文件t)rpel_h的内容是:

#defineN5

#defineMlN*3

程序如下:

#include*type1.h”

^defineM2N*2

main()

{inti;

i=MI+M2;

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

)

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

A)10B)20025D)30

答案:C

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

般形式为:

#define标识符字符串

这种方法使用户能以一个简单的名字代替一个长的字符串,因此把这个标识

符(名字)称为〃宏名〃。

(39)若有以下的程序段,则在执行for语句后,*1*(pt+l)+2)表示的数组元

素是O

intt[3][3],*pt[3]»k;

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

A)t[2][0]B]t⑵[2]C]t[l][2]D]t[2][l]

答案:C

评析:在题面中定义了一个二维数组1,及一个一维指针数组pt,在循环语

句中分别对指针数组赋值为二维数组t的第k行首元素的地址。表示

的是数组pt中下标为1的元素的值,而该值为一维数组t的第1行(从第0行算

起)的首元素的地址,故*(*(pt+l)+2)表示的是数组t中的元素的值。

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

A)二进制文件打开后可以先读文件的末尾,而顺序文件不可以

B)在程序结束时,应当用fclose函数关闭已打开的文件

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

读入数据

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

答案:D

评析:每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息,

这些信息是保存在一个名为FILE的结构体类型的结构体变量中的。而文件又分为

ASCII文件和二进制文件,所以,、可以用FILE定义指向二进制文件的文件指针。

(41)有以下程序

#include

main(intargc,char*argv[])

{inti,len=0;

for(i=l;iprinlf("%d\n",len);

)

程序编译连接后生成的可执行文件是exl.exe,若运行时输入带参数的命令

行是:

exlabedefg10/

则运行的结果是。

A)22B)17012D)9

答案:D

评析:本题主函数带有两个参数,一个int型变量argc,另一个是char型的

一维一级指针数组argv。当主函数被执行时,系统自动将根据命令行的情况,分

别给主函数的两个参数赋值。argc用于存放命令行中命令字和参数的总和的个数

4,argv用来存放命令行中命令字和所有参数的字符串,并规定argv[0]存放命令

字字符串exl,argv[l]用来存放第一个参数的字符串abed,argv[21用来存放第

二个参数的字符串e龟,argv[3]用来存放第三个参数的字符串10。那么for循

环将循环3次分别将argv数组中元素的长度累加到ler中,所以答案为9。

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

fun(*C){,•,}

main()

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

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

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

答案:B

评析:在主函数中定义了二个指向函数的指针a,b,其中指针a指向函数fun,

指针b未初始化。对于选项A、c,其返回类型是错误的,对于D,其调用的参数

是错误的,选项B是正确的,其相当于调用函数

(43)有以下程序

intfa(intx>

{returnx*x;}

intfb(intxl

{returnX*X*x;}

intf(int(*f1)(),int(*f2)(),intx)

{returnf2(x)-fl(x);)

main()

{inti;

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

}

程序运行后的输出结果是

A)4B)1C)4D)8

答案:C

(28)己定义以下函数:

fun(char*p2,char*pl)

{while((*p2=*pl)!=,\0?){pl++;p2++;}}

函数的功能是。

A)将pl所指字符串复制到p2所指内存空间

B)将pl所指字符串的地址赋给指针p2

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

D)检查pl和p2两个指针所指字符串中是否有‘'0'

答案:A

评析:由于在while循环的条件中执行了*p2二*pl运算,其作用是将*pl中的

内容复制到*p2中,而(*p2=*pl)!=''0'的作用是判断当前字符是否为字符串结

束字符'\0'。在循环体中pl十十,p2十十的目的是移动字

(29)有以下程序

voidfun(char*c,intd)

{*c=*c+1;d=d+1;

printf("%c,%c,〃,*c,d);

)

main()

{chara:<>A',b。'a';

fun(&b,a);printfC%cf%c\n〃,a,b);

)

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

A)B,a,B,aB)a,B,a,BC)A,b,A,bD)b,B,A,b

答案:D

评析:将a,b代入函数得+&b~&b+l=a+l=b,所以打印出第一个字母b;

a=a+1=A+1=B,打印出第二个字符B;

a='A',输出字母A;

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

(30)以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排

序。

voidsort(inta[],imn)

{intij,t;

for(i=0;ifor=i+l0if(a[i]}

mainO

{intaa[10]:{1,2,3,4,5,6,7,8,9,10},i;

sort(&aa[3],5);

for(i=0:iprintf(〃\n");

)

程序运行后的输出结果是O

A)l,2,3,4,5,6,7,8,9,10,B)10,9,8,7,6,5,4,3,2,1,

01,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)对于基类型相同的两个指针变量,不能进行的运算是o

A)<B)=0+D)

答案:C

评析:对于指针变量,除了常规的*、&、=运算外,还可以对其比较地址的大

小,计算两指针变量的差值,但对于地址执行+、*、/、%等算术运算都是无意

义的。

(32)有以下程序

main()

{chara[]={,a','b','c','d'e','f','优,'h','\0r};intI,J;

i=sizeof(a);j=strlen(a);

printf(〃%d,%d\n〃,I,J);

程序运行后的输出结果是

A)9,9B)8,901,8D)9,8

答案:D

评析:sizeofO函数是计算字符数组的长度,因为‘\0'也是一个字符,要

计算在内。strlenO是计算字符串长度的函数,遇到'\0,即认为是字符串结束,

不把空字符计入字符串的长度。

(33)以下不能正确定义二维数组的选项是_____。

A)inta[2][2]={{1},{2}}B)inta[][2]={1,2,3,4}

Ointa[2][2]={{l},2,3}D)inta[2][]={{b2},{3,4})

答案:D

评析:在二维数组进行初始化时,可以省略数组的一个维度,但省略的维数

只能是高维部分,不能是低维。对于多维数组的初始化时,也是同样处理,因此,

本题答案应选D,其它选项均能对数组进行正确的初始化。

(34)有一函数

r1x>0

y=T0x=0

L-1x以下程序段中不能根据x的值正确计算出y的值的是

A)if(x>0)y=l;elseif(x-O)v=0;elsev=-l;

B)y=O;if(x>0)y=l;elseif(xC)y=0;if(x>=0)if(x>0)y=l;elsey="l;

D)if(x>=0)if(x>0)y=l;elsey=0:elsey=-l;

答案:c

评析:本题应当注意if与else的配对关系。从最内层开始,else总是与它

上面最近的(未曾配对的)if配对。

(35)以下程序中的函数reverse的功能是将a所指数组中的内容进行逆置。

voidreverse(inta[],imn)

{inti,t;

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

}

main()

{intb[10]={l,2,3,4,5,6,7,8,9,10};inti,s=0;

reverse(b,8);

for(i=6;i<10;i++)s+=b[I];

printf(〃%d\n",s);

}

程序运行后的输出结果是

A)22B)10C)34D)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的值为o

intk=3,s[2];

s[O]=k;k=s[l]*10;

A)不确定B)33030D)10

答案:A

评析:由于本题中未对数组进行初始化,因此程序运行时,数组s中各个元

素的值都是不确定的,虽然在代码中对s[0]进行了赋值,但没有对s[l]进行赋值,

故执行1(=s[l]+10;后,k的值不确定。

(37)有以下程序

#include

main()

{char'p=//abcde\Ofghjik\0,z;

printf("%d\n”,strlen(p));

)

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

A)12B)1506D)5

答案:D

评析:〃\0〃是字符串结束标志,当遇到此标志时字符串已结束。所以字符串

的长度为50

(38)程序中头文件t)rpel_h的内容是:

#defineN5

#defineMlN*3

程序如下:

#include*type1.h”

^defineM2N*2

main()

{inti;

i=MI+M2;

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

)

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

A)10B)20025D)30

答案:C

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

般形式为:

#define标识符字符串

这种方法使用户能以一个简单的名字代替一个长的字符串,因此把这个标识

符(名字)称为〃宏名〃。

(39)若有以下的程序段,则在执行for语句后,*1*(pt+l)+2)表示的数组元

素是O

intt[3][3],*pt[3]»k;

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

A)t[2][0]B]t⑵[2]C]t[l][2]D]t[2][l]

答案:C

评析:在题面中定义了一个二维数组1,及一个一维指针数组pt,在循环语

句中分别对指针数组赋值为二维数组t的第k行首元素的地址。*(pt+D,表示的

是数组pt中下标为1的元素的值,而该值为一维数组t的第1行(从第0行算起)

的首元素的地址,故*(*(pt+l)+2)表示的是数组t中t[l][2]的元素的值。

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

A)二进制文件打开后可以先读文件的末尾,而顺序文件不可以

B)在程序结束时,应当用fclose函数关闭已打开的文件

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

读入数据

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

答案:D

评析:每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息,

这些信息是保存在一个名为FILE的结构体类型的结构体变量中的。而文件又分为

ASCII文件和二进制文件,所以,、可以用FILE定义指向二进制文件的文件指针。

(41)有以下程序

#include

main(intargc,char*argv[])

{inti,len=0;

for(i=l;iprinlf("%d\n",len);

)

程序编译连接后生成的可执行文件是exl.exe,若运行时输入带参数的命令

行是:

exlabedefg10/

则运行的结果是。

A)22B)17012D)9

答案:D

评析:本题主函数带有两个参数,一个int型变量argc,另一个是char型的

一维一级指针数组argv。当主函数被执行时,系统自动将根据命令行的情况,分

别给主函数的两个参数赋值。argc用于存放命令行中命令字和参数的总和的个数

4,argv用来存放命令行中命令字和所有参数的字符串,并规定argv[0]存放命令

字字符串exl,argv[l]用来存放第一个参数的字符串abed,argv[21用来存放第

二个参数的字符串e龟,argv[3]用来存放第三个参数的字符串10。那么for循

环将循环3次分别将argv数组中元素的长度累加到ler中,所以答案为9。

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

fun(*C){,•,}

main()

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

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

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

答案:B

评析:在主函数中定义了二个指向函数的指针a,b,其中指针a指向函数fun,

指针b未初始化。对于选项A、c,其返回类型是错误的,对于D,其调用的参数

是错误的,选项B是正确的,其相当于调用函数

(43)有以下程序

intfa(intx>

{returnx*x;}

intfb(intxl

{returnX*X*x;}

intf(int(*f1)(),int(*f2)(),intx)

{returnf2(x)-fl(x);)

main()

{inti;

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

}

程序运行后的输出结果是

A)4B)1C)4D)8

答案:C

(28)已定义以下函数:

fun(char*p2,char*pl)

{while((*p2=*pl)!=,\0'){pl++;p2++;}}

函数的功能是。

A)将pl所指字符串复制到p2所指内存空间

B)将pl所指字符串的地址赋给指针p2

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

D)检查pl和p2两个指针所指字符串中是否有‘'0'

答案:A

评析:由于在while循环的条件中执行了*p2=*pl运算,其作用是将*pl中的

内容复制到*p2中,而容p2=*pl)!='\0'的作用是判断当前字符是否为字符串结

束字符'\0'。在循环体中pl十十,p2十十的目的是移动字

(29)有以下程序

voidfun(char*c,intd)

{*c=*c+1;d=d+1;

printf("%c,%c,〃,*c,d);

)

main()

{chara:<>A',b。'a';

fun(&b,a);printfC%cf%c\n〃,a,b);

)

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

A)B,a,B,aB)a,B,a,BC)A,b,A,bD)b,B,A,b

答案:D

评析:将a,b代入函数得+&b~&b+l=a+l=b,所以打印出第一个字母b;

a=a+1=A+1=B,打印出第二个字符B;

a='A',输出字母A;

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

(30)以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排

序。

voidsort(inta[],imn)

{intij,t;

for(i=0;ifor=i+l0if(a[i]}

mainO

{intaa[10]:{1,2,3,4,5,6,7,8,9,10},i;

sort(&aa[3],5);

for(i=0:iprintf(〃\n");

)

程序运行后的输出结果是O

A)l,2,3,4,5,6,7,8,9,10,B)10,9,8,7,6,5,4,3,2,1,

01,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)对于基类型相同的两个指针变量,不能进行的运算是o

A)<B)=0+D)

答案:C

评析:对于指针变量,除了常规的*、&、=运算外,还可以对其比较地址的大

小,计算两指针变量的差值,但对于地址执行+、*、/、%等算术运算都是无意

义的。

(32)有以下程序

温馨提示

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

评论

0/150

提交评论