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]