C程序设计(第五版)谭浩强 著——第二章 算法——程序的灵魂 书后题答案

1.什么是算法?

对操作的描述。

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

由基本结构所构成的算法属于“结构化的算法”,它不存在无规律的转向,只在本基本结构内才允许存在分支和向前或向后的跳转。
一个结构化程序就是用计算机语言表示的结构化算法,用3种基本结构组成的程序必然是结构化的程序。
这种程序便于编写、阅读、修改和维护,这就减少了程序出错的机会,提高了程序的可靠性,保证了程序的质量。

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

(1)只有一个入口。
(2)只有一个出口。
(3)结构内的每一部分多有机会被执行到。
(4)结构内不存在死循环。

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)求方程式ax²+bx+c=0的根。分别考虑:
①有两个不等的实根
②有两个相等的实根
在这里插入图片描述
在这里插入图片描述

5.用N-S图表示第4题中各题的算法。
在这里插入图片描述

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

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

 结构化程序设计强调程序设计风格和程序结构的规范化,提倡清晰的结构。
(1)自顶向下;
(2)逐步细化;
(3)模块化设计;
(4)结构化编码。

8.用自顶向下、逐步细化的方法进行以下算法的设计:
(1)输出1900—2000年中是闰年的年份,符合下面两个条件之一的年份是闰年:
①能被4整除但不能被100整除;
②能被100整除且能被400整除。
(2)求ax²+bx+c=0的根。分别考虑:d=b²-4ac大于0、等于0和小于0这3种情况。
(3)输入10个数,输出其中最大的一个数。

#include<stdio.h>
void main()
{
    int year=1900,r;//r为余数
    for(;year<=2000;year++)
    {
        r=year%4;//取余
        if(r!=0)//不能被4整除
        {
            printf("%d年不是闰年\n",year);
        }
        else
        {
            r=year%100;
            if(r!=0)//能被4整除,但不能被100整除
            {
                printf("%d年是闰年\n",year);
            }
            else
            {
                r=year%400;
                if(r==0)//能被100整除,且能被400整除
                {
                    printf("%d年是闰年\n",year);
                }
                else
                {
                    printf("%d年不是闰年\n",year);
                }
            }
        }
    }
}

在这里插入图片描述

#include<stdio.h>
void main()
{
    int a,b,c,d;
    double x1,x2,dis;//x1x2为方程两根,dis为b²-4ac的开方
    scanf("%d,%d,%d,",&a,&b,&c);//输入abc的值
    d=b*b-4*a*c;
    if(d<0)
    {
        printf("方程无实根!\n");
    }
    else
    {
        dis=sqrt(d);
        if(d==0)
        {
            x1=x2=-b/(double)2*a;//避免溢出
            printf("方程有两个相等的实根:x1=x2=%f\n",x1);
        }
        else
        {
            x1=(-b+dis)/(double)2*a;
            x2=(-b-dis)/(double)2*a;
            printf("方程有两个不等的实根:x1=%f,x2=%f\n",x1,x2);
        }
    }
}

在这里插入图片描述

#include<stdio.h>
void main()
{
    int a[10],max,i;
    for(i=0;i<10;i++)//输入10个数
    {
        scanf("%d",&a[i]);
    }
    max=a[0];
    for(i=1;i<10;i++)//循环9次
    {
        if(max<a[i])
        {
            max=a[i];
        }
    }
    printf("max=%d\n",max);
}

在这里插入图片描述

  • 7
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值