C语言程序设计部分习题参考答案.docx
《C语言程序设计部分习题参考答案.docx》由会员分享,可在线阅读,更多相关《C语言程序设计部分习题参考答案.docx(68页珍藏版)》请在冰点文库上搜索。
C语言程序设计部分习题参考答案
1.1计算机中为什么采用二进制表示形式。
答:
容易表示,电路简单可靠。
运算简单。
逻辑性强。
1.2将下列不同进制的数从大到小排列:
(110110010)2、(208)10、(322)8、(A8)16
答:
(110110010)2、(322)8、(208)10、(A8)16
1.3什么是数的定点表示方法?
什么是数的浮点表示方法?
试比较两者可表示的数的范围。
答:
定点数是将小数点固定在数中某个约定的位置
如果机器数采用浮点表示,则小数点的位置是不固定的,可以浮动
1.4简述冯·诺依曼计算机的基本特点。
答:
采用存储程序方式,即程序和数据放在同一个存储器中,两者没有区别。
指令同数据一
样可以送到运算器进行运算,即由指令组成的程序是可以修改的。
存储器是按地址访问的线性编址的唯一结构,每个单元的位数是固定的。
指令由操作码和地址码组成。
通过执行指令,直接发出控制信号来控制计算机的操作。
机器以运算器为中心,输入/输出设备与存储器间的数据传送都经过运算器。
数据以二进制表示。
1.5简述程序设计的一般过程。
答:
(1)分析问题。
提出解决问题的可行方案。
(2)确定算法。
针对提出的可行方案确定解决问题、完成任务的每一个细节步骤。
(3)编程。
使用程序设计语言把上述算法严格地描述出来(即写成程序),输入到计算机里并
存盘。
(4)在计算机上运行并调试这个程序。
如果在运行过程中发现了错误,就仔细分析出错的原
因,然后更正错误。
再次运行该程序,直到程序准确无误并得到正确的输出结果为止。
(5)总结。
写出书面报告。
1.6解释下列概念:
数据、指令、程序、数据结构。
答:
数据(data):
是对信息的一种符号表示,在计算机科学中是指所有能输入到计算机中并
被计算机程序处理的符号的总称。
程序,是为了完成一个完整的任务而编写的计算机能够接受并运行的一条条指令。
简
言之,程序就是指令的序列。
数据结构是研究计算机中大量数据存储的组织形式,并定义相应的运算以提高计算机的数据处理能力的一门科学。
1.7什么是操作系统?
简述操作系统的功能。
答:
操作系统是用来管理计算机系统的软硬件资源,提高计算机系统资源
的使用效率,方便用户使用的程序集合。
(1)处理器管理
(2)存储器管理
(3)输入/输出设备管理
(4)文件管理
(5)人机交互功能
1.8简述编译程序结构的五道“工序”。
答:
(1)词法分析程序
(2)语法分析程序
(3)中间代码生成程序
(4)优化程序
(5)目标代码生成程序
1.9简述软件开发的生命周期。
答:
一个软件的生存周期包括以下几个阶段:
(1)问题定义与需求分析。
(2)总体设计(或称概要设计)。
(3)详细设计。
(4)编写程序和单元测试。
(5)综合测试和确定运行。
(6)系统维护。
2.1简述编程语言的发展历史。
答:
计算机语言不断得到发展,由低级语言发展到高级语言。
低级语言又称面向机器的语言,是指这类语言依赖于机器。
由于不同的计算机一般有着不同
的指令系统,因此由这类语言编写的程序移植性很差。
这类语言主要有机器语言和汇编语言。
汇编语言再向自然语言方向靠近,便发展到了高级语言阶段。
高级语言编写的程序易学、易
读、易修改,通用性好,不依赖于机器。
但机器不能对用其编制的程序直接运行,必须经过语言
处理程序的翻译后才可以被机器接受。
2.2简述解释型语言和编译型语言的区别。
答:
(1)解释型
这种方式效率比较低,而且不能生成可独立执行的可执行文件,应用程序不能脱离其
解释器,但这种方式比较灵活,可以动态地调整、修改应用程序,如BASIC语言和Perl语言。
(2)编译型
这种方式的目标程序可以脱离其语言环境独立执行,而且效率较高。
现在大多
数的编程语言都是编译型的,C语言就属于编译型语言。
2.3简述C语言的特点。
答:
语言本身简洁、灵活,便于学习和使用。
C语言又归为中级语言,是因为它把高级语言的成分同汇编语言的功能结合了起来。
运算符类型丰富。
C语言数据类型丰富,并有多种数据结构,但与Pascal或Ada相比,它却不是强类型语
言。
C语言是一种结构化程序设计语言。
C语言又称函数式语言。
程序设计较自由,语法限制不严格。
2.4阅读本书附录,了解C语言的各种版本、VisualC++6.0开发系统的操作和库函数的使用。
2.5什么是结构化程序设计?
答:
程序只用三种基本的控制结构实现,只有一个入口和一个出口。
2.6算法的特性是什么?
答:
解题算法是一个有穷的动作序列。
该动作序列只有一个开始动作。
序列中每一个动作仅有一个后继动作。
序列终止表示问题得到解答或问题无解。
2.7比较传统流程图、N-S图和PAD图的优缺点。
答:
流程图允许用流线使流程任意转移,而结构化程序设计主张限制这种无规律的任意转向
N-S图把程序结构限制在顺序、选择与重复等几种基本结构内,使用者只能遵守结构化程序设计的规定。
但是,如果程序内嵌套的层数过多,内层的方块越画越小,一方面增加了画图的难度,另一方面使图的清晰性受到影响。
PAD(ProblemAnalysisDiagram)图即问题分析图。
PAD图是近年来在软件开发中被广泛用
来描述算法的一种图表示法。
相比而言,流程图和N-S图都是采用自上而下的方法,而PAD除
了自上而下以外,还可以自左向右地展开,所以,如果说流程图和N-S图是一维的算法描述,那
么PAD图就是二维的。
它能展现算法的层次结构,更直观易懂。
2.8用传统流程图与N-S图描述下列算法:
a.已知长方形的长和宽,求其面积。
b.求0~100中的全部偶数之和。
c.求50个整数中的最小植。
2.9什么是集成开发环境?
答:
将编辑、编译、调试等功能集成在一个桌面环境中,这就是集成开发环境。
3.1开发一个C程序包括哪几个步骤?
每个步骤的作用是什么?
答:
(1)编辑。
程序员使用任意编辑软件(编辑器)将编写好的C程序输入计算机,构成源程序文件,存盘时文件名应以.c为扩展名。
(2)编译。
编译时,编译器首先会检查源程序中每一条语句的语法。
(3)连接。
编译后产生的目标文件是可重定位的程序模块,不能直接运行。
(4)测试与调试。
一个程序经过编译、连接产生了可执行程序后,就可以开始测试和调试了。
(5)运行。
生成可执行文件后,程序就可以在操作系统控制下运行。
3.2C语言对自定义标识符有哪些要求?
答:
(1)必须由一个字母(a~z,A~Z)或下划线(_)开头;
(2)其他部分可以用字母、下划线或数字(0~9)组成;
(3)大小写字母表示不同意义,即代表不同的标识符;
(4)自定义标识符不能使用C语言的关键字。
3.3编程实现下列运算。
a.已知半径,求圆面积和球体积。
#definePI3.14159
#include"stdio.h"
intmain()
{
floatr,s,v;
printf("pleaseinsertanumber:
");
scanf("%f",&r);
s=PI*r*r;
v=(float)4*PI*r*r*r/3;
printf("s=%f,v=%f\n",s,v);
return0;
}
b.将两个数的值交换。
#include"stdio.h"
intmain()
{
inta,b,t;
printf("pleaseinserttwonumber:
");
scanf("%d%d",&a,&b);
printf("a=%d,b=%d\n",a,b);
t=a;
a=b;
b=t;
printf("a=%d,b=%d\n",a,b);
return0;
}
c.求一个实数的绝对值。
#include"stdio.h"
intmain()
{
floata;
printf("pleaseinsertanumber:
");
scanf("%f",&a);
if(a<0)
a=-a;
printf("a=%f\n",a);
return0;
}
d.求sin(23.8)的值。
#include"math.h"
#include"stdio.h"
intmain()
{
floata,i=23.8;
a=sin(i);
printf("sin(23.8)=%f\n",a);
return0;
}
4.1在C语言中为什么要定义数据类型?
4.2假设inta=2,b=3,c=4,计算下列表达式:
a.1/a*b*c
b.1/(a*b*c)
c.1/a/b/c
d.1.0/(a*b*c)
e.(float)1/(a*b*c)
答:
A,0
B,0
C,0
D,0.041667
E,0.041667
4.3假如intx=1,y=1,z=1,u=0,求u=x++&&y++||z++的值。
答:
1
4.4写出下列表达式:
a.求一元二次方程ax2+bx+c=0实根。
答:
x1=(-b+sqrt(b*b-4*a*c))/(2*a);
x2=(-b-sqrt(b*b-4*a*c))/(2*a);
b.计算浮点数a的整数部分位数。
答:
(int)log10(a)+1
c.已知三角形三边长a,b,c,求三角形面积。
答:
floata,b,c,s,area;
s=1.0/2*(a+b+c);
area=sqrt(s*(s-a)*(s-b)*(s-c));
d.数学式子5x+6sinx+x3-4cos(x2+1)+x+1。
答:
pow(5,x)+6*sin(x)+x*x*x-4*cos(x*x+1)+x+1
e.a、b两变量中有且只有一个是0。
a!
=b&&a||b==1或(a!
=b)&&(a&&b==0)
4.5定义inta=20,n=10;,分别写出执行下列语句后a的值。
a.a/=a+a
b.a%=n%=7
c.a+=a-=a*=a
答:
0
2
0
4.6定义intx=10,y=7,z=5;,计算下列表达式的值。
a.x=z>y-3
b.z=x-y,x*2,y-z,z+2
c.(++z>=y--)?
++z:
y—
答:
0
2
0
4.7写出下面程序的输出结果。
#include
intmain(void)
{
inta=3,b=4,c=5,k;
k=c>a>b&&c||c/b;
printf("%d\n",k);
return0;
}
答:
1
4.8写出下面程序的输出结果。
#include
intmain(void)
{
intk=5,b=2;
k*=b+++3;
printf("%d\n",k);
return0;
}
答:
25
4.9写出下面程序的输出结果。
#include
intmain(void)
{
intb=3,k;
k=(b+=b-=b*=b);
b+=b-=b*b;
printf("%d\n",k,b);
return0;
}
答:
0
4.10写出下面程序的输出结果。
#include
intmain(void)
{
inti,j,k,a=3,b=2;
i=(--a==b++)?
--a:
++b;
j=a++;k=b;
printf("i=%d,j=%d,k=%d\n",i,j,k);
return0;
}
答:
i=1,j=1,k=3
4.11写出下面程序的输出结果。
#include
intmain(void)
{
inta,b,k;
k=(a=2,b=5,a>b?
a++:
b++,a+b);
printf("%d\n",k);
return0;
}
答:
8
4.12写出下面程序的输出结果。
#include
intmain(void)
{
inta=2,b=3;
floatx=3.5,y=2.5,k;
k=(float)(a+b)/2+(int)x%(int)y;
printf("%.2f\n",k);
return0;
}
答:
3.50
4.13写出下面程序的输出结果。
#include
intmain(void)
{
printf("%s,%5s,%-10s","Internet","Internet","Internet");
printf("%10.5s,%-10.5s,%4.5s\n","Internet","Internet","Internet");
return0;
}
答:
Internet,Internet,InternetInter,Inter,Inter
4.14按照运算符优先级从高到低的顺序,写出本章所学过的各个运算符(算术运算符、关
系运算符、逻辑运算符、条件运算符、赋值运算符、强制类型转换运算符等)。
答:
()[]->.
!
~++--+-*&(类型)sizeof
*/%
+-
<<>>
<<=>>=
==!
=
&
^
|
&&
||
?
:
=+=-=*=/=%=&=^=|=<<=>>=
4.15编程实现下列功能:
输入3个字符后,按各字符的ASCII码大小顺序小从小到大输出
这些字符。
1)#include"stdio.h"
intmain(void)
{
chara,b,c,t;
printf(“Entera,b,c=”);
scanf(“%c,%c,%c”,&a,&b,&c);
if(a>b){t=a;a=b;b=t;}
if(a>c){t=a;a=c;c=t;}
if(b>c){t=b;b=c;c=t;}
printf(“\n%c,%c,%c\n”,a,b,c);
}
2)#include"stdio.h"
intmain()
{
inti;
charmin,mid,max,s[3];
printf("pleaseinput3chars:
");
scanf("%c%c%c",s,s+1,s+2);
min=(s[0]
s[0]:
s[1];
min=(min
min:
s[2];
max=(s[0]>s[1])?
s[0]:
s[1];
max=(max>s[2])?
max:
s[2];
for(i=0;i<2;i++)
{
if(s[i]!
=min&&s[i]!
=max)
{
mid=s[i];
break;
}
}
printf("%c%c%c\n",min,mid,max);
}
4.16编程实现下列功能:
输入3个数后,求它们的平均值,然后输出其中与平均值之差的绝对值最小的那个数。
1)#include
#include
intmain()
{
floata,b,c,mid,x,y,z,m;
printf("Pleaseinput3numbers:
");
scanf("%f%f%f",&a,&b,&c);
mid=(a+b+c)/3;
printf("%f\n",mid);
x=fabs(a-mid);
y=fabs(b-mid);
z=fabs(c-mid);
if(xprintf("%f\n",a);
if(yprintf("%f\n",b);
if(zprintf("%f\n",c);
return0;
}
2)#include"stdio.h"
floatf(floata,floatave)
{
floatd;
if((a-ave)>=0)
{
d=a-ave;
}
else
d=ave-a;
returnd;
}
intmain()
{
floatave,m,min,s[3];
inti=0;
printf("pleaseinsert3numbers:
");
scanf("%f%f%f",s,s+1,s+2);
ave=(float)(s[0]+s[1]+s[2])/3;
while(i<3)
{
m=f(s[i],ave);
if(i==1||mmin=m;
m=min+ave;
i++;
}
printf("theaverageis%f,themostadjacentnumberis%f\n",ave,m);
return0;
}
5.1写出下面程序的输出结果。
#include
intmain(void)
{
inta,b,c,d,x;
a=c=0;
b=x=1;
d=10;
if(a)d=d-5;
elseif(!
b)
if(!
c)x=5;
elsex=25;
printf("d=%d,x=%d\n",d,x);
return0;
}
答:
d=10,x=1
5.2写出下面程序的输出结果。
#include
intmain(void)
{
inta=0;
if(a=1)a+=10;
printf("a=%d",a);
return0;
}
答:
a=11
5.3写出下面程序的输出结果。
#include
intmain(void)
{
intx=100,a=10,b=20;
intv1=5,v2=0;
if(a
if(b!
=15)
if(!
v1)
x=1;
else
if(v2)x=10;
x=-1;
printf("%d",x);
return0;
}
答:
-1
5.4写出下面程序的输出结果。
#include
intmain(void)
{
inti,j,x=0;
for(i=0;i<2;i++)
{
x++;for(j=0;j<=3;j++)
{
if(j%2)continue;x++;
}
x++;
}
printf("x=%d\n",x);
return0;
}
答:
x=8
5.5写出下面程序的输出结果。
#include
intmain(void)
{
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("\na=%d,b=%d",a,b);
return0;
}
答:
a=2,b=1
5.6编程实现运输公司对用户计算运费的方法。
路程(s)越远,每公里运费越低。
标准如下:
s<250没有折扣
250≤s<5002%折扣
500≤s<10005%折扣
1000≤s<20008%折扣
2000≤s<300010%折扣
3000≤s15%折扣
#include"stdio.h"
intmain()
{
ints;
floatm;
printf("pleaseinsertlenth:
");
scanf("%d",&s);
if(s<250)
m=0;
elseif(s<500)
m=.02;
elseif(s<1000)
m=.05;
elseif(s<2000)
m=.08;
elseif(<3000)
m=.1;
elseif(s>=3000)
m=.15;
printf("m=%f\n",m);
}
#include
intmain()
{
ints,y;
doubledisc;
scanf("%d",&s);
y=s/250;
if(y>12)y=12;
switch(y)
{
case12:
disc=0.15;break;
case11:
case10:
case9:
case8:
disc=0.10;break;
case7:
case6:
case5:
case4:
disc=0.08;break;
case3:
case2:
disc=0.05;break;
case1:
disc=0.02;break;
case0:
disc=0.00;break;
default:
printf(“inputerror”);
}
printf("disc=%lf\n",disc);
}
5.7编程解决货物征税问题。
价格在1万元以上的征5%,5000元以上1万元以下的征3%,
1000元以上5000以下的征2%,1000元以下的免税,读入货物价格,计算并输出税金。
1)#include
intmain()
{
inty;
doublemoney,h,tax;
scanf("%lf",&money);
y=money/1000;
if(y>10)y=10;
switch(y)
{
case10:
h=0.05;break;
case9:
case8:
case7:
case6:
case5:
h=0.03;break;
case4:
case3:
case2:
case1:
h=0.02;break;
case0:
h=0.00;break;
}
tax=money*h;
printf("tax=%lf\n",tax);
}
2)