C语言40学时第 2章 程序 的灵魂 —算法课堂教学 2学时累计 3学时
C语言40学时一个程序包含两方面的内容
1,对数据的描述类型、数据的组织形式? 数据结构
2.对操作的描述操作步骤? 算法
认真考虑和设计:
数据结构和算法
C语言40学时什么是程序?
沃思公式:
数据结构+算法=程序
具体化:
程序=算法+数据结构+程序设计方法+语言工具和环境
C语言40学时算法解决的问题是做什么和怎么做 (计算机 )
C语言40学时算法的概念
做任何事都有一定的次序和步骤如:召开会议,报考大学,购物等
为解决一个问题而采取的方法和步骤就称为“算法”
解决同一个问题可以有不同的方法和步骤,方法有有劣之分
采用简单的和运算步骤少的方法为优
C语言40学时计算机算法分两大类别
1,数值运算算法目的是求数值解,算法成熟
2,非数值运算算法种类繁多,要求各异,难以规范
C语言40学时简单算法举例例 2.1 求1 × 2 × 3 × 4 × 5
原始方法:
1 × 2,2 × 3,6 × 4,24 × 5
通用的方法,设两个变量(被乘数 p,乘数 i)
S1,1=>p
S2,2=>i
S3,p× i=>p
S4,i+1=>i
S5,若 i≤5,返回 s3;否则结束如果题目该为求 1× 3× 5× 7× 9× 11?
C语言40学时
S1,1=>p
S2,3=>i
S3,p× i=>p
S4,i+2=>i
S5,若 i≤11,返回 s3;否则结束
用这种方法表示的算法具有通用性、
灵活性
C语言40学时例 2.2 有 50个学生,要求将他们之中成绩在 80分以上者打印出来.用 n表示学生学号,n1代表第一个学生学号,ni代表第 i个学生的学号,g代表学生成绩
gi代表第 i个学生成绩.算法如下:
S1,1=>i
S2,若 gi≥80则打印 ni和 gi,否则不打印
S3,i+1=>i
S4,若 i≤50返回 s2,否则算法结束
C语言40学时
例 2.3 判断 2000-2500年中的每一年是否闰年,将结果输出
闰年的条件:
①能被4整除,但不能被 100整除的年份都是闰年,如 1996,2004年是闰年;
②能被 100整除,又能被 400整除的年份是闰年,如 1600,2000年是闰年。
C语言40学时
不符合这两个条件的年份不是闰年。
算法如下:
设 y为被测的年份 y不能被4整除

y能被
4整除但不能被 100
整除

闰年非闰年
③ y能被
100整除又能被 400
整除闰年
④ 其他非闰年
C语言40学时
S1,2000=>y
S2,若 y不能被4整除则转到 S5
S3,若 y能被4整除,不能被 100整除,则输出 y,是闰年”,转 S6
S4,若 y能被 100整除,又能被 400整除,则输出 y,是闰年”,转 S6,(否则顺序执行)
S5,输出 y“不是闰年”
S6,y+1=>y
S7,当 y≤2500时转 S2,否则算法结束
C语言40学时例2,4 求 1-1/2+1/3-1/4+…+1/99 -1/100
算法:
S1,sign=1
S2,sum=1
S3,deno=2
S4,sign=-sign
S5,term=sign× (1/deno)
S6,sum=sum+term
S7,deno=deno+1
S8,若 deno≤100返回 S4,否则算法结束
C语言40学时例 2.5对一个大于等于3的正整数,判断它是否为素数.
素数:除了1和该数本身之外,不能被其他任何整数整除的数.
如,13
判断素数的方法:将一个大于等于3的正整数 n作为被除数,将
2到 n-1各个数轮流作为除数,如果都不能被整除,则 n为素数.
S1,输入 n的值
S2,2 =>i
S3,n被 i整除,得余数 r
S4,若 r=0,表示 n能被 i整除,则 n不是素数,否则顺序执行到 S5
S5,i+1=>i
S6,若 i≤n-1,返回 S3;否则 n是素数,算法结束或 S6:若 i≤n/2或 若 i≤
C语言40学时
2.3算法的特性一个算法应具有以下特点,
1,有穷性
2,确定性
3,有零个或多个输入
4,有一个或多个输出
5,有效性程序设计人员设计算法,并根据算法编写程序
C语言40学时怎样表示一个算法
1,用自然语言表示算法
2,用流程图表示算法
3,用 N-S流程图表示算法
用三种基本结构(顺序,选择,循环)
起止 输入 /出 判断 处理 流程线 连接点
C语言40学时
Begin
2=>i
Input n
Remainder of n/i =>r
r=0?
i+1=>i
i>n1/2?
Print n
“is prime”
End
Print n
“is not prime”
N
Y
N
Y
C语言40学时
1=>i
print ni,gi
gi>=80Y N
i+1=>i
Until I >50
C语言40学时用伪代码表示算法伪代码是用介于自然语言和计算机语言之的文字和符号来描述算法例如,“打印 x的绝对值”.
IF x is positive THEN
print x
ELSE
print -x
C语言40学时也可以用汉字伪代码:
若 x 为正打印 x
否则打印 -x
还可以中英文混用
IF x 为正
print x
ELSE
print -x
C语言40学时例 2.16 求5!
开始置 t的初值为 1
置 i的初值为 2
当 i≤5,执行下面操作使 t= t× i
使 i= i+ 1
(循环到此结束 )
打印 t的值结束
C语言40学时也可以写成以下形式:
BEGIN (算法开始 )
1=>t
2=>i
while i<=5
{t× i=>t
i+1=>i }
print t
END(算法结束 )
C语言40学时用计算机语言表示算法
设计算法和实现算法例 2.20 求5!用 c语言表示.
main( )
{int i,t;
t=1;
i=2;
while(i<=5)
{t=t*i; /* 120 */
i=i+1;}
printf("%d",t); }
C语言40学时例 2.21求级数 1-1/2+1/3-1/4+…+1/99 -1/100
1,main( )
2,{int sign=1;
3,float deno=2.0,sum=1.0,term;
4,while(deno<=100)
5,{sign=-sign;
6,term=sign/deno;
7,sum=sum+term; /* 0.688172 */
8,deno=deno+1; }
9,printf("%f",sum); }
C语言40学时结构化程序设计方法
一个结构化程序就是用高级语言表示的结构化算法
用三种基本结构组成的程序必然是结构化程序
结构化程序的特点,
(1)自顶向下 (2)逐步细化
(3)模块化设计 (4)结构化编码
C语言40学时课堂练习用传统流程图或 N-S 图表示求解问题的算法
1,有两个瓶子 A和 B,分别盛放醋和酱油,
要求将它们互换
2,有3个数,找出其中最大的一个.
3,判断一个数 n能否同时被3和5整除
C语言40学时
1.设,0代表醋,1 代表酱油,T为空瓶开始
0=>A
T=>B
1=>B
A=>T
B=>A
打印 A,B
结束
C语言40学时
2.
max=A max=b
T max>C F
max=C
输出 max的值输入三个整数 A,B,C
T A<B F
T B<C F T A<C F
输出 输出 输出 输出最大 最大 最大 最大值 C 值 B 值 C 值 A
输入三个数 A,B,C
T A>B F
C语言40学时输出:
n不能同时被 3和 5整除
3.判断一个数 n能否同时被 3和 5整除输入一个整数 n
T n%5==0 F
T n%3==0 F
输出:
n可以同时被 3和 5整除