C期末练习题.docx
《C期末练习题.docx》由会员分享,可在线阅读,更多相关《C期末练习题.docx(14页珍藏版)》请在冰豆网上搜索。
![C期末练习题.docx](https://file1.bdocx.com/fileroot1/2023-1/25/873ef023-3e07-4698-9a1c-5f71c9257068/873ef023-3e07-4698-9a1c-5f71c92570681.gif)
C期末练习题
C语言期末练习题
一、判断题
说明:
在以下提供若干陈述中,逐一判断其正确与否,正确选择A,错误选择B。
1.在C程序中,函数既可以嵌套定义,也可以嵌套调用。
2.在C语言中常量和变量都有数据类型。
3.在所有的关系运算符(>=、>、==、!
=、<=、<)中,优先级最低的运算符是(<)。
4.continue语句只能用于循环结构。
5.表达式2.134%9不符合C语言语法。
6.运算符“=”和“&=”的优先级相同。
7.表达式!
!
4的值是4。
8.表达式strlen(“xyz\\\123”)的值为9。
9.while语句先判断循环条件,所以循环体有可能一次也不执行。
10.若x是单精度实型变量,表达式(x=11/2)的值是5.5。
11.若inta=4;执行if(a=1)a=a*5;后a的值为5。
12.C语言的运算符中,逗号(,)运算符的优先级最低。
13.表达式!
(x>0||y>0)等价于!
(x>0)&&!
(y>0)。
14.若有如下定义,inta[10],*p=a;则*(++a)和p[1]均表示数组元素a[1]。
15.设变量定义为chars[]=”china”,则数组s中有6个元素。
16.在C语言中,int和*p都是合法的用户自定义标识符。
17.在C语言中,main函数必须写在源程序的开始位置。
18.对于变量定义:
inta[8],*p=a+3;数组a的最后一个元素是p[4]。
19.运算符(-)不能作为单目运算符。
20.在C程序中,在函数内部定义的变量称为全局变量。
21.表达式m=n++的求解顺序是先计算m=n,再计算n=n+1。
22.C语言程序的三种基本结构是顺序结构、选择结构和循环结构。
23.若有如下定义inta=b=c=4;表示定义了三个整型变量a、b和c,同时给它们赋初值4。
24.表达式10>9>8的逻辑值为0。
25.若变量已正确定义,表达式x+y=z;符合C语言语法。
二、单选题
1.若已定义:
intx=4,y=4;则复合赋值表达式x/=1+y的值为_______。
A.0B.0.8C.5D.表达式非法
2.intx=6;x-=x+=x/=x;x值是________。
A.0B.1C.2D.3
3.下列叙述正确的是_______。
A.执行表达式a=b后,在内存中a和b存储单元中原有的值都将改变,a的值已由原值改变为b的值,b的值由原值变为零。
B.在赋值表达式中,赋值号右边既可以是变量也可以是任意表达式。
C.a是实型变量,C语言允许进行以下赋值a=10,因此可以这样说:
实型变量中允许存放整型值。
D.已有a=3,b=5,执行了表达式a=b,b=a之后使a中的值为5,b中的值为3。
4.下列程序段的输出结果是________。
intx=4,y=0;
if(x>2)y=1;
elseif(x<5)y=2;
elsey=3;
printf(“%d”,y);
A.3B.2C.1D.0
5.对于以下程序段,运行后x值为_______。
intx=9,a=1;
switch(a){
case1:
x-=3;
case2:
x-=4;break;
default:
x-=5;
}
A.6B.5C.2D.上述程序有语法错误
6.下列程序段的输出结果是__________。
intk=1;
switch(k){
case1:
putchar(‘P’);
case2:
putchar(‘M’);
case3:
putchar(‘Q’);
case4:
putchar(‘R’);break;
default:
putchar(‘S’);
}
A.PMQRB.PC.PMD.PMQRS
7.下列while循环,将执行________次。
i=-5;
while(++i)
printf(“%d”,i);
A.3B.4C.5D.无限次
8.若a是单精度实型变量,b是基本整形变量,以下正确的输入语句是________。
A.scanf(“%f%d”,&a,&b);
B.scanf(“%f%d”,a,b);
C.scanf(“%d%f”,&a,&b);
D.scanf(“%d%f”,a,b);
9.执行下列程序段后,k值为_______。
intk,a=1,b=2;
k=(++a==b)?
2:
3;
A.2B.3C.4D.5
10.函数f定义如下,执行语句“s=f(5);”后,s的值应为________。
intf(intm)
{staticinti=0;intsum=0;
for(;i<=m;i++)sum+=i;returnsum;
}
A.15B.14C.13D.0
11.对于以下递归函数f,调用函数f(4)的输出结果是_______。
intf(intn)
{if(n)returnf(n-1)+n;
elsereturnn;
}
A.10B.4C.0D.以上均不是
12.下列程序段的输出结果是_______。
#defineM(x,y)x/y
printf(“%d”,M(9,2+1));
A.3B.3.0C.5D.8
13.下列程序段的输出结果是________。
int*ip,i=10;
ip=&i;(*ip)--;
printf(“%d”,*ip);
A.10B.11C.9D.0
14.不正确的赋值或赋初值的方式是________。
A.charstr[5]={‘b’,‘o’,‘o’,‘k’};B.charstr[5]=”book”;
C.char*str=”book”;D.charstr[5];str=”book”;
15.下列程序段的输出结果是__________。
inta[]={2,3,4,5,6,7};
int*k=a+4;
printf(“%d”,*k++);
A.6B.7C.8D.2
16.设变量定义为:
int*ap[3],a[3];,_______是正确的赋值。
A.ap=&a[0]B.*ap=**aC.ap[0]=aD.**ap=a
17.以“写”方式打开文本文件c:
\xy.txt,下列语句中哪一个正确的___________。
A.fp=fopen(“c:
\\xy.txt”,”r”);
B.fp=fopen(“c:
\\xy.txt”,”w”);
C.fp=fopen(“c:
\\xy.txt”,”rb”);
D.fp=fopen(“c:
\xy.txt”,”w”);
18.对于以下的变量定义,语句__________在语法和语义上都是正确的。
structnode{
floatx,y;
chars[10];
}point={3.4,8.9,”bcdefgh”},*pp;
A.*pp=pointB.pp=&pointC.point=ppD.pp->x=point.y
19.定义structst
{charname[20];
longx;
floaty}student;
则变量student所占的字节数是________。
A.24B.28C.3D.26
20.若x=1,y=5则x&y的结果是_________。
A.1B.2C.5D.6
三、程序填空题
说明:
阅读下列程序说明和相应程序,在每小题提供的若干可选答案中,挑出一个正确答案。
程序1、
【程序说明】
根据下式计算
的值,要求精确到最后一项的绝对值小于10-6。
【程序】
#include
#include
voidmain()
{inti=1;
(1)
for(i=1;
(2);i++)
{(3);
s=s+item;}
printf(“s=%f\n”,s);
}
1.A.doubleitem,s;B.doubleitem=1,s;
C.doubleitem,s=0;D.doubleitem,s=1;
2.A.item<0.000001B.item>=0.000001
C.fabs(item)<0.000001D.fabs(item)>=0.000001
3.A.item=1/iB.item=item+1.0/(i*2-1)
C.item=1.0/(2*i-1)D.item=1.0/item/i
程序2、
【程序说明】
输出100~10000之间所有满足各位数字的立方和等于它本身的数。
【程序】
#include
voidmain()
{intd,i,m,sum;
for(i=100;i<=10000;i++){
(1)
while(m!
=0){
d=m%10;sum=sum+d*d*d;
(2)
}
if((3))printf(“%d”,sum);
}
}
1.A.sum=0;B.m=i;sum=0;C.m=i;D.i=m;sum=0;
2.A.m=m/10;B.m=i/10;C.m=m;D.m=m%10;
3.A.m!
=sumB.i==sumC.i!
=sumD.m==sum
程序3、
【程序说明】
求500以内的全部素数,每行输出10个。
素数就是只能被1和自身整除的正整数,1不是素数,2是素数。
【程序】
#include
#include
voidmain()
{
inti,m,n;
(1);
for(m=2;m<=500;m++){
n=sqrt(m);
for(i=2;i<=n;i++)
(2);
if(i>n){
printf("%6d",m);
count++;
(3);
}
}
printf("\n");
}
1.A.intcountB.intcount=0
C.countD.intcount==0
2.A.if(m%i!
=0)breakB.if(m%i==0)break
C.if(m%i==0)continueD.if(m%i!
=0)continue
3.A.if(count/10!
=0)printf(“\n”)B.if(count%10!
=0)printf(“\n”)
C.if(count%10==0)printf(“\n”)D.if(count/10==0)printf(“\n”)
程序4、
【程序说明】
输入100个整数,将它们存入数组中,再输入一个数x,然后在数组中查找x,如果找到,输出相应下标(如有多个元素与x相等,只要输出下标值最小的那个元素的下标),否则,输出“NotFound”
【程序】
#include
voidmain()
{
inti,s,x;
inta[100];
for(i=0;i<100;i++)
(1)
printf("Inputx");
scanf("%d",&x);
s=-1;
for(i=0;i<100;i++)
if(a[i]==x)
(2)
if((3))
printf("indexis%d\n",s);
elseprintf("NotFound");
}
1.A.scanf(“%d”,a);
B.scanf(“%d“,&a[i]);
C.scanf(“%d“,a[i]);
D.scanf(“%s“,a);
2.A.s=i;B.break;C.{s=i;break;}D.s=i;break;
3.A.i<10B.i>10C.i==10D.i=10
程序5、
【程序说明】
下列程序运行时,输入10个学生的姓名和成绩,然后求出学生的平均成绩。
【程序】
#include
structstudent{
intnum;
charname[20];
intscore;
};
(1);
voidmain()
{
inti;
(2);
printf("\ninputthestudent'snumber,nameandscore:
\n");
for(i=0;i<10;i++){
printf("No%d\n",i+1);
(3);
sum=sum+stud[i].score;
}
(4);
}
1.A.structstud[10]B.structstudentstud
C.structstudentstud[10]D.studentstud[10]
2.A.doublesum=0B.doublesum
C.floatsumD.intsum
3.A.scanf("%s%d%d",&stud[i].num,stud[i].name,&stud[i].score)
B.scanf("%d%s%d",&stud[i].num,stud[i].name,&stud[i].score)
C.scanf("%d%d%s",&stud[i].num,&stud[i].name,&stud[i].score)
D.scanf("%d%s%d",&stud[i].num,&stud[i].name,&stud[i].score)
4.A.printf("theaverage:
%f\n",sum/10)
B.printf("theaverage:
%d\n",sum/10)
C.printf("theaverage:
%x\n",sum/10)
D.printf("theaverage:
%o\n",sum/10)
程序6、
【程序说明】
输入两数a、b,再按从大到小顺序输出。
【程序】
#include
voidmain()
{intx,y;
int*p1,*p2;
scanf("%d%d",&a,&b);
(1)
p2=&b;
if(
(2))swap(p1,p2);
printf("%d,%d",a,b);
}
voidswap((3))
{intt;
t=*p1;
(4)
*p2=t;
}
1.A.p1=a; B.p1=&a;
C.*p1=&a;D.**p1=a;
2.A.ap2
C.p1b
3.A.intp1,intp2B.int*p1,intp2
C.int*p1,*p2D.int*p1,int*p2
4.A.p1=p2;B.*p1=*p2;
C.*p1=t;D.*p2=t;
四、程序阅读题(每题5分,共20分)
说明:
阅读下列程序,将运行时的输出结果写在答卷纸的相应题号下。
1、程序1
#include
voidmain()
{intm=123456;
do{
printf(“%d#”,m%10);
m=m/10;
}while(m!
=0);
}
2、程序2
#include
intfact(intn)
{
intt;
if(n==1)t=5;
elset=fact(n-1)+5;
returnt;
}
voidmain()
{
printf("result:
%d\n",fact(6));
}
3、程序3
#include
intfun(intx)
{staticinty=1;
y=y*x;
return(y);
}
voidmain()
{intt;
for(t=1;t<=3;t++)
printf("%d!
=%d\n",i,fun(t));
}
4、程序4
#include
voidmain()
{inta[6];
inti,j,t;
for(i=0;i<6;i++)
scanf("%d",&a[i]);
for(i=0;i<=5;i++)
for(j=5;iif(a[j-1]>a[j])
{t=a[j];a[j]=a[j-1];a[j-1]=t;}
printf("Thesorted6numbers:
\n");
for(i=0;i<6;i++)
printf("%4d",a[i]);
printf("\n");
}
运行时输入的数字为61234570
5、程序5
设以下程序执行前存放着文本文件file1.txt的内容是:
November1st,1990
#include
#include
voidmain()
{FILE*fr;
intch;
if((fr=fopen(“file1.txt”,”r”))==NULL){
printf(“Cannotopenfile”);
exit(0);
}
while(!
feof(fr)){
ch=fgetc(fr);
if(ch>=’0’&&ch<=’9’)
putchar(ch);
}
fclose(fr);
}
6、程序6
#include
voidmain()
{charstr[]=”abcd123456\0wxyz”,*p=str;
printf(“%s”,p+1);
}
7、程序7
#include
voidmain()
{chara[]="23456789",*ap;
ap=a;
while(*ap!
=’\0’)
{if((*ap)%2==0)*ap='#';
ap++;
}
puts(a);
}
8、程序8
#include
voidswap(int*a,int*b)
{intt;
t=*a;
*a=*b;
*b=t;
}
voidmain()
{intx=1,y=2;
swap(&x,&y);
printf("x=%d,y=%d",x,y);
}
五、程序设计题
1.编制程序,输入n个整数(n从键盘输入,n>0),输出它们中偶数的和。
2.对10个实数进行排序(从大到小)。
3.输入一个正整数n(14.定义函数fun用于计算两个整数之差的绝对值,编写主函数要求输入两个整数,调用该函数并输出。
5.输入x,计算并输出下列分段函数f(x)的值。
可以调用数学库函数:
平方根函数sqrt(),绝对值函数fabs(),幂函数pow()。
6.输入一个正整数n,计算5.6n。
要求定义和调用函数mypow(x,n)计算xn,其中x和n的类型分别是double和int,函数类型是double。
7.输入5个字符串,输出其中最小的字符串。
8.输入5个字符串,输出其中最长的字符串。