c程序设计谭浩强第二章习题与答案Word格式文档下载.docx
《c程序设计谭浩强第二章习题与答案Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《c程序设计谭浩强第二章习题与答案Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。
只有一个出口。
图2-14-------2-17中的b点为出口。
注意,一个判断框有两个出口,但一个选择结构只有一个出口。
不能混淆。
3:
结构内的每一部分都有被执行到的机会。
也就是说,对每一个框来说,都应当有一条到出口的路径通过它。
图2-20中就没有一条从入口到出口的路径通过A框。
4:
结构内不存在死循环(无终止的循环)。
图2-21就是一个死循环。
需要说明的是基本结构并不一定只限于以上3中,只要有以上四种特点就可以。
人们可以自己定义之。
例:
如下两图
2.3用传统流程图表示求解一下问题的算法。
(1)有两个瓶子A和B,分别放醋和酱油,要求将他们互换。
#include<
stdio.h>
voidmain()
{
inta;
intb;
intc;
a=10;
b=5;
printf("
%d,%d\n"
a,b);
c=a;
a=b;
b=c;
}
(2)一次将10个数输入,要求将将其中最大的数输出。
inta[10];
inti;
intmax;
input10numbers.\n"
);
for(i=0;
i<
10;
i++)
scanf("
%d"
&
a[i]);
printf("
\n"
max=a[0];
for(i=1;
if(max<
a[i])max=a[i];
themaxis:
%d\n"
max);
}
(3)有3个数abc,要求安大小顺序把他们输出。
intt;
scanf("
%d%d%d"
a,&
b,&
c);
thefirstnumbers:
"
%d,%d,%d\n"
a,b,c);
if(a<
b)
{t=a;
b=t;
c)
a=c;
c=t;
if(b<
{t=b;
thechangednumbers:
(4)求1+2+3+·
·
+100。
intsum=0;
=100;
sum=sum+i;
thesumis:
%d\n"
sum);
(5)判断一个数n能否同时被3和5整除。
inputi\n"
i);
if(i%3==0&
&
i%5==0)
%disok!
i);
else
%dcannot!
(6)将100~200之间的素数输出。
inti,j;
for(i=100;
=200;
for(j=2;
j<
i;
j++)
if(i%j==0)break;
if(i==j+1)printf("
(7)求两个数m和n的最大公约数。
intm,n;
intz=1;
%d%d"
m,&
n);
if(m>
n){t=m;
m=n;
n=t;
for(i=2;
=m;
if(m%i==0&
n%i==0)z=i;
theansweris:
z);
(8)求方程式
的根。
分别考虑:
①有两个不等的实根;
②有两个相等的实根。
math.h>
floata,b,c;
floatdt;
floatm,n;
floatx1,x2;
inputa,b,c!
a=%f,b=%f,c=%f"
dt=sqrt(b*b-4*a*c);
m=-b/(2*a);
n=dt/(2*a);
if(dt<
=1e-6)
x1=m;
x2=m;
theequationhastwoequalroots:
x1=%f,x2=%f\n"
x1,x2);
if(dt>
1e-6)
x1=m+n;
x2=m-n;
theequationhasdistinctrealroots:
x1=%f,x2=%f\n"
}再次说明一下由于我们考虑了实数在内,而实数在计算和存储时有细小误差,所以dt=0用dt<
=1e-6表示。
即10的-6次方。
2.5用N-S图表示2.4题中各题的算法。
2.6用伪代码表示2.4题中各题的算法。
(1)输出1900-----2000年中是闰年的年份,符合下面俩个条件之一的年份是闰年。
(一)能被4整除但不能被100整除
(二)能被100整除且能被400整除。
for(i=1900;
=2000;
i++)
if(i%4==0&
i%100)printf("
elseif(i%400==0)printf("
2.7什么叫结构化程序设计?
他的主要内容是什么?
结构化程序设计是进行以模块功能和处理过程设计为主的详细设计的基本原则。
它用基本结构(一般认为是3种:
顺序、选择和循环)为基本思想设计的程序。
这种程序便于编写、便于阅读、便于修改和维护。
这就减少了程序出错的机会,提高了程序的可靠性,保证了程序的质量。
它的主要内容为:
把一个复杂问题的求解过程分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内。
具体说:
采用以下方法来保证得到结构化的程序:
(1)自顶向下
(2)逐步细化(3)模块化设计(4)结构化编码。
{拓展:
结构化程序的概念首先是从以往编程过程中无限制地使用转移语句而提出的。
转移语句可以使程序的控制流程强制性的转向程序的任一处,在传统流程图中,用"
很随意"
的流程线来描述转移功能。
如果一个程序中多处出现这种转移情况,将会导致程序流程无序可寻,程序结构杂乱无章,这样的程序是令人难以理解和接受的,并且容易出错。
2.8用自顶向下、逐步细化的方法进行以下算法的设计:
(1)输出1900-2000年中是闰年的年份,符合下面两个条件之一的年份是闰年。
①能被4整除但不能被100整除;
②能被100整除切能被400整除。
(2)求
分别考虑D=
大于0、等于0、小于0这3种情况。
dt=b*b-4*a*c;
if(fabs(dt)<
x1=-b/(2*a);
x2=-b/(2*a);
x1=x2=%f\n"
x1);
elseif(dt>
x1=(-b+sqrt(dt))/(2*a);
x2=(-b-sqrt(dt))/(2*a);
else
{m=(-b)/(2*a);
n=sqrt(-dt)/(2*a);
theequationhascomplexrealroots:
\nx1=%f+%fi\n"
m,n);
x2=%f-%fi\n"
(3)输入10个数,输出其中最大的一个数。
inputthe10numbers:
=9;
i++)scanf("
if(a[i]>
max)max=a[i];
thelargestnumberis:
max);
(注:
可编辑下载,若有不当之处,请指正,谢谢!
)