C语言程序设计(第五版)谭浩强 第二章习题答案

第2章 算法——程序的灵魂

目录

1.什么是算法?试从日常生活中找3个例子,描述它们的算法。(P16)

2.什么叫结构化的算法?为什么要提倡结构化的算法?(P27)

3.试述3种基本结构的特点,请另外设计两种基本结构(要符合基本结构的特点)。(P26)

4.用传统流程图表示求解以下问题的算法。

5.用N-S图表示第4题中各题的算法。

6.用伪代码表示第4题中各题的算法。

7.什么叫结构化程序设计?它的主要内容是什么?(P33)

8.用自顶向下、逐步细化的方法进行以下算法的设计:

1.什么是算法?试从日常生活中找3个例子,描述它们的算法。(P16)

        广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”。

        ①你想从北京去天津开会,首先要去买火车票,然后按时乘坐地铁到北京站,登上火车,到天津站后坐汽车到会场,参加会议;

        ②要考大学,首先要填志愿表,交报名费,拿到准考证,按时参加考试,得到录取通知书,到指定学校报到注册等;

        ③描述太极拳动作的图解,就是“太极拳的算法”。

2.什么叫结构化的算法?为什么要提倡结构化的算法?(P27)

        由基本结构(顺序结构、选择结构、循环结构)所构成的算法属于“结构化”的算法,它不存在无规律的转向,只在本基本结构内才允许存在分支和向前或向后的跳转。

        结构化的算法可以解决任何复杂的问题。

3.试述3种基本结构的特点,请另外设计两种基本结构(要符合基本结构的特点)。(P26)

        顺序结构中,在执行完A框所指定的操作后,必然接着执行B框所指定的操作。顺序结构是最简单的一种基本结构。

        选择结构,又称选取结构或分支结构,此结构中必包含一个判断框。根据给定的条件p是否成立而选择执行A框或B框。

        循环结构,又称重复结构,即反复执行某一部分的操作。有两类循环结构:当型(while型)循环结构和直到型(until型)循环结构。

4.用传统流程图表示求解以下问题的算法。

(1)有两个瓶子A和B,分别盛放醋和酱油,要求将它们互换(即A瓶原来盛醋,现改盛酱油,B瓶则相反)。

(2)依次将10个数输入,要求输出其中最大的数。

(3)有3个数a, b, c,要求按大小顺序把它们输出。

(4)求1+2+3+…+100。

(5)判断一个数n能否同时被3和5整除。

(6)将100~200之间的素数输出。

(7)求两个数m和n的最大公约数。

(8)求方程式ax2+bx+c=0的根。分别考虑:

①有两个不等的实根;

②有两个相等的实根。

5.用N-S图表示第4题中各题的算法。

(1)有两个瓶子A和B,分别盛放醋和酱油,要求将它们互换(即A瓶原来盛醋,现改盛酱油,B瓶则相反)。

(2)依次将10个数输入,要求输出其中最大的数。

(3)有3个数a, b, c,要求按大小顺序把它们输出。

(4)求1+2+3+…+100。

(5)判断一个数n能否同时被3和5整除。

(6)将100~200之间的素数输出。

(7)求两个数m和n的最大公约数。

(8)求方程式ax2+bx+c=0的根。分别考虑:

①有两个不等的实根;

②有两个相等的实根。

注:i为\sqrt{-1}

6.用伪代码表示第4题中各题的算法。

(1)有两个瓶子A和B,分别盛放醋和酱油,要求将它们互换(即A瓶原来盛醋,现改盛酱油,B瓶则相反)。

c=a
a=b
b=c

(2)依次将10个数输入,要求输出其中最大的数。

n=1
input max
while n<10 do
    input a
    if a>max then max=a
    n=n+1
end do
print max

(3)有3个数a, b, c,要求按大小顺序把它们输出。

input a, b, c
if a<b then swap a, b	    (swap a, b表示a和b互换)
if a<c then
    print c, a, b
else
    if c>b then
        print a, c, b
    else
        print a,b,c
    end if
end if

(4)求1+2+3+…+100。

sum=0
n=1
while n≤100 do
    sum=sum+n
    n=n+1
end do
print sum

(5)判断一个数n能否同时被3和5整除。

input n
flag=0
if mod(n, 3)≠0 then flag=-1
if mod(n, 5)≠0 then flag=-1
if flag=0 then
    print n "能被3和5整除"
else
    print n "不能同时被3和5整除"
end if

(6)将100~200之间的素数输出。

n=100
while n<200 do
    i=2
    while i≤√n
        if mod(n, i)=0 then
            i=n
        else
            i=i+1
        end if
    end do
    if i<√n then print n
        n=m+1
end do

(7)求两个数m和n的最大公约数。

input m, n
if m<n then swap m, n
t=mod(m, n)
while r≠0 do
    m=n
    n=r
    r=mod(m, n)
end do
print n

(8)求方程式ax^{2}+bx+c=0的根。分别考虑:

①有两个不等的实根;

②有两个相等的实根。

int a, b, c
disc=b2-4ac
if disc≥0 then
    if disc=0 then
        x1, x2=-b/(2a)
    else
        x1=(-b+√disc)/(2a)
        x2=(-b-√disc)/(2a)
    end if
    print x1, x2
else
    p=-b/(2a)
    q=√disc/(2a)
    print p+q, "+", p-q, "i"
end if

7.什么叫结构化程序设计?它的主要内容是什么?(P33)

        结构化程序设计强调程序设计风格和程序结构的规范化,提倡清晰的结构。

        主要内容:自顶向下、逐步细化、模块化设计、结构化编码。

8.用自顶向下、逐步细化的方法进行以下算法的设计:

(1)输出1900-2000年中是闰年的年份,符合下面两个条件之一的年份是闰年:

①能被4整除但不能被100整除;

②能被100整除且能被400整除。

        先画出图(a),对它细化得图(b);对图(b)中的S1.1细化得图(c)。

(2)求ax^{2}+bx+c=0的根。分别考虑d=b^{2}-4ac大于0、等于0和小于0这3种情况。

        先画出图(a),对其中的S3细化为图(b),对图(b)中的S3.1细化为图(c),对图(c)中的S3.1.1细化为图(d),对图(c)中的S3.1.2细化为图(e),再对图(b)中的S3.2细化为图(f)。请读者将它们合成一个总的N-S图。

(3)输入10个数,输出其中最大的一个数。

        先初步画出图(a)。考虑到还没有学习数组的知识,因而不能做到将10个数全部输入给数组中各个元素,然后再从中找最大者。由于不采用数组这种数据结构,算法也应与采用数组时有所不同。现在只用普通变量,逐个读入数据,将当时各数中的最大者保留下来存放在max中,以便再与后面读入的数比较。将图(a)细化为图(b),再细化为图(c)。

  • 15
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值