c语言试题 谭浩强.docx
《c语言试题 谭浩强.docx》由会员分享,可在线阅读,更多相关《c语言试题 谭浩强.docx(15页珍藏版)》请在冰豆网上搜索。
c语言试题谭浩强
C语言期末考试试题〔谭浩强版〕2021-7-820:
55
2021-7-821:
23最正确答案C语言期末考试试题
2021年04月12日星期六00:
22
一选择题〔24分,每题2分〕
1.函数fread的调用形式为fread〔buffer,size,count,fp〕,其中buffer代表的是〔〕。
A存放读入数据项的存储区
B存放读入数据的地址或指向此地址的指针
C一个指向所读文件的文件指针
D一个整形变量,代表要读入的数据项总数
2.以下程序的输出结果为〔〕。
main()
{
inti=010,j=10;
printf("%d,%d\n",i++,j--);
}
A11,9
B9,10
C8,10
D9,9
3.设a为int型变量,执行以下赋值语句后,a的取值分别是〔〕。
a=125.534;
a=20.0/3;
a=(int)125.521%4;
a=5<<2;
A125,6,31,1
B125,6,1,20
C125,6.666666,31,20
D125.534,6.666666,2,20
4.设i和k都是int类型,那么for循环语句〔〕。
for(i=0,k=-1;k=1;i++,k++)
printf("****\n");
A循环结束的条件不合法
B循环体一次也不执行
C循环体只执行一次
D是无限循环
5.以下程序的输出结果为〔〕。
main()
{
charc;
inti;
for(i=65;i<68;i++)
{
c=i+32;
switch(c)
{
case'a':
case'b':
case'c':
printf("%c,",c);break;
default:
printf("end");
}
}
}
Aa,b,c,end
Ba,a,a,end
Ca,a,a,
Da,b,c,
6.函数调用语句:
fseek〔fp,-10L,2〕;的含义是〔〕。
A将文件位置指针从文件末尾处向文件头的方向移动10个字节
B将文件位置指针从当前位置向文件头的方向移动10个字节
C将文件位置指针从当前位置向文件末尾方向移动10个字节
D将文件位置指针移到距离文件头10个字节处
7.以下程序的输出结果为〔〕。
main()
{
inti=0,j=0;
while(s1[i]!
='\0')
i++;
while(s2[j]!
='\0')
s1[i++]=s2[j++];
s1[i]=0;
printf("%s\n",s1);
}
Aside
Bcountry
Csidetry
Dcountryside
8.以下说法不正确的选项是〔〕。
A主函数main中定义的变量在整个文件或程序中有效
B不同函数中,可以使用相同名字的变量
C形式参数是局部变量
D在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效
9.在以下程序段中,枚举变量c1的值是〔〕。
enumcolor{red,yellow,blue=4,green,white}c1;
c1=yellow;
c1=white;
A1
B3
C5
D6
10.设有说明int(*ptr)();其中标识符ptr是〔〕。
A是一个指向整形变量的指针
B是一个指针,它指向一个函数值是int的函数
C是一个函数名
D定义不合法
11.定义由n个指向整形数据的指针组成的数组p,其正确的方式为〔〕。
Aintp;
Bint(*p)[n];
Cint*p[n];
Dint(*p)();
12.具有相同类型的指针类型变量p与数组a,不能进行的操作是〔〕。
Ap=a;
B*p=a[0];
Cp=&a[0];
Dp=&a;
二判断对错,对的划“√〞,错的划“×〞〔20分,每题2分〕
1.参加位运算的数据可以是任何类型的数据。
()
2.假设有定义和语句:
inta;
charc;
floatf;
scanf("%d,%c,%f",&a,&c,&f);
假设通过键盘输入:
10A125
那么a=10,c=‘A’。
()
3.C语言把文件看作是一个字符〔字节〕的序列。
()
4.假设有宏定义:
#defineS(a,b)t=a;a=b;b=t
由于变量t没定义,所以此宏定义是错误的。
()
5.在TurboC中,下面的定义和语句是合法的:
file*fp;
fp=fopen("a.txt","r");()
6.假设有定义:
chars[]="china";
那么TurboC系统为数组s开辟6个字节的内存单元。
()
7.假设有定义和语句:
inta[3][3]={{3,5},{8,9},{12,35}},i,sum=0;
for(i=0;i<3;i++)
sum+=a[i][2-i];
那么sum=21。
()
8.假设有定义和语句:
structstudent
{
intnum;
charname[10];
floatscore;
}
s[5]={{1,"lili",98.5},{9,"xiaohua",66}},*p=s;printf("%d",*p++);
输出结果是1。
()
9.在程序中定义了一个结构体类型后,可以屡次用它来定义具有该类型的变量。
()
10.在TurboC中,此定义和语句是合法的:
enumaa{a=5,b,c}bb;
bb=(enumaa)5;()
三写出以下程序的运行结果〔36分,每题6分)
1.
main()
{
inti=29,j=6,k=2,s;
s=i+i/j%k-9;//s=i+(i/j)%k-9
printf(“s=%d\n〞,s);
}
2.
main()
{
intx=31,y=2,s=0;
do
{
s-=x*y;
x+=2;y-=3;
}
while(x%3==0);//先执行,后判断
printf(“x=%d\ty=%d\ts=%d\n〞,x,y,s);
}
3.
main()
{
inta[6]={10,20,30,40,50,60},i;
invert(a,0,5);
for(i=0;i<6;i++)
printf(“%d,〞,a[i]);
printf(“\n〞);
}
invert(ints[],inti,intj)//倒置
{
intt;
if(i{
invert(s,i+1,j-1);//函数自身的嵌套调用,形成循环
t=s[i];
s[i]=s[j];
s[j]=t;
}
}
4.
#include<>
main()
{
charstr[]="TheCprogram",c;
inti;
for(i=2;(c=str[i])!
='\0';i++)
{
switch(c)
{
case'g':
++i;break;//由于++i,跳过了g后面的1个字母
case'o':
continue;
default:
printf(“%c〞,c);continue;
}
printf(“*〞);
}
printf(“\n〞);
}
5.
structw//结构体
{
charlow;
charhigh;
};
unionu//共用体
{
structwbyte;
shortword;
}uw;
main()
{
intresult;
=0x1234;
printf("wordvalue:
%04x\n",);
printf("highbyte:
%02x\n",);
printf("lowbyte:
%02x\n",);
=0x74;
printf("wordvalue:
%04x\n",);
result=uw.word+0x2a34;
printf("theresult:
%04x\n",result);
}
6.
main〔〕
{
char*s2="IloveChina!
",**s1=&s2;
char*s3,c,*s4="w";
s3=&c;
*s3='H';
s2=s2+2;
printf("%s\t%c\t%s\t%c\n",s2,*s3,s4,**s1);
}
四阅读以下程序,在处填入适当内容,使程序完整〔20分,每个空2分〕
1.百马百担问题:
有100匹马,驮100担货,大马驮3担,中马驮2担,两匹小马驮1担,问大、中、小马各多少匹?
main()
{
inthb,hm,hl,n=0;
for(hb=0;hb<=100;hb+=
(1))
for(hm=0;hm<=100-hb;hm+=
(2))
{
hl=100-hb-(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个字符排序后按从小到大的次序输出。
#defineN10
charstr[N];
voidmain()
{
inti,flag;
for(flag=1;flag==1;)
{
scanf("%s",str);
flag=0;
printf("\n");
}
sort(___(4)___);
for(i=0;i{
printf("%c",str[i]);
}
printf("\n");
}
sort(charstr[N])//冒泡排序
{
inti,j;
chart;
for(j=1;jfor(i=0;i<10-j;i++)
if(str[i]>str[i+1])
{
t=str[i];
____(5)____;
____(6)____;//交换位置
}
}
3.以下程序是一个函数,功能是求二阶矩阵〔m行n列矩阵〕的所有靠外侧的各元素值之和。
〔本程序中二阶矩阵用一维数组来表示。
〕
例如,矩阵为:
3003
2573
1042
那么所有靠外侧的各元素值之和为3+0+0+3+2+3+1+0+4+2=18。
add(intm,intn,intarr[])
{
for(i=0;ifor(j=0;jsum=sum+____(7)____;
for(j=0;jfor(i=1;____(8)____;i++)
sum=sum+arr[i*n+j];
return(sum);
}
4.用指针作函数参数,编程序求一维数组中的最大和最小的元素值。
#defineN10
main()
{
voidmaxmin(intarr[],int*pt1,int*pt2,intn);
intarray[N]={10,7,19,29,4,0,7,35,-16,21},*p1,*p2,a,b;
p1=&a;
p2=&b;
maxmin(array,p1,p2,N);
printf("max=%d,min=%d",a,b);
}
voidmaxmin(intarr[],int*pt1,int*pt2,intn)
{
inti;
*pt1=*pt2=arr[0];
for(i=1;i{
if(arr[i]>*pt1)
____(9)____;
if(arr[i]<*pt2)
____(10)____;
}
}
答案
一选择题〔24分,每题2分〕
1.(B)2.(C)3.(B)
4.(D)5.(D)6.(A)
7.(D)8.(A)9.(D)
10.(B)11.(C)12.(D)
二判断对错,对的划“√〞,错的划“×〞〔20分,每题2分〕
1.〔×〕2.〔√〕
3.〔√〕4.〔×〕
5.〔×〕6.〔√〕
7.〔√〕8.〔×〕
9.〔√〕10.〔√)
三写出以下程序的运行结果〔36分,每题6分〕
1.s=20
2.x=35y=-4s=-29
3.60,50,40,30,20,10,
4.eCpr*am
5.wordvalue:
1234
6.loveChina!
Hwl
highbyte:
12
lowbyte:
34
wordvalue:
1274
theresult:
3ca8
四阅读以下程序,在处填入适当内容,使程序完整〔20分,每个空2分〕
1.
(1)3
(2)2(3)hmhl
2.(4)str(5)str[i]=str[i+1](6)str[i+1]=t
3.(7)arr[i*n+j](8)i4.(9)*ptr1=arr[i](10)*ptr2=arr[i]赞同1|评论
(1)