C语言程序设计各章练习题Word文件下载.docx
《C语言程序设计各章练习题Word文件下载.docx》由会员分享,可在线阅读,更多相关《C语言程序设计各章练习题Word文件下载.docx(24页珍藏版)》请在冰豆网上搜索。
输入一个字符串(字符个数为小于100),统计其中字母、数字、空格以及其它符号的个数,并将大写字母改为小写字母,输出改变后的字符串。
(提示:
A的ASCII值为65,a的ASCII值为97)
输入一行字符(字符数组的个数小于100),统计其中字母、数字以及其它符号的个数。
(注:
数组限定字符个数小于100)
输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数。
字符个数不受限制)
第7章函数
编程题13:
编写一个子函数intfun(intn),其功能是判断整数n是否为素数,n是素数,返回值为1;
n不是素数,返回值为0。
调用该函数,将100~200之间的素数全部输出,要求屏幕上每个数占4位,每行显示5个素数,左对齐。
(循环、条件分支、子函数、变量的值传递、屏幕显示格式控制)
编程题14:
主函数中定义两个数组inta[5]={5,4,8,-1,2},b[10]={1,-1,2,4,8,4,0,9,3,7};
用子函数实现从小到大的冒泡排序,子函数为voidbubble(int[],int);
要求在主函数中显示排序前、后的数组a和b的元素。
(循环、条件分支、子函数、数组、地址传递)
编程题15:
用子函数实现从小到大的选择法排序,子函数为voidsort(int[],int);
编程题16:
用递归函数计算n!
编程题17:
编写一个子函数intfact(intn),计算n的阶乘。
调用该函数计算1!
+2!
+3!
+…+n!
,要求n从键盘输入,如输入n小于0,不予计算。
(循环、递归函数)
编程题18:
将16进制或8进制或2进制数转换为十进制数(字符数组、字符串函数、子函数、字符ASCII值与10进制数的转换,指数函数的调用)
编程实现八进制数转换为十进制数(注:
用字符数组n[100]接收输入,输入的八进制数肯定正确,无须检测;
八进制数转换为十进制数的子函数为inthtoi(charhnum[]);
)
编写一个子函数,将16进制数转换为10进制数。
编程题19:
编写一个子函数,主函数用字符数组作为实参,统计字符串中字母、数字、空格以及其他符号的个数,要求主函数中显示字符串与统计结果。
编程题20:
编写一个子函数,主函数输入一行字符,子函数找出字符串中最长的单词,并显示结果。
编程题21:
用递归法将一个整数n转换为字符串。
例如:
输入483,输出字符串“483”,n的位数不确定。
编程题22:
写一个子函数,将输入的字符串按反序存放,在main中输入和输出字符串。
第8章指针
编程题23:
编写一个子函数mystrcmp(char*s1,char*s2)实现2个字符串的比较。
编程实现两个字符串连接起来,不要用strcat函数。
用函数调用实现字符串的复制。
写一个函数,求一个字符串的长度。
在main函数中输入字符串,并输出其长度。
编程题24:
写一个用矩形法求定积分的通用函数,分别计算
编程题25:
输入一个字符串,内有数字和非数字字符,如:
A123x456tab5876,将其中连续的数字作为一个整数,依次用数组存放这些数,统计有多少个整数,并输出这些数。
编程题26:
主函数输入整数的个数,用指针变量动态申请内存,并用键盘按任意次序输入n个整数,用子函数voidbubble(int[],int)实现从小到大的冒泡排序。
第9章结构
编程题27:
建立一个链表,每个结点包括:
学号、姓名、性别、年龄,输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。
编程题28:
13个人围成一圈,从第一个人开始顺序报号,凡报到3者退出圈子,找出最后留在圈子中的人原来的序号。
要求用链表实现。
编程题29:
阅读链表操作相关函数,完成指定的操作函数。
链表内容仅限表头表尾添加、删除、查询、显示、保存,不考排序、中间节点的插入和删除
#include"
"
structStudent
{
charname[20];
intnum;
intmath;
structStudent*next;
};
structStudent*Create(structStudent*head);
低级B.面向对象C.高级D.智能
2.下列特性中,(D)不是C语言的特征。
A.运行效率高B.结构化程序设计C.能直接访问物理地址D.类型检测严格
3.下列标识符中,(D)不是C的关键字;
A.intB.floatC.charD.scanf
4.下列标识符中,(D)不是C的关键字;
A.sizeofB.shortC.longD.define
5.下列标识符中,(D)不是C的关键字;
A.gotoB.breakC.autoD.printf
6.下列标识符中,(D)不是C的关键字;
A.staticB.structC.voidD.include
7.下列自定义标识符中,(C)是不符合规定。
A.point1xB._point1xC.2pointxD.pointx_2
8.下列自定义标识符中,(C)是不符合规定。
A.MAXB._MINC.MAX$D.MIN_2
9.下列自定义标识符中,(D)是不符合规定。
A.point1_B._point1xC.pointxD.pointx_?
#
10.下列自定义标识符中,(A)是不符合规定。
A.2_point1xB._point1xC.pointxD.pointx_2
11.下列四个选项中,是不合法的用户标识符的选项是(C)
A.P_0 B._abc C.goto D.temp
12.下面是不正确的字符串常量的是(A)
A.’abc’ B.“12’12” C.“0” D.“”
13.已知inta;
floatf;
scanf(“a=%d,f=%f”,&
a,&
f);
为了把10和分别赋值给a和f,则正确的输入为(C)
A.10,B.10C.a=10,f=D.a=10f=
14.输入语句为:
scanf("
%f,%f\n"
&
radius,&
high);
下列键盘输入(D)是正确的。
A.12↙;
B.1,2\n↙;
C.1↙2↙;
D.1,2↙;
15.输入语句为:
a=%f,b=%f"
从键盘输入(D)是正确的。
B.1,2↙;
D.a=1,b=2↙;
16.输入语句为:
a=%f,b=%f\n"
从键盘输入(D)是正确的。
D.a=1,b=2\n↙;
17.输入语句为:
a=%fb=%f"
从键盘输入(D)是正确的。
D.a=1b=2↙;
18.doublePI=,输出语句为:
printf("
%"
PI);
下列输出结果(D)是正确的。
A.;
B.;
C.;
D.;
19.doublePI=,输出语句为:
下列输出结果(B)是正确的。
D.;
20.doublePI=,输出语句为:
下列输出结果()是正确的。
A.;
21.设x,y均为float型变量,则下列不合法的赋值语句是()
A.++x B.y=(x%2)/10
C.x*=y+8 D.x=y=0
22.doublePI=,输出语句为:
23.inta=-1;
C语言整型数分配4个字节,在计算机中下列十六进制表示的(A)是正确的。
A.ffffffff;
D.00000001;
24.inta=1;
C语言整型数分配4个字节,在计算机中下列十六进制表示的a()是正确的。
A.00000001;
D.ffffffff;
25.?
inta=-1;
B.-00000001;
C.-1;
*
26.inta=-1;
A.-ffffffff;
C.ffffffff;
D.-1;
**
27.设有下列变量说明:
chara;
intx;
floaty;
doublez;
则表达式a*x-z+y的值的数据类型为()。
***
A.float B.char C.int D.double
28.已知字母a的ASCII码为十进制数97,且设ch为字符型变量,则表达式ch=’a’+’8’-‘3’的值为()
A.’f’ B.’a’C.’d’ D.102
29.已知ch是字符型变量,下列不正确的赋值语句是()
A.ch=’a+b’ B.ch=’\0’ C.ch=’a’+’b’ D.ch=5+9
30.若s是int型变量,则表达式s=25/3%3的值为()
A.25 B.1 C.2 D.3
31.若s是int型变量,则表达式s%2+(s-1)%2的值为()
A.0 B.1 C.–1 D.2
32.若s是int型变量,则表达式s%2+(s+1)%2的值为()
A.0 B.1 C.2 D.不确定
33.下列表达式中,不能正确表达代数式
含义的C语言表达式是()
A.x/a/b*y*2 B.2*x*y/a/b C.2*x*y/a*b D.x*y/b/a*2
34.若x、i、j、k均为int变量,则计算表达式x=(i=4,j=16,k=32);
后,x的值为()
A.4B.16C.32D.52
35.已知inta=6,b=6;
执行b=(++b)+(a++);
后,a和b的值为()。
A.a=7,b=13B.a=7,b=14C.a=6,b=13D.a=6,b=14
36.若有定义:
intx=5,y=2;
则计算表达式y+=y–=x*=y后,y的值为()
A.16 B.–16 C.7 D.10
37.若a是int型变量,且其初值为6,则计算表达式a+=a-=a*a后,a的值为()
A.-30 B.-60 C.-24 D.6
38.若x的初值为7,执行语句x+=x-=x+x;
A.21 B.-14 C.14 D.-21
39.C语言的编译系统对宏命令的处理是()
A.在程序运行时进行的
B.在程序连接时进行的
C.和C程序中的其他语句同时进行编译的
D.在对源程序中其他成分正式编译之前进行的
40.以下正确的叙述是()
A.C语言的预处理功能是指完成宏替换和包含文件的调用
B.预处理指令只能位于C源程序文件的首部
C.凡是C源程序中行首以“#”标识的控制行都是预处理命令
D.C语言的编译预处理就是对源程序进行初步的语法检查
41.以下在任何情况下计算平方数时都不会引起二义性的宏定义是()
A.#definePOWER(x)x*x B.#definePOWER(x)(x)*(x)
C.#definePOWER(x)(x*x) D.#definePOWER(x)((x)*(x))
42.以下有关宏替换的叙述中错误的是()
A.宏替换不占用运行时间B.宏替换只是字符替换
C.宏替换在编译之前进行D.宏名必须用大写字母表示
43.下列程序段的运行结果为()。
voidmain()
{charc1,c2;
c1=’A’+’5’-‘3’;
c2=’A’+’6’-‘3’;
printf(“%d,%c”,c1,c2)
}
A.C,DB.67,DC.B,CD.无确定值
二、填空题
1.在C语言中,实型变量可以分为两种类型,它们是 和 。
2.若x,a为整型变量,则计算表达式x=(a=4,6*2)后的x值为 ,计算表达式x=a=4,6*2后的x值为 。
3.若x和n均是int型变量,且x和n的初值均为5,则计算表达式x+=n++后x的值 ,n的值为 。
三、阅读下列程序,在下划线上写出输出结果
1.程序段:
#defineMUL(x)(x)*(x)*(x)
main()
{printf(“%d”,MUL(1+2)+3);
的结果是 。
2.程序段:
#definey(t)(t)*(t)
{printf(“%d”,y(1+2)+3);
3.以下程序的输出结果是 (19)21 。
#include<
>
#defineM(x,y,z)x*y+z
{inta=2,b=3,c=4;
%d\n"
M(a+b,b+c,c+a));
!
(a%2) D.a%2
9.判断字符型变量x是否为大写字母的正确表达式是()
A.’A’<
=x<
=‘Z’ B.(x>
=A)&
(x<
=Z)
C.(x>
=’A’)&
&
=’Z’) D.(x>
=’A’)and(x<
=’Z’)
10.若x=5,y=2,z=1,则表达式x-y<
z||y==z的值是()
A.0 B.1 C.3 D.2
11.以下不正确的if语句形式是()
A.if(x>
y&
x!
=y);
B.if(x==y)x+=y;
C.if(x!
=y)x=1elsex=2;
D.if(x<
y){x++;
y++}
12.设有定义inta=1,b=2,c=3,d=4,m=2,n=2;
执行(m=a>
b)&
(n=c>
d)后n的值是()
A.1 B.2 C.3 D.4
1.在C语言中,若x,y,z均为int型变量,则“x或y中有一个小于z”的表达式描述形式为 。
三、阅读下列程序,在下划线上写出输出结果
1.#include<
voidmain()
intx=1,y=0,a=0,b=0;
switch(x)
case1:
switch(y)
{
case0:
a++;
break;
b++;
case2:
a++;
break;
printf(“%d,%d”,a,b);
}/*输出结果:
*/
2.以下程序的运行结果是 。
{
intx=5;
if(x++>
5)
printf(“%d\n”,x);
else
printf(“%d\n”,x--);
四、程序填空
1.下列程序的功能是实现输出a,b,c三个数中的最大值。
请为程序填空。
inta=5,b=4,c=8;
;
if( )
u=a;
else
u=b;
if( )
v=u;
else ;
printf(“v=%d\n”,v);
2.下列程序的功能是根据下列函数关系,输入x的值,计算y的值。
intx,y;
scanf(“%d”, );
y=x*(x+5);
elseif( )
y=4*x;
;
printf(“%d\n”,y);
第5章循环结构程序设计
一、选择题
1.执行语句for(i=1;
i++<
3;
);
后变量i的值的是()。
A.3 B.4 C.5 D.不确定
2.对于程序段intk=10;
while(k)k=k-1;
下面描述正确的是()。
A.循环体执行10次B.该循环为无穷循环
3.程序段:
a=10;
b=0;
do{
b+=2;
a-=2+b;
}while(a>
=0);
中循环体的执行次数()
A.1 B.2 C.3 D.4
C.循环体执行一次D.循环体一次也不执行
4.设i为整型变量,则语句for(i=2;
i==0;
)a=3;
中循环体的执行次数为()
A.无限次 B.0次 C.1次 D.2次
5.设有下列程序段:
x=1;
do{
x=x*x;
}while(!
x)
则该循环是()
A.死循环 B.循环执行一次 C.循环执行二次 D.语句错误
6.设有程序段:
intk=10;
while(k==0)
k--;
则下列描述中正确的是()
A.while循环执行10次 B.while循环执行无限次
C.while循环执行0次 D.while循环执行1次
7.程序段:
x=y=0;
while(x<
15)
y++,x+=++y;
执行后x值是()
A.7 B.12 C.8 D.20
8.与语句while(!
E)中表达式!
E等价的是()
A.E==0 B.E!
=1 C.E!
=0 D.E==1
9.以下不是死循环的语句是()
A.for(y=0,x=1;
x>
++y;
x=i++)i=x;
B.for(;
;
x++=i);
C.for(i=10;
i--)a+=i;
D.while
(1){a++;
10.程序段i=11;
do
{i++;
}while(i<
=10);
执行后i的值为()
A.11 B.12 C.10 D.不确定
11.执行语句for(i=1;
后变量i的值的是()
A.3 B.4 C.5 D.不确定
12.for(x=0,y=0;
(y=123)&
4);
x++);
的循环执行次数为()
A.无限次 B.次数不定C.执行3次 D.执行4次
13.程序段
x=2;
do{printf(“*”);
x--;
x==0)
的运行结果为()
A.* B.**C.*** D.****
14.执行语句for(i=4;
i-->
0;
A.0 B.1 C.2 D.不确定
1.若for循环语句用以下形式表示:
for(表达式1;
表达式2;
表达式3)循环体语句
则执行语句:
for(i=0;
i<
4;
i++)printf(“*”);
时,表达式1执行 次,表达式3执行了 次。
1.设有程序段
k=1;
n=263;
do
{k*=n%10;
n/=10;
}
while(n);
其运行结束后k的值为 ,循环结束后n的值是 。
2.写出以下程序的运行结果。
inty=10;
y--;
}while(--y);
printf(“%d,”,y--);
3.阅读下列程序,在下划线上写出输出结果。
inty=-10;
y++;
}while(++y);
printf(“%d,”,y++);
/*输出结果:
*/
4.以下程序的运行结果是 。
inti;
for(i=1;
=5;
i++)
switch(i%5)
printf(“*”);
case1:
printf(“#”);
default:
printf(“,”);
printf(“&
”);
1.下列程序的功能是采用“顺序查找法”查找数组中是否存在元素x。
#include<