《C语言程序》练习题Word格式文档下载.docx
《《C语言程序》练习题Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《《C语言程序》练习题Word格式文档下载.docx(20页珍藏版)》请在冰豆网上搜索。
则应填入()
A)intB)int*C)(*int)D)(int*)
8、若已知:
intx;
inty[];
则下面哪个表达式是有意义的()
A)&
xB)&
(x+y)C)&
5D)&
y
9、请读程序
f(char*s1)
{char*s2=s1;
while(*s2!
='
\0'
)s2++;
return(s2-s1);
{printf("
%d\n"
f("
1234567"
));
}
上面程序的输出结果是()
A)4(B)7(C)9(D)0N_001
10、已知结构eisei类型的变量a,其初始化赋值如下:
staticstructeiseia={"
20"
5,1.7691};
请写出结构eisei的类型定义()
A)eiseistruct{B}structeisei{
charname();
charname[];
intkodo;
floatshuki;
}doubleshuki;
C)structeisei{D)eiseistruct{
intname;
floatshuki;
}floatshuki;
二、填空(每空2分,共20分):
C源程序的基本单位是
(1) 。
若a=1,b=4,c=3,则表达式!
(a<
b)||!
c&
&
1的值是
(2) 。
若有定义intm=5,y=2;
,执行表达式y+=y-=m*=y后y的值是 (3) 。
a=3,b=2,c=1时,表达式f=a>
b>
c的值是 (4) 。
C语言中,二维数组的定义方式为:
类型说明符 数组名[(5)][(6)];
设有以下宏定义:
#defineWIDTH80
#defineLENGTHWIDTH+40
则执行赋值语句:
v=LENGTH*20;
(v为int型变量)后,v的值是 (7) 。
建立上图所示存储结构所需的说明语句是 (8) 。
建立上图所示给a输入数据的输入语句是 (9) 。
建立上图所示存储结构所需的赋值语句是 (10) 。
三、分析运行结果(每小题4分,共16分)
1、下面程序的运行结果是:
main()
{inti,j,a[2][3]={{2,4,6},{8,10,12}};
printf(“Theoriginalarrayis:
\n”);
for(i=0;
i<
2;
i++)
{for(j=0;
j<
3;
j++)
printf(“%4d”,a[i][j]);
printf(“\n”);
printf(“\ntheresultis:
for(i=0;
2、若输入的值是-125,以下程序的运行结果是:
#include”math.h”
{intn;
scanf(“%d”,&
n);
printf(“%d=”,n);
if(n<
0)printf(“-“);
n=fabs(n);
fun(n);
fun(intn)
{intk,r;
for(k=2;
k<
=sqrt(n);
k++)
{r=n%k;
while(r==0)
{printf(“%d”,k);
n=n/k;
if(n>
1)printf(“*”);
r=n%k;
}}
if(n!
=1)printf(“%d\n”,n);
3、下面程序的运行结果是:
{intva[10],vb[10],*pa,*pb,i;
pa=va;
pb=vb;
i++,pa++,pb++)
{*pa=i;
*pb=2*i;
printf(“%d\t%d\n”,*pa,*pb);
pa=&
va[0];
pb=&
vb[0];
{*pa=*pa+i;
*pb=*pb*i;
printf(“%d\t%d\n”,*pa++,*pb++);
4、以下程序的运行结果是:
{structEXAMPLE{
struct{intx;
inty;
}in;
inta;
intb;
}e;
e.a=1;
e.b=2;
e.in.x=e.a*e.b;
e.in.y=e.a+e.b;
printf(“%d,%d”,e.in.x,e.in.y);
四、程序填空(每空2分,共20分)
以下程序输出x,y,z三个数中的最大者。
请在____内填入正确的内容。
{intx=4,y=6,z=7;
int
(1) ;
if(
(2) )u=x;
elseu=y;
if( (3) )v=u;
elsev=z;
printf(“v=%d”,v);
2.下面程序的功能是在任意的字符串a中将与字符’c’相等的所有元素的下标值分别存放在整型数组b中。
请填空。
#include<
{chara[80];
inti,b[80],k=0;
gets(a);
a[i]!
=‘\0’;
if( (4) ){b[k]=i;
(5) ;
k;
i++)printf(“%3d”,b[i]);
3.结构数组中存有三人的姓名和年龄,以下程序输出三人中最年长者的姓名和年龄。
请在____内填入正确内容。
staticstructman
{charname[20];
intage;
}person[]={“li-ming”,18,“wang-hua”,19,“zhang-ping”,20};
{structman*p,*q;
intold=0;
p=person;
for(;
p (6);
p++)
if(old<
p->
age)
{q=p;
(7) ;
printf(“%s%d”, (8) );
4.以下程序能找出数组中的最大值和该值所在的元素下标,数组元素值从键盘输入。
请选择填空。
{intx[10],*p1,*p2,k;
for(k=0;
k<
10;
k++)scanf(“%d”,x+k);
for(p1=x,p2=x;
p1-x<
p1++)
if(*p1>
*p2)p2= (9) ;
printf(“MAX=%d,INDEX=%d\n”,*p2, (10) );
(9)A)p1B)p2[p1]C)x[p2]D)x-p1
(10)A)p1-xB)p1C)p2-xD)x-p2
五、编程(共24分)
1、编制程序:
输入一个整数,判断它能否被3、5、7整除,并输出以下信息之一:
能同时被3、5、7整除。
能被其中两数(要指出哪两个)整除。
能被其中一个数(要指出哪一个)整除。
不能被3、5、7任一个整除。
2、试利用结构体类型编制一程序,实现输入一个学生的数学期中和期末成绩,然后计算并输出其平均成绩。
练习题二
一、单选题(共30分,每小题2分)
1、与代数式(x*y)/(u*v)不等价的C语言表达式是()。
A.x*y/u*vB.x*y/u/vC.x*y/(u*v)D.x/(u*v)*y
2、对于charcx=’\039’;
语句,正确的是()。
A.不合法 B.cx的ASCII值是33
C.cx的值为四个字符 D.cx的值为三个字符
3、假定x和y为double型,则表达式x=2,y=x+3/2的值是()。
A.3.500000B.3 C.2.000000D.3.000000
4、执行下列程序片段时输出结果是()。
intx=5,y;
y=2+(x+=x++,x+8,++x);
printf(“%d”,y);
A.13B.14C.15D.16
5、有输入语句:
scanf(“a=%d,b=%d,c=%d”,&
a,&
b,&
c);
为使变量a的值为1,b的值为3,c的值为2,则正确的数据输入方式是()。
A.132↙ B.a=1,b=3,c=2↙
C.a=1b=3c=2↙ D.1,3,2↙
6、对下述程序,是正确的判断()。
main()
{intx,y;
scanf(“%d,%d”,&
x,&
y);
if(x>
y)
x=y;
y=x;
else
x++;
y++;
printf(“%d,%d”,x,y);
A.若输入4和3,则输出3和4 B.若输入3和4,则输出4和5
C.有语法错误,不能通过编译 D.若输入4和3,则输出4和5
7、当a=1,b=3,c=5,d=4时,执行完下面一段程序后x的值是()。
if(a<
b)
if(c<
d)x=1;
c)
if(b<
d)x=2;
elsex=3;
elsex=6;
elsex=7;
A.1B.2C.3D.4
8、下述程序段的运行结果是()。
inta=1,b=2,c=3,t;
while(a<
b<
c){t=a;
a=b;
b=t;
c--;
printf(“%d,%d,%d”,a,b,c);
A.1,2,0B.2,1,0C.1,2,1D.2,1,1
9、以下程序段()。
x=-1;
do
{x=x*x;
while(!
A.是死循环B.循环执行2次C.循环执行1次D.有语法错误
10、以下能对二维数组a进行正确初始化的语句是()。
A.inta[2][]={{1,0,1},{5,2,3}};
;
B.inta[][3]={{1,2,3},{4,5,6}};
C.inta[2][4]={{1,2,3},{4,5},{6}};
D.inta[][3]={{1,0,1},{},{1,1}};
11、若有说明:
inta[3][4]={0};
则下面正确的叙述是()。
A.只有元素a[0][0]可得到初值0
B.此说明语句不正确
C.数组a中各元素都可得到初值,但其值不一定为0
D.数组a中每个元素均可得到初值0
12、如果在一个函数中的复合语句中定义了一个变量,则正确的说法是()。
A.该变量只在该复合语句中有效B.该变量在该函数中有效
C.该变量在本程序范围内均有效D.该变量为非法变量
13、对下面程序段:
#defineA3
#defineB(a)((A+1)*a)
…
x=3*(A+B(7));
正确的判断是()。
A.程序错误,不许嵌套宏定义B.x=93
C.程序错误,宏定义不许有参数D.x=21
14、下面程序段的运行结果是()。
charp[]="
abcdefghijklmn"
char*p1=p;
p1+=3;
strlen(strcpy(p1,"
ABCD123"
)));
A.8B.12C.11D.7
15、设有如下定义:
structsk
{intn;
floatx;
}data,*p;
若要使p指向data中的n域,正确的赋值语句是()。
A.p=&
data.n;
B.*p=data.n;
C.p=(structsk*)&
D.p=(structsk*)data.n;
二、判断题(共10分,每小题1分)
1、C语言并不是一种严格的算法语言,大写字母与小写字母的意义相同()。
2、C语言是一种函数式语言,函数体是由若干说明语句和执行语句组成的。
( )
3、算法的特征的是有效性、确定性、有穷性、特殊性。
( )
4、表达式a=3*5,a+a,a+3的值为18。
( )
5、'
a'
和"
a"
没有区别,表示的都是字符常量a。
6、设有说明语句“intx;
”,则执行语句“x=7;
x+=x-=x+x;
”后x值为-7。
( )
7、条件“2<x<3或x<-10”的C表达式是x>
2&
x<
3||x<
-10。
8、do-while语句与while语句的区别仅是关键字“while”出现的地方不同。
9、执行语句for(i=1;
i++<
4;
);
后i的值为5。
10、对for(表达式1;
;
表达式3)可理解为for(表达式1;
表达式3;
表达式3)。
三、程序阅读题(共44分)
1、写出以下程序运行的结果。
(5分)
{intx=9;
for(;
x>
0;
x--){
if(x%3==0){
printf(“%d”,--x);
continue;
2、写出下面程序运行的结果。
main()
{inta=10,y=0;
do{
a+=2;
y+=a;
if(y>
50)break;
}while(a=14);
printf(“a=%dy=%d\n”,a,y);
3、下面程序段的功能是计算1000!
的末尾有多少个零,请填
(1)空使程序完整。
{
inti,k,m;
for(k=0,i=5;
i<
=1000;
i+=5)
{m=i;
while
(1){k++;
m=m/5;
k);
}
4、下面程序的功能是:
先将在字符串s中的字符按逆序存放到t串中,然后把s中的字符按正序连接到t串的后面。
例如,当s中的字符串为:
“ABCDE”时则t中的字符串应为:
“EDCBAABCDE”;
判断下面程序的正误,如果错误请改正过来。
string.h>
{chars[80],t[200];
inti,sl;
gets(s);
sl=strlen(s);
for(i=0;
sl;
i++)t[i]=s[sl-i];
i++)t[sl+i]=s[i];
puts(t);
5、写出以下程序运行的结果。
voidmain()
{
staticchara[]="
Language"
b[]="
programe"
char*p1,*p2;
intk;
p1=a;
p2=b;
for(k=0;
=7;
if(*(p1+k)==*(p2+k))printf("
%c"
*(p1+k));
6、下面程序的功能是输出1至100之间每位数的乘积大于每位数的和的数,请填(3)空使程序完整。
班级:
姓名:
学号:
.
O…………O…………O…………O…………O装………O订………O线…………O…………O…………O…………O……………O
{intn,k=1,s=0,m;
for(n=1;
n<
=100;
n++){
k=1;
s=0;
1;
while
(2){
k*=m%10;
s+=m%10;
3;
if(k>
s)printf(“%d”,n);
7、写出以下程序运行的结果。
(4分)
{intx=1,y=0,a=0,b=0;
switch(x){
case1:
switch(y){
case0:
a++;
break;
case1:
b++;
case2:
a++;
b++;
break;
case3:
printf(“a=%d,b=%d”,a,b);
8、写出下面程序的运行结果。
structn{intx;
charc;
};
func(structnb)
{b.x=20;
b.c='
y'
}
{structna={10,'
x'
};
func(a);
printf("
%d,%c"
a.x,a.c);
9、以下程序是求矩阵a,b的乘积,结果存放在矩阵C中并按矩阵形式输出,请填(3)空使程序完整。
{inta[3][2]={2,10,9,4,5,119},b[2][2]={-1,-2,-3,-4};
inti,j,k,s,c[3][2];
for(i=0;
i++)
for(j=0;
j<
j++){
1
for(k=0;
k++)s+=2
c[i][j]=s;
i++){
for(j=0;
j++)
printf(“%6d”,c[i][j]);
3;
四、编程题(共16分,每题8分)
1、编程实现查找一个字符串在另一个字符串中出现的次数。
2、如果整数A的全部因子(包括1,但不包括A本身)之和等于B;
且整数B的全部因子(包括1,但不包括B本身)之和等于A,则将整数A和B称为亲密数。
求3000以内(包括3000)的全部亲密数。
练习题三
以下叙述正确的是()
A)在C程序中,main函数必须位于程序的最前面
B)C程序的每行只能写一条语句
C)C程序的本身没有输入输出语句
D)在对一个C程序进行编译的过程中,可发现注释中的拼写错误
2、设x,y和z都是int型变量,且x=2,y=3,z=4,则下面的表达式中值为0的表达式是()
A)x&
zB)(!
y==1)&
(!
z==0)
C)(x<
y)&
!
z||1D)x||y+y&
z-y
3、请读下面程序
{inti=8,j=10;
%d,%d,%d,%d"
i,j,++i,j++);
运算结果为()
A)9,11,9,10B)8,10,9,10C)8,10,8,11D)8,10,9,11
4、当输入流为"
12345067891a36"
时,执行下面的程序段:
inti,j;
floatx,y;
charc;
scanf("
%2d%f%f%c%d"
&
i,&
y,&
c,&
j);
则变量i,j,x,y,c中的内容分别为()
A)12,345.000000,67891.000000,a,36
B)12345,无值,67891.000000,a,36
C)12345,67891.000000,97,3,6
D)输入格式有错,不能正确对这些变量赋值。
5、为了避免嵌套的条件语句if---