上页 下页 节末页结束
#include <***.h>
#include <***.h>
void main( )
{
子函数声明与变量定义执行语句 ;
… ;
}
返回值类型 函数名 1(参数表 )
{
变量定义与函数声明执行语句组
}……,
返回值类型 函数名 n(参数表 )
{
变量定义与函数声明执行语句组
}
上页 下页 节末页结束简单的题目可直接根据问题写出程序,如习题
1.5;复杂问题需要先理清解题思路,描述清解题步骤,之后根据步骤编程,如习题 1.6
解决问题的具体方法和步骤称为 算法上页 下页 节末页结束
算法的概念
算法的 特性
简单算法举例
算法的表示方法
结构化程序设计方法上页 下页 节末页结束
§ 2-1算法的概念
算法,对操作的描述,确定对数据进行操作的步骤
数据结构,对数据的描述,确定数据的类型以及组织形式程序设计= 数据结构 + 算法+设计方法 + 工具沃斯:程 序= 数据结构 + 算法程序应该包含哪些内容?
上页 下页 节末页结束
§ 2-2 简单算法举例例 1 求 1?2?3?4?5,即 5?
方法一,方法二:
i=i+1 计数器
p=p*x 累乘器
t=t+x 累加器变量 --存储空间变量值 --存储数值开始
1? p
i=2
p?i? p
i+1?i
i<=5
1
1
输出 p
结束
Y
1? p
开始
p× 2?p
p?3?p
p?4?p
1
1
p?5?p
输出 p
结束上页 下页 节末页结束
§ 2-2 简单算法举例流程图符号起止框 判断框 处理框 输入 /输出框注释框 流向线 连接点上页 下页 节末页结束
§ 2-2 简单算法举例例 2:50个学生,输出成绩 80分以上者。 ni表学号,gi表成绩自然语言表示,流程图:
S1,1?i
S2:若 gi?80则输出
ni和 gi,否则不输出
S3,i+1?i
S4,若 i? 50,返回 S2
继续执行;否则,算法结束开始
i=1
gi>=80
输出 gi
i+1=>i
i>50
结束
Y
N
N
上页 下页 节末页结束
§ 2-2 简单算法举例自然语言表示:
S1,deno = 1
S2,sum = 1
S3,sign = 1
S4,sign =(-1)*sign
S5,deno =deno+1
S6,term =sign*(1/deno) /*注意整除 */
S7,sum =sum+term
S8,若 deno<100返回 S4;否则算法结束
4例,求 1-1/2+1/3-1/4+...+1/99-1/100 ( 不 同 与 书 )
(1)思路清晰
(2)见名知意流程图:练习上页 下页 节末页结束
§ 2-2 简单算法举例例 5:判断某大于等于 3的自然数是否素数自然语言表示:
S1:输入 n
S2,i = 2
S3,r= n%i
S4,若 r=0,输出 n非素数,
算法结束;否则转下一步;
S5,i=i+1;
S6,若 i<=n-1则返回 S3;否则输出是素数,算法结束注,s6中可改为 i<=sqrt(n)
流程图:练习上页 下页 节末页结束
§ 2-4 算法的表示
1、自然语言:易歧义,适于非常简单的问题
2、流程图,直观形象,但由于箭头的使用没有限制,算法复杂时难以阅读和修改,被称为 BS( a
bowl of spaghetti)算法
3、三种基本结构与改进的流程图,限制箭头的滥用,
不允许流程的随意转向,为此提出了三种基本结构,
他们各自只有一个入口和出口上页 下页 节末页结束
2.4.3改进的流程图之顺序结构:
特点,顺序执行
S1
S2
a
b
上页 下页 节末页结束
2.4.3改进的流程图之选择结构:
语句
N条件
Y
条件语句 1 语句 2
Y N
单入口单出口见 P29F2-34与 P23F2-12
上页 下页 节末页结束
2.4.3改进的流程图之循环结构:
循环体
N条件
Y
当型循环 直到型循环条件
N
Y
循环体先循环后判断先判断 后循环 单入口单出口见 P29F2-34与 P23F2-12
三种结构特点,
◆ 单入口单出口
◆ 各部分均有机会执行
◆ 不存在死循环
◆ 三者组合构成的算法称为“结构化”算法,可解决任何复杂的问题上页 下页 节末页结束
2.4.4 N-S图 (盒图 ):顺序结构
S1
S2
顺序结构
S1
S2
a
b
改进流程图之顺序结构上页 下页 节末页结束
2.4.4N-S图:选择结构条件Y N
S1 S2
选择结构改进流程图之选择结构条件语句 1 语句 2
Y N
上页 下页 节末页结束循环结构
2.4.4N-S图:循环结构循环体当满足条件时 循环体直到条件满足循环体
N条件
Y
条件
N
Y
循环体上页 下页 节末页结束
0?t,1?i
t+i?t
i+1?i
直到 t?100
输出 t 的值传统流程图与 N-S流程图的比较:
开始
0?t,1?i
t+i?t
i+1?i
t?100
不成立成立输出 t 的值结束上页 下页 节末页结束伪代码:设计时适用
2.4.5-2.4.6 伪代码与编程语言用伪代码表示求 5!的算法语言
#include<stdio.h>
void main()
{
int p,i;
p=1;
i=2;
while(i<=5)
{
p=p*i;
i=i+1;
}
printf(“5!=%d\n”,p);
}
begin
1?p
2?i
while(i<=5)
{
p*i?p
i+1?i
}
print p
end
上页 下页 节末页结束表示方法综述:
设计时:自然语言 伪代码 流程图 改进的流程图表示时,N-S图 (改进的流程图也可)
实现时:编程语言( 据 N-S图写代码 )
begin
sum=0
i=1
while(i<=100)
{
sum+i?sum
i+1?i
}
print sum
end
例:求 1+2+3+…… +100
sum=0
i=1
while(i<=100)
sum+i?sum
i+1?i
Print(sum)
#include<stdio.h>
void main()
{
int i,sum;
i=1;
while(i<=100)
{
sum=sum+i;
i=i+1;
}
printf(“%d\n”,sum);
}
上页 下页 节末页结束
§ 2-5 结构 化程序设计方法基本思路,
自顶向下逐步细化模块化编码 /*子函数 */
结构化编程 /*单入口单出口 */
上页 下页 节末页结束例:输入 3个整数,输出其中最大的输入 3个数求 3数中最大的输出最大者
max=a
max<bY N
max=b
max<c
max=c
Y N
max=a
max<bY N
max=b
max<c
max=c
Y N
输入 a/b/c
输出 max
上页 下页 节末页结束作业:
1、分别用流程图和 N-S图表示以下问题的求解算法:
P36 2.4 (1)— (5)
2、算法设计,2.8(1)(3)
选作,斐波那切数列为 f(1)=1,f(2)=2,f(n)=f(n-2)+f(n-1); 输入 n,求
f(n)的值思考:分析图 2-34所表示算法中循环结束条件的含义上页 下页 节末页结束上机实验,
1、参照上机指导第 236页实验 18.1进行上机操作
2、编程或调试第一章与第二章中各作业题
1、试验目的
2、所调试的程序及调试过程中出现的错误和体会编程规范:
语句分行与缩进;
变量与函数要见名知意;
输入前有提示语句输出之后换行上页 下页 节末页结束
m%n→ r
n→m
r→n
N
开 始输入 m,n
输出 n
结束
r=0? Y
求余数假设 m=10,n= 6:
m = 10; n=6; r = 4
m = 6; n = 4; r = 2;
m = 4; n = 2; r = 0;
最大公约数为 n = 2
练习:辗转相除法求最大公约数上页 下页 节末页结束
N-S图画法:
Y N
m,n互换输入 m,n
m>n
r = m%n
r = 0 Y
输出 n
N
n =>m
r =>n
直到 r =0
输出 n
结束
m/n余数 → r
n→m
r→n
N
开 始输入 m,n
r=0? Y
Y N
输入 m,n
m>n
m,n互换
r=m%n
当 r不为零时
n=>m
r=>n
r=m%n
输出 n
#include <***.h>
#include <***.h>
void main( )
{
子函数声明与变量定义执行语句 ;
… ;
}
返回值类型 函数名 1(参数表 )
{
变量定义与函数声明执行语句组
}……,
返回值类型 函数名 n(参数表 )
{
变量定义与函数声明执行语句组
}
上页 下页 节末页结束简单的题目可直接根据问题写出程序,如习题
1.5;复杂问题需要先理清解题思路,描述清解题步骤,之后根据步骤编程,如习题 1.6
解决问题的具体方法和步骤称为 算法上页 下页 节末页结束
算法的概念
算法的 特性
简单算法举例
算法的表示方法
结构化程序设计方法上页 下页 节末页结束
§ 2-1算法的概念
算法,对操作的描述,确定对数据进行操作的步骤
数据结构,对数据的描述,确定数据的类型以及组织形式程序设计= 数据结构 + 算法+设计方法 + 工具沃斯:程 序= 数据结构 + 算法程序应该包含哪些内容?
上页 下页 节末页结束
§ 2-2 简单算法举例例 1 求 1?2?3?4?5,即 5?
方法一,方法二:
i=i+1 计数器
p=p*x 累乘器
t=t+x 累加器变量 --存储空间变量值 --存储数值开始
1? p
i=2
p?i? p
i+1?i
i<=5
1
1
输出 p
结束
Y
1? p
开始
p× 2?p
p?3?p
p?4?p
1
1
p?5?p
输出 p
结束上页 下页 节末页结束
§ 2-2 简单算法举例流程图符号起止框 判断框 处理框 输入 /输出框注释框 流向线 连接点上页 下页 节末页结束
§ 2-2 简单算法举例例 2:50个学生,输出成绩 80分以上者。 ni表学号,gi表成绩自然语言表示,流程图:
S1,1?i
S2:若 gi?80则输出
ni和 gi,否则不输出
S3,i+1?i
S4,若 i? 50,返回 S2
继续执行;否则,算法结束开始
i=1
gi>=80
输出 gi
i+1=>i
i>50
结束
Y
N
N
上页 下页 节末页结束
§ 2-2 简单算法举例自然语言表示:
S1,deno = 1
S2,sum = 1
S3,sign = 1
S4,sign =(-1)*sign
S5,deno =deno+1
S6,term =sign*(1/deno) /*注意整除 */
S7,sum =sum+term
S8,若 deno<100返回 S4;否则算法结束
4例,求 1-1/2+1/3-1/4+...+1/99-1/100 ( 不 同 与 书 )
(1)思路清晰
(2)见名知意流程图:练习上页 下页 节末页结束
§ 2-2 简单算法举例例 5:判断某大于等于 3的自然数是否素数自然语言表示:
S1:输入 n
S2,i = 2
S3,r= n%i
S4,若 r=0,输出 n非素数,
算法结束;否则转下一步;
S5,i=i+1;
S6,若 i<=n-1则返回 S3;否则输出是素数,算法结束注,s6中可改为 i<=sqrt(n)
流程图:练习上页 下页 节末页结束
§ 2-4 算法的表示
1、自然语言:易歧义,适于非常简单的问题
2、流程图,直观形象,但由于箭头的使用没有限制,算法复杂时难以阅读和修改,被称为 BS( a
bowl of spaghetti)算法
3、三种基本结构与改进的流程图,限制箭头的滥用,
不允许流程的随意转向,为此提出了三种基本结构,
他们各自只有一个入口和出口上页 下页 节末页结束
2.4.3改进的流程图之顺序结构:
特点,顺序执行
S1
S2
a
b
上页 下页 节末页结束
2.4.3改进的流程图之选择结构:
语句
N条件
Y
条件语句 1 语句 2
Y N
单入口单出口见 P29F2-34与 P23F2-12
上页 下页 节末页结束
2.4.3改进的流程图之循环结构:
循环体
N条件
Y
当型循环 直到型循环条件
N
Y
循环体先循环后判断先判断 后循环 单入口单出口见 P29F2-34与 P23F2-12
三种结构特点,
◆ 单入口单出口
◆ 各部分均有机会执行
◆ 不存在死循环
◆ 三者组合构成的算法称为“结构化”算法,可解决任何复杂的问题上页 下页 节末页结束
2.4.4 N-S图 (盒图 ):顺序结构
S1
S2
顺序结构
S1
S2
a
b
改进流程图之顺序结构上页 下页 节末页结束
2.4.4N-S图:选择结构条件Y N
S1 S2
选择结构改进流程图之选择结构条件语句 1 语句 2
Y N
上页 下页 节末页结束循环结构
2.4.4N-S图:循环结构循环体当满足条件时 循环体直到条件满足循环体
N条件
Y
条件
N
Y
循环体上页 下页 节末页结束
0?t,1?i
t+i?t
i+1?i
直到 t?100
输出 t 的值传统流程图与 N-S流程图的比较:
开始
0?t,1?i
t+i?t
i+1?i
t?100
不成立成立输出 t 的值结束上页 下页 节末页结束伪代码:设计时适用
2.4.5-2.4.6 伪代码与编程语言用伪代码表示求 5!的算法语言
#include<stdio.h>
void main()
{
int p,i;
p=1;
i=2;
while(i<=5)
{
p=p*i;
i=i+1;
}
printf(“5!=%d\n”,p);
}
begin
1?p
2?i
while(i<=5)
{
p*i?p
i+1?i
}
print p
end
上页 下页 节末页结束表示方法综述:
设计时:自然语言 伪代码 流程图 改进的流程图表示时,N-S图 (改进的流程图也可)
实现时:编程语言( 据 N-S图写代码 )
begin
sum=0
i=1
while(i<=100)
{
sum+i?sum
i+1?i
}
print sum
end
例:求 1+2+3+…… +100
sum=0
i=1
while(i<=100)
sum+i?sum
i+1?i
Print(sum)
#include<stdio.h>
void main()
{
int i,sum;
i=1;
while(i<=100)
{
sum=sum+i;
i=i+1;
}
printf(“%d\n”,sum);
}
上页 下页 节末页结束
§ 2-5 结构 化程序设计方法基本思路,
自顶向下逐步细化模块化编码 /*子函数 */
结构化编程 /*单入口单出口 */
上页 下页 节末页结束例:输入 3个整数,输出其中最大的输入 3个数求 3数中最大的输出最大者
max=a
max<bY N
max=b
max<c
max=c
Y N
max=a
max<bY N
max=b
max<c
max=c
Y N
输入 a/b/c
输出 max
上页 下页 节末页结束作业:
1、分别用流程图和 N-S图表示以下问题的求解算法:
P36 2.4 (1)— (5)
2、算法设计,2.8(1)(3)
选作,斐波那切数列为 f(1)=1,f(2)=2,f(n)=f(n-2)+f(n-1); 输入 n,求
f(n)的值思考:分析图 2-34所表示算法中循环结束条件的含义上页 下页 节末页结束上机实验,
1、参照上机指导第 236页实验 18.1进行上机操作
2、编程或调试第一章与第二章中各作业题
1、试验目的
2、所调试的程序及调试过程中出现的错误和体会编程规范:
语句分行与缩进;
变量与函数要见名知意;
输入前有提示语句输出之后换行上页 下页 节末页结束
m%n→ r
n→m
r→n
N
开 始输入 m,n
输出 n
结束
r=0? Y
求余数假设 m=10,n= 6:
m = 10; n=6; r = 4
m = 6; n = 4; r = 2;
m = 4; n = 2; r = 0;
最大公约数为 n = 2
练习:辗转相除法求最大公约数上页 下页 节末页结束
N-S图画法:
Y N
m,n互换输入 m,n
m>n
r = m%n
r = 0 Y
输出 n
N
n =>m
r =>n
直到 r =0
输出 n
结束
m/n余数 → r
n→m
r→n
N
开 始输入 m,n
r=0? Y
Y N
输入 m,n
m>n
m,n互换
r=m%n
当 r不为零时
n=>m
r=>n
r=m%n
输出 n