C语言习题课附答案.docx
《C语言习题课附答案.docx》由会员分享,可在线阅读,更多相关《C语言习题课附答案.docx(26页珍藏版)》请在冰点文库上搜索。
C语言习题课附答案
C语言习题课
一、单项选择题:
1.以下A是C语言中有效的变量名称。
A._abcB.2abcC.charD.a#3
变量名只能以下划线和字母开头
2.下面四个说法中错误的是B。
A.for循环不仅可以和for循环嵌套,而且可以和While循环嵌套。
B.当在循环体内执行continue语句的时候,将结束整个循环。
C.while循环最少循环0次,do-while循环最少循环1次。
D.goto语句也可以实现循环的功能。
3.在while(x)中的x与下面条件表达式等价的是D
A.x==0B.x==1C.x!
=1D.x!
=0
4.为表示关系x≥y≥z,应使用C语言表达式A
A.(x>=y)&&(y>=z)
B.(x>=y)AND(y>=z)
C.(x>=y>=z)
D.(x>=y)&(y>=z)
5.设有如下定义:
intx=9,y=2,z;则语句printf(“%d\n”,z=x/y);的输出结果是C
A.1B.4.5C.4D.3
整形中的“/”是整除
6.若有以下语句:
staticcharx[]=”12345”;staticchary[]={‘1’,’2’,’3’,’4’,’5’};则正确的说法是B。
A.x数组和y数组的长度相同
B.x数组的长度大于y数组的长度
C.x数组的长度小于y数组的长度
D.x数组与y数组等价
字符串后有一个“\0”
7.已知有定义:
charch;则下面正确的赋值语句为A。
A.ch='X'B.ch='55'C.ch="M"D.ch="55"
8.以下说法中正确的是C
A.C语言程序总是从第一个的函数开始执行
B.在C语言程序中,要调用的函数必须在main()函数中定义
C.C语言程序总是从main()函数开始执行
D.C语言程序中的main()函数必须放在程序的开始部分
9.C语言中,形参的缺省存储类型说明是:
A
A.autoB.staticC.registerD.extern
10.C语言中的简单数据类型有:
B
A.整型实型逻辑型
B.整型实型字符型
C.整型字符型逻辑型
D.整型实型逻辑型字符型
11.以下程序段的输出结果是:
C
A.1intx=3;
B.30do{
C.1-2printf("%3d",x-=2);
D.死循环}while(!
(--x));
12.以下非法的赋值语句是:
A
A.n=(i=2,++i);
B.j++;
C.++(i+1);
D.x=y>0;
13.设a和b均为double型变量,且a=5.5,b=2.5,则表达式(int)a+b/b的值是:
D
A.6.500000B.6C.5.500000D.6.000000
14.已知x=3,y=2,则表达式x*=y+8的值为:
C
A.3B.2C.30D.10
y+8是一个整体
15.设x,y,z均为int型变量,则执行以下语句后,t的值为:
C
x=y=z=1;t=++x||++y&&++z;
A.不定值B.2C.1D.0
16.为了测试字符串的实际长度,C语言规定了一个“字符串结束标志”,这个结束标志字符是:
B
A.‘\n’B.‘\0’C.‘\x’D.‘\9’
17.C程序的三种基本结构是:
A
A.顺序结构、选择结构、循环结构
B.逻辑结构、层次结构、网状结构
C.顺序结构、逻辑结构、选择结构
D.层次结构、顺序结构、循环结构
18.若inti=10;执行完下面程序判断后,变量i的正确结果是D。
A.10switch(i)
B.11{
C.12case7:
i+=1;
D.13case10:
i+=1;
case17:
i+=1;
default:
i+=1;
}
case后有break,结束跳出结果,没有break,继续执行具体见书本105页
19.下列关于C语言注释的描述中,错误的是:
D 。
A.C语言中用/*……*/表示注释部分
B.注释只是给人看的,对编译和运行不起作用
C.注释可以加在程序中的任何位置
D.C语言中用{*……*}表示注释部分
20.下列关于C程序的描述中,错误的是:
D。
A.C程序是由函数构成的
B.一个C程序总是从main函数开始执行
C.C程序书写格式自由,一行内可以写几个语句,一个语句也可以分写在多行上
D.C语言中是利用输入/输出运算符构成输入/输出语句完成输入/输出操作的
21.C源程序的后缀名默认为:
B。
A.cpp
B.c
C.obj
D.exe
C语言的默认后缀名是.c,在C++中才是cpp
22.以下不属于C语言的基本数据类型的是:
B。
A.整型
B.布尔型
C.字符型
D.实型
23.下列标识符中,符合C语言语法规范的是:
C。
A.M.D.John
B.$123
C._name
D.3D64
24.下列选项中,不是C语言中的关键字的是:
C。
A.auto
B.if
C.VOID
D.break
25.下列常量中,合法的长整型常量是:
A。
A.0L
B.4962710000
C.0.05472
D.2e+2
长整型的范围是-2147483648~2147483647
26.设int型变量m,n,a,b,c,d均为0,执行表达式(m=a==b)||(n=c==d)后,m和n的值是:
C。
A.0,0
B.0,1
C.1,0
D.1,1
当在“或”的前面为1,后面不再执行。
在“与”前面为0,后面也不在执行,出现“短路”现象。
27.若a为int类型,且其值为3,则执行完表达式a+=a-=a*a后,a的值是:
C。
A.-3
B.9
C.-12
D.6
28.假设double型变量x,y已经正确定义,则表达式x=1,y=x+3/2的值是:
D。
A.1
B.2.0
C.2
D.2.5
29.已知’A’的ASCII码为65,则下列程序的运行结果为:
A。
main()
{
charch1=’A’;
charch2=ch1+3;
printf(“%d,%c\n”,ch1,ch1);
printf(“%d,%c”,ch2,ch2);
}
A.65,A
68,D
B.A,65
D,68
C.A,D
65,68
D.D,68
A,65
30.以下关于while语句的叙述正确的是 B
A.while语句构成的循环必须用break语句才能退出
B.while循环语句中,当while子句中的表达式值为零时,结束循环
C.不能使用while语句来构成循环结构
D.while语句的循环体至少被执行一次
二、填空题:
1.程序段floatx=165.323;printf(“x=%-10.2f”,x);执行时输出的结果为:
165.32□□□□p76
2.设x,y,z,k都是int型变量,则执行表达式x=(y=4,z=16,k=32)后,x的值为:
32
3.要将两个字符串连接成一个字符串,可以使用的标准库函数名为:
strcatP147
4.多分支选择结构中,若在执行某一个case语句后,使流程跳出switch结构,应该使用语句breakp105。
5.若有定义inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12},则a[1][2]=7p137
6.C语言中,结束本轮循环,将循环是否继续交给循环判断条件确定的语句是:
continue。
7.设x=2.5,a=7,y=4.7,则算术表达式x+a%3*(int)(x+y)%2/4的值为:
2.5
8.C语言中,函数是程序的基本构成单元,其中main函数是必须的,且唯一。
9.在C语言程序中,用关键字float定义单精度实型变量。
10.设有语句“inti=1,s=1;for(;s+i<6;i++)s+=i;”,其中for语句的循环次数为 2 。
11.已知有声明“intx=1,y=2”,则执行表达式“(x>y)&&(--x>0)”后x的值为 1 。
12.多分支选择结构中,若在执行某一个case语句后,使流程跳出switch结构,应该使用语句breakp105
13.C语言中的if语句属于三种基本结构中的 选择 结构的语句。
14.若变量ch为char类型,判断ch为数字字符的表达式是 ch>’0’&&ch<’9’ 。
15.设x=2.5,a=7,y=4.7,则算术表达式x+a%3*(int)(x+y)%2/4的值为:
2.5
16.continue语句只能用在三种基本结构中的 循环 结构的语句中。
17.如果在用户的程序中要使用C库函数中的数学函数时应在该源文件中使用的include命令是:
math.h
18.若有定义:
intx[5];则访问x数组中的元素时,下标的上限为:
4。
19.C语言中,函数是程序的基本构成单元,其中main函数是必须的,且唯一。
20.C语言本身没有输入输出语句,格式化的标准输出是借助库函数实现。
三、程序阅读题:
1.阅读下列程序,并给出程序运行的结果。
voidmain()
{
intn,d,k;
n=263;
d=1;
k=1;
do{
k*=n%10;
n/=10;
printf("%d,",d);
d++;
}while(n);
printf("\n");
printf("%d\n",k);
printf("%d\n",n);
}
运行结果:
1,2,3
36
0
2.阅读下列程序,并给出程序运行的结果。
voidmain()
{
intx=2345,t;
intsum,muti;
sum=0;
muti=1;
printf("数字为:
%d\n",x);
while(x!
=0)
{
t=x%10;
sum+=t;
muti*=t;
x=x/10;
}
printf("构成数字的和:
%d\n",sum);
printf("构成数字的乘积:
%d\n",muti);
}
运行结果:
数字为:
2345
构成数字的和:
14
构成数字的乘积:
120
3.阅读下列程序,并给出程序运行的结果。
voidmain()
{intx=20,y=30,z=60;
while(xy=y+4;
z=z/2;
printf(“%d\n”,x);
printf(“%d\n”,y);
printf(“%d\n”,z);
}
运行结果:
32
34
30
4.阅读下列程序,并给出程序运行的结果。
voidmain()
{
inti,j,l,m,a[10]={9,8,7,6,5,4,3,2,1,5};
for(i=0;i<=8;i++)
{
l=i;
for(j=i+1;j<=9;j++)
if(a[j]l=j;
if(l!
=i)
{
m=a[i];
a[i]=a[l];
a[l]=m;
}
}
for(i=0;i<=9;i++)
{
printf("%d",a[i]);
if(i%3==0&&i!
=0)
printf(“\n”);
}
}
运行结果:
1234
556
789
四、编程题:
(8分每题,共16分)
1.写一个函数,输入一个四位数字,要求输出这4个数字字符,但每两个数字间空一个空格。
例如输入1990,应该输出“1990”。
算法一:
#include
voidmain()
{
inta,b,c,d,e;//定义四个数,a是一个四位数,b是它的千位,c是百位,d是十位,e是个位
printf(“请输入一个四位数:
”);
scanf(“%d”,&a);
b=a/1000;//获取它的千位
c=(a-b*1000)/100;//获取它的百位
d=(a-b*1000-c*100)/10;//获取它的十位
e=a-b*1000-c*100-d*10;//获取它的个位
printf(“%d%d%d%d\n”,b,c,d,e);//将它的每一位重新排序输出
}
算法二:
#include//这方法与第3题类似
voidmain()
{
charc;
printf(“请输入数字:
”);//提示
while((c=getchar())!
='\n')//逐个获取数字(当然字母也可以,n个数都可以)
printf(“%c”,c);//逐个数字输出(数字与数字之间有空格)
printf(“\n”);
}
算法三:
#include
voidmain()
{
inta[10],n,i=0;
printf(“请输入一个数:
”);
scanf(“%d”,&n);
while(n!
=0)
{
a[i++]=n%10;
n/=10;
}
for(i--;i>=0;i--)
printf(“%d”,a[i]);
printf(“\n”);
}
2.编写程序,用公式
≈1-
+
-
+
-
+…求π的近似值,直到最后一项小于10-5为止。
解法一:
#include
#include
voidmain()
{
doublex=1,i=1;//定义x=1/i(i是分数的分母)
intj=1;//定义该数列有j项
doublep=0;//定义p是该数列的和,初始为0
while(x>1e-5)//在该条件下循环
{
x=1/i;//x是每一项的值
i+=2;//数列的分母+2
if(j%2!
=0)//奇数项相加,偶数项相减获得p的值p为π/4
p+=x;
if(j%2==0)
p-=x;
j++;
}
p=p*4;//获得π的值
printf("π=%lf\n",p);//输出值
}
解法二:
#include
#include
voidmain()
{
ints;
floatn,t,pi;
t=1;pi=0;n=1.0;s=1;
do
{
pi+=t;
n+=2;
s=-s;
t=s/n;
}while(fabs(t)>1e-5);
pi*=4;
printf(“π=%.5f\n”,pi);
}
3.输入一行字符(不超过100),将其中的大写字符变成小写,小写字符变成大写,其余字符不变。
解法一:
#include
voidmain()
{
charc;
while((c=getchar())!
='\n')//获得字符
{
if(c>='a'&&c<='z')//小写字母变大写字母
{c=c-32;
printf("%c",c);
}
elseif(c>='A'&&c<='Z')//大写字母变小写字母
{c=c+32;
printf("%c",c);
}
else//其他字符不变
printf("%c",c);
}
printf("\n");
}
解法二:
#include
voidmain()
{
inti=0;
chara[100],c;
printf("请输入字符串的内容:
\t");
do
{
scanf("%c",&a[i]);
c=a[i];
i++;
}while(c!
='\n');
a[i]='\0';
i=0;
printf("输入字符串的内容为:
\t");
while(a[i]!
='\0')
{
printf("%c",a[i]);
i++;
}
printf("转换后字符串的内容为:
\t");
i=0;
while(a[i]!
='\0')
{
c=a[i];
if(c>='a'&&c<='z')
a[i]-=32;
elseif(c>='A'&&c<='Z')
a[i]+=32;
printf("%c",a[i]);
i++;
}
}
4.以下程序把100~200之间不能被3整除的数输出
#include
voidmain()
{
inti;
for(i=100;i<=200;i++)//100到200之间循环
if(i%3!
=0)//排除能被3整除的数(余数不为0)
printf("%d\n",i);
}
5.输入3个数,按从小到大的顺序输出。
方法一:
#include
voidmain()
{
intx,y,z,t;
printf("请输入要比较的三个数:
");
scanf("%d%d%d",&x,&y,&z);
if(x>y)
{
t=x;
x=y;
y=t;
}
if(y>z)
{
t=z;
z=y;
}
if(xy=t;
else
{
y=x;
x=t;
}
printf("%d%d%d\n",x,y,z);
}
方法二:
#include//此题使用了冒泡排序的方法
voidmain()
{
inta[3];//定义3个数
inttemp,i,j,k;
printf("请输入3个数:
");//提示输入
for(i=0;i<3;i++)
scanf("%d",&a[i]);//给输入的3个数进行编号
for(j=0;j<2;j++)//进行2次循环
for(k=0;k<2-j;k++)//每次循环中进行2次比较
if(a[k]>a[k+1])//进行比较把大的数放到最后
{
temp=a[k];
a[k]=a[k+1];
a[k+1]=temp;
}
for(i=0;i<3;i++)//将排好序的3个数重新编号
printf("%d",a[i]);//输出3个数
printf("\n");
}
方法三:
#include//这种方法比较麻烦,需要一一列出来
voidmain()
{
inta,b,c,d,e,f;
printf(“请输入3个数:
”);
scanf(“%d%d%d”,&a,&b,&c);//获取3个数a,b,c
if(a>=b&&b>=c)//a>=b>=c的情况
printf(“%d%d%d\n”,c,b,a);//重新排序输出
elseif(a>=c&&c>=b)//a>=c>=b的情况
printf(“%d%d%d\n”,b,c,a);//重新排序输出
elseif(b>=a&&a>=c)//b>=a>=c的情况
printf(“%d%d%d\n”,c,a,b);//重新排序输出
elseif(b>=c&&c>=a)//b>=c>=a的情况
printf(“%d%d%d\n”,a,c,b);//重新排序输出
elseif(c>=b&&b>=a)//c>=b>=a的情况
printf(“%d%d%d\n”,a,b,c);//重新排序输出
elseif(c>=a&&a>=b)//c>=a>=b
printf(“%d%d%d\n”,b,a,c);//重新排序输出
}
6.以下程序用while语句计算式子
方法一:
用while计算
#include//此题要算从1加到100
voidmain()
{
ints=0,n=1;
while(n<=100)//n从1到100之间循环
{
s+=n;
n++;
}
printf("%d\n",s);
}
方法二:
用for计算
#include
voidmain()
{
ints=0,n;//s为累加的初始值
for(n=1;n<=100;n++)//n从1到100之间循环
s=s+n;
printf("%d\n",s);
}
7.求100~200间的全部素数。
方法一:
#include
voidmain()
{
inti,n;
for(n=101;n<200;n+=2)
{
for(i=2;i<=n-1;i++)
if(n%i==0)
break;
if(i==n)
printf("%5d\n",n);
}
}
方法二:
#include
#include
voidmain()
{
intm,i,k,n=0;
for(m=101;m<=200;m+=2)
{
k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0)
break;
if(i>=k+1)
{
printf("%d\n",m);
n+=1;
}
}
printf("\n");
}
8.函数pi()的功能是根据以下公式求π值,
=1+
+
×
+
×
×
+
×
×
×
+…
直到最后一项小于10-5为止。
#include
doublejiecheng1(intx)//定义一个函数阶乘1,可以得到一个从1乘到x的值
{
doubles=1;
for(inti=1;i<=x;i++)
s=s*i;
return(s);
}
doublejiecheng2(intx)//定义一个阶乘2函数可以得到一个从3*5*7*。
。
。
。
。
。
*2x-1的值
{
doubles=1;
for(inti=1;i<=x;i++)
s=s*(2*i+1);
retu