当前位置:文档之家› 河海2012C语言试题A

河海2012C语言试题A

2011~2012学年第二学期C语言期末考试卷答题纸(A卷)

专业班级:学号:姓名:

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

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

二、填空题(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×2=20分)

1.编写函数int frinum(long s[][2],long n)实现以下功能:找到2 n范围内的所有亲密数对,将这些亲密数对保存到s指向的二维数组中。函数返回s数组中存储的亲密数对的对数。

编写函数main实现以下功能:求3000以内的亲密数对并输出。

说明:如果A的全部真因子(包括1,不包括A自身)之和等于B;B的全部真因子之和等于A,则称整数A和B为一对亲密数。

2.编写函数int arms(int ar[])实现以下功能:将所有3、4位Armstrong数存入数组ar中,函数返回这些Armstrong数的个数。

Armstrong数是指:一个n位数的各位数字的n次方之和等于该数。例如:153=13+53+33;1634=14+64+34+44。因此,153是3位Armstrong数,1634是4位Armstrong数。

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

1.C语言源程序的基本单位是()。

A 过程

B 函数

C 子程序

D 标识符

2.下列程序的输出结果是()。

main( )

{ int a=7,b=5;

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

}

A 5

B 1

C 0

D 不确定值

3.假设变量a,b均为整型,表达式(a=5,b=2,a>b?a++:b++,a+b)的值是()。

A 7 B8 C 9 D 2

4. 以下运算符优先顺序的描述中正确的是()。

A 关系运算符<算术运算符<赋值运算符<逻辑运算符

B 逻辑运算符<关系运算符<算术运算符<赋值运算符

C 赋值运算符<逻辑运算符<关系运算符<算术运算符

D 算术运算符<关系运算符<赋值运算符<逻辑运算符

5.设有如下程序段,下面描述中正确的是()。

int k=10; while(k=0) k=k-1;

A 循环执行一次

B 循环是无限循环

C循环体语句一次也不执行 D 循环体语句执行一次

6.以下程序的输出结果为()。

int i;

void prt( )

{ for(i=5;i<8;i++) printf("%c",'*');

printf("\t");

}

main( )

{ for(i=5;i<=8;i++) prt( ); }

A ***

B *** *** *** ***

C *** ***

D * * *

7.在C语言程序中,以下说法正确的是()。

A 函数的定义可以嵌套,但函数的调用不可以嵌套

B函数的定义不可以嵌套,但函数的调用可以嵌套

C 函数的定义和函数的调用都不可以嵌套

D 函数的定义和函数的调用都可以嵌套

8.以下函数调用语句中含有()个实参。

func((e1,e2),(e3,e4,e5));

A 2

B 3

C 5

D 语法错误

9.以“只读”方式打开文本文件a:\aa.dat,下列语句中哪一个是正确的( )。

A. fp=fopen(″a:\\aa.dat″,″ab″);

B. fp=fopen(″a:\aa.dat″,″a″);

C. fp=fopen(″a:\\aa.dat″,″r″);

D. fp=fopen(″a:\aa.dat″,″wb″);

10.已知职工记录描述如下,在C中,系统为变量w分配()字节的空间。

struct worker

{ int no;

char name[20];

char sex;

union

{ int day; int month; int year;}birth;

} w;

A 29

B 20

C 25

D 6

11.设有以下定义,值为5的枚举常量是()。

enum week{sun,mon=4,tue,wed,thu,fri,sat} w;

A tue

B sat

C fri

D thu

12.下面选项中正确的赋值语句是(设char a[5],*p=a;)()。

A p="abcd";

B a="abcd";

C *p="abcd";

D *a="abcd";

13.设有以下程序段,则值为6的表达式是()。

struct st { int n; struct st *next;};

static struct st a[3]={5,&a[1],7,&a[2],9,0 },*p;

p=&a[0];

A p++->n

B ++p->n

C p->n++

D (*p).n++

14.C语言中的文件类型只有()。

A 索引文件和文本文件两种

B 文本文件一种

C 二进制文件一种

D ASCII码文件和二进制文件两种

15.已知函数fread的调用形式为fread(buffer,size,count,fp),其中buffer代表的是()。

A 存放读入数据项的存储区

B 存放读入数据的地址或指向此地址的指针

C 一个指向所读文件的文件指针

D 一个整型变量,代表要读入的数据项总数16.以下程序的输出结果为()。

main( )

{ int i=010,j=10;

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

A 11,9

B 9,10

C 8,10

D 9,9

17.设a为int型变量,执行下列赋值语句后,a的取值分别是()。

a=125.534; a=20.0/3; a=(int)125.521%4;

A 125,6,31

B 125,6,1

C 125,6.666666,31

D 125.534,6.666666,2

18.设i和k都是int类型,则for循环语句()。

for(i=0,k=-1;k=1;i++,k++) printf("****\n");

A 循环结束的条件不合法

B 循环体一次也不执行

C 循环体只执行一次

D 是无限循环

19.以下程序的输出结果为()。

main( )

{ char c;

int i;

for(i=65;i<68;i++)

{ c=i+32;

switch(c)

{ case 'a':case 'b':case 'c':printf("%c,",c);break; default:printf("end");}

}

}

A a,b,c,end

B a,a,a,end

C a,a,a,

D a,b,c,

20.函数调用语句:fseek(fp,-10L,2);的含义是()。

A 将文件位置指针从文件末尾处向文件头的方向移动10个字节

B 将文件位置指针从当前位置向文件头的方向移动10个字节

C 将文件位置指针从当前位置向文件末尾方向移动10个字节

D 将文件位置指针移到距离文件头10个字节处

21.以下程序的输出结果为()。

main( )

{ char s1[40]="country",s2[20]="side";

int i=0,j=0;

while(s1[i]!='\0') i++;

while(s2[j]!='\0') s1[i++]=s2[j++];

s1[i]=0;

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

}

A side

B country

C sidetry

D countryside

22.下列说法不正确的是()。

A 主函数main中定义的变量在整个文件或程序中有效

B 不同函数中,可以使用相同名字的变量

C 形式参数是局部变量

D 在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效23.设有说明int (*ptr)();其中标识符ptr是()。

A 是一个指向整型变量的指针B是一个指针,它指向一个函数值是int的函数

C 是一个函数名D定义不合法

24.定义由n个指向整型数据的指针组成的数组p,其正确的方式为()。

A int p;

B int (*p)[n];

C int *p[n];

D int (*p)( );

25.具有相同类型的指针类型变量p与一维数组a,不能进行的操作是()。

A p=a;

B *p=a[0];

C p=&a[0];

D p=&a;

26. 以下关于预处理命令的叙述错误的是()。

A 预处理命令由预处理程序解释

B 程序中的预处理命令是以#开始的

C 若在程序的一行中出现多条预处理命令,这些命令都是有效的

D 预处理命令既可以出现在函数定义的外部,也可以出现在函数内部

27. 有如下程序段:

char p1[80]=”NanJing”, p2[20]=”Young”, p3=”Olympic”;

strcpy( p1,strcat( p2,p3));

printf(“%s\n”,p1);

执行该程序段后的输出是()。

A NanJingYoungOlympic

B YoungOlympic

C Olympic

D NanJing

28. 已有声明“int x,a=3,b=2;”,则执行赋值语句“x=a>b++?a++;b++”后,变量x、a、b

的值分别为()。

A 3 4 3

B 3 3 4

C 3 3 3

D 4 3 4

29. 下列选项中可用作变量名的是()。

A Case

B a-b

C $cd

D 2ab

30.以下4个程序段中有3个程序的执行效果总是相同的,另一个执行效果不同的是()。

A if( a>b ) c=a,a=b,b=c;

B if( a>b ) { c=a,a=b,b=c;}

C if( a>b ) c=a;a=b;b=c;

D if( a>b ) { c=a;a=b;b=c;}

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

1.判断变量a、b、c的值是否是等差数列中连续的三项的表达式为( 1 )。

2. 表示“当x取值在[1,ln10)范围内时,y取值1,否则 y取值-1”所使用的C表达式为“y=( 2 ) ? 1 : -1 ”。

3. 已有声明“int a,b;”且a 和b的值均大于0,表达式“a%b+a/b*b==a”的值为( 3 )。

4. 除goto语句外,在循环结构中执行( 4 )语句可提前结束本次循环直接进入下一次循环。

5. 若有程序段“int a[10],*p=a,*q; q=&a[5];”,则表达式q-p的值是( 5 )。

6. 若有声明“int r=2;”,则执行语句“printf(“%d”,sizeof(2*3.14*r));”时输出为( 6 )。

7. 以下程序运行时输出到屏幕的结果为(7 )

#include

#define MAX(A,B) A>B ? 2*A : 2*B

void main()

{

int a=1,b=2,c=3,d=4,t;

t=MAX(a+b,c+d);

printf(“%d\n”,t);

}

8. 以下程序运行时输出到屏幕的结果为(8 )

#include

void swap(int a, int b)

{ int t;

if( a>b) t=a,a=b,b=t;

}

void main()

{ int x=13,y=11,z=12;

if( x>y ) swap( x, y);

if( x>z ) swap( x, z);

if( y>z ) swap( y, z);

printf( “%d\t%d\t%d\n”,x, y, z);

}

9. 以下程序运行时输出到屏幕的结果第二行是(9 )。

#include

int f( int x, int y)

{

{ static int x=2;

if ( y>2 )

{ x=x*x;

y=x;

}

else y=x+1;

}

return x+y;

}

void main()

{ int a=3;

printf(“%d\n”,f( a,3));

printf(“%d\n”,f( a,2));

}

10. 以下程序运行时输出到屏幕的结果是(10 )

#include

void fun( int m, int n)

{ if( m>=n)

printf(“%d”, m);

else

fun(m+1, n);

printf(“%d”,m);

}

void main()

{ fun(1,2);}

11. 以下程序运行时输出到屏幕的结果中第一行是(11 ),第二行是(12 ),第三行是(13 )。

#include

#define N 3

void main()

{ int i , j , a[N][N]={1}, f1=0, f2=1, temp;

for( i=1; i

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

{ if( j<=i )

{ a[i][j]=f1+f2;

temp=f1;

f1=f2;

f2=f1+temp;

}

}

for( i=0; i

{ for( j=0; j

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

printf(“\n”);

}

}

12. 以下程序求方程的一个近似根。root函数采用二分法计算并返回方程f(x)=0在[a,b]内的一个近似根,main函数调用root函数求方程cos(x)=0在[0, 3.14]内的一个近似根。试完善程序以达到要求的功能。

#include

#include

double root(double a, double b,double (*f)(double))

{ double x,y;

if( 14 )

{ printf(“There is no root between %f and %f”, a,b);

return 0;

}

do

{ x=( 15);

y=f(x);

if( fabs(y)<1e-6 || fabs(b-a)<1e-6) break;

if( (16) <0 ) b=x;

else a=x;

} while(1);

return x;

}

void main()

{ printf( “\n x=%f”, root( 0 , 3.14 , 17 ));

}

13.以下程序在3~50范围内验证:大于等于3的两个相邻素数的平方之间至少有4个素数。例如,3和5是相邻素数,32~52之间有素数11、13、17、19、23.试完善程序以达到要求的功能。

#include

#include

#include

int prime(int n)

{ int i;

for( i=2;i<=sqrt(n);i++)

if( 18) return 0;

return 1;

}

void main()

{ int i , j, k=0, m, n, c, a[30]={0};

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

if( prime(i)) 19 ;

for( i=0; i

{ m=a[i]*a[i];

n=a[i+1]*a[i+1];

c=( 20 );

for( j=m+1; j

if( 21 ) c++;

if( c>=4)

printf(“\n%d*%d-%d*%d:%d”, a[i], a[i], a[i+1],a[i+1],c);

else { printf(“Error”); exit(0);}

}

}

14. 存储一组整数的某单向链表结点定义为:

typedef struct n

{ int x;

struct n *next;

} NODE;

函数NODE *sort(NODE *head) 采用插入法对head 指向的单向链表中存储的数据按成员x值从小到大排序。

算法提示:对链表中从第2个结点开始直到最后结点范围内的每个结点做以下操作:若第i个结点(i 从2开始)的成员x值大于或等于第i-1 个结点的成员x 的值,则保持第i个结点在链表中的位置不变;否则,先将第i个结点从链表中删除(使第i-1个结点的指针域指向第i+1个结点),再将已脱离链表的原第i个结点插入到链表的前i-1个结点中,并保持插入节点后链表的前i个结点按成员x值从小到大有序。请完善sort 函数使其达到要求的功能。

NODE *sort( NODE *head)

{ 22 *p1,*p2, *q1, *q2;

p1=head;

p2=p1->next;

while(p2)

{ if( p1->x<=p2->x )

{ p1=p2;

23 =p2->next;

}

else

{ p1->next= 24 ;

q1=head; q2=q1->next;

if(p2->xx)

{ p2->next= 25 ;

head=p2;

}

else

{ q1=head;

q2=head->next;

while(p2->x>q2->x)

{

q1=q2;

q2=q2->next

}

p2->next=q2;

q1->next=p2;

}

p2=p1->next;

}

}

return head;

}

相关主题
文本预览
相关文档 最新文档