谭浩强C语言全书word版第二章
- 格式:doc
- 大小:44.50 KB
- 文档页数:5
C语⾔程序设计第五版谭浩强课后答案(第⼆章答案)⽬录1. 什么是算法?试从⽇常⽣活中找3个例⼦,描述它们的算法2. 什么叫结构化的算法?为什么要提倡结构化的算法?3. 试述3种基本结构的特点,请另外设计两种基本结构(要符合基类结构的特点)。
4. ⽤传统流程图表⽰求解以下问题的算法。
5. ⽤N-S图表⽰第4题中各题的算法6. ⽤伪代码表⽰第4题中各题的算法7. 什么叫结构化程序设计?它的主要内容是什么?8. ⽤⾃顶向下、逐步细化的⽅法进⾏以下算法的设计:1. 什么是算法?试从⽇常⽣活中找3个例⼦,描述它们的算法算法:简⽽⾔之就是求解问题的步骤,对特定问题求解步骤的⼀种描述。
⽐如⽣活中的例⼦:考⼤学⾸先填报志愿表、交报名费、拿到准考证、按时参加考试、收到录取通知书、按照⽇期到指定学校报到。
去北京听演唱会⾸先在⽹上购票、然后按时坐车到北京,坐车到演唱会会场。
把⼤象放进冰箱先打开冰箱门,然后将⼤象放进冰箱,关冰箱。
2. 什么叫结构化的算法?为什么要提倡结构化的算法?结构化算法:由⼀些顺序、选择、循环等基本结构按照顺序组成,流程的转移只存在于⼀个基本的范围之内。
结构化算法便于编写,可读性⾼,修改和维护起来简单,可以减少程序出错的机会,提⾼了程序的可靠性,保证了程序的质量,因此提倡结构化的算法。
3. 试述3种基本结构的特点,请另外设计两种基本结构(要符合基类结构的特点)。
结构化程序设计⽅法主要由以下三种基本结构组成:顺序结构:顺序结构是⼀种线性、有序的结构,它依次执⾏各语句模块选择结构:选择结构是根据条件成⽴与否选择程序执⾏的通路。
循环结构:循环结构是重复执⾏⼀个或⼏个模块,直到满⾜某⼀条件位置重新设计基本结构要满⾜以下⼏点:只有⼀个⼊⼝只有⼀个出⼝结构内的每⼀部分都有机会执⾏到结构内不存在死循环因此给出以下复习结构:while型和until型循环复合以及多选择结构4. ⽤传统流程图表⽰求解以下问题的算法。
第一章:计算机基础知识一、计算机系统的组成1、组成2、软、硬件之间的关系二、计算机中用到的数制1、数制2、为什麽用二进制?3、进制间的转换三、计算机的解题过程(图)四、计算机的语言系统1、语言的分类2、翻译方式3、常用语言简介五、磁盘操作系统————DOS1、组成2、启动3、文件4、目录5、通配符6、常用DOS命令第二章:C语言概述一、C语言的产生及发展简介ALGOL60(1960)CPL(1963)BCPL(1967)B(1970)C(1973)ALGOL60语言———面向问题、离硬件远、不宜编写系统软件CPL语言———离硬件近一点、规模较大、难以实现BCPL语言———简化的CPLB语言———接近硬件、简单、第一个UNIX系统由B语言编写、功能有限C语言———多次改进、75年UNIX6版公布后C语言的优点才引起注意、77年出现不依赖于具体机器的C编译可用来编写系统软件、应用软件UNIX系统用C语言编写,随着UNIX的发展C语言也迅速得到推广二、C语言的特点:1、语言简洁、紧凑、使用方便、灵活(32个关键字、9种控制语句)2、运算符丰富(34种运算符将括号、赋值、强制类型、转换作为运算符等等)3、数据结构丰富(标准类型、构成类型)4、具有结构化的控制语句。
用函数作为程序模块以实现程序的模块化。
5、语法限制不太严格、程序设计自由度大。
(限制与灵活是一对矛盾)6、C语言可以直接访问物理地址。
能实现汇编语言的大部分功能,可以直接对硬件进行操作。
7目标代码质量高,程序执行效率高。
8程序可移植性好。
三、程序的组成结构及特性:1、程序结构:下面给出几段简单的C程序,从中分析一下程序的结构及特征:程序一:main(){printf(“This is a c program. \n”);}程序二:# include <stdio.h>main() /*求两数之和*/{int a,b,sum;/*定义变量*/a=123;b=456;sum=a+b;printf(“sum is %d\n”,sum);}程序三:main()/*主函数*/{int a,b,c;/*定义变量*/scanf(“%d,%d”,&a,&b);/*输入变量a、b 的值*/c=max(a,b);/*调用max函数,将得到的值赋给c*/printf(“max=%d”,c);/*输出c的值*/}int max(x,y)/* 定义max函数,函数值为整型,x,y为形式参数*/int x,y;/* 对形参x,y作类型定义*/{int z;/* max函数中用到的变量z定义*/if (x>y) z=x;else z=y;return(z);/* 将z的值返回,通过max带回调用处*/}2、C语言程序的结构特性:(1)、一个C源程序可以由一个或多个源文件组成。
第2章程序的灵魂——算法1. 概念:为解决某一特定问题而采取的具体工作步骤和方法。
2. 举例◆计算1+2+3+……+100的值◆计算1×2×3×……×1000的值◆有50个学生,要求输出他们之中成绩在80分以上的学号和成绩◆判定2000-2500年中的每一年是否闰年3. 算法的表示(1) 自然语言(2) 流程图表示法(3) 伪代码表示法(4) 计算机语言表示法(2) 流程图表示法顺序结构、选择结构和循环结构流程图这三种基本结构有以下共同的特点:1. 只有一个入口;2. 只有一个出口;3. 结构中的每一部分都有被执行到的机会;4. 结构内没有死循环。
用上述基本结构的顺序组合可以表示任何复杂的算法结构,但是基本结构中的流程线使流程图显得较乱,于是1973年美国学者提出了一种新的流程图形式。
在这种流程图中,完全去掉了带箭头的流向线,全部算法写在一个矩形框内。
下面是三种控制结构的N-S图。
例1 求四个数的和算法一:在内存中设一累加用的存储单元S。
第1步:将存储单元S清零。
第2步:输入第1个数a1。
第3步:把a1加到存储单元S中。
第4步:输入第2个数a2。
第5步:把a2加到存储单元S中。
第6步:输入第3个数a3。
第7步:把a3加到存储单元S中。
第8步:输入第4个数a4。
第9步:把a4加到存储单元S中。
第10步:把存储单元S中的结果输出。
算法二:在内存中设一累加用的存储单元S和一计数用的单元I。
第1步:将累加单元S清零。
第2步:将计数单元I清零。
第3步:输入一个数A。
第4步:把A加到累加单元S中。
第5步:计数单元I的值增加1,即I+1=>I。
第6步:若I<4则转去执行第3步,否则,继续执行第7步。
第7步:输出存储单元S中的结果。
开始结束S+A=>S 0=>S 0=>I 输入A I+1=>I I<4输出S 0=>s0=>I输入A S+A=>S I+1=>I 直到I=4输出结果S N-S 图Y例2 求5!开始结束T*i=>t 1=>t 2=>i i+1=>i i>5输出S N例3 将50名学生中成绩在80分以上练习1:交换两个单元的内容。
C程序设计(第四版)(谭浩强)第2章课后习题答案算法——程序的灵魂P017 2.1 计算机1-5相乘的积.#include<stdio.h>int main(){int i,s=1; //在执行数值操作前一定要先有个初值.for(i=1;i<6;i++) //这里是到6.{s=s*i; //相乘}printf("The sum is %d .\n",s);return 0;}#include<stdio.h> //作出要求:换成1到11间奇数相乘.int main(){int i,s=1; //在执行数值操作前一定要先有个初值.for(i=1;i<12;i++) //这里是到,但题目要求的是取单数.也可以是i=i+2{if(i%2!=0) //i对取模,值为非为奇数;为则为偶数.s=s*i;elsecontinue; //跳过这个for循环的这一次,执行下一次.}printf("The sum is %d .\n",s);return 0;}暂时没法做.P019 2.3 判断2000-2500年中的闰年,并输出.年的概念是地球围绕太阳一周的时间(所谓公转周期)称为一年,这个周期是相当稳定的,很长时间也不会变动1秒,但是真正的一年是365.2423天(目前)。
所以,如果每年定义为365天的话,1年就会多出0.2423天,4年就会多出0.9692天,非常接近1天,这样闰年就出现了,也就是每4年要有1年设置为366天,来抵消这多出的1天。
规则为:·1)如果年份能被4整除,则该年计为闰年;可是,假如不做调整的话,当400年的时候,累计才多出96.92天,接近于多出97天,闰年的设置却多出来100天,所以要在400年内,再撤销3个闰年。
怎么撤销呢?就有了下面这个规则:·2)如果年份能被100整除,则不计为闰年;问题又来了,400年里有4个100年吧,去掉后四个100年后,又少了一个,所以再加一个规则就是:·3)如果年份能被400整除,则计为闰年。