c语言期末考试试题(谭浩强版)

c语言期末考试试题

星期六,2008年4月12日00:22

选择题(24分,每小题2分)

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

存储区域,用于存储读取的数据项

读取数据存储的地址或指向该地址的指针。

指向读取文件的文件指针。

一个整数变量,表示要读入的数据项的总数。

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

主( )

{

int i=010,j = 10;

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

}

a 11.9

B 9,10

8,10

D 9,9

3.设A为int变量,执行以下赋值语句后,A的值分别为()。

a = 125.534;

a = 20.0/3;

a =(int)125.521% 4;

a = 5 & lt& lt2;

6,31,1

B 125

C 125,6.666666,31.20

D 125.534

4.如果I和k都是int类型,则for循环语句()。

for(i=0,k =-1;k = 1;i++,k++)

printf(" * * * * \ n ");

结束循环A的条件不合法。

b循环体不执行一次。

c循环体只执行一次。

d是无限循环。

5.下列程序的输出是()。

主( )

{

char c;

int I;

for(I = 65;我& lt68;i++)

{

c = I+32;

开关(c)

{

案例“a”:

案例“b”:

case 'c':printf("%c,",c);打破;

默认值:printf(" end ");

}

}

}

a a b c结束

结束,结束

C a,a,a,

D a,b,c,

6.函数调用语句:fseek(fp,-10L,2);的意思是()。

将文件位置指针从文件的末尾移动到文件的开头10字节。

b .将文件位置指针从当前位置向文件头方向移动10字节。

将文件位置指针从当前位置移动10字节到文件末尾。

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

7.下列程序的输出是()。

主( )

{

int i=0,j = 0;

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

i++;

while(s2[j]!='\0')

s 1[i++]= S2[j++];

s 1[I]= 0;

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

}

一面

b国家

侧试

农村

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

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

同名的变量可以用在不同的函数中。

形参是局部变量。

d在函数内部,变量可以在复合语句中定义,这些变量只在这个复合语句中有效。

9.在下面的程序段中,枚举变量c1的值是()。

枚举颜色{红、黄、蓝=4、绿、白} c 1;

c 1 =黄色;

c 1 =白色;

1

B 3

C 5

D 6

10.有一个描述int(* ptr)();其中标识符ptr是()。

是指向整型变量的指针。

b是指向函数值为int的函数的指针。

c是一个函数名。

d定义不合法。

11.定义一个数组p,由n个指向整形数据的指针组成。正确的做法是()。

一个int p;

b int(* p)[n];

c int * p[n];

d int(* p)();

12.指针类型变量P和数组A具有相同的类型。不能执行的操作是()。

A p = a

b * p = a[0];

C p = & ampa[0];

D p = & ampa;

二、判断对错,对的打“√”,错的打“×”(20分,每道小题2分)。

1.参与位操作的数据可以是任何类型的数据。( )

2.如果有定义和陈述:

int a;

char c;

浮动f;

scanf("%d,%c,%f ",& amp一,& ampc,& ampf);

如果用键盘输入:10 A 12 5

那么a = 10,c =' a ',f = 12.5。( )

3.c语言将文件视为一系列字符(字节)。( )

4.如果有宏定义:

#定义S(a,b)t = a;a = b;b=t

因为变量t是未定义的,所以这个宏定义是错误的。( )

5.在Turbo C中,下列定义和语句是合法的:

file * fp

fp=fopen("a.txt "," r ");( )

6.如果定义了:

char s[ ]= "中国";

Turbo C系统为数组S打开一个6字节的存储单元..( )

7.如果有定义和陈述:

int a[3][3]={{3,5},{8,9},{12,35}},I,sum = 0;

for(I = 0;我& lt3;i++)

sum+= a[I][2-I];

那么sum=21。( )

8.如果有定义和陈述:

结构学生

{

int num

字符名称[10];

浮动分数;

}

s[5]={{1,"丽丽",98.5},{9,"小花",66}},* p = s;printf("%d ",* p++);

输出结果是1。( )

9.在程序中定义了一个结构类型后,可以多次使用它来定义该类型的变量。( )

10.在Turbo C中,这个定义和语句是合法的:

enum aa{ a=5,b,c } bb

bb =(enum aa)5;( )

写出以下程序的运行结果(36分,每小题6分)

1.

主( )

{

int i=29,j=6,k=2,s;

s = I+I/j % k-9;//s=i+(i/j)%k-9

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

}

2.

主( )

{

int x=31,y=2,s = 0;

{

s-= x * y;

x+= 2;y-= 3;

}

while(x % 3 = = 0);//先执行,再判断。

printf("x=%d\ty=%d\ts=%d\n ",x,y,s);

}

3.

主( )

{

int a[6]={10,20,30,40,50,60},I;

invert(a,0,5);

for(I = 0;我& lt6;i++)

printf("%d ",a[I]);

printf(" \ n ");

}

Invert (int s [],int i,int j)//反转

{

int t;

如果(我& ltj)

{

invert(s,i+1,j-1);//函数本身的嵌套调用形成一个循环。

t = s[I];

s[I]= s[j];

s[j]= t;

}

}

4.

# include & ltstdio.h & gt

主()

{

char str[]= " C程序",C;

int I;

for(I = 2;(c=str[i])!='\0';i++)

{

开关(c)

{

格‘g’:++ I;打破;//因为++i,跳过了G后面的1个字母。

大小写“o”:继续;

默认值:printf("%c ",c);继续;

}

printf(" * ");

}

printf(" \ n ");

}

5.

结构w//结构

{

char低;

char高;

};

Union u//* * *

{

结构w字节;

短词;

} uw

主( )

{

int结果;

uw . word = 0x 1234;

printf("word value:%04x\n ",uw . word);

printf("高字节:%02x\n ",uw . byte . high);

printf("低位字节:%02x\n ",uw . byte . low);

uw . byte . low = 0x 74;

printf("word value:%04x\n ",uw . word);

result = uw . word+0x2a 34;

printf("结果:%04x\n ",result);

}

6.

主()

{

char *s2= "我爱中国!",* * s 1 = & amp;S2;

char *s3,c,* s4 = " w

s3 = & ampc;

* s3 = ' H

S2 = S2+2;

printf("%s\t%c\t%s\t%c\n ",s2,*s3,s4,* * s 1);

}

阅读以下程序,并填写适当的内容以使程序完整(20分,每项空白2分)

1.一百匹马担一百担:有100匹马,担100担,大马担3担,中马担2担,小马担1担。有多少匹马?

主( )

{

int hb,hm,hl,n = 0;

for(HB = 0;hb & lt=100;hb+=(1))

for(hm = 0;hm & lt= 100-HB;hm+=(2))

{

HL = 100-h B-(3);

if(hb/3+hm/2+2*(3)==100)

{

n++;

printf("hb=%d,hm=%d,hl=%d\n ",hb/3,hm/2,2 * HL);

}

}

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

}

2.用“冒泡法”对输入的10字符进行排序,按从小到大的顺序输出。

#定义编号10

char str[N];

void main()

{

int i,flag

for(flag = 1;flag = = 1;)

{

scanf("%s ",str);

flag = 0;

printf(" \ n ");

}

sort(_ _ _(4)_);

for(I = 0;我& ltn;i++)

{

printf("%c ",str[I]);

}

printf(" \ n ");

}

sort(charstr[n])//冒泡排序

{

int i,j;

char t;

for(j = 1;j & ltn;j++)

for(I = 0;我& lt10-j;i++)

if(str[i]>str[i+1])

{

t = str[I];

____(5)____;

____(6)____;//交换位置

}

}

3.下面的程序是一个函数,它的作用是求二阶矩阵(M行N列矩阵)所有外部元素的值之和。(本程序中,二阶矩阵用一维数组表示。)

例如,矩阵是:

3 0 0 3

2 5 7 3

1 0 4 2

那么所有外部元素的值之和就是3+0+0+3+2+3+1+0+4+2 = 18。

add(int m,int n,int arr[])

{

for(I = 0;我& ltm;i=i+m-1)

for(j = 0;j & ltn;j++)

sum = sum+_ _ _ _(7)_ _ _ _ _;

for(j = 0;j & ltn;j=j+n-1)

for(I = 1;____(8)____;i++)

sum = sum+arr[I * n+j];

返回(总和);

}

4.用指针做函数参数,编程求一维数组中最大最小元素值。

#定义编号10

主()

{

void maxmin(int arr[],int *pt1,int *pt2,int n);

int array[N]={10,7,19,29,4,0,7,35,-16,21},*p1,*p2,a,b;

p 1 = & amp;a;

p2 = & ampb;

maxmin(数组,p1,p2,N);

printf("max=%d,min=%d ",a,b);

}

void maxmin(int arr[],int *pt1,int *pt2,int n)

{

int I;

* pt 1 = * pt2 = arr[0];

for(I = 1;我& ltn;i++)

{

if(arr[I]& gt;*pt1)

____(9)____ ;

if(arr[I]& lt;*pt2)

____(10)____ ;

}

}

回答

选择题(24分,每小题2分)

1.(B ) 2。(C ) 3。(二)

4.(D ) 5。(D ) 6。(一)

7.(D ) 8。(一)9。(四)

10.(B ) 11。(C ) 12。(四)

二、判断对错,对的打“√”,错的打“×”(20分,每道小题2分)。

1.( × ) 2.( √ )

3.( √ ) 4.( × )

5.( × ) 6.( √ )

7.( √ ) 8.( × )

9.( √ ) 10.( √ )

写出以下程序的运行结果(36分,每小题6分)

1.s=20

2.x=35 y=-4 s=-29

3.60,50,40,30,20,10,

4.e C pr * am

5 .单词值:1234

6 .热爱中国!高w l

高字节:12

低位字节:34

单词值:1274

结果是:3ca8

阅读以下程序,并填写适当的内容以使程序完整(20分,每项空白2分)

1.(1) 3 (2) 2 (3)hm hl

2.(4)str(5)str[I]= str[I+1](6)str[I+1]= t

3.(7)arr[I * n+j](8)I & lt;m-1

4.(9)* ptr 1 = arr[I](10)* ptr 2 = arr[I]