C语言(第三章)(下)高教

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

当 型
直 到 型
main() { int n=0,sum=0; loop: if (sum>=10000) goto end; sum+=n; ++n; goto loop; end: printf(“n = %d\n”,n); }
五、循环结构程序设计
2、while语句循环结构 P91
型 一般形式 while (条件表达式) 循环体语句; 用于构成当型循环:先判断 后执行/条件为真继续循环, 直到条件为假时结束循环。 【注意】条件表达式或循环 体内应有改变条件使循环结 束的语句,否则可能陷入 “死循环”。 当
cocks+hens+chicks=100(1) 5*cocks+3*hens+chicks/3=100(2)
式中: 式中:cocks:鸡翁数 : hens:鸡母数 : chicks:鸡雏数 : cocks: 0~19中的整数 因为每只鸡翁 钱,因此它不可能超过 只) 中的整数(因为每只鸡翁 ~ 中的整数 因为每只鸡翁5钱 因此它不可能超过19只 hens: 0~33中的整数 ~ 中的整数 chicks: 0~100中的整数 ~ 中的整数 s1: cocks=0; /*赋初值 赋初值*/ 赋初值 s2: 当(cocks<=19) < s2.1: 找满足题意的 找满足题意的hens, chicks; s2.2: cocks++; ; S3:输出一组 输出一组cocks,hens和chichs 输出一组 和
兔子繁殖问题。 例3.13 兔子繁殖问题。 著名意大利数学家Fibonacci曾提出一个有趣的问题:设有一对新生 曾提出一个有趣的问题: 著名意大利数学家 曾提出一个有趣的问题 兔子,从第三个月开始它们每个月都生一对兔子。按此规律, 兔子,从第三个月开始它们每个月都生一对兔子。按此规律,并假设 没有兔子死亡,一年后共有多少对兔子。 没有兔子死亡,一年后共有多少对兔子。 人们发现每月的兔子数组成如下数列: 人们发现每月的兔子数组成如下数列: 1,1,2,3,5,8,13,21,34,… , , , , , , , , , 并把它称为Fibonacci数列。发现这样一个规律:从第 个数开始,每 数列。 个数开始, 并把它称为 数列 发现这样一个规律:从第3个数开始 一个数都是其前面两个相邻数之和。 一个数都是其前面两个相邻数之和。 上述算法可以描述为 fib1=fib2=1 (1) fibn=fibn-1+fibn-2 (n>=3) (2) > 为赋初值, 为迭代公式。 语言来描述式(2)为 式(1)为赋初值,式(2)为迭代公式。用C语言来描述式 为: 为赋初值 为迭代公式 语言来描述式 fib=fib1+fib2; ; fib1=fib2; /* 为下一次迭代作准备 为下一次迭代作准备*/ fib2= fib;
兔子繁殖问题(斐波那契数列问题) 著名意大利数学家斐波那契(Fibonacci)1202年提出一个有趣的问题。 由分析可以推出,每月新增兔子数Fn={1,1,2,3,5,8,13,21,34,…}(斐波那契数列) 某人想知道一年内一对兔子可以生几对兔子。他筑了一道围墙,把一对 月份n 兔子数Fn 大兔关在其中。已知每对大兔每个月可以生一对小兔,而每对小兔出生 1 F1=1 后第三个月即可成为“大兔”再生小兔。问一对小兔一年能繁殖几对小 2 F2=1 兔? F3=2=F1+F2 3
迭代
迭代是一个不断用新值取代变量的旧值, 迭代是一个不断用新值取代变量的旧值,或由旧值递推出变量的新值 的过程。 的过程。 人口增长问题。 例3.12 人口增长问题。 按年0.2%的增长速度,现有 亿人,10年后将有多少人 的增长速度, 亿人, 年后将有多少人 年后将有多少人? 按年 的增长速度 现有13亿人 设现人口数为m,则第1年后人口变为 年后人口变为: 设现人口数为 ,则第 年后人口变为: m = m*(1+0.2%) 年后: 的值用m*(1+2%)替代,以此类推。 替代, 第2年后:即将 的值用 年后 即将m的值用 替代 以此类推。 初值: 初值: m=13,i=1 当i<=10 i++ m = m*(1+0.2%) 输出m 输出 初值:m=13,i=1 迭代与下列因素有关: 迭代与下列因素有关: 初值; 初值; 迭代公式; 迭代公式; 迭代次数或迭代终止标志。 迭代次数或迭代终止标志。 当i<=10 图3.18 计算人口的N-S图 m = m*(1+0.2%) i++ 输出m
第三章 C程序的流程控制
五、循环结构程序设计
采用循环(或称重复)结构是计算机程序的一个重要特征。 采用循环(或称重复)结构是计算机程序的一个重要特征。 计算机运算速度快,最宜于用于重复性的工作。 计算机运算速度快,最宜于用于重复性的工作。 循环是在循环条件为真时计算机反复执行的一组指令(循 环体)。 循环控制通常有两种方式: ◆计数控制 事先能够准确知道循环次数时用之 用专门的循环变量来计算循环的次数,循环变量的值在每次 执行完循环体各语句后递增,达到预定循环次数时则终止循环, 继续执行循环结构后的语句。精确迭代 精确迭代 ◆标记控制 事先不知道准确的循环次数时用之 由专门的标记变量控制循环是否继续进行。当标记变量的值 达到指定的标记值时,循环终止,继续执行循环结构后的语句。 近似迭代, 近似迭代,也称逐次逼近法
main() { int n=0,sum=0; while (sum<=10000) { sum+=n; ++n; } printf(“n = %d\n”,n); }
计算人口增长的C程序。 计算人口增长的 程序。 程序 按照图3.18所示的算法,可以很容易地得到下面的 程序。程序 所示的算法, 程序。 按照图 所示的算法 可以很容易地得到下面的C程序 的主体结构是一个while重复结构。 重复结构。 的主体结构是一个 重复结构 #include <stdio.h> int main(void) { double m=13; int i=1; while(i<=10) { m=m*(1+0.002); i++; } printf(“Population after 10 yers is:%f\n”,m); return 0; } Population after 10 yers is: 13.262353
F4=3=F2+F3 4 分析:▲表示大兔,△表示小兔 5 F5=5=F3+F4 … n Fn=Fn-1+Fn-2
初值:fib1=1,fib2=1,i=3 当i<=12 fib=fib1+fib2 fib1=fib2 fib2=fib i++ 输出fib
计算Fiboonacci数列的 数列的N-S图 计算 数列的 图 按照迭代算法变量fib1、fib2和fib3的变化情形 表3.2 按照迭代算法变量 、 和 的变化情形
百钱买百鸡问题。 例3.16 百钱买百鸡问题。 公元前五世纪,我国古代数学家张丘建在《算经》一书中提出了“ 公元前五世纪,我国古代数学家张丘建在《算经》一书中提出了“百鸡问 鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡, 题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡 雏各几何? 翁、母、雏各几何 (1) 基本解题思路 这是一个有名的不定方程问题: 这是一个有名的不定方程问题:
五、循环结构程序设计
名词解释
循环结构两大要素: 无限循环 死循环 循环条件 p 结束循环的条件表达式 循环体 A 循环执行的语句或语句组
名词解释
空循环 设置循环条件要特别注意确定: 循环变量的初值 循环变量的终值 循环变量的变化规律
五、循环结构程序设计
1、if … goto语句循环结构
main() { int n=0,sum=0; loop: sum+=n; ++n; if (sum<=10000) goto loop; printf(“n = %d\n”,n); }
图3.19 计算Fiboonacci数列的N-S图
迭代 次数 fib1 fib2 fib
3 1 1 2
4 1 2 3
5 2 3 5
6 3 5 8
7 5 8 13
8 8 13 21
9 13 21 34
10 21 34 55
11 34 55 79
12 55 79 144
穷举
穷举是另一种重复型算法。 穷举是另一种重复型算法。 对问题所有可能状态一一测试,直到找到解或将全部可能状态都测试过为止。 对问题所有可能状态一一测试,直到找到解或将全部可能状态都测试过为止。 循环控制有两种办法:计数法与标志法。 循环控制有两种办法:计数法与标志法。 计数法要先确定循环次数,然后逐次测试,完成测试次数后,循环结束。 计数法要先确定循环次数,然后逐次测试,完成测试次数后,循环结束。 标志法是达到某一目标后,使循环结束。 标志法是达到某一目标后,使循环结束。 输入10个数 将最大的一个数打印出来。 个数, 例3.15 输入 个数,将最大的一个数打印出来。 初始化:i=1 输入一个数给max 当i<=9 输入第i个数n i++ 真 max=n 输出max n>max ( 空) 假
Fibonacci算法 语言的程序实现。 算法C语言的程序实现 算法 语言的程序实现。 根据图3.19所示的算法。可以很容易地写出如下程序。 所示的算法。 根据图 所示的算法 可以很容易地写出如下程序。
#include <stdio.h> int main(void) { int fib1=1,fib2=1,fib,i=3; while(i<=12) { fib=fib1+fib2; fib1=fib2; fib2=fib; i++; } printf(“The Fibonacci number after 1 yer is:%d\n”,fib); return 0; } The Fibonacci number after 1 yer is:144
chicks=100-cocks-hens (5*cocks+3*hens+chicks/3.0)==100 真 假 输出一组 cocks,hens和chichs 找满足题意的chicks (空)
百钱买百鸡算法的细化算法
五、循环结来自百度文库程序设计
在C语言中可用以下语句构成循环: if … goto
while do … while for 其中if … goto是通过编程技巧(if语句和goto语句组 合)构成循环功能。而且goto语句将影响程序流程的 模块化,使程序可读性变差,所以结构化程序设计主 张限制goto语句的使用。 其他三种语句是C语言提供的循环结构专用语句。
初始化:cocks=0 当(cocks<=19) 找满足题意的hens和chicks cocks ++ 输出一组cocks,hens和chichs
百钱买百鸡的粗略算法
初始化:cocks=0 当(cocks<=19) hens=0 当(hens<=33) 找满足题意的chicks Hens++ cocks ++ 输出一组cocks,hens和chichs
/****** 百钱买百鸡问题 ******/ #include <stdio.h> int main(void) { int cocks=0; printf("%8s%8s%8s\n","cocks","hens","chicks"); while(cocks<=19) { int hens=0; while(hens<=33) { int chicks; chicks=100-cocks-hens; if(5*cocks+3*hens+chicks/3.0==100) printf("%8d%8d%8d\n", cocks,hens,chicks); hens++; } cocks++; } return 0; }
#include <stdio.h> int main(void) { double m=13; int i=1; while(i<=10) { m=m*(1+0.002); printf(“Population after %d yers is:%f\n”,i,m); i++; } return 0; }
相关文档
最新文档