《C语言程序》练习题.docx
《《C语言程序》练习题.docx》由会员分享,可在线阅读,更多相关《《C语言程序》练习题.docx(20页珍藏版)》请在冰豆网上搜索。
《C语言程序》练习题
《C语言程序》练习题
练习题一
一、选择(单项选择,每题2分,共20分)
1、C语言有各种基本数据类型,若对其进行sizeof运算,则下列正确是()
sizeof(char)<=sizeof(int)<=sizeof(long)<=sizeof(float)
sizeof(char)<=sizeof(long)<=sizeof(int)<=sizeof(float)
sizeof(float)<=sizeof(long)<=siezof(int)<=siezof(char)
sizeof(long)<=siezof(char)<=sizeof(float)<=sizeof(int)
2、请读下面程序
#include
main()
{intx,y,z,w;
w=(x=5,y=-11,z=43,3);
printf("%d%d%d%d",x,y,z,w);}
程序执行结果()
A)5-1133B)5-1135C)5-11433D)5-11343
3、在C语言中逻辑值"真"的表示是用()
A)trueB)整型值0C)非零整型值D)T
4、有语句x=3;do{printf("%2d",x--);}while(!
x);执行结果是()
A)3B)321C)死循环D)不输出内容
5、请读下面程序
#include
main()
{staticcharstring[]="Iloveyou!
";printf("%s",string);}
输出结果()
A)Iloveyou!
B)IC)stringD)!
uoyevolI
6、C语言中,在main函数中书写自变量可获得来自命令行的自变量,而自变量的说明应为()
A)main(charargc,char*argv)B)main(charargc,int*argv[])
C)main(intargc,char*argv[])D)main(intargc,int*argv)
7、若要用下面的程序片段使指针变量p指向一个存储整型变量的动态存储单元:
int*p;p=____malloc(sizeof(int));则应填入()
A)intB)int*C)(*int)D)(int*)
8、若已知:
intx;inty[];则下面哪个表达式是有意义的()
A)&xB)&(x+y)C)&5D)&y
9、请读程序
#include
f(char*s1)
{char*s2=s1;while(*s2!
='\0')s2++;return(s2-s1);}
main()
{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;intkodo;
floatshuki;}doubleshuki;}
C)structeisei{D)eiseistruct{
intname;intname;
intkodo;intkodo;
floatshuki;}floatshuki;}
二、填空(每空2分,共20分):
C源程序的基本单位是
(1) 。
若a=1,b=4,c=3,则表达式!
(a
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:
\n”);
for(i=0;i<3;i++)
{for(j=0;j<2;j++)
printf(“%4d”,a[i][j]);
printf(“\n”);}
}
2、若输入的值是-125,以下程序的运行结果是:
#include”math.h”
main()
{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、下面程序的运行结果是:
main()
{intva[10],vb[10],*pa,*pb,i;
pa=va;pb=vb;
for(i=0;i<3;i++,pa++,pb++)
{*pa=i;*pb=2*i;
printf(“%d\t%d\n”,*pa,*pb);}
pa=&va[0];pb=&vb[0];
for(i=0;i<3;i++)
{*pa=*pa+i;*pb=*pb*i;
printf(“%d\t%d\n”,*pa++,*pb++);}
}
4、以下程序的运行结果是:
main()
{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三个数中的最大者。
请在____内填入正确的内容。
main()
{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
main()
{chara[80];
inti,b[80],k=0;
gets(a);
for(i=0;a[i]!
=‘\0’;i++)
if( (4) ){b[k]=i; (5) ;}
for(i=0;i}
3.结构数组中存有三人的姓名和年龄,以下程序输出三人中最年长者的姓名和年龄。
请在____内填入正确内容。
staticstructman
{charname[20];
intage;
}person[]={“li-ming”,18,“wang-hua”,19,“zhang-ping”,20};
main()
{structman*p,*q;
intold=0;
p=person;
for(;p (6);p++)
if(oldage)
{q=p; (7) ;}
printf(“%s%d”, (8) );
}
4.以下程序能找出数组中的最大值和该值所在的元素下标,数组元素值从键盘输入。
请选择填空。
main()
{intx[10],*p1,*p2,k;
for(k=0;k<10;k++)scanf(“%d”,x+k);
for(p1=x,p2=x;p1-x<10;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
if(celse
if(a if(b elsex=3;
elsex=6;
elsex=7;
A.1B.2C.3D.4
8、下述程序段的运行结果是()。
inta=1,b=2,c=3,t;
while(a
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(!
x);
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;
printf("%d\n",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*)&data.n;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分)
main()
{intx=9;
for(;x>0;x--){
if(x%3==0){
printf(“%d”,--x);
continue;
}
}
}
2、写出下面程序运行的结果。
(5分)
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)空使程序完整。
(5分)
main()
{
inti,k,m;
for(k=0,i=5;i<=1000;i+=5)
{m=i;
while
(1){k++;m=m/5;}
}
printf("%d\n",k);
}
4、下面程序的功能是:
先将在字符串s中的字符按逆序存放到t串中,然后把s中的字符按正序连接到t串的后面。
例如,当s中的字符串为:
“ABCDE”时则t中的字符串应为:
“EDCBAABCDE”;判断下面程序的正误,如果错误请改正过来。
(5分)
#include
#include
main()
{chars[80],t[200];inti,sl;
gets(s);sl=strlen(s);
for(i=0;i for(i=0;i puts(t);
}
5、写出以下程序运行的结果。
(5分)
#include
voidmain()
{
staticchara[]="Language",b[]="programe";
char*p1,*p2;intk;
p1=a;p2=b;
for(k=0;k<=7;k++)
if(*(p1+k)==*(p2+k))printf("%c",*(p1+k));
}
6、下面程序的功能是输出1至100之间每位数的乘积大于每位数的和的数,请填(3)空使程序完整。
(5分)
main()
班级:
姓名:
学号:
.
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分)
main()
{intx=1,y=0,a=0,b=0;
switch(x){
case1:
switch(y){
case0:
a++;break;
case1:
b++;break;
}
case2:
a++;b++;break;
case3:
a++;b++;
}
printf(“a=%d,b=%d”,a,b);
}
8、写出下面程序的运行结果。
(5分)
structn{intx;charc;};
func(structnb)
{b.x=20;b.c='y';}
main()
{structna={10,'x'};
func(a);
printf("%d,%c",a.x,a.c);
}
9、以下程序是求矩阵a,b的乘积,结果存放在矩阵C中并按矩阵形式输出,请填(3)空使程序完整。
(5分)
#include
main()
{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<3;i++)
for(j=0;j<2;j++){
1
for(k=0;k<2;k++)s+=2
c[i][j]=s;
}
for(i=0;i<3;i++){
for(j=0;j<2;j++)
printf(“%6d”,c[i][j]);
3;
}
}
四、编程题(共16分,每题8分)
1、编程实现查找一个字符串在另一个字符串中出现的次数。
2、如果整数A的全部因子(包括1,但不包括A本身)之和等于B;且整数B的全部因子(包括1,但不包括B本身)之和等于A,则将整数A和B称为亲密数。
求3000以内(包括3000)的全部亲密数。
练习题三
一、选择(单项选择,每题2分,共20分)
以下叙述正确的是()
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)(xz||1D)x||y+y&&z-y
3、请读下面程序
main()
{inti=8,j=10;
printf("%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,&x,&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---