文档库 最新最全的文档下载
当前位置:文档库 › 河海大学C语言期末试题A

河海大学C语言期末试题A

河海大学C语言期末试题A
河海大学C语言期末试题A

专业班级:学号:姓名:

一、选择题(用铅笔把选中的方格涂黑40×1=40分)

1 2 3 4

5 6 7 8

9 10 11 12

13 14 15 16

17 18 19 20

21 22 23 24

25 26 27 28

29 30 31 32

33 34 35 36

37 38 39 40

二、填空题(25×2=50分)

(1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16)

(17)

(18)

(19)

(20)

(21)

(22)

(23)

(24)

(25)

三、编程题(10分)

求10个数的最大公约数和最小公倍数(定义两个函数,求两个数的最大公约数和两个数的最小公倍数)

一、选择题 ( 40×1分=40分)

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

A .在编译时可以发现注释中的拼写错误

B .

C 语言程序的每一行只能写一条语句

C .main( ){}必须位于程序的开始

D .C 语言程序可以由一个或多个函数组成

2.以下选项中不能用作变量名的是 (2)B 。

A ._float

B .switch

C .sum

D ._123 3.已知sizeof(int)的值为2,为将10!的值存储到变量f 中(10!=3628800),变量f 的类

型应声明为

(3)A 。

A .long int

B .int

C .short int

D .unsigned int

4. 以下表示中,不能用作C 语言常量的是 (4)B 。

A. 0UL

B. (long)123

C. 1e0

D.‘\x2a’

5.数学式

b

a 2在C 程序中正确的表示形式为 (5)B 。

A .sqrt(a)/2*b

B .sqrt(a)/2/b

C .sqrt(a)/2b

D .sqrt a/(2*b)

6.已知有程序段“char str[][10]={"Aoyun","Beijing"},*p=&str[0][0];

printf("%s\n ",p+10);”,则执行printf 语句后输出为 (6) A 。 A .Beijing B .Aoyun C .ing D .ng 7.以下声明中错误的是 (7)C 。

A .int a[2];

B .int a[]={0,1};

C .int a[3]=0;

D .int a[3][4]={0}; 8.以下表示数学式“a

A. a

B. a

C. !(a>=b)&&!(b>=c)

D. !(a>=b||b>=c)

9.已有声明“int a=3,b=3,c=2;”,以下选项中值为0的表达式是 (9)A 。

A. !a&&!b&&c

B. !a||!b||c

C. a==b&&b>=c

D. a>=b&&b>c 10.若有声明“char ss[8]="Red";”,则sizeof(ss)的值是 (10)A 。

A .8

B .4

C .3

D .1 11. 以下程序运行后的输出结果是 (11)B 。

A. 2 2

B. 7 2

C. 7 5

D. 6 2 main()

{ char a[7]="a0\0a0\0"; int i,j;

i=sizeof(a); j=strlen(a); printf("%d %d",i,j); }

12. 下面关于循环语句for 、while 、do_while 的叙述中,正确的是 (12)D 。

A. 三种循环语句的循环体都必须放入一对花括号中

B. 三种循环语句中都可以缺省循环终止条件表达式

C. 三种循环语句的循环体都至少被无条件地执行一次

D.三种循环语句都可能出现无穷循环

13. 若有声明“int a[]={1,2,3,4},*p,i;”,则以下程序段中不能输出13的是(13)B。

A.for(i=0;i<4;i+=2) printf("%d",a[i]);

B.for(p=0;p<4;p+=2) printf("%d",a[p]);

C.for(p=a;p

D.for(p=a,i=0;i<4;i+=2) printf("%d",p[i]);

14.在下列C语言源程序的错误中,通常不能在编译时发现的是(14)C。

A. 括号不匹配

B. 非法标识符

C. 数组元素下标值越界

D. 程序结构不完整

15.若有声明“long a,b;”且变量a和b都需要通过键盘输入获得初值,则下列语句中正

确的是(15)D。

A. scanf("%ld%ld,&a,&b");

B. scanf("%d%d",a,b);

C. scanf("%d%d",&a,&b);

D. scanf("%ld%ld",&a,&b);

16.若有程序段“char c=256; int a=c;”,则执行该程序段后a的值是(16)C 。

A. 256

B. 65536

C. 0

D. -1

17.若在一个C语言源程序中“e1”和“e3”是表达式,“s;”是语句,则下列选项中与语

句“for(e1; ;e3)s;”功能等同的语句是(17)B。

A. e1;while(10)s;e3;

B. e1;while(10){s;e3;}

C. e1;while(10){e3;s;}

D. while(10){e1;s;e3;}

18.若有声明“int a[3][4], *p=a[0] ,(*q)[4]=a;”,则下列叙述中错误的是 (18) B 。

A. a[2][3]与q[2][3]等价B. a[2][3]与p[2][3]等价

C. a[2][3]与*(p+11)等价D. a[2][3]与p=p+11,*p等价

19. 若有声明“long fun(int *x,int n,long *s);int a[4]={1,2,3,4}; long b,c;”,

则以下函数调用形式中正确的是(19)D。

A. c=fun(a,4,b);

B. c=fun(a[],4,&b);

C. c=fun(a[4],4,b);

D. c=fun(a,4,&b);

20.已知在函数f中声明了局部变量x,如果希望f函数第一次被调用返回后变量x中存储的数据保持到下次f函数被调用时仍可以使用,则在声明x时必须指定其存储类型为(20)C。

A. auto

B. register

C. static

D. extern

21. 若有如下的类型定义和变量声明,则在给出的选项中值不为7的表达式是(21)

A 。

A.ptr->a

B.(++ptr)->a

C.x[1].a

D.x[0].b->a

struct ss

{ int a; struct ss *b; }x[3]={{5,&x[1]},{7,&x[2]},{9,0}}, *ptr=&x[0];

22. 若需要对一个数据文件abc.txt中的数据做加密处理并且限定只能做一次打开文件操

作,则在“fp=fopen("abc.txt", 模式字符串 ); ”中,模式字符串应当是(22)

B 。

A. "w+"

B. "r+"

C. "a+"

D. "r"

23.若有如下声明和语句:

int t[3][3],*pt[3],k;

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

则表达式*(*(pt+1)+2)所引用的是 (23) C。

A. t[2][0] B. &t[2][0] C. t[1][2] D. &t[1][2] 24. 若有结构类型定义“typedef struct test{ int x,y[2]; }TEST;”,则以下声明中

正确的是(24)A。

A.struct test x; B.struct x;

C.test x ; D.struct TEST x;

25. 设有声明int value=‘5’;则执行下列选项的赋值语句后,value的值不等于5的是

(25)C。

A. value=value-‘0’;

B. value=value-0x30;

C. value=value-49;

D. value=value-‘\060’;

26.若有枚举类型定义“enum list1{x1,x2,x3,x4=6,x5,x6};”,则枚举常量x2和x6代

表的值分别是(26)B。

A. 1,6

B. 1,8

C. 2,6

D. 2,8 27.设有声明float a=1.23456; int i;,欲将a中的数值保留小数点后两位,第三位进行四舍五入运算,能实现该功能的表达式是(27)A 。

A. i=a*100+0.5,a=i/100.0

B. a=(a*100+0.5)/100.0

C. a=((int)a*100+0.5)/100.0

D. a=(a/100+0.5)/100.0

28.若有声明“int x[10]={0,1,2,3,4,5,6,7,8,9},*p;”,则值不为4的表达式是(28)C 。

A.p=x,*(p+4) B.p=x+4,*p++

C.p=x+3,*(p++) D.p=x+3,*++p

29.若有声明“int i,k=1; unsigned j;”,则下列语句执行时会出现无限循环的语句是 (29) A。

A.for(j=15;j>0;j-=2) k++; B.for(j=0;j<15;j+=2) k++;

C.for(i=0;i<15;i+=2) k++; D.for(i=15;i>0;i-=2) k++;

30.已知A盘根目录下有文本文件“data.txt”且程序中已有声明“FILE *fp;”,若程序需要先从“data.txt”文件中读出数据,修改后再写入“data.txt”文件中,则调用fopen函数的正确形式是 (30) C。

A.fp=fopen("a:\\data.txt","rw");

B.B. fp=fopen("a:\\data.txt","w+");

C. fp=fopen("a:\\data.txt","r+");

D. fp=fopen("a:\\data.txt","r");

31.以下选项均为fun函数定义的头部,其中错误的是 (31) B。

A. int fun(int x,int y[])

B. int fun(int x,int y[x])

C. int fun(int x,int y[3])

D. int fun(int x,int *y)

32.以下结构变量stu1的声明形式中,错误的是 (32) D。

A.typedef struct stu{char name[10];float score;}STU ; STU stu1;

B.#define STU struct stu

STU {char name[10];float score; }stu1;

C.struct stu{char name[10];float score;}stu1;

D.struct stu{char name[10];float score;}STU; STU stu1;

33.若有声明“double x=3,c,*a=&x,*b=&c;”,则下列语句中错误的是(33)C。

A.a=b=0; B.a=&c,b=a; C.&a=&b; D.*b=*a; 34.若已有声明“int x=4,y=3;”,则表达式x

A.2 B.3 C.4 D.5

35.程序段“int x=3; do { printf(“% d”,x - - );} while( !x );”的执行结果是(35)C。

A.3 2 1 B.死循环 C.3 D.2

36.以下关于C语言语句的叙述中,正确的是(36)D 。

A.所有语句都包含关键字

B.所有语句都包含表达式

C.所有语句都可以出现在源程序中的任何位置

D.所有语句都以分号结束

37.设有变量声明“char c;”,执行“for( ;c=(getchar() != ‘\n’);) printf(“% c”,c);”时,从键盘上输入“ABCDEFG”回车后,输出结果是(37)C。

A.ABCDEFG B.AABBCCDDEEFFGG

C.非字母数字字符 D.语句不能执行

38.假定已有声明“char a[30],*p=a;”,则下列语句中能将字符串“This is a C program.”正确地保存到数组a中的语句是(38)D。

A.a[30]=“This is a C program.” B.a =“This is a C program.”

C. p =“This is a C program.” D.strcpy(p,“This is a C program.”);

39.以下关于函数定义的叙述中,正确的是(39)A。

A.构成C语言源程序的基本单位之一是函数定义

B.所有被调用的函数必须在调用之前定义

C.main函数定义必须放在其他函数定义之前

D.main函数定义的函数体中必须至少有一条语句或声明

40.已知函数fun的定义如下:

Void fun(int x[],int y)

{ int k;

For (k=0;k

若main函数中有声明int a[10]={10};及调用fun函数的语句,则正确的fun函数调用形式是(40)C 。

A.fun(a[],a[0]); B.fun(a[0],a[0]);

C. fun(&a[0],a[0]);

D. fun(a[0],&a[0]);

二、填空题(每空2分,共50分)

1.已知有函数定义“int fun(){return (3,4);}”,则调用fun后的函数返回值是(1)4 。

2. 设有声明“int a=3, b=4; float x=4.5, y=

3.5;”,则表达式

“(float)(a+b)/2+(int)x%(int)y”的值是 (2) 4.5。

3.若有声明“char s[10]="remind";”,执行“puts(s+2);”后的输出结果是 (3) mind 。

4.若有声明“double x=10,y=5;”,则计算x y的库函数调用形式是 (4) pow(x,y) 。

5. 以下程序运行时输出结果的最后一行是 (5) 3/5,5/8 。

#include

void main()

{ int a=1,b=1,i;

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

{ a=a+b;

printf("%d / %d , ",b,a); b=a+b;

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

printf("\n"); }

6. 以下程序运行时输出结果为 (6) 1 。

#include

void main() { int i,sum=0; for (i=0;i<5;i++) { switch(i) { case 0: case 1: sum++; case 3: sum++; case 4: sum--; break; } }

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

7. 以下程序运行后输出结果为 (7) 15 。 #include "stdio.h"

int mystery(int a,int b) { if(b==1)return a;

else return a+mystery(a,b-1); }

void main()

{ int x=5,y=3;

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

}

8. 以下程序运行时输出结果的第一行是 (8) 3 ,第二行是 (9) 2 。

#include

int f1( )

{ static int i=0,f=1; return f*=++i; }

int f2( )

{ int i=0,f=1; return f*=++i; }

void main( )

{ printf("%d\n",f1( )+f1( ));

printf("%d\n",f2( )+f2( ));

}

9. 以下程序运行时输出结果是 (10) ABCxyz。

#include

#include

void sf(char *s1,char *s2)

{ if(*s1=*s2)

sf(s1+1,s2+1);

}

void main( )

{ char a[20]= "ABC",b[20]="xyz";

sf(a+strlen(a),b);

puts(a);

}

10. 以下程序运行时输出结果的第一行是(11) 1 1 1 ,第三行是(12) 3 2 1。

#include

void main( )

{ int i,j,a[3][3];

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

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

if(i

a[i][j]=1;

else

a[i][j]=i-j+1;

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

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

printf("%4d",a[i][j]);

printf("\n");

}

}

11. 以下程序运行时输出结果是(13)8 3 4 1 。

#include

void sort(int a[],int n)

{ int i,j,p; int t;

for(i=1;i

{ p=i;

for(j=i+2;j

if(a[j]>a[p])

p=j;

if(p!=i)

{ t=a[i]; a[i]=a[p]; a[p]=t; }

}

}

void main( )

{ int s[ ]={8,1,4,3},n=4,k;

sort(s,n);

for(k=0;k

printf("%4d",s[k]);

printf("\n");

}

12. 以下程序运行时输出结果的第一行是(14) 100,第二行是(15)101 。

#include

struct s

{ int x,*y;

}*p;

int d[5]={10,20,30,40,50};

struct s a[5]={100,&d[0],200,&d[1],300,&d[2],400,&d[3],500,&d[4]};

void main( )

{ p=a;

printf("%5d",p->x++);

printf("%5d\n",p->x);

printf("%5d",*p->y);

printf("%5d\n",*++p->y);

}

13. 以下程序运行后输出结果中第一行为(16)32659,第二行为(17)23569,第三行为(18)256 。

#include "stdio.h"

#include "stdlib.h"

struct node

{ char data; struct node *next;};

struct node *insert(struct node *h,char c)

{ struct node *p,*p1,*p2;

p=(struct node*)malloc(sizeof(struct node));

p->data=c;p->next=NULL;

if(h==NULL) h=p;

else

{ p1=p2=h;

while(c>p1->data&&p1->next!=NULL)

{ p2=p1;p1=p1->next;}

if(c<=p1->data)

if(p1==h) { p->next=h;h=p;}

else { p2->next=p;p->next=p1;}

else

{ p1->next=p;}

}

return h;

}

struct node *del(struct node *h)

{ struct node *p=h;

while(p!=NULL)

{ if(p->data%2==0) p->next=p->next->next;

p=p->next;

}

return h;

}

void print(struct node *h)

{ struct node *p=h;

while(p!=NULL)

{ printf("%c",p->data); p=p->next; }

printf("\n");

}

void main()

{ struct node *head=NULL;

char *item="32659",*p=item;

puts(item);

while(*p) head=insert(head,*p++);

print(head); del(head); print(head);

}

14. 以下程序的功能是:求a数组中前4个元素之和及后6个元素之和。试完善程序以达

到要求的功能。

int fsum(int *array,int n)

{ int i,s;

s=0;

for(i=0; (19)i

s+=array[i];

return(s);

}

void main(void)

{ int a[15]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

int sumh,sumt;

sumh=fsum(a,4);

sumt= (20)fsum(&a[9],6) ;

printf(“%d %d\n”,sumh,sumt);

}

15.以下程序对二维数组a中存储的N N矩阵做如下操作:先将每一行中值最大的元素与该行位于主对角线处的元素交换值,然后对主对角线上的所有元素排序使其自左上角到右下角升序排列,最后输出排序后主对角线上各元素的值。试完善程序以达到要求的功能。

#include

#define N 5

void fun(int x[][N],int n)

{ int i,j,t,arr,col;

for(i=0;i

{ arr=x[i][0]; col=0;

for(j=0;j

if(x[i][j]>=arr)

{ arr=x[i][j];

(21) col=j ;

}

t=x[i][i];

(22) x[i][i]=x[i][col] ;

x[i][col]=t;

}

for(i=0;i

for(j=i+1;j

if( (23) x[i][i]>x[j][j] )

{ t=x[i][i]; x[i][i]=x[j][j]; x[j][j]=t ; }

}

void main()

{ int a[N][N]={{10,25,24,13,23},{11,22,12,21,14},{20,15,19,16,18},

{17,9,4,5,3},{2,1,6,7,8}},i;

fun(a,N);

for(i=0;i

printf("%3d",a[i][i]);

printf("\n");

}

16. 以下程序中函数replace的功能是:将字符串s中所有属于字符串s1中的字符都用

s2中的对应位置的字符替换。假如s为“ABCBA”,s1为“AC”,s2为“ac”,则调用replace函数后,字符串s的内容将变换为“aBcBa”。试完善程序以达到要求的功能。

#include

#define MAX 20

void replace(char *s, char *s1, char *s2)

{ char *p;

for(; *s; s++)

{ p=s1;

while(*p&& (24)*p!=*s ) p++;

if(*p) *s=*(s2+p-s1);

}

}

void main( )

{ char s[MAX]="ABCBA",s1[MAX]="AC", s2[MAX]= "ac";

(25)replace(s, s1, s2) ;

printf("The string of s is:");

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

}

相关文档