【教材】第三章 顺序程序设计《计算机基础与程序设计》广东普通专升本

第三章 顺序程序设计
一、程序=算法+数据结构
知识点1:程序=算法+数据结构
一个程序主要包括以下两方面的信息:
(1)对数据的描述,即数据结构(data structure)。
(2)对操作的描述,即算法(algorithm)。
二、算法概述
知识点1:算法定义
广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”。
知识点2:算法分类
(1)数值运算算法,数值运算的目的是求数值解。
(2)非数值运算算法。
三、算法的特性
知识点1:有穷性
一个算法应包含有限的操作步骤,而不能是无限的。
知识点2:确定性
算法中的每一个步骤都应当是确定的,而不应当是含糊的、模棱两可的。
知识点3:有零个或多个输入
输入是指在执行算法时需要从外界取得必要的信息。
知识点4:有一个或多个输出
算法的目的是为了求解,“解”是指输出。
知识点5:有效性
算法中的每一个步骤都应当能有效地执行,并得到确定的结果。
四、怎样表示一个算法
知识点1:用自然语言表示算法
自然语言是指人们日常使用的语言,其特点是通俗易懂,但语义语法不严格,描述能力不足。
知识点2:用流程图表示算法
(1)概述
美国国家标准化协会 ANSI 规定了一些常用的流程图符号(如图 3-1 所示),已为世界各国程序工作者普遍采用。

(2)流程图元素
①菱形框
菱形框的作用是对一个给定的条件进行判断,根据给定的条件是否成立决定如何执行其后的操作。
它有一个入口,两个出口,如图 3-2 所示。


注释框不是流程图中必要的部分,不反映流程和操作,只是为了对流程图中某些框的操作作必要的补充说明,以帮助阅读流程图的人更好地理解流程图的作用。
(3)流程图组成
①表示相应操作的框;
②带箭头的流程线;
③框内外必要的文字说明。
知识点3:三种基本结构和改进的流程图
(1)传统流程图的弊端
传统的流程图用流程线指出各框的执行顺序,对流程线的使用没有严格限制。
(2)三种基本结构
①顺序结构
如图 3-4 所示,虚线框内是一个顺序结构。其中 A 和 B 两个框是顺序执行的。顺序结构是最简单的一种基本结构。

②选择结构
选择结构又称选取结构或分支结构,如图 3-5 所示。虚线框内是一个选择结构,此结构中必包含一个判断框,根据给定的条件 P 是否成立而选择执行 A 框或 B 框。




知识点4:用 N-S 流程图表示算法
(1)概述
在这种流程图中,完全去掉了带箭头的流程线。全部算法写在一个矩形框内,在该框内还可以包含其他从属于它的框,或者说,由一些基本的框组成一个大的框,这种流程图又称 N-S 结构化流程图。
(2)N-S 流程图符号
①顺序结构
顺序结构用图 3-9 形式表示。A 和 B 两个框组成一个顺序结构。

②选择结构
选择结构用图 3-10 表示,其中 p 为判断条件。


知识点5:用伪代码表示算法
(1)概述
伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。
(2)特点
①伪代码书写格式比较自由,容易表达出设计者的思想;
②用伪代码写的算法很容易修改;
③用伪代码很容易写出结构化的算法。
知识点6:用计算机语言表示算法
用流程图或伪代码描述一个算法后,还要将它转换成计算机语言程序。用计算机语言表示的算法是计算机能够执行的算法,其必须严格遵循所用语言的语法规则。
五、结构化程序设计方法
知识点1:基本思路
结构化程序设计方法的基本思路是:把一个复杂问题的求解过程分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内。
知识点2:结构化程序设计方法
(1)自顶向下
(2)逐步细化
(3)模块化设计
(4)结构化编
六、C 语句
知识点1:C 语句的结构和分类
(1)C 程序结构可以用图 4-1 表示。

(2)C 语句分为以下 5 类:
①控制语句
控制语句用于完成一定的控制功能。C 只有 9 种控制语句,它们的形式是:
a.if()…else… (条件语句)
b.for()… (循环语句)
c.while()… ( 循 环 语 句 )
d.do…while() ( 循 环 语 句 )
e.continue (结束本次循环语句)
f.break (中止执行 switch 或循环语句)
g.switch (多分支选择语句)
h.return (从函数返回语句)
i.goto (转向语句,在结构化程序中基本不用 goto 语句)
②函数调用语句
函数调用语句由一个函数调用加一个分号构成。
printf(“This is a C statement.”);
③表达式语句
表达式语句由一个表达式加一个分号构成。
a=1 (表达式)
a=1;(表达式语句)
(2)C 语句分为以下 5 类:
①控制语句
控制语句用于完成一定的控制功能。C 只有 9 种控制语句,它们的形式是:
a.if()…else… (条件语句)
b.for()… (循环语句)
c.while()… ( 循 环 语 句 )
d.do…while() ( 循 环 语 句 )
e.continue (结束本次循环语句)
f.break (中止执行 switch 或循环语句)
g.switch (多分支选择语句)
h.return (从函数返回语句)
i.goto (转向语句,在结构化程序中基本不用 goto 语句)
②函数调用语句
函数调用语句由一个函数调用加一个分号构成。
printf(“This is a C statement.”);
③表达式语句
表达式语句由一个表达式加一个分号构成。
a=1 (表达式)
a=1;(表达式语句)
④空语句
;
⑤复合语句
{ x=y+z; a=b+c;
printf(“%d%d”,x,a);}
知识点2.最基本的语句——赋值语句
(1)赋值运算符
赋值符号“=”是指赋值运算符,它的作用是将一个数据赋给一个变量。
(2)复合的赋值运算符
有关算术运算的复合赋值运算符有+=,-=,*=,/=,%=。
(3)赋值表达式
赋值运算符左侧应该是一个可修改的“左值”(leftvalue,简写为 lvalue),能出现在赋值运算符右侧的
表达式称为“右值”(rightvalue,简写为 rvalue)。
变量=表达式;
①变量=(变量=表达式);
②变量=变量=…=表达式;
例如:
a=b=c=d=e=5;
按照赋值运算符的右接合性,因此实际上等效于:e=5;
d=e; c=d; b=c; a=b;
(4)赋值过程中的类型转换
如果赋值运算符两侧的类型不一致,但都是算术类型时,在赋值时要进行类型转换。
(5)变量赋初值
可以用赋值语句对变量赋值,也可以在定义变量时对变量赋以初值。
[注意]:赋初值后的变量与其后的其它同类变量之间仍必须用逗号间隔,而赋值语句则必须用分号
结尾。
例如:
int a=5,b,c;
(6)在变量说明中,不允许连续给多个变量赋初值。如下述说明是错误:
int a=b=c=5 必须写为:
int a=5,b=5,c=5; 而赋值语句允许连续赋值。
七、数据的输入输出
知识点1:有关数据输入输出的概念
(1)输入输出是以计算机主机为主体计算机的输入出如图 4-1 所示。
(2)输入和输出操作是由 C 标准函数库中的函数来实现的
(3)在使用系统库函数时,要在程序文件的开头用预处理指令#include

知识点2:用 printf 函数输出数据
(1)printf 函数的一般格式
printf 函数的一般格式为:
printf(格式控制,输出表列);
括号内包括两部分:
①格式控制
a.格式声明
格式声明总是由“%”字符开始的。
b.普通字符
②输出表列
输出表列是程序需要输出的一些数据,可以是常量、变量或表达式。
(2)格式字符
对不同类型的数据要指定不同的格式声明,而格式声明中最重要的内容是格式字符,常用的有如表4- 1 所示。


【说明】格式附加字符如“printf("%5.2f",f);”即表示输出的 f 为浮点型数据,其中应保留两位小
数,总宽度为 5。

知识点3:用 scanf 函数输入数据
(1)scanf 函数的一般形式
scanf(格式控制,地址表列);
①“格式控制”的含义同 printf 函数。
②“地址表列”是由若干个地址组成的表列,可以是变量的地址,或字符串的首地址。
(2)scanf 函数中的格式声明
与 printf 函数中的格式声明相似,以%开始,以一个格式字符结束,中间可以插入附加的字符。表
4-3 和表 4-4 列出 scanf 函数所用的格式字符和附加字符。它们的用法和 printf 函数中的用法差不多。

(3)使用 scanf 函数时应注意的问题
①scanf 函数中的“格式控制”后面应当是变量地址,而不是变量名。
②如果在“格式控制字符串”中除了格式声明以外还有其他字符,则在输入数据时在对应的位置上应输入与这些字符相同的字符。
③在用“%c”格式声明输入字符时,空格字符和“转义字符”中的字符都作为有效字符输入。
由于scanf函数"%c%c"中没有空格,输入M N,结果输出只有M。而输入改为MN时则可输出MN
两字符。

知识点4:字符输入输出函数
除了可以用 printf 函数和 scanf 函数输出和输入字符外,C 函数库还提供了一些专门用于输入和输出字符的函数。
(1)用 putchar 函数输出一个字符
putchar(字符变量);

(2)程序最后两行可用下面两行的任意一行代替:
putchar(getchar());
printf(“%c”,getchar());
知识点5:顺序结构程序设计举例
【例1】输入三角形的三边长,求三角形面积。
已知三角形的三边长 a,b,c,则该三角形的面积公式为:

八、关于有符号和无符号数据之间的赋值
知识点1:将有符号整数赋值给长度相同的无符号整型变量

知识点2:将无符号整数赋值给长度相同的有符号整型变量


九、较复杂的输入输出格式控制
知识点1:输出数据时的格式控制
(1)%md。用来指定输出数据的宽度,m是指定的宽度,如果数据实际的位数小于m,则左端补以空格,若大于m,则按实际位数的输出
(2)%ld。在输出长整型数据时在格式字符d前面加一个英文小写字母l
(3)%o。以八进制整数形式输出。
(4)%x。以十六进制数形式输出整数。
(5)%u。用来输出无符号型数据,以十进制整数形式输出
(6)%mc。用啦指定输出字符数据的宽度m,如果有则输出‘a’,即c变量输出占3列,前两列补空格。
char c = ‘a’;
printf(‘%3c’,c);
(7)%ms,指定输出的字符串占m列。如果字符串本身长度大于m,则突破m的限制,将字符串全部输出,若串长小于m,则左补空格。
(8)%-ms,如果串长度小于m,则在m列范围内,字符串向左靠,右补空格
(9)%m.ns,输出占m列,但只取字符串中左端n个字符,这n个字符输出在m列的右侧左补空格
(10)%-m.ns,其中m、n含义同上,n个字符输出在m列范围的左侧,右补空格,如果n>m,则m自动取n值,即保证n个字符正常输出
(11)%m.nf,指定输出的实数共占m列,其中有n位小数,如果数值长度小于m,则左端补空格。
(12)%-m.nf,输出的数值向左端靠,右端补空格。
(13)%m.ne和%-m.ne。m、n和字符“-”字符的含义和前相同。此处n指拟输出的数据的小数部分
(又称尾数)的小数位数。