作者:圣才电子书
出版社:圣才电子书
格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT
谭浩强《C程序设计》(第4版)笔记和课后习题详解试读:
第1章 程序设计和C语言
1.1 复习笔记
一、计算机程序
1程序就是一组计算机能识别和执行的指令
2计算机的一切操作都是由程序控制的
二、计算机语言
1定义
人和计算机交流信息,要解决语言问题。需要创造一种计算机和人都能识别的语言,这就是计算机语言。
2发展阶段
计算机语言经历了几个发展阶段:(1)机器语言(2)符号语言(3)高级语言
三、C语言的发展及其特点
1概述(1)C语言是国际上广泛流行的计算机高级语言。(2)C语言的祖先是BCPL语言。
2发展
最初的C语言只是为描述和实现UNIX操作系统提供一种工作语言而设计的,后来逐步发展为一种高级编程语言,目前C语言使用的标准是1999年修正的C99。
3特点(1)语言简洁、紧凑,使用方便、灵活(2)运算符丰富(3)数据类型丰富(4)具有结构化的控制语句(5)语法限制不太严格,程序设计自由度大(6)C语言允许直接访问物理地址(7)用C语言编写的程序可移植性好(8)生成目标代码质量高,程序执行效率高
四、简单的C语言程序(1)一个程序由一个或多个源程序文件组成
在一个源程序文件中可以包括3个部分:
①预处理指令
②全局声明
③函数定义(2)函数是C程序的主要组成部分
①函数是C程序的基本单位。
②一个C语言程序是由一个或多个函数组成的,有且仅有一个main函数。
③一个小程序只包含一个源程序文件。
④函数既可以是库函数,也可以是用户自定义函数。(3)函数的两个部分
①函数首部
函数首部包括函数名、函数类型、函数属性、函数参数(形式参数)名、参数类型。
②函数体
即函数首部下面的花括号内的部分。函数体一般包括两部分:声明部分和执行部分。(4)程序总是从main函数开始执行的(5)程序中对计算机的操作是由函数中的C语句完成的(6)在每个数据声明和语句的最后必须有一个分号(7)C语言本身不提供输入输出语句(8)程序应当包含注释
五、运行C程序的步骤与方法
C程序运行步骤图如图1-1所示。其中实线表示操作流程,虚线表示文件的输入输出。
图1-1 C程序运行步骤图
六、程序设计的任务
程序设计是指从确定任务到得到结果、写出文档的全过程。从确定问题到最后完成任务,一般经历以下几个工作阶段:
1.问题分析
2.设计算法
3.编写程序
4.对源程序进行编辑、编译和连接,得到可执行程序
5.运行程序,分析结果
6.编写程序文档
1.2 课后习题详解
1什么是程序?什么是程序设计?
答:程序是一组计算机能识别和执行的指令。
程序设计是给出解决特定问题程序的过程,是软件构造活动中的重要组成部分。程序设计往往以某种程序设计语言为工具,给出这种语言下的程序。程序设计过程应当包括分析、设计、编码、测试、排错等不同阶段。
2为什么需要计算机语言?高级语言的特点?
答:人和计算机交流信息,要解决语言问题。因此,需要创造一种计算机和人都能识别的语言,这就产生了计算机语言。
高级语言的特点:(1)功能强,且不依赖于具体机器,用它写出的程序对任何型号的计算机都适用(或只须作很少的修改)。(2)计算机也是不能直接识别高级语言程序的,也要进行“翻译”。用一种称为编译程序的软件把用高级语言写的程序(称为源程序,source program)转换为机器指令的程序(称为目标程序,object program),然后让计算机执行机器指令程序,最后得到结果。高级语言的一个语句往往对应多条机器指令。
3正确理解以下名词及其含义:(1)源程序 目标程序 可执行程序(2)程序编辑 程序编译 程序连接(3)程序 程序模块 程序文件(4)函数 主函数 被调用函数 库函数(5)程序调试 程序测试
答:(1)①源程序是指未经编译的,按照一定的程序设计语言规范书写的,人类可读的文本文件。通常由高级语言编写。源程序可以是以书籍或者磁带或者其他载体的形式出现,但最为常用的格式是文本文件,这种典型格式的目的是为了编译出计算机可执行的程序。②目标程序,又称为“目的程序”,为源程序经编译可直接被计算机运行的机器码集合,在计算机文件上以.obj作扩展名,由语言处理程序(汇编程序,编译程序,解释程序)将源程序处理(汇编,编译,解释)成与之等价的由机器码构成的,计算机能够直接运行的程序,该程序称作目标程序。③可执行程序(executable program,EXE File)是指一种可在操作系统存储空间中浮动定位的可执行程序。在MS-DOS和MS-WINDOWS下,此类文件扩展名为.exe。(2)①程序编辑是指将完成一件工作所需要的步骤,也就是算法,用计算机所能识别的语言,按照一定的程序结构翻译出来,并可被计算机执行的编写代码的全过程。②程序编译是指用户使用编译程序对其个人编制的源程序进行编译的过程。③程序连接是指把所有编译后得到的目标模块连接装配起来,再与函数库相连接成一个整体的过程。(3)①程序是为完成某项活动所规定的方法。②程序模块即可由汇编程序、编译程序、装入程序或翻译程序作为一个整体来处理的一级独立的、可识别的程序指令。③程序文件是用来描述程序的文件,其存储的是程序,包括源程序和可执行程序。(4)①函数是指完成一定功能的一段代码;②主函数是指main函数,main函数是C程序里必不可少的,程序从这里开始运行。③被调用函数是指某一个地方调用到的函数,C程序就是通过函数调用方式来运行的,库函数就是预先编制好的一些函数,完成特定的功能,比如随编译器一起提供的库函数:数学运算的、有关输出的、文件操作的等等。④库函数一般是指编译器提供的可在C源程序中调用的函数。可分为两类,一类是C语言标准规定的库函数,一类是编译器特定的库函数。(5)①程序调试,是将编制的程序投入实际运行前,用手工或编译程序等方法进行测试,修正语法错误和逻辑错误的过程。这是保证计算机信息系统正确性的必不可少的步骤。②程序测试(program testing)是指对一个完成了全部或部分功能、模块的计算机程序在正式使用前的检测,以确保该程序能按预定的方式正确地运行。
4自学本书附录A,熟悉上机运行C程序的方法,上机运行本章3个例题。
答:略。
5请参照本章例题,编写一个C程序,输出以下信息:
****************************
Very good!
****************************
答:程序如下:
#include
6编写一个C程序,输入a,b,c三个值,输出其中最大者。
答:
#include 运行结果: please input a,b,c: 23,45,39 The lagest number is:45 7上机运行以下程序,注意注释的方法。分析运行结果,掌握注释的用法。(1) #include printf("How do you do!\n"); /*这是块注释*/(3)把第4行改为以下两行 printf("How do you do!\n"); /*这是块注释,如在本行内写不完,可以在下一行继续写。这部分内容均不产生目标代码*/(4)把第4行改为 //printf("How do you do!\n");(5)把第4行改为 printf("//How do you do!\n"); //在输出的字符串中加入//(6)用块注释符把几行语句都作为注释 /*printf("How do you do!\n"); return 0;*/ 答:请读者上机运行程序,注意观察结果。结果如下:(1)输出:How do you do! //之后是注释,这部分内容不参加编译,不影响运行结果。(2)输出:How do you do! /*与*/之间是注释,这部分内容不参加编译,不影响运行结果。(3)输出:How do you do! 程序运行结果表明:从上一行的/*到下一行的*/之间是注释,块注释不受一行范围的限制,可以跨行。这部分内容不参加编译,不影响运行结果。(4)程序运行时无输出,因为//之后都作为注释,因此在程序编译时不包括printf函数,故无输出。(5)输出://How do you do! 在双撇号之间的//不作为注释标记,因此把它按字符原样输出。(6)无输出。因为把所有语句都作为注释,不参加编译,程序相当于: #include int main() 第2章 算法——程序的灵魂 2.1 复习笔记
一、概述
一个程序主要包括以下两方面的信息:(1)对数据的描述,即数据结构(data structure)。(2)对操作的描述,即算法(algorithm)。
二、算法概述
1算法定义
广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”。
2算法分类(1)数值运算算法,数值运算的目的是求数值解。(2)非数值运算算法。
三、算法的特性
1有穷性
一个算法应包含有限的操作步骤,而不能是无限的。
2确定性
算法中的每一个步骤都应当是确定的,而不应当是含糊的、模棱两可的。
3有零个或多个输入
输入是指在执行算法时需要从外界取得必要的信息。
4有一个或多个输出
算法的目的是为了求解,“解”是指输出。
5有效性
算法中的每一个步骤都应当能有效地执行,并得到确定的结果。
四、怎样表示一个算法
1用自然语言表示算法
自然语言是指人们日常使用的语言,其特点是通俗易懂,但语义语法不严格,描述能力不足。
2用流程图表示算法(1)概述
美国国家标准化协会ANSI规定了一些常用的流程图符号(如图2-1所示),已为世界各国程序工作者普遍采用。
图2-1 常用的流程图符号(2)流程图元素
①菱形框
菱形框的作用是对一个给定的条件进行判断,根据给定的条件是否成立决定如何执行其后的操作。它有一个入口,两个出口,如图2-2所示。
图2-2 菱形框
②连接点
连接点(小圆圈)是用于将画在不同地方的流程线连接起来,如图2-3所示。
图2-3 连接点
③注释框
注释框不是流程图中必要的部分,不反映流程和操作,只是为了对流程图中某些框的操作作必要的补充说明,以帮助阅读流程图的人更好地理解流程图的作用。(3)流程图组成
①表示相应操作的框;
②带箭头的流程线;
③框内外必要的文字说明。
3三种基本结构和改进的流程图(1)传统流程图的弊端
传统的流程图用流程线指出各框的执行顺序,对流程线的使用没有严格限制。(2)三种基本结构
①顺序结构
如图2-4所示,虚线框内是一个顺序结构。其中A和B两个框是顺序执行的。顺序结构是最简单的一种基本结构。
图2-4 顺序结构
②选择结构
选择结构又称选取结构或分支结构,如图2-5所示。虚线框内是一个选择结构,此结构中必包含一个判断框,根据给定的条件P是否成立而选择执行A框或B框。
图2-5 选择结构
③循环结构
又称重复结构,即反复执行某一部分的操作,有两类循环结构,如图2-6所示。
图2-6 循环结构(3)三种结构共同特点
①只有一个入口;
②只有一个出口;
③结构内的每一部分都有机会被执行到;
④结构内不存在“死循环”。
基本结构并不一定只限于上面3种,只要具有上述4个特点的都可以作为基本结构。如图2-7为经典的do…while循环结构、而图2-8为经典的switch选择结构。
图2-7 do…while循环结构
图2-8 switch选择结构
4用N-S流程图表示算法(1)概述
在这种流程图中,完全去掉了带箭头的流程线。全部算法写在一个矩形框内,在该框内还可以包含其他从属于它的框,或者说,由一些基本的框组成一个大的框,这种流程图又称N-S结构化流程图。(2)N-S流程图符号
①顺序结构
顺序结构用图2-9形式表示。A和B两个框组成一个顺序结构。
图2-9 顺序结构
②选择结构
选择结构用图2-10表示,其中p为判断条件。
图2-10 选择结构
③循环结构
当型循环结构用图2-11形式表示,当p条件成立时反复执行A操1作,直到p条件不成立为止。1
图2-11 当型循环结构
直到型循环结构用图2-12形式表示,先执行A操作,然后判断p1条件是否成立,如果p成立,反复执行A,只当p条件不成立才停止11循环。
图2-12 直到型循环结构
5用伪代码表示算法(1)概述
伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。(2)特点
①伪代码书写格式比较自由,容易表达出设计者的思想;
②用伪代码写的算法很容易修改;
③用伪代码很容易写出结构化的算法。
6用计算机语言表示算法
用流程图或伪代码描述一个算法后,还要将它转换成计算机语言程序。用计算机语言表示的算法是计算机能够执行的算法,其必须严格遵循所用语言的语法规则。
五、结构化程序设计方法
1基本思路
结构化程序设计方法的基本思路是:把一个复杂问题的求解过程分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内。
2结构化程序设计方法(1)自顶向下(2)逐步细化(3)模块化设计(4)结构化编码
2.2 课后习题详解
1什么是算法?试从日常生活中找3个例子,描述它们的算法。
答:为解决一个问题而采取的方法和步骤,就称为“算法”。
例1,从上海去北京:先要预定车票、然后去车站乘车、抵达目的地后下车;
例2,喝茶:先准备好茶叶、再烧一壶开水、然后将茶叶放入杯中、倒入开水、等待茶叶泡好;
例3,开车:先要打开车门、驾驶员坐好、插上车钥匙、发动汽车。
2什么叫结构化的算法?为什么要提倡结构化的算法?
答:结构化算法是由一些基本结构顺序组成的。在基本结构之间不存在向前或向后的跳转,流程的转移只存在于一个基本的结构范围内。一个非结构化的算法可以用一个等价的结构化算法代替,其功能不变。跟结构化算法比较起来,非结构化算法有以下缺点:流程不受限制的随意转来转去,使流程图毫无规律,使人在阅读的时候难以理解算法的逻辑,难以阅读,也难以修改,从而使算法的可靠性和可维护性难以保证。
3试述3种基本结构的特点,请另外设计两种基本结构(要符合基本结构的特点)。
答:3种基本结构的特点:
①只有一个入口。
②只有一个出口。
③结构内的每一部分都有机会被执行到。即对每一个框来说,都应当有一条从入口到出口的路径通过它。
④结构内不存在“死循环”。
另外两种基本结构如图2-13所示。
图2-13 另外两种基本结构图
4用传统流程图表示求解以下问题的算法。(1)有两个瓶子A和B,分别盛放醋和酱油,要求将它们互换(即A瓶原来盛醋,现改盛酱油,B瓶则相反)。
答:显然,如果只有两个瓶子,肯定不能完成此任务,必须有一个空瓶C作为过渡,A瓶与B瓶互换的流程图如图2-14。
图2-14 A瓶与B瓶互换流程图(2)依次将10个数输入,要求输出其中最大的数。
答:求解10个数中最大数的流程图如图2-15所示。
图2-15 求解10个数中最大数的流程图(3)有3个数a,b,c,要求按大小顺序把它们输出。
答:将3个数大小输出的流程图如图2-16所示。
图2-16 3个数大小输出的流程图(4)求1+2+3+…+100。
答:求1+2+3+…+100的流程图如图2-17所示。
图2-17 1到100累加的流程图(5)判断一个数n能否同时被3和5整除。
答:判断一个数n能否同时被3和5整除的流程图如图2-18所示。
图2-18 判断一个数能否被3和5整除的两种流程图(6)将100~200之间的素数输出。
答:输出100~200之间素数的流程图如图2-19所示。
图2-19 找出100~200之间素数的流程图(7)求两个数m和n的最大公约数。
答:求两个数m和n最大公约数的流程图如图2-20所示。
图2-20 求两个数最大公约数的流程图2(8)求方程式ax+bx+c=0的根。分别考虑:
①有两个不等的实根;
②有两个相等的实根。2
答:求方程式ax+bx+c=0根的流程图如图2-21所示。
图2-21 求一元二次方程根的流程图
5用N-S图表示第4题中各题的算法。
答:(1)A瓶与B瓶互换的N-S流程图如图2-22所示。
图2-22 A瓶与B瓶互换的N-S流程图(2)求解10个数中最大数的N-S流程图如图2-23所示。
图2-23 求解10个数中最大数的N-S流程图(3)将3个数大小输出的N-S流程图如图2-24。
图2-24 将3个数大小输出的N-S流程图(4)求1+2+3+…+100的N-S流程图如图2-25所示。
图2-25 求1+2+3+…+100的N-S流程图(5)判断一个数n能否同时被3和5整除的N-S流程图如图2-26所示。
图2-26 判断一个数n能否同时被3和5整除的N-S流程图(6)输出100~200之间素数的流程图如图2-27所示。
图2-27 输出100~200之间素数的N-S流程图(7)求两个数m和n最大公约数的流程图如图2-28所示。
图2-28 求两个数m和n最大公约数的N-S流程图2(8)求方程式ax+bx+c=0根的流程图如图2-29所示。
试读结束[说明:试读内容隐藏了图片]