c程序设计第二章 39页
合集下载
C语言程序设计(谭浩强版)第二章

奇妙的输出结果。并且,处理出错的方法
不应是中断程序的执行,而应是返回一个
表示错误或错误性质的值,以便在更高的
抽象层次上进行处理。
算法设计的原则
4.高效率与低存储量需求
通常,效率指的是算法执行时间; 存储量指的是算法执行过程中所需 的最大存储空间, 两者都与问题的规模有关。
算法设计的原则
算法的时间复杂度
第二章 程序的灵魂——算法
2.1 算法的概念 2.2 算法的简单举例
2.3 算法的特性 2.4 怎样表示一个算法 2.5 结构化程序设计方法
算法的概念
计算机应用: 提取数学模型—设计算法— 编程—测试—应用
程序设计=数据结构+算法
数据结构:对数据的描述 算法:对操作的描述 除此之外程序设计还包括:程序设计方法, 和程序设计语言
怎样表示一个算法
例4的伪代码表示法如下 开始 读入整数n 置sum的初值为0 置k的初值为1 执行下面的操作: 如果k为奇数,置item=1/k 如果k为偶数,置item=-1/k sum=sum+item 直到k>n 打印sum的值 结束
算法设计的原则
算法设计的原则
设计算法时,通常应考虑达到以下目标: 1.正确性 2.可读性 3.健壮性 4.高效率与低存储量需求
从算法中选取一种对于所研究的问题 来说是 基本操作 的原操作,以该基 本操作 在算法中重复执行的次数 作 为算法运行时间的衡量准则。
结构化程序设计方法
采用结构化算法写成的计算机程序是结构 化程序。要编写出结构化程序,经常采用 的方法是结构化程序设计方法。这种方法 的基本思路是: 把给定的问题按层次(纵方向)、分阶段 (横方向)分解为一系列易于编程解决的 小问题,然后对应着这些分解的小问题, 设计结构化的算法,最后采用语言将算法 描述出来。这样一种程序设计方法就是结 构化程序设计方法。
不应是中断程序的执行,而应是返回一个
表示错误或错误性质的值,以便在更高的
抽象层次上进行处理。
算法设计的原则
4.高效率与低存储量需求
通常,效率指的是算法执行时间; 存储量指的是算法执行过程中所需 的最大存储空间, 两者都与问题的规模有关。
算法设计的原则
算法的时间复杂度
第二章 程序的灵魂——算法
2.1 算法的概念 2.2 算法的简单举例
2.3 算法的特性 2.4 怎样表示一个算法 2.5 结构化程序设计方法
算法的概念
计算机应用: 提取数学模型—设计算法— 编程—测试—应用
程序设计=数据结构+算法
数据结构:对数据的描述 算法:对操作的描述 除此之外程序设计还包括:程序设计方法, 和程序设计语言
怎样表示一个算法
例4的伪代码表示法如下 开始 读入整数n 置sum的初值为0 置k的初值为1 执行下面的操作: 如果k为奇数,置item=1/k 如果k为偶数,置item=-1/k sum=sum+item 直到k>n 打印sum的值 结束
算法设计的原则
算法设计的原则
设计算法时,通常应考虑达到以下目标: 1.正确性 2.可读性 3.健壮性 4.高效率与低存储量需求
从算法中选取一种对于所研究的问题 来说是 基本操作 的原操作,以该基 本操作 在算法中重复执行的次数 作 为算法运行时间的衡量准则。
结构化程序设计方法
采用结构化算法写成的计算机程序是结构 化程序。要编写出结构化程序,经常采用 的方法是结构化程序设计方法。这种方法 的基本思路是: 把给定的问题按层次(纵方向)、分阶段 (横方向)分解为一系列易于编程解决的 小问题,然后对应着这些分解的小问题, 设计结构化的算法,最后采用语言将算法 描述出来。这样一种程序设计方法就是结 构化程序设计方法。
C 程序设计(谭浩强完整版)第二章解析

一般变量都是用匈牙利命名法命名的。 int nCount; char chChoice;
整型数据
整型常量:
常量是根据其表面形式来判定,整型量即是没有小数点的 整数,范围:-231~(231-1) ,有三种形式: 1)十进制(默认方式)
2)八进制 以0开头
43 1345 87654
043, 056, 011
1
0
0
0
0
0
1
非打印字符
有些ASCII的字符代表某些操作,不能打印出来, 如回车、退格等,可用两种方式表示这些字符。 1)用ASCII码的形式 2)用转义字符 char re=13; char re=‘\n’;(p15)
转义字符 \a \n \t \b \r \f \v
含 响铃
义
ASCII代码 7 10 9 8 13 12 8
不同类型的整型数据间 { unsigned short a;的赋值归根到底就是一 short int b= -1; 条:按存储单元中的存 储形式直接传送。
void main() a=b; cout<<"a="<<a<<endl; unsigned short a;
}
结果:65535
a 1111111111111111
3)十六进制 以0x开头 0xdf(举例说明)
0x12
0xa3
0x34
#include<iostream.h>
void main(void)
{ int int10,int8,int16; //定义3个整型变量 int10=10; int8=010; int16=0x10; //默认为十进制 //八进制 //十六进制 输出 int10=10 int8=8 int16=16
C语言程序设计教程第2章程序流程

画出
流程图
算法
确定
程序结构
变量类型
程序语句
(7)调试
调试
C语言程序设计
第二章 程序设计和程序结构
良好的程序编写风格会大大缩 短调试过程,附录4介绍了C语言程 序的一般书写风格,附录11介绍了 一些常见的错误。
C语言程序设计
第二章 程序设计和程序结构
2.1.2 算法
在实际的编程过程中要注意:
1、避免拿起题目就开始写程序的 2、应该先设计出合适的算法
第二章 程序设计和程序结构
本章概述
2.3程序结构 2.1程序设计与算法 2.4流程图及程序例子 2.2流程图
C语言程序设计
第二章 程序设计和程序结构
本章概述
• 本章主要介绍了C语言的程序结构、 流程图的绘制和程序设计的过程。 • 学习目标: • 1、理解程序的开发、设计过程 • 2、掌握C语言程序结构
C语言程序设计
第二章 程序设计和程序结构
其中最后一行的“Press any key to
continue”是VC6.0自动添加在每个
程序运行结果后面的一句提示信息,它
表示当程序执行结束时,操作者可以按
任意键返回到编辑界面。在后面的程序 运行结果中,将不再给出这一信息。
C语言程序设计
第二章 程序设计和程序结构
scanf("%d",&num1);
printf("Input the 2nd integer number: "); scanf("%d",&num2); sum=num1+num2; printf("sum=%d\n",sum); }
C语言程序设计
流程图
算法
确定
程序结构
变量类型
程序语句
(7)调试
调试
C语言程序设计
第二章 程序设计和程序结构
良好的程序编写风格会大大缩 短调试过程,附录4介绍了C语言程 序的一般书写风格,附录11介绍了 一些常见的错误。
C语言程序设计
第二章 程序设计和程序结构
2.1.2 算法
在实际的编程过程中要注意:
1、避免拿起题目就开始写程序的 2、应该先设计出合适的算法
第二章 程序设计和程序结构
本章概述
2.3程序结构 2.1程序设计与算法 2.4流程图及程序例子 2.2流程图
C语言程序设计
第二章 程序设计和程序结构
本章概述
• 本章主要介绍了C语言的程序结构、 流程图的绘制和程序设计的过程。 • 学习目标: • 1、理解程序的开发、设计过程 • 2、掌握C语言程序结构
C语言程序设计
第二章 程序设计和程序结构
其中最后一行的“Press any key to
continue”是VC6.0自动添加在每个
程序运行结果后面的一句提示信息,它
表示当程序执行结束时,操作者可以按
任意键返回到编辑界面。在后面的程序 运行结果中,将不再给出这一信息。
C语言程序设计
第二章 程序设计和程序结构
scanf("%d",&num1);
printf("Input the 2nd integer number: "); scanf("%d",&num2); sum=num1+num2; printf("sum=%d\n",sum); }
C语言程序设计
c程序设计 谭浩强 第2章

2.6结构化程序 设计方法 作业
我们的任务是用计算机解题,就是用计算机实现算法; 用计算机语言表示算法必须严格遵循所用语言的语法 规则。 【例2.7】求1×2×3×4×5用C语言表示。 main() { int i,t; t=1; i=2; while(i<=5) { t=t*i; i=i+1; } printf(“%d”,t); }
2.5.6计算机语 言
2.6结构化程序 设计方法 作业
15
将例2.2的算用流程图表示。
第二章 程序的灵魂— 算法 2.1设计步骤 2.2算法的概念 2.3算法举例 2.4算法的特性 2.5算法的表示 2.5.1自然语言 2.5.2流程图 2.5.3基本结构 2.5.N-S流程图 2.5.5伪代码
2.5.6计算机语 言
2.5.6计算机语 言
2.6结构化程序 设计方法 作业
14
【例2.6】将例2.1求5!的算用流程图表示。
第二章 程序的灵魂— 算法 2.1设计步骤 2.2算法的概念 2.3算法举例 2.4算法的特性 2.5算法的表示 2.5.1自然语言 2.5.2流程图 2.5.3基本结构 2.5.N-S流程图 2.5.5伪代码
18
三.三种基本结构和改进的流程图
第二章 程序的灵魂— 算法 2.1设计步骤 2.2算法的概念 2.3算法举例 2.4算法的特性 2.5算法的表示 2.5.1自然语言 2.5.2流程图 2.5.3基本结构 2.5.N-S流程图 2.5.5伪代码
顺序结构:
2.5.6计算机语 言
2.6结构化程序 设计方法 作业
2.6结构化程序 设计方法 作业
如果,n表示学生学号,ni表示第i个学生学号; g表示学生成绩,gi表示第i个学生成绩; 则算法可表示如下: S1: 1→i S2: 如果gi≥80,则打印ni和gi,否则不打印 S3: i+1→i S4:若i≤50, 返回S2,否则,结束。
我们的任务是用计算机解题,就是用计算机实现算法; 用计算机语言表示算法必须严格遵循所用语言的语法 规则。 【例2.7】求1×2×3×4×5用C语言表示。 main() { int i,t; t=1; i=2; while(i<=5) { t=t*i; i=i+1; } printf(“%d”,t); }
2.5.6计算机语 言
2.6结构化程序 设计方法 作业
15
将例2.2的算用流程图表示。
第二章 程序的灵魂— 算法 2.1设计步骤 2.2算法的概念 2.3算法举例 2.4算法的特性 2.5算法的表示 2.5.1自然语言 2.5.2流程图 2.5.3基本结构 2.5.N-S流程图 2.5.5伪代码
2.5.6计算机语 言
2.5.6计算机语 言
2.6结构化程序 设计方法 作业
14
【例2.6】将例2.1求5!的算用流程图表示。
第二章 程序的灵魂— 算法 2.1设计步骤 2.2算法的概念 2.3算法举例 2.4算法的特性 2.5算法的表示 2.5.1自然语言 2.5.2流程图 2.5.3基本结构 2.5.N-S流程图 2.5.5伪代码
18
三.三种基本结构和改进的流程图
第二章 程序的灵魂— 算法 2.1设计步骤 2.2算法的概念 2.3算法举例 2.4算法的特性 2.5算法的表示 2.5.1自然语言 2.5.2流程图 2.5.3基本结构 2.5.N-S流程图 2.5.5伪代码
顺序结构:
2.5.6计算机语 言
2.6结构化程序 设计方法 作业
2.6结构化程序 设计方法 作业
如果,n表示学生学号,ni表示第i个学生学号; g表示学生成绩,gi表示第i个学生成绩; 则算法可表示如下: S1: 1→i S2: 如果gi≥80,则打印ni和gi,否则不打印 S3: i+1→i S4:若i≤50, 返回S2,否则,结束。
C程序设计基础-PPT课件

第二章 C程序设计基础
2.1 常量和变量
注意符:号常量在其作用域内不能再赋值。
符号常量的好处:(1)含义清楚。(2)需改变时,“一改全改”。
2024/10/14
1
2.1 常量和变量
注意:
1、变量中的值:变量必须要有值才能参与运算,(如果一个变量
没有赋值,则该变量是一个随机值)变量可以在定义后与其赋值,也可以
2024/10/14
16
2.3 运算符与表达式
逻辑运算符和逻辑表达式
符号
例子 0&&0=0、0&&1=0、1&&0=0、1&&1=1
0||0=0、0||1=1、1||0=1、1||1=1 !1=0、!0=1
使用说明: ➢1、逻辑非优先级高于逻辑与和逻辑或,逻辑与和逻辑或优先级相同; ➢2、C语言规定:非0都表示“真”,只有0表示“假”; 例:6<4&&7>-3+!5
14
2.3 运算符与表达式
赋值运算符与赋值表达式
符号
功能
例子
=
将表达式右边的数据赋值给左边的变量
x=3+a
+=
将表达式右边的计算结果加上左边的变 量再赋值给左边的变量
x+=3+a等价于x=x+(3+a)
-=
将表达式右边的计算结果减去左边的变 量再赋值给左边的变量
x-=3+a等价于x=x-(3+a)
6~7
双精度(double): 8B 10-308 ~ 10308 15~16
长双精度: 16B 10-4931 ~ 104932 18~19
2.1 常量和变量
注意符:号常量在其作用域内不能再赋值。
符号常量的好处:(1)含义清楚。(2)需改变时,“一改全改”。
2024/10/14
1
2.1 常量和变量
注意:
1、变量中的值:变量必须要有值才能参与运算,(如果一个变量
没有赋值,则该变量是一个随机值)变量可以在定义后与其赋值,也可以
2024/10/14
16
2.3 运算符与表达式
逻辑运算符和逻辑表达式
符号
例子 0&&0=0、0&&1=0、1&&0=0、1&&1=1
0||0=0、0||1=1、1||0=1、1||1=1 !1=0、!0=1
使用说明: ➢1、逻辑非优先级高于逻辑与和逻辑或,逻辑与和逻辑或优先级相同; ➢2、C语言规定:非0都表示“真”,只有0表示“假”; 例:6<4&&7>-3+!5
14
2.3 运算符与表达式
赋值运算符与赋值表达式
符号
功能
例子
=
将表达式右边的数据赋值给左边的变量
x=3+a
+=
将表达式右边的计算结果加上左边的变 量再赋值给左边的变量
x+=3+a等价于x=x+(3+a)
-=
将表达式右边的计算结果减去左边的变 量再赋值给左边的变量
x-=3+a等价于x=x-(3+a)
6~7
双精度(double): 8B 10-308 ~ 10308 15~16
长双精度: 16B 10-4931 ~ 104932 18~19
最新c--程序设计第二章解析教学讲义ppt课件

C++程序设计
• 关系表达式
– 由关系运算符连接的表达式。是一种简单的逻辑表达式。值为true 或false。
例如: a+b>c+d /*等同于(a+b)>(c+d),结果为0或1*/ y=a>b /*计算a>b的值0或1赋给y,y的值为0或1*/ a>b>c /*等同于(a>b)>c,先求a>b 的值,
❖ 嵌套在if分支中: if (<表达式1>) if (<表达式2>) <语句1>; else<语句2>;
❖ 嵌套在else分支中: if (表达式1) 语句1; else if (表达式2) 语句2; else if … else 语句n;
C++程序设计
配对关系实例:2.2.2
if
语句的嵌套 • else和if的配对关系 – ”就近配对“原则,相距最近且
//语句1: if(n%3==0)
还没有配对的一对if和else首先 配对
if(n%5==0) cout<<n<<″是15的倍数″<<endl;
else cout<< n<<″是3的倍数但不是5的倍数″<<endl;
//语句2:
if(n%3==0)
{
if(n%5==0) cout<<n<<″是15的倍数″<<endl;
float a,b,c; float delta,x1,x2; cout<<"输入三个系数a(a!=0), b, c:"<<endl; cin>>a>>b>>c; cout<<"a="<<a<<'\t'<<"b="<<b<<'\t‘<<"c="<<c<<endl; delta=b*b-4*a*c;
C语言程序设计 第2章 数据类型

2.2常量和变量 变量名与变量值的关系:
2.2常量和变量
变量的使用:先定义后使用
变量定义的一般形式:
数据类型 变量名1,变量名2,…,变量名n;
2.2常量和变量
➢ 凡未被事先定义的,系统不把它认作变量名,这就 能保证程序中变量名使用的正确
例:varname,在使用的时候误写成vaname
➢ 在定义变量时要指定变量的类型,在编译时就能为 变量分配相应的存储单元
5
2.2常量和变量
甘草 三七 干姜 葛根
枸杞 人参 陈皮 地黄
山药 当归 谷芽 黄连
贴上标签 加以区分
用标识符给变量起名字
2.2常量和变量 变量命名规则
➢ 只能由字母(a~z,A~Z)、数字(0~9)和下划线(_)构 成
➢ 第一个字符不能为数字 ➢ 不能与关键字同名
例:a9,_a, A_num √ 9a, a*num,int ×
控制语句:控制语句用于控制程序的流程。 C语言提供三类控制语句: ➢ 选择语句 ➢ 循环语句 ➢ 转移语句。 控制语句会在第三章和第四章详细介绍。
2.7 表达式与语句
复合语句: 复合语句由一对大括号括起来的一 条或多条语句组成。 例:{
turnOn(0,3); turnOn(0,4); turnOn(0,5); turnOn(1,4); }
2.7 表达式与语句
表达式语句:表达式末尾加上“;”就构成一条 表达式语句。 例:
s = 3.14 * r * r; 就是一条赋值表达式语句。表达式语句最后的 分号是语句中必不可少的一部分。
2.7 表达式与语句
函数调用语句:函数调用语句由函数调用加分 号构成。 例:
turnOn(1,1);
C程序设计教程2精品PPT课件

double result = radius * radius * 3.14 * 4 ;
cout << “The result is “<< result << “ \n “;
}
11/29/2020
11
函数(过程)说明:
函数:把相关的程序语句放在一起,完成特 定的功能,并给这些语句起一个名字。
求解中需要通过函数调用来实施求解时,便 要对函数的性质进行说明,说明其返回类型, 参数类型,参数个数。
11/29/2020
4
变量定义
定义变量的目的:
创建一个所需大小的实体空间给变量名; 说明变量的表示范围; 说明变量可以进行的运算等。
11/29/2020
5
变量定义
例:int a = 12 ;
存储单元
变量由变量名、数据类型和 内存地址
(1Byte)
……
值三部分组成,是可寻址的,
也就是说,能够通过内存地
11/29/2020
13
函数定义是在函数声明的基础上,对整个实现过
程进行详细定义.
格式:
<返回类型><函数名>(<参数表>)
{
<若干条语句> return 函数的返回值;
} 例如: double area(double ra){
double s = ra*ra*3.14;
return s ;
}
11/29/2020
11/29/2020
3
要使用名称来存放数据,必须先说明名称
说明语句分为定义语句和声明语句:
定义语句:在说明名称的同时,还给名称分 配了存储空间
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例:将算法(求5!)用C语言表示。
#include <stdio.h> int main( ) { int i,t;
t=1; i=2; while(i<=5) { t=t*i;
i=i+1; } printf("%d\n",t); return 0; }
例:将算法(求多项式的值)用C语言表示。
11111 1 2 3 4 99100
自顶向上,逐步细化:将问题求解由抽象逐步具体化的设计过程。
比如设计房屋,先进行整体规划,然后确定建筑物方案,再进行各个部 分的设计,最后进行细节的设计(门窗,楼道等),而绝不会在没有整体方 案之前先设计楼道和厕所。而在完成设计,有了图纸之后,在施工阶段则 是自下而上实施的,用一砖一瓦实现一个局部,最后由各个部分组成一个 建筑物。
由以上3种基本结构顺序组成的算法结构,可以解决任何复杂的问题。 由基本结构所构成的算法属于“结构化”的算法,不存在无规律的转 向,只在本基本结构内才允许存在分支和向前或向后的跳转。
由三种基本结构派生出来的结构:
B
A
Y p2 N
根据表达式p的值进行选择
A
B …M
N
(4)用N-S流程图表示算法
A
则输出 hens加1}
cocks加1}
(2)计算机语言写出程序 #include<stdio.h>
int main ( ) { int cocks=0.hens,chicks;
while(cocks<=19) { hens=0; while (hens<=33) {chicks=100-cocks-hens;
开始
1t
如果需要将最后结果输出:
2i t*it
i+1i
N
i>5
Y 结束
例、求1*2*3*4*5。将该算法用流程图表示。
开始
1t
如果需要将最后结果输出:
2i t*it
i+1i
N
i>5
Y
结束
输出t
例、 判定2000—2500年中的每一年是否闰年,将结果输出。 将该算法用流程图表示。
开始
C程序设计
主讲人:袁丽
燕大里仁基础教学部
第二章:算法—程序的灵魂
1
什么是算法
2 算法的特性 3 算法的表示
4 结构化程序设计方法
一个程序主要包括两方面的信息:
对数据的描述:在程序中要指定用到哪些数据以及这些数据 的类型和数据的组织形式。即数据结构(data structure)
对操作的描述:即要求计算机进行操作的步骤,也就是算法 (algorithm)
对同一个问题,可以有不同的解题方法和步骤 为了有效地进行解题,不仅需要保证算法正确,还要考虑算法 的质量,选择合适的算法
计算机能执行的算法,为计算机算法。其可分为两大类别: 数值运算算法和非数值运算算法。
数值运算的目的是求数值解 非数值运算包括的面十分广泛,最常见的是用于事务管理领域
例1、求1*2*3*4*5。
if(5*cocks+3*hens+chicks/3==100) printf(“%d%d%d\n”,cocks,hens,chicks);
hens++;
} cocks++; }
return 0; }
谢谢!
39
三、上机调试:输入(编辑)程序---编译、连接、执行程序---输出结果
举例:
《算经》中提出“百鸡问题”:鸡翁一值钱五,鸡母一值钱三, 鸡雏三值钱一。百钱买百鸡,问鸡翁、母、雏各几何?
(体会编程步骤)
(1)分析:cocks+hens+chicks=100 5*cocks+3*hens+chicks/3=100 其中,0 ≤cocks ≤19 , 0 ≤hens ≤33 ,0 ≤chicks ≤100
(2)用流程图表示算法
流程图是用一些图框表示各种操作。
一个入口 Y
两个出口 ……
x≧0
N
……
菱形框的作用是对一个给定的条件进行判断,根据给定的条件 是否成立决定如何执行其后的操作。
位置不够
防止交叉
连接点(小圆圈)是用于将画在不同地方的流程线连接起来。
例、求1*2*3*4*5。将该算法用流程图表示。
数据是操作的对象;操作的目的是对数据进行加工处理,以 得到期望的结果 著名计算机科学家沃思提出的一个公式:算法+数据结构=程序
算法就是解决问题的思路。有好的算法,才会有好的程序。算法是程序的精髓。 类比于我们平常用的汉语,我们都能看懂普通的文字,但不是每个会说普通话的人 都能写出漂亮的文章。
一个程序除了算法和数据结构这主要要素外,还应当采用结 构化程序设计方法进行程序设计,并且用某一种计算机语言表 示
两可。也就是说算法的含义应当是唯一的,而不可以产生“歧义性”
有零个或多个输入:所谓输入是指在执行算法时需要从外界取得
必要的信息。一个算法可以有两个或多个输入,也可以没有输入。
有一个或多个输出:算法的目的是为了求解,“解”就是输出。
但算法的输出并不一定就是计算机的打印输出或屏幕输出,一个算法 得到的结果就是算法的输出,没有输出的算法是没有意义的。
四、结构化程序设计方法
用三种基本结构组成的程序是结构化程序
结构化程序设计强调程序设计风格和程序结构的规范化, 提倡清晰的结构。
结构化程序设计方法的基本思路是:把一个复杂问题的求 解过程分阶段进行,每个阶段处理的问题都控制在人们容 易理解和处理的范围内。
采取以下方法保证得到结构化的程序: (1) 自顶向下; (2) 逐步细化; (3) 模块化设计; (4) 结构化编码。
Y pN
A
B
Yp N A
(3)循环结构 ① 当型循环结构
p1 N Y
A
输出1,2,3,4,5
0x
N x<5
Y x+1x
输出x的值
② 直到型循环结构 输出1,2,3,4,5
A
N p2 Y
0x x+1x 输出x的值
N x≧5 Y
以上三种基本结构,有以下共同特点: (1) 只有一个入口 (2) 只有一个出口 一个判断框有两个出口 一个选择结构只有一个出口 (3) 结构内的每一部分都有机会被执行到。也就是说,对 每一个框来说,都应当有一条从入口到出口的路径通过它 (4) 结构内不存在“死循环”
(5)用伪代码表示算法
伪代码是用介于自然语言和计算机语言之间的文字和符号来描 述算法
用伪代码写算法并无固定的、严格的语法规则,可以用英文, 也可以中英文混用
例:求5!。
begin
(算法开始)
1t
2i
while i≤5
{ t*i t
i+1 i
}
print t
end
(算法结束)
例: 求 11111 1 2 3 4 99100
p
Y
N
当p1成立
B
AB
A
A 直到p2成立
顺序结构 选择结构
循环结构 (当型)
循环结构 (直到型)
例:求5!算法用N-S图表示。
1t 2i t*it i+1i 直到i>5 输出t
例:将50名学生中成绩高于80分者的学号和成绩输出。将该算法用
N-S图表示。
1i
输入ni、gi
i+1i
直到i>50
例2、有50个学生,要求输出成绩在80分以上的学生的学号和成绩。
例3、给出一个大于或等于3的正整数,判断它是不是一个素数。
二、算法的特性
有穷性:一个算法应包含有限的操作步骤,而不能是无限的。
有穷性往往指“在合理的范围之内”。“合理限度”由人们的常识 和需要判定。
确定性:算法的每一个步骤都应当是确定的,不应当含糊和模棱
begin 1 sum 2 deno 1 sign while deno ≤ 100 { (-1)*sign sign sign*1/deno term sum+term sum deno+1 deno } print sum
end
(6)用计算机语言表示算法
要完成一项工作,包括设计算法和实现算法两个部分。 设计算法的目的是为了实现算法。 不仅要考虑如何设计一个算法,也要考虑如何实现一个算法。
累试法(枚举法)求解
算法描述: cocks=0 当cocks ≤ 19时
{找满足题意的hens,chicks数 cocks加1 }
细化
cocks=0 当cocks ≤ 19时
{hens=0 当hens ≤ 33时 {找满足题意的chicks数
hens加1} hens加1
}
细化
cocks=0
当cocks ≤ 19时 {hens=0 当hens ≤ 33时 {chicks=100-cocks-hens 如果(5*cocks+3*hens+chicks/3=100)
1i 是 gi≧80 否 输出ni,gi
i+1i 直到i>50
例:将判定闰年的算法用N-S图表示
一个结构化的算法是由一些基本结构顺序组成的
在基本结构之间不存在向前或向后的跳转,流程的转移只 存在于一个基本结构范围之内
一个非结构化的算法可以用一个等价的结构化算法代替, 其功能不变
如果一个算法不能分解为若干个基本结构,则它必然不是 一个结构化的算法
3.流程线不要忘记画箭头,否则难以判定各框的执行次序。
(3)三种基本结构和改进的流程图
1.传统流程图的弊端 传统的流程图用流程线指出各框的执行顺序,对流程线
#include <stdio.h> int main( ) { int i,t;
t=1; i=2; while(i<=5) { t=t*i;
i=i+1; } printf("%d\n",t); return 0; }
例:将算法(求多项式的值)用C语言表示。
11111 1 2 3 4 99100
自顶向上,逐步细化:将问题求解由抽象逐步具体化的设计过程。
比如设计房屋,先进行整体规划,然后确定建筑物方案,再进行各个部 分的设计,最后进行细节的设计(门窗,楼道等),而绝不会在没有整体方 案之前先设计楼道和厕所。而在完成设计,有了图纸之后,在施工阶段则 是自下而上实施的,用一砖一瓦实现一个局部,最后由各个部分组成一个 建筑物。
由以上3种基本结构顺序组成的算法结构,可以解决任何复杂的问题。 由基本结构所构成的算法属于“结构化”的算法,不存在无规律的转 向,只在本基本结构内才允许存在分支和向前或向后的跳转。
由三种基本结构派生出来的结构:
B
A
Y p2 N
根据表达式p的值进行选择
A
B …M
N
(4)用N-S流程图表示算法
A
则输出 hens加1}
cocks加1}
(2)计算机语言写出程序 #include<stdio.h>
int main ( ) { int cocks=0.hens,chicks;
while(cocks<=19) { hens=0; while (hens<=33) {chicks=100-cocks-hens;
开始
1t
如果需要将最后结果输出:
2i t*it
i+1i
N
i>5
Y 结束
例、求1*2*3*4*5。将该算法用流程图表示。
开始
1t
如果需要将最后结果输出:
2i t*it
i+1i
N
i>5
Y
结束
输出t
例、 判定2000—2500年中的每一年是否闰年,将结果输出。 将该算法用流程图表示。
开始
C程序设计
主讲人:袁丽
燕大里仁基础教学部
第二章:算法—程序的灵魂
1
什么是算法
2 算法的特性 3 算法的表示
4 结构化程序设计方法
一个程序主要包括两方面的信息:
对数据的描述:在程序中要指定用到哪些数据以及这些数据 的类型和数据的组织形式。即数据结构(data structure)
对操作的描述:即要求计算机进行操作的步骤,也就是算法 (algorithm)
对同一个问题,可以有不同的解题方法和步骤 为了有效地进行解题,不仅需要保证算法正确,还要考虑算法 的质量,选择合适的算法
计算机能执行的算法,为计算机算法。其可分为两大类别: 数值运算算法和非数值运算算法。
数值运算的目的是求数值解 非数值运算包括的面十分广泛,最常见的是用于事务管理领域
例1、求1*2*3*4*5。
if(5*cocks+3*hens+chicks/3==100) printf(“%d%d%d\n”,cocks,hens,chicks);
hens++;
} cocks++; }
return 0; }
谢谢!
39
三、上机调试:输入(编辑)程序---编译、连接、执行程序---输出结果
举例:
《算经》中提出“百鸡问题”:鸡翁一值钱五,鸡母一值钱三, 鸡雏三值钱一。百钱买百鸡,问鸡翁、母、雏各几何?
(体会编程步骤)
(1)分析:cocks+hens+chicks=100 5*cocks+3*hens+chicks/3=100 其中,0 ≤cocks ≤19 , 0 ≤hens ≤33 ,0 ≤chicks ≤100
(2)用流程图表示算法
流程图是用一些图框表示各种操作。
一个入口 Y
两个出口 ……
x≧0
N
……
菱形框的作用是对一个给定的条件进行判断,根据给定的条件 是否成立决定如何执行其后的操作。
位置不够
防止交叉
连接点(小圆圈)是用于将画在不同地方的流程线连接起来。
例、求1*2*3*4*5。将该算法用流程图表示。
数据是操作的对象;操作的目的是对数据进行加工处理,以 得到期望的结果 著名计算机科学家沃思提出的一个公式:算法+数据结构=程序
算法就是解决问题的思路。有好的算法,才会有好的程序。算法是程序的精髓。 类比于我们平常用的汉语,我们都能看懂普通的文字,但不是每个会说普通话的人 都能写出漂亮的文章。
一个程序除了算法和数据结构这主要要素外,还应当采用结 构化程序设计方法进行程序设计,并且用某一种计算机语言表 示
两可。也就是说算法的含义应当是唯一的,而不可以产生“歧义性”
有零个或多个输入:所谓输入是指在执行算法时需要从外界取得
必要的信息。一个算法可以有两个或多个输入,也可以没有输入。
有一个或多个输出:算法的目的是为了求解,“解”就是输出。
但算法的输出并不一定就是计算机的打印输出或屏幕输出,一个算法 得到的结果就是算法的输出,没有输出的算法是没有意义的。
四、结构化程序设计方法
用三种基本结构组成的程序是结构化程序
结构化程序设计强调程序设计风格和程序结构的规范化, 提倡清晰的结构。
结构化程序设计方法的基本思路是:把一个复杂问题的求 解过程分阶段进行,每个阶段处理的问题都控制在人们容 易理解和处理的范围内。
采取以下方法保证得到结构化的程序: (1) 自顶向下; (2) 逐步细化; (3) 模块化设计; (4) 结构化编码。
Y pN
A
B
Yp N A
(3)循环结构 ① 当型循环结构
p1 N Y
A
输出1,2,3,4,5
0x
N x<5
Y x+1x
输出x的值
② 直到型循环结构 输出1,2,3,4,5
A
N p2 Y
0x x+1x 输出x的值
N x≧5 Y
以上三种基本结构,有以下共同特点: (1) 只有一个入口 (2) 只有一个出口 一个判断框有两个出口 一个选择结构只有一个出口 (3) 结构内的每一部分都有机会被执行到。也就是说,对 每一个框来说,都应当有一条从入口到出口的路径通过它 (4) 结构内不存在“死循环”
(5)用伪代码表示算法
伪代码是用介于自然语言和计算机语言之间的文字和符号来描 述算法
用伪代码写算法并无固定的、严格的语法规则,可以用英文, 也可以中英文混用
例:求5!。
begin
(算法开始)
1t
2i
while i≤5
{ t*i t
i+1 i
}
print t
end
(算法结束)
例: 求 11111 1 2 3 4 99100
p
Y
N
当p1成立
B
AB
A
A 直到p2成立
顺序结构 选择结构
循环结构 (当型)
循环结构 (直到型)
例:求5!算法用N-S图表示。
1t 2i t*it i+1i 直到i>5 输出t
例:将50名学生中成绩高于80分者的学号和成绩输出。将该算法用
N-S图表示。
1i
输入ni、gi
i+1i
直到i>50
例2、有50个学生,要求输出成绩在80分以上的学生的学号和成绩。
例3、给出一个大于或等于3的正整数,判断它是不是一个素数。
二、算法的特性
有穷性:一个算法应包含有限的操作步骤,而不能是无限的。
有穷性往往指“在合理的范围之内”。“合理限度”由人们的常识 和需要判定。
确定性:算法的每一个步骤都应当是确定的,不应当含糊和模棱
begin 1 sum 2 deno 1 sign while deno ≤ 100 { (-1)*sign sign sign*1/deno term sum+term sum deno+1 deno } print sum
end
(6)用计算机语言表示算法
要完成一项工作,包括设计算法和实现算法两个部分。 设计算法的目的是为了实现算法。 不仅要考虑如何设计一个算法,也要考虑如何实现一个算法。
累试法(枚举法)求解
算法描述: cocks=0 当cocks ≤ 19时
{找满足题意的hens,chicks数 cocks加1 }
细化
cocks=0 当cocks ≤ 19时
{hens=0 当hens ≤ 33时 {找满足题意的chicks数
hens加1} hens加1
}
细化
cocks=0
当cocks ≤ 19时 {hens=0 当hens ≤ 33时 {chicks=100-cocks-hens 如果(5*cocks+3*hens+chicks/3=100)
1i 是 gi≧80 否 输出ni,gi
i+1i 直到i>50
例:将判定闰年的算法用N-S图表示
一个结构化的算法是由一些基本结构顺序组成的
在基本结构之间不存在向前或向后的跳转,流程的转移只 存在于一个基本结构范围之内
一个非结构化的算法可以用一个等价的结构化算法代替, 其功能不变
如果一个算法不能分解为若干个基本结构,则它必然不是 一个结构化的算法
3.流程线不要忘记画箭头,否则难以判定各框的执行次序。
(3)三种基本结构和改进的流程图
1.传统流程图的弊端 传统的流程图用流程线指出各框的执行顺序,对流程线