- 12
- 0
- 约9.74千字
- 约 57页
- 2018-08-30 发布于湖北
- 举报
第四章(续) C语言基本结构程序设计及举例 内容提要 算法的描述方法 基本控制结构 基本控制语句 常用算法,如累加、累乘、统计、递推、迭代、穷举等 程序的基本版式 结构化程序设计的基本思想 算法的概念 数据结构+算法=程序 算法:为解决一个具体问题而采取的确定的有限的操作步骤,这里仅指计算机能执行的算法 算法特性: 有穷性 确定性 有效性 没有输入或有多个输入 有一个或多个输出 算法的分类 数值运算算法: 解决的是求数值解的问题,例如用辗转相除法求两个数的最大公约数等 非数值运算算法: 主要用于解决需要用分析推理、逻辑推理才能解决的问题,例如人工智能中的许多问题,查找、分类等问题 算法的表示方法 自然语言表示 传统的流程图表示 N-S结构化流程图表示 伪代码表示 C程序结构 构成程序的三种基本结构 顺序结构 选择结构 循环结构 已经证明,任何程序均可只用这三种结构综合描述 只用这三种结构编制的程序,叫结构化程序 程序必须符合结构化规则 结构化程序设计的核心思想 采用顺序、选择和循环三种基本结构作为程序设计的基本单元 只有一个入口; 只有一个出口; 无死语句,即不存在永远都执行不到的语句; 无死循环,即不存在永远都执行不完的循环。 采用“自顶向下、逐步求精”和模块化的方法进行结构化程序设计 选择三种循环的一般原则 如果循环次数已知,用for 如果循环次数未知,用while 如果循环体至少要执行一次,用do-while 这只是“一般”原则,不是“原则” 死循环 永远不会退出的循环为死循环 for (;;) {} while (1) {} do { }while (1) 一般情况下,要极力避免死循环 绝大多数程序不需要死循环。如果出现,往往都是bug 时间过长的循环会造成“假死”效果,也要考虑解决 现场编程完成例 国王的许诺。相传国际象棋是古印度舍罕王的宰相达依尔发明的。舍罕王十分喜欢象棋,决定让宰相自己选择何种赏赐。 这位聪明的宰相指着8×8共64格的象棋盘说:陛下,请您赏给我一些麦子吧,就在棋盘的第一个格子中放1粒,第2格中放2粒,第3格放4粒,以后每一格都比前一格增加一倍,依此放完棋盘上的64个格子,我就感恩不尽了。 舍罕王让人扛来一袋麦子,他要兑现他的许诺。 国王能兑现他的许诺吗?试编程计算舍罕王共要多少麦子赏赐他的宰相,这些麦子合多少立方米? (已知1立方米麦子约1.42e8粒) 总粒数为:sum=1+2+22+23+…+263 方法1 #define CONST 1.42e8 #include stdio.h #include math.h main() { int n; double term, sum = 0; /*累加求和变量赋初值*/ for (n=1; n=64; n++) { term = pow(2, n-1); /*根据累加项的规律计算累加项 */ sum = sum + term; /*作累加运算*/ } printf(sum = %e\n, sum); /*打印总麦粒数*/ printf(volum = %e\n, sum/CONST);/*打印折合的总麦粒体积数*/ } 方法2 #define CONST 1.42e8 /*定义符号常量CONST值为1.42e8 */ #include stdio.h main() { int n; double term = 1, sum = 1; /*累乘求积、累加求和变量赋初值*/ for (n=2; n=64; n++) { term = term * 2; /*根据后项总是前项的2倍计算累加项*/ sum = sum + term; /*作累加运算*/ } printf(sum = %e\n, sum); /*打印总麦粒数*/ printf(volum = %e\n, sum/CONST); /*打印折合的总麦粒体积数*/ } 现场编程完成例4.14 编程输出如下形式的乘法九九表 #include stdio.h main() { int m, n; for (m=1; m10; m++) printf(%4d, m); /*打印表头*/ printf(\n); for (m=1; m10; m++) printf( -); printf(\n); for (m=1
原创力文档

文档评论(0)