1 / 15

C 基础——理解算法

C 基础——理解算法. 算法举例 C 程序示例 结构化算法 趣味算法. 理解算法. 算法就是按部就班地解决某个问题的方法。 离散化、序列化、规范化、程序化. 烹饪鲤鱼算法 (Adlai Stevenson). 1、取一条1 - 2磅重的 鲤鱼,并把它放在清水里游上24小时。 2、将鱼刮鳞去骨切成片。 3、给鱼涂上黄油,并撒上盐和胡椒。 4、把鱼片放在烤炉里用温火烘烤20分钟。 5、取出即可享用。 目标:烹饪鲤鱼  实现: 算法  细化:各具体操作. 算法举例1:求两数之和. 1、有两个数 a 和 b ,a 等于2, b 等于3。

marlo
Download Presentation

C 基础——理解算法

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C基础——理解算法 算法举例 C程序示例 结构化算法 趣味算法

  2. 理解算法 • 算法就是按部就班地解决某个问题的方法。 • 离散化、序列化、规范化、程序化

  3. 烹饪鲤鱼算法(Adlai Stevenson) • 1、取一条1 - 2磅重的鲤鱼,并把它放在清水里游上24小时。 • 2、将鱼刮鳞去骨切成片。 • 3、给鱼涂上黄油,并撒上盐和胡椒。 • 4、把鱼片放在烤炉里用温火烘烤20分钟。 • 5、取出即可享用。 • 目标:烹饪鲤鱼 • 实现:算法 细化:各具体操作

  4. 算法举例1:求两数之和 • 1、有两个数a和b,a等于2,b等于3。 • 2、准备一个数sum,sum取值为a加上b • 3、将sum的值显示在屏幕上 • 1、有三个整数 a,b,sum • 2、置 a = 2 • 3、置 b = 3 • 4、置 sum = a + b • 5、输出 sum

  5. C程序实现 /*例(ex1.c): 求两数之和*/ main( ) { int a,b,sum; /*变量说明*/ a = 2; /*赋值*/ b = 3; sum = a + b; /*求和计算*/ printf( “%d\n”, sum ); /*调用输出函数*/ }

  6. 0+1=1 1+2=3 3+3=6 6+4=10 10+5=15 … 0+1=1 1+1=2 1+2=3 2+1=3 3+3=6 3+1=4 6+4=10 4+1=5 10+5=15 5+1=6 … 算法举例2:计算1+2+3+4+5 • 初始时:i=1,sum=0 • sum+i=>sum • i+1=>i • 结束时:i>5

  7. 1、置sum=0 ,i=1 2、当i小于等于5时重复下 (1) 置 sum 为 sum+i (2) 置 i 的值为 i+1 3、输出y的值 4、程序结束 理解变量的作用 理解“置”与等式区别 试手工运行程序 算法与C程序 main() { int i,sum; sum = 0; i = 1; while (i<=5) { sum = sum + i; i = i + 1; } printf(“%d\n”,sum); }

  8. CPU的运行 CPU 内存(RAM) 指令流 与 数据 软件、程序 ALU 运算器 指令系统 寄存器组 Registers 输入/出 I/O 基本指令: 算术、逻辑、比较、跳转、硬件I/O、系统 硬 件 平 台

  9. 机器语言与汇编语言(求和100) • 146B:0100 B80000 MOV AX,0000 sum=0 • 146B:0103 A30220 MOV [2002],AX (地址2002) • 146B:0106 B80100 MOV AX,0001 i=1 • 146B:0109 A30020 MOV [2000],AX (地址2000) • 146B:010C A10020 MOV AX,[2000] sum+=i • 146B:010F 01060220 ADD [2002],AX • 146B:0113 B80100 MOV AX,0001 i=i+1 • 146B:0116 01060020 ADD [2000],AX • 146B:011A A10020 MOV AX,[2000] i<=100? • 146B:011D 3D6400 CMP AX,0064 • 146B:0120 76EA JBE 010C Yes:循环 • 146B:0122 B402 MOV AH,02 No:输出 • 146B:0124 B230 MOV DL,30 (输出‘0’) • 146B:0126 CD21 INT 21 • 146B:0128 CD20 INT 20 程序结束

  10. 趣味算法举例 • 求一分数的千位小数 • 1/7 = 0.14285714285714……(共1000位) • 求e,的千位小数 • e = 2.71828182845904523536…... •  = 3.14159265358979323846…... • 扑克牌算24点 • 安全过河求解 • . . . . . .

  11. 千位小数求解 • 计算过程 • 10 7=1,余3 • 30 7=4,余2 • 20 7=2,余6 • 60 7=8,余4 • 重复主体 • x y=m,余n • n*10为新的x

  12. 置x = 10,y = 7 输出“1/7=0.” 以下重复1000次 x y求商m,余n 输出m 置x为10*n 程序结束 main() { int x, y, i, m, n; x = 10; y = 7; printf( “1/7=0.” ); for (i=0;i<1000;i++) { /*重复1000次*/ m = x / y; /*求商*/ n = x % y; /*求余数*/ printf( “%d”, m ); x = 10 * n; } } 千位小数算法

  13. 千位小数算法——数组法 • 准备数列A1,A2,…,A1000 • 用于记录第1,2,…,1000位小数,… • 置x = 10,y = 7 • 以下重复1000次(i=1到1000) • x y求商m,余n • 置Ai = m • 置x为10*n • 输出“1/7=0.”,输出A1,A2,…,A1000

  14. 问题描述算法程序调试 离散化、序列化、规范化、程序化 算法 + 数据结构 = 程序 结构化分析、设计 软件工程法 面向对象法 快速原型法 程序说明 /* 程序注释 */ 正规文档 系统分析说明书 系统设计说明书 测试说明书 用户说明书 软件方法 本课程要求

  15. 关于的公式及结果 • 马青公式 • 斯图模公式  = 3.14159,26535,89793,23846,26433,83279, 50288,41971,69399,37510,58209,74944, 59230,78164,06286,20899,86280,34825, 34211,70679,……

More Related