C语言期末考试复习题有答案.docx

上传人:b****0 文档编号:10062685 上传时间:2023-05-23 格式:DOCX 页数:31 大小:114.99KB
下载 相关 举报
C语言期末考试复习题有答案.docx_第1页
第1页 / 共31页
C语言期末考试复习题有答案.docx_第2页
第2页 / 共31页
C语言期末考试复习题有答案.docx_第3页
第3页 / 共31页
C语言期末考试复习题有答案.docx_第4页
第4页 / 共31页
C语言期末考试复习题有答案.docx_第5页
第5页 / 共31页
C语言期末考试复习题有答案.docx_第6页
第6页 / 共31页
C语言期末考试复习题有答案.docx_第7页
第7页 / 共31页
C语言期末考试复习题有答案.docx_第8页
第8页 / 共31页
C语言期末考试复习题有答案.docx_第9页
第9页 / 共31页
C语言期末考试复习题有答案.docx_第10页
第10页 / 共31页
C语言期末考试复习题有答案.docx_第11页
第11页 / 共31页
C语言期末考试复习题有答案.docx_第12页
第12页 / 共31页
C语言期末考试复习题有答案.docx_第13页
第13页 / 共31页
C语言期末考试复习题有答案.docx_第14页
第14页 / 共31页
C语言期末考试复习题有答案.docx_第15页
第15页 / 共31页
C语言期末考试复习题有答案.docx_第16页
第16页 / 共31页
C语言期末考试复习题有答案.docx_第17页
第17页 / 共31页
C语言期末考试复习题有答案.docx_第18页
第18页 / 共31页
C语言期末考试复习题有答案.docx_第19页
第19页 / 共31页
C语言期末考试复习题有答案.docx_第20页
第20页 / 共31页
亲,该文档总共31页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C语言期末考试复习题有答案.docx

《C语言期末考试复习题有答案.docx》由会员分享,可在线阅读,更多相关《C语言期末考试复习题有答案.docx(31页珍藏版)》请在冰点文库上搜索。

C语言期末考试复习题有答案.docx

C语言期末考试复习题有答案

一、选择题或填空

1.有以下程序段

inta[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;

b=p[5];b中的值是()

A)5B)6C)8D)9

2.若有以下定义,则对a数组元素的正确引用是_________.

inta[5],*p=a;

a)*&a[5]b)a+2c)*(p+5)d)*(a+2)

3.若有以下定义,则p+5表示_______.

inta[10],*p=a;

a)元素a[5]的地址b)元素a[5]的值c)元素a[6]的地址d)元素a[6]的值

4.设已有定义:

inta[10]={15,12,7,31,47,20,16,28,13,19},*p;下列语句中正确的是()

A)for(p=a;a<(p+10);a++);B)for(p=a;p<(a+10);p++);

C)for(p=a,a=a+10;p

5.有以下程序段

#include

intmain()

{intx[]={10,20,30};

int*px=x;

printf("%d,",++*px);printf("%d,",*px);

px=x;

printf("%d,",(*px)++);printf("%d,",*px);

px=x;

printf("%d,",*px++);printf("%d,",*px);

px=x;

printf("%d,",*++px);printf("%d\n",*px);

return0;

}

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

A)11,11,11,12,12,20,20,20B)20,10,11,10,11,10,11,10

C)11,11,11,12,12,13,20,20D)20,10,11,20,11,12,20,20

6.设有如下定义:

intarr[]={6,7,8,9,10};

int*ptr;

ptr=arr;

*(ptr+2)+=2;

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

则程序段的输出结果为 

A)8,10B)6,8C)7,9D)6,10

7.若有定义:

inta[]={2,4,6,8,10,12},*p=a;则*(p+1)的值是_4__.*(a+5)的值是12_________.

8.若有以下说明和语句,int c[4][5],(*p)[5];p=c;能正确引用c数组元素的是__D____.

A) p+1     B) *(p+3)     C) *(p+1)+3  D) *(p[0]+2))

9.若有定义:

inta[2][3],则对a数组的第i行j列元素地址的正确引用为______.

a)*(a[i]+j)b)(a+i)c)*(a+j)d)a[i]+j

10.若有以下定义:

inta[2][3]={2,4,6,8,10,12};则a[1]

[0]的值是__8___.*(*(a+1)+0)的值是_8_.

11.有以下定义

chara[10],*b=a;

不能给数组a输入字符串的语句是()

A)gets(a)B)gets(a[0])C)gets(&a[0]);D)gets(b);

12.下面程序段的运行结果是________.

char*s="abcde";

s+=2;printf("%d",s);

a)cdeb)字符'c'c)字符'c'的地址d)无确定的输出结果

13.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是()

A)chars[10]="abcdefg";B)chart[]="abcdefg",*s=t;

C)chars[10];s="abcdefg";D)chars[10];strcpy(s,"abcdefg");

14.设已有定义:

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

选A

strcpy(p=a+1,&st[4]);

从st[4]开始复制给p,最终p="areyou"

B,a是字符数组名,是个常量,不能执行++a操作

C.因为*st="howareyou";有11个字符,包括\0就有12个字符.

所以a[11]没有把\0复制过去.会有乱码.

D.a[]没有声明多大的数组.

补充:

C不是有乱码的问题,是因为数组a[11]不够存放str.

15.有以下程序 

main()

{

chara[]="programming",b[]="language";

char*p1,*p2;

inti;

p1=a;p2=b;

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

if(*(p1+i)==*(p2+i))

printf("%c",*(p1+i));

}

输出结果是() 

A)gmB)rgC)orD)ga

16.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是________.

a)c=*p1+*p2;b)p2=cc)p1=p2d)c=*p1*(*p2);

17.以下正确的程序段是_________.

a)charstr[20];b)char*p=a,a[10];

scanf("%s",&str);scanf("%s",p);

c)charstr[20];d)charstr[20],*p=str;

scanf("%s",&str[2]);scanf("%s",&p[2]);

18.若有说明语句

chara[]="Itismine";

char*p="Itismine";

则以下不正确的叙述是________.

a)a+1表示的是字符t的地址b)p指向另外的字符串时,字符串的长度不受限制

c)p变量中存放的地址值可以改变d)a中只能存放10个字符

19.下面程序的运行结果是_______.

#include

#include

main()

{char*s1="AbDeG";

char*s2="AbdEg";

s1+=2;s2+=2;

printf("%d\n",strcmp(s1,s2));

}

a)正数b)负数c)零d)不确定的值

20.有以下程序

voidf(int*x,int*y)

{intt;

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

}

main()

{

inta[8]={1,2,3,4,5,6,7,8},i,*p,*q;

p=a;q=&a[7];

while(*p!

=*q){f(p,q);p++;q--;}

for(i=0;i<8;i++)printf("%d,",a[i]);

}

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

A)8,2,3,4,5,6,7,1,B)5,6,7,8,1,2,3,4,C)1,2,3,4,5,6,7,8,D)都不对

21.已定义以下函数

   fun(int *p)

   { return  *p;}

   该函数的返回值是

  A)不确定的值       B)形参p中存放的值  C)形参p所指存储单元中的值     D)形参p的地址值

函数的返回值应该为return后面的表达式的值,在本题中的表达式为*p,*p指的是形参p所指存储单元中的值。

22. 有以下程序

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,5},{3,6,9,12},{3,2,1,0}};

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

}

执行后的输出结果是

A) 12       B) 11     C) 18      D) 16

23.若有以下函数首部

intfun(doublex[10],int*n)

则下面针对此函数的函数声明语句中正确的是

A)intfun(doublex,int*n);B)intfun(double,int);

C)intfun(double*x,intn);D)intfun(double*,int*);

函数的2个形参1个是指针1个是数组;实际运用的时候都是把首地址传给函数都可以通用。

函数申明的时候形参名可以省略;

24.有以下程序

voidsum(int*a)

{a[0]=a[1];}

main()

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

for(i=2;i>=0;i--)sum(&aa[i]);

printf("%d\n",aa[0]);

}

执行后的输出结果是()

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

25.下段代码的运行结果是:

intmain()

{

chara;

char*str=&a;

strcpy(str,"hello");

printf(str);

return0;

}

A)helloB)nullC)hD)发生异常

没有为str分配内存空间,将会发生异常 

问题出在将一个字符串复制进一个字符变量指针所指地址。

虽然可以正确输出结果,但因为越界进行内在读写而导致程序崩溃

26.下段程序的运行结果是:

voidmain()

{

char*p,*q;

charstr[]="Hello,World\n";

q=p=str;

p++;

print(q);

print(p);

}

voidprint(char*s)

{

printf(“%s”,s);

}

A)HeB)Hello,Worldello,World

C)Hello,WorldHello,WorldD)ello,Worldell,World

27.有以下程序

voidfun(char*c,intd)

{

*c=*c+1;

d=d+1;

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

}

voidmain()

{

chara='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

用地址作为参数与值作为参数传递之间的不同。

在C语言中,数据传递是单向传递的。

“值传递”就是实参把对应的值传给相应的形参变量,然后形参和实参不再有任何联系,在被调用函数中,对形参的修改并不影响对应的实参。

“地址传递”就是实参把相应的地址传给相应的形参变量,在被调用函数中对形参的修改将修改对应的实参地址对应的值。

程序中定义了两个字符型变量'a'和'b',并分别赋初值为'A'和'a',然后调用函数fun(),将b的地址和:

值作为实参。

在函数fun()中第一个参数是传递地址,故在调用函数fun()中对参数做的修改(即将b值加1)将影响字符型变量的值(变为b),函数fun()第二个参数是传值的,故在调用函数fun()对第二个参数做的修改不影响字符型变量a(即'a'的值仍为'A'),所以在fun()函数中输出的是d为b,B,接着在主函数中,输出a,b,然后退出fun()函数,接着执行后面的语句,输出A,b。

所以最后输出为b,B,A,b。

28、下面选项属于函数指针的是:

A、(int*)p(int,int)B、int(*p)(int,int)C、两者都是D、两者都不是

29、若有函数max(a,b),并且已使函数指针变量p指向函数max,当调用该函数时,正确的调用方法是_______.

A)(*p)max(a,b);B)*pmax(a,b);C)(*p)(a,b);D)*p(a,b);

30、下面几个选项中的代码能通过编译的是:

A)int*fun()

{ints[3]={1,3,4};

returns;}

intmain()

{int*result;

result=fun();

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

printf("%d\n",result[i]);

return0;

}

B)int&fun()

{ints[3]={1,3,4};;

returns;}

intmain()

{int*result;

result=fun();

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

printf("%d\n",result[i]);

return0;}

C)int*fun()

{ints[3]={1,3,4};;

return&s;}

intmain()

{int*result;

result=fun();

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

printf("%d\n",result[i]);

return0;}

D)int&fun()

{ints[3]={1,3,4};;

return&s;}

intmain()

{int*result;

result=fun();

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

printf("%d\n",result[i]);

return0;}

31、设有如下说明

typedefstructST

{longa;intb;charc[2];}NEW;

则下面叙述中正确的是_____。

A)以上的说明形式非法

B)ST是一个结构体类型

C)NEW是一个结构体类型

D)NEW是一个结构体变量

32、以下对结构体类型变量td的定义中,错误的是______。

A)typedefstructaaB)structaa

{intn;{intn;

floatm;floatm;

}AA;};

AAtd;structaatd;//正如下面解析的第一种情况。

C)structaaD)struct

{intn;{intn;

floatm;floatm;

};}td;//对

structaatd;

33、根据下面的定义,能打印出字母M的语句是_____。

structperson{charname[9];intage;};

structpersonclass[10]={"John",17,"Paul",19,"Mary",18,"Adam",16};

A)printf("%c\n",class[3].name);B)printf("%c\n",class[3].name[1]);

C)printf("%c\n",class[2].name[1]);D)printf("%c\n",class[2].name[0]);

34、设有以下语句:

structst{intn;structst*next;};

staticstructsta[3]={5,&a[1],7,&a[2],9,'\0'},*p;

p=&a[0];

则表达式 D  的值是6。

A)p++->n(值是5)B)p->n++(值是5)C)(*p).n++(值是5)D)++(p->n)

//先做“指向”运算,后作“++”。

35、下面程序的输出是

main()

{enumteam{my,your=4,his,her=his+10};

printf("%d%d%d%d\n",my,your,his,her);}

A)0123B)04010C)04515D)14515

36、下面程序的输出是

main()

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

printf("%d\n",cnum[0].y/cnum[0].x*cnum[1].x);}相当于“3/1*2,由于“/”和“*”同一优先级,其结合方向为自左向右于是,最终结果为6.”

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

37、设有如下定义:

structsk

{inta;floatb;}data,*p;

若有p=&data;,则对data中的a域的正确引用是__________。

A)(*p).data.aB)(*p).aC)p->data.aD)p.data.a

38、有以下程序:

*

#include

unionpw

{inti;charch[2];}a;

main()

{a.ch[0]=13;a.ch[1]=0;printf("%d\n",a.i);}

程序的输出结果是 。

(注意:

ch[0]在低字节,ch[1]在高字节。

A)13B)14C)208D)209

39、已知字符0的ASCII码为十六进制的30,下面程序的输出是___________。

main()

{union{unsignedcharc;

unsignedinti[4];

}z;

z.i[0]=0x39;

z.i[1]=0x36;

printf("%c\n",z.c);}

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

40、字符'0'的ASCII码的十进制数为48,且数组的第0个元素在低位,则以下程序的输出结果是_____________。

#include

main()

{union{inti[2];longk;charc[4];}r,*s=&r;

s->i[0]=0x39;

s->i[1]=0x38;

printf("%c\n",s->c[0]);}

A)39B)9C)38D)8

41.当已存在一个abc.txt文件时,执行函数fopen(“abc.txt”,“r++”)的功能是。

A.打开abc.txt文件,清除原有的内容

B.打开abc.txt文件,只能写入新的内容

C.

打开abc.txt文件,只能读取原有内容

D.

打开abc.txt文件,可以读取和写入新的内容

42.若用fopen()函数打开一个新的二进制文件,该文件可以读也可以写,则文件打开模式是。

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

43.使用fseek函数可以实现的操作是。

A.

改变文件的位置指针的当前位置B.文件的顺序读写C.

文件的随机读写D.

以上都不对

44.fread(buf,64,2,fp)的功能是。

A.

从fp文件流中读出整数64,并存放在buf中;

B.从fp文件流中读出整数64和2,并存放在buf中;

C.

从fp文件流中读出64个字节的字符,并存放在buf中;

D.

从fp文件流中读出2个64个字节的字符,并存放在buf中;

45.以下程序的功能是。

main()

{FILE*fp;charstr[]=”HELLO”;fp=fopen(“PRN”,”w”);fpus(str,fp);fclose(fp);}

在屏幕上显示“HELLO”

把“HELLO”存入PRN文件中

在打印机上打印出“HELLO”

以上都不对

46.若fp是指向某文件的指针,且已读到此文件末尾,则库函数feof(fp)的返回值是。

A)EOFB)0C)非零值D)NULL

47.以下叙述中不正确的是。

A)C语言中的文本文件以ASCII码形式存储数据

B)C语言中对二进制位的访问速度比文本文件快

C)C语言中,随机读写方式不使用于文本文件

D)C语言中,顺序读写方式不使用于二进制文件

48.以下程序企图把从终端输入的字符输出到名为abc.txt的文件中,直到从终端读入字符#号时结束输入和输出操作,但程序有错。

#include

main()

{FILE*fout;charch;

fout=fopen(“abc.txt”,“w”);

ch=fgetc(stdin);

while(ch!

='#')

{fputc(ch,fout);

ch=fgetc(stdin);

}

fclose(fout);

}

出错的原因是。

A)函数fopen调用形式有误B)输入文件没有关闭

C)函数fgetc调用形式有误D)文件指针stdin没有定义

49、若fp为文件指针,且文件已正确打开,i为long型变量,以下程序段的输出结果是。

fseek(fp,0,SEEK_END);

i=ftell(fp);

printf("i=%ld\n",i);

A)–1B)fp所指文件的长度,以字节为单位

C)0D)2

50.feof(fp)函数用来判断文件是否结束,如果遇到文件结束,函数值为____。

A)–1B)1

C)0D)NULL

51.以下程序的运行结果是()

#defineMUL(x,y)(x)*y

main()

{inta=3,b=4,c;

c=MUL(a++,b++);prinft(“%d\n”,c);}

A,12B.15C.20D.16

52.对以下程序段:

#defineA3

#defineB(a)((A+1)*a)

x=3*(A+B(7));正确的判断是()

A.程序错误,不许嵌套宏定义B.x=93

C.X=21D.程序错误,宏定义不许有参数

53.以下程序中,第一个输出值是(),第二个输出值是()

#define M3

#define N(M+1)

#define NN N*N/2

main()

{prinft(“%d\n”,NN);printf(“%d”,5*NN);}

A.3B.4C.6D.8

A.

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

当前位置:首页 > 医药卫生 > 基础医学

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

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