- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
x
第二章 算法简介及程序的基本结构
本章要点: • 了解算法的基本概念 • 掌握程序的基本结构
程序=数据结构+算法+程序设计方法+编程语言
2.1 算法的概念
对特定问题求解步骤的一种描述(algorithm) 计算机算法: 数值算法,有模型,比较成熟,数学程序库
非数值算法,种类繁多,难以规范
2.2 简单算法举例 (用自然语言描述法)
结束
2.4.5 用伪代码表示算法:用介于自然语言和计算机语 言之间的文字和符号来描述算法(pseudo code) BEGIN 1 =>i
while(i 50) { input ni和gi
10
1.2 C语言的特点(2)
5. 可移植性好 6. 生成的代码质量高,程序的执行效率高。只比 汇编语言的目标代码效率低 10%~20%; 7.能实现汇编语言的大部分功能,可以直接对硬 件进行操作(可写系统软件UNIX及应用软件) 8.与其它语言例如BASIC、 FORTRAN或 COBOL相比,掌握上稍微困难。 9. C语言的限制少,对编程人员要求高。
if(max<c) max=c; printf(“MAX:%d”,max); }
main()
请读出该程序的功能 2 3 4 5 –10 –89 20 66 0
{ int x,num1=0,num2=0;
printf("input num"); scanf("%d",&x); while(x!=0) { if(x>0) num1=num1+1;
N
a<90
Y
转 S3
Y
良好
N
优秀
转 S3
转 S3
转 S3
第二种算法如下:
分数 比例
0—59 0.05
60—69 0.15
70—79 0.4
80—89 0.3
90—99 0.10
例2.3 对一个大于或等于3的正整数,判断它是不是一个素 数。 方法:将 n (其中n 3) 作为被除数, 将2 到(n-1) 各 个整数轮流作为除数,如果都不能被整除,则n为素数。 算法表示如下: S1:输入n的值 S2:2 i ( i 作为除数)
S1: 1 sign
S2: 1 sum S3: 2 deno S4: (-1)*sign sign S5: sign*(1/deno) term S6: sum+term sum
S7: deno+1 deno
S8: 若deno 100 返回S4;否则算法结束。
2.3 算法的特性 算法的五个特性: 有穷性:一个算法必须在执行有穷步之后结束。 确定性:算法的每一步必须是确切定义的。 对于相同输入必须得到相同结果 。 有效性:算法的每一步都是能够实现的,即可 操作的。 输 入:算法有零个或多个输入。 有输出:算法执行完毕,必须有一个或若干个 输出结果。
else num2=num2+1;
scanf("%d",&x);} printf(" Num of positive is: %d\n",num1); printf(" Num of negative is: %d\n",num2); }
main()
{ int num1=0,num2=0;
printf("input num");
1.1 C语言出现的历史背景(2)
• 78以后,移植到大、中、小、微型机 • 78发表《The C Programming Language》 (Brian W. Kernighan 和Dennis M. Ritchie) • 83美国国家标准局 ( ANSI )称为 ANSI C • 87(ANSI)公布了新标准称 87 ANSI C • 90国际标准组织(ISO)ISO C 的标准 ISO9899-1990 • Borland公司的Turbo C和Borland C/C++,微软 的Microsoft C和Visual C/C++ • Unix和Linux,C语言是其标准系统开发语言
程序有错吗?
scanf("%d",&x);
while(x!=0) { if(x>0) num1=num1+1; else num2=num2+1; scanf("%d",&x);} printf("Positive num is: %d\n",num1); printf("Negative num is: %d\n",num2);}
2.4
怎样描述算法
2.4.1 自然语言描述法 2.4.2 流程图表示
常用符号有:
ANSI
起止框 输入/输出框 判断框 处理框
(American National
Standard Institute) BS(a bowl of spaghetti 一碗面条)
流程线
开始 1=>i
输入ni和gi
i+1=>i
S3: n 被 i 除,得余数 r
S4: 如果 等于 0 , 表示 n 能 被 i 整除,则打印 n ―不是素 数”,算法结束;否则执行S5
S5:i+1 i
S6: 如果 i n-1, 返回S3;否则,打印 n ―是素数”,算法结 束。
例2.4 求 1-1/2 + 1/3 –1/4 +…+ 1/99 –1/100。
1.2 C语言的特点(1)
C语言的主要特点如下: 1. 语言表达能力强 运算符丰富,表达式类型多样化 2. 结构化好 while语句结构化语句等,函数为单位 3. 具有较强的数据类型构造能力 4. 语言精练 i+=2; (i=i+2); if (e) s ;
FORTRAN Do 10 i=0,99,1 … continue BASIC i=0 DO WHILE i<100 … i=i+1 LOOP C for(i=0;i<100;i++) {… }
第一章 C语言概述
1.1 C语言出现的历史背景(1)
• 广泛流行,写系统软件,写应用软件 • ALGOL60- 面向问题 • CPL(combined programming language)(63) • BCPL-67(剑桥 Matin Richard) • B语言-70(贝尔实验室Ken Thompson) • C语言-72~73(Dennis.M.Ritchie) • 73,用C语言把UNIX改写(5), • 75 UNIX(6)引起注意
main( )
{ int a,b,c,max; printf(“input number a,b,c: \n”); scanf(“%d,%d,%d”,&a,&b,&c); max=a;
运行结果:
input number a,b,c: 6,5,1 MAX:6
if(max<b) max=b; //if(e) s;
1.3 简单的C程序介绍
例1.1 #include ―stdio.h‖ main( ) { printf(“Hello, everyone!\n”); } //包含预处理语句
程序的运行结果: Hello, everyone!
1.3 简单的C程序介绍
例1.2 #include ―stdio.h‖ main( ) {int a,b,sum; /* 这是定义变量 */ //包含预处理语句
N
i>50
Y
1=>i
Y gi>=80 N
输出gi 和 ni
i+1=>i
N
i>50
结束
2.4.3 程序的三种基本结构和 改进的流程图(N-S结构流程图)
一、顺序结构(Sequence Structure)
A
N-S结构流程图
A B
B (b) (a)
先执行A操作,再执行B操作,两者是顺序执行关系。
二、选择结构(Selection Structure)
编 辑
.C
编 译
Y
库函数和其 它目标程序
源程序
出 错?
.OBJ 目标程序
N 连 接
出 错? N 执 行
.EXE 可执行 程序
Y
N
结果正确? Y 结束
main( ) {
printf(“***************** \n”);
printf(“\n”); printf(“ Very good!\n”); printf(“ \n”); printf(“***************** \n”); 运行 结果: } ********************* Very good! *********************
真
P
假
真 A B A
P
假 B
(a)
(b)
当P条件为真时,执行A模块,否则执行B模块。
三、循环结构
1.当型循环结构
(While Loop)
假 真 当P为真 当P为真
当P条件成立 时,反复执行 A,直到P为假 。
P A
A
(a)
(b)
2.直到型循环结构(Until Loop)
A
假
A P 真 (a) (b) 直到P为真
1.3 简单的C程序介绍
通过以上例子可以看出: 1.C程序是由函数构成的。每个程序由一个或多个函数组 成,其中必须有且仅有一个主函数main( )。函数容易实 现程序的模块化. 2.一个可执行的C语言程序总是从main函数开始执行,而 不论其在整个程序中的位置如何。 3.每条语句或数据定义的最后必须有一个分号“;”。 说明:在以下三种情况下不允许有分号: a.在右花括号“}‖后面不使用分号; b.所定义的函数的名称后面不使用分号;