第二套C语言.docx

上传人:b****6 文档编号:16502476 上传时间:2023-07-14 格式:DOCX 页数:17 大小:72.61KB
下载 相关 举报
第二套C语言.docx_第1页
第1页 / 共17页
第二套C语言.docx_第2页
第2页 / 共17页
第二套C语言.docx_第3页
第3页 / 共17页
第二套C语言.docx_第4页
第4页 / 共17页
第二套C语言.docx_第5页
第5页 / 共17页
第二套C语言.docx_第6页
第6页 / 共17页
第二套C语言.docx_第7页
第7页 / 共17页
第二套C语言.docx_第8页
第8页 / 共17页
第二套C语言.docx_第9页
第9页 / 共17页
第二套C语言.docx_第10页
第10页 / 共17页
第二套C语言.docx_第11页
第11页 / 共17页
第二套C语言.docx_第12页
第12页 / 共17页
第二套C语言.docx_第13页
第13页 / 共17页
第二套C语言.docx_第14页
第14页 / 共17页
第二套C语言.docx_第15页
第15页 / 共17页
第二套C语言.docx_第16页
第16页 / 共17页
第二套C语言.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

第二套C语言.docx

《第二套C语言.docx》由会员分享,可在线阅读,更多相关《第二套C语言.docx(17页珍藏版)》请在冰点文库上搜索。

第二套C语言.docx

第二套C语言

在长度为n的有序线性表中进行二分查找,最坏情况下需要比较的次数是(  )。

A)O(n)

B)O(n2)

C)

D)

参考答案:

C

【解析】当有序线性表为顺序存储时才能用二分法查找。

可以证明的是对于长度为n的有序线性表,在最坏情况下,二分法查找只需要比较

次,而顺序查找需要比较n次。

下列叙述中正确的是(  )。

A)顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的

B)顺序存储结构只针对线性结构,链式存储结构只针对非线性结构

C)顺序存储结构能存储有序表,链式存储结构不能存储有序表

D)链式存储结构比顺序存储结构节省存储空间

参考答案:

A

【解析】链式存储结构既可以针对线性结构也可以针对非线性结构,所以B)与C)错误。

链式存储结构中每个结点都由数据域与指针域两部分组成,增加了存储空间,所以D)错误。

在软件开发中,需求分析阶段可以使用的工具是(  )。

A)N-S图

B)DFD图

C)PAD图

D)程序流程图

参考答案:

B

【解析】在需求分析阶段可以使用的工具有数据流图DFD图,数据字典DD,判定树与判定表,所以选择B)。

在面向对象方法中,不属于"对象"基本特点的是(  )。

A)一致性

B)分类性

C)多态性

D)标识唯一性

参考答案:

A

【解析】对象有如下一些基本特点:

标识唯一性、分类性、多态性、封装性、模块独立性好。

所以选择A)。

有三个关系R、S和T如下:

由关系R和S通过运算得到关系T,则所使用的运算为(  )。

A)笛卡尔积

B)交

C)并

D)自然连接

参考答案:

D

【解析】自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,所以根据T关系中的有序组可知R与S进行的是自然连接操作。

有以下程序:

#include

main()

{ intx,y,z;

 x=y=1;

 z=x++,y++,++y;

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

}

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

A)2,3,3

B)2,3,2

C)2,3,1

D)2,2,1

参考答案:

C

【解析】z=x++,y++,++y;因为赋值运算符的优先级高于逗号运算符的优先级,所以可以将上式表示成(z=x++),(y++),(++y)。

然后从左向右先计算表达式z=x++,因为x++先使用后自增,所以z的值为1,x的值为2。

再计算逗号表达式第二个表达式y++,此时y的值为2,最后计算第三个表达式++y,y的值为3。

若有定义intx,y;并已正确给变量赋值,则以下选项中与表达式(x-y)?

(x++):

(y++)中的条件表达式(x-y)等价的是(  )。

A)(x-y<0||x-y>0)

B)(x-y<0)

C)(x-y>0)

D)(x-y==0)

参考答案:

A

【解析】条件表达式:

x=表达式1?

表达式2:

表达式3的含义是:

先求解表达式1,若为非0(真),则求解表达式2,将表达式2的值赋给x。

若表达式1的值为0(假),则求解表达式3,将表达式3的值赋给x。

在本题中与表达式1:

(x-y)等价的是(x-y<0||x-y>0)。

有以下程序:

#include

main()

{ intx=1,y=0;

  if(!

x)y++;

  elseif(x==0)

      if(x)y+=2;

      elsey+=3;

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

}

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

A)3

B)2

C)1

D)0

参考答案:

D

【解析】在ifelse语句中else总是与离它最近的if配对。

本题目中x为1所以!

x为0,所以执行elseif语句中的内容,判断(x==0)是否成立,因为x为1所以条件不成立,所以elseif内部的if…else语句不再执行,所以y的值还是初始值0。

若有定义:

floatx=1.5;inta=1,b=3,c=2;则正确的switch语句是(  )。

A)switch(a+b)

{case1:

printf("*\n");

 case2+1:

printf("**\n");}

B)switch((int)x);

{case1:

printf("*\n");

 case2:

printf("**\n");}

C)switch(x)

{case1.0:

printf("*\n");

 case2.0:

printf("**\n");}

D)switch(a+b)

{case1:

printf("*\n");

 casec:

printf("**\n");}

参考答案:

A

【解析】B)选项中switch((int)x);语句中不应该有最后的分号。

switch(expr1),中的expr1不能用浮点类型或long类型,也不能为一个字符串,所以C)错误。

case后面常量表达式的类型必须与switch后面表达式的类型一致,所以D)错误。

有以下程序:

#include

main()

{ inty=9;

  for(;y>0;y--)

    if(y%3==0)printf("%d",--y);

}

程序的运行结果是(  )。

A)852

B)963

C)741

D)875421

参考答案:

A

【解析】第一次for循环,y的值为9,y%3的值为0,满足条件打印--y,即先减一后打印,所以打印8;第二次for循环,y的值为7,y%3的值为1,不执行打印语句;第三次for循环,y的值为6,y%3的值为0,满足条件打印--y,即先减一后打印,所以打印5;第四次for循环,y的值为4,不满足if条件,不执行打印语句;第五次for循环,y的值为3,满足if条件,打印输出2;第六次for循环,y的值为1,不满足条件,不执行打印语句。

有以下程序:

#include

main()

{  inti,j,m=1;

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

  { for(j=3;j>0;j--)

    {if(i*j>3)break;

     m*=i*j;

    }

  }

  printf("m=%d\n",m);

}

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

A)m=4

B)m=2

C)m=6

D)m=5

参考答案:

C

【解析】第一次外循环i的值为1,第一次内循环j的值为3,不满足条件执行m*=i*j即m的值为3;第二次j的值为2,不满足条件执行m*=i*j,即m的值为6;第三次j的值为1,不满足条件执行m*=i*j,即m的值仍为6。

第二次外循环i的值为2,j的值为3,满足条件,执行break语句,跳出循环。

有以下程序:

#include

intadd(inta,intb){return(a+b);}

main()

{intk,(*f)(),a=5,b=10;

 f=add;

 …

}

则以下函数调用语句错误的是(  )。

A)k=f(a,b);

B)k=add(a,b);

C)k=(*f)(a,b);

D)k=*f(a,b);

参考答案:

D

【解析】D)选项中*f(a,b)表示调用后返回一个指向整型数据的地址指针,即该函数的返回值为指针类型,所以不能将其赋值给整形变量k。

有以下程序:

#include

main()

{intn,*p=NULL;

 *p=&n;

 printf("Inputn:

");scanf("%d",&p);printf("outputn:

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

}

该程序试图通过指针p为变量n读入数据并输出,但程序有多处错误,以下语句正确的是(  )

A)intn,*p=NULL;

B)*p=&n;

C)scanf("%d",&p)

D)printf("%d\n",p);

参考答案:

A

【解析】选项B)的正确写法应为p=&n;选项C)的正确写法应为scanf("%d",p);选项D)的正确写法应为printf("%d\n",*p)。

下列定义数组的语句中,正确的是(  )。

A)#defineN10

intx[N];

B)intN=10;

intx[N];

C)intx[0..10];

D)intx[];

参考答案:

A

【解析】数组说明的一般形式为:

类型说明符 数组名[常量表达式]。

B)中N是变量,不能用变量定义数组长度。

C)选项中数组长度是非法的一串数字。

定义数组时必须为其指明长度,D)选项中数组长度为空,所以非法。

有以下程序:

#include

main()

{ intb[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1;

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

    for(j=i;j<=i;j++)t+=b[i][b[j][i]];

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

}

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

A)3

B)4

C)1

D)9

参考答案:

B

【解析】每次内循环只循环一次就结束,第一次外循环时t=t+b[0][b[0][0]]=1+b[0][0]=1+0=1;第二次外循环时t=t+b[1][b[1][1]]=1+b[1][1]=1+1=2;第三次外循环时t=t+b[2][b[2][2]]=2+b[2][2]=2+2=4。

以下语句中存在语法错误的是(  )。

A)charss[6][20];ss[1]="right?

";

B)charss()[20]={"right?

"};

C)char*ss[6];ss[1]="right?

";

D)char*ss()={"right?

"};

参考答案:

A

【解析】数组定义后,不可以对数组整体赋值,s是二维数组,因ss[1]是一维字符数组,即字符串,字符串赋值可以使用strcpy(ss[1],"right");这样的形式,而选项A)中对二维数组中的第"1"维(相当于一个一维数组)赋值,是不可以的。

选项B)和D)是定义时对数组初始化,这是可以的。

选项C)中,将字符串在内存中的首地址赋给指针数组的一个元素,这是可以的。

以下不能将s所指字符串正确复制到t所指存储空间的是(  )

A)do{*t++=*s++;}while(*s);

B)for(i=0;t[i]=s[i];i++);

C)while(*t=*s){t++;s++}

D)for(i=0,j=0;t[i++]=s[j++];);

参考答案:

A

【解析】do{*t++=*s++;}while(*s);不能因为当*s='\0'时,while(*s)跳出循环,这样字符串结束标志'\0'没有复制给*t,造成*t不完整。

注意,*t++=*s++是先执行t=*s,然后才进行t=t+1,s=s+1。

B),C),D)都能将'\0'复制过去。

有以下程序:

#include

voidswap(char*x,char*y)

{chart;

t=*x;*x=*y;*y=t;

}

main()

{char*s1="abc",*s2="123";

swap(s1,s2);printf("%s,%s\n",s1,s2);

}

程序执行后的输出结果是(  )。

A)321,cba

B)abc,123

C)123,abc

D)1bc,a23

参考答案:

D

【解析】字符串是一个特殊的数组,所以按照数组的规则,s1应该指向的是数组的首地址,即"abc"的第一个字符的地址。

s2指向的是"123"的第一个字符的地址。

调用swap函数之后交换的是两个字符串的第一个字符'a'和'1'的内容,所以打印输出为D)。

有以下函数:

intfun(char*x,char*y)

{ intn=0;

  while((*x==*y)&&*x!

='\0'){x++;y++;n++;}

  returnn;

}

函数的功能是(  )。

A)将y所指字符串赋给x所指存储空间

B)查找x和y所指字符串中是否有'\0'

C)统计x和y所指字符串中最前面连续相同的字符个数

D)统计x和y所指字符串中相同的字符个数

参考答案:

C

【解析】本题中由循环条件可知遇到'\0'或x与y所指的字符的值不等中的一个条件时就结束,所以功能是统计x和y所指字符串中最前面连续相同的字符个数。

在一个C源程序文件中所定义的全局变量,其作用域为(  )。

A)由具体定义位置和extern说明来决定范围

B)所在程序的全部范围

C)所在函数的全部范围

D)所在文件的全部范围

参考答案:

A

【解析】全局变量的作用域是从声明处到文件的结束。

所以选择A)

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

A)可以通过typedef增加新的类型

B)可以用typedef将已存在的类型用一个新的名字来代表

C)用typedef定义新的类型名后,原有类型名仍有效

D)用typedef可以为各种类型起别名,但不能为变量起别名

参考答案:

A

【解析】关键字typedef的作用只是将C语言中的已有的数据类型作了置换,并不是增加新的类型,所以A)错误。

有以下程序:

#include

structS

{ inta,b;}data[2]={10,100,20,200};

main()

{ structSp=data[1];

 printf("%d\n",++(p.a));

}

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

A)10

B)11

C)20

D)21

参考答案:

D

【解析】声明data是结构S数组。

初始化data[0].a=10;data[0].b=100;data[1].a=20;data[1].b=200。

主函数中p=data[1];即p.a=data[1].a;p.b=data[1].b;执行语句printf("%d\n",++(p.a));打印输出时p.a先增1再打印。

p.a=data[1].a=20,先增1等于21。

有以下程序:

#include

#definePT3.5;

#defineS(x)PT*x*x;

main()

{ inta=1,b=2;printf("%4.1f\n",S(a+b));}

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

A)7.5

B)31.5

C)程序有错无输出结果

D)14.0

参考答案:

C

【解析】宏定义不是C语句,末尾不需要有分号。

所以语句printf("%4.1f\n",S(a+b));展开后为printf("%4.1f\n",3.5;*a+b*a+b;);所以程序会出现语法错误。

有以下程序:

#include

#include

main()

{int*a,*b,*c;

a=b=c=(int*)malloc(sizeof(int));

*a=1;*b=2,*c=3;

a=b;

printf("%d,%d,%d\n",*a,*b,*c);

}

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

A)1,1,3

B)2,2,3

C)1,2,3

D)3,3,3

参考答案:

D

【解析】malloc函数动态分配一个整型的内存空间,然后把函数返回的地址用(int*)强制类型转换为整型指针,再把它赋给a,b,c,即让指针变量a,b,c都指向刚申请的内存空间。

所以只有最后一个赋值语句*c=3的值保留在了该空间内,因为a,b,c三个指针变量均指向该空间,所以打印该空间内的数值为3。

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

A)当对文件的读(写)操作完成之后,必须将它关闭,否则可能导致数据丢失

B)打开一个已存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖

C)在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第1个数据

D)C语言中的文件是流式文件,因此只能顺序存取数据

参考答案:

A

【解析】B)选项中打开一个已存在的文件并进行了写操作后,原有文件中的全部数据不一定被覆盖,也可以对源文件进行追加操作等。

C)选项中在一个程序中当对文件进行了写操作后,不用先关闭该文件然后再打开,才能读到第1个数据,可以用fseek()函数进行重新定位即可。

D)选项中,C语言中的文件可以进行随机读写。

#include

#include

doublefun(doubleeps)

{

doubles=1.0,s1=1.0;

intn=1;

while(s1>=eps)

{

s1=s1*n/(2*n+1);

s=s+s1;

n++;

}

return2*s;

}

main()

{doublex;voidNONO();

printf("Inputeps:

");

scanf("%lf",&x);printf("\neps=%lf,PI=%lf\n",x,fun(x));

NONO();

}

voidNONO()

{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。

*/

FILE*fp,*wf;

inti;

doublex;

fp=fopen("in.dat","r");

wf=fopen("out.dat","w");

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

fscanf(fp,"%lf",&x);

fprintf(wf,"%lf\n",fun(x));

}

fclose(fp);

fclose(wf);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2