第四章循环结构程序设计2资料说课讲解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
多重循环常用算法
循环结构程序设计常用算法
1.【例迭1代】法用:for循环计算12+22+32+42+…+1002 解题要称点:为迭不代断。用用新迭值代代法替完旧成值的的加操法作操过作程,, 1)定义变称量为作累累加加。器用,迭累加代器法初完始成化的为乘0 法操作, 2)按下式称循为环累计乘算。:
累加器当前值=累加器原来的值+新的要加的数据 3)根据累加数的变化规律,修改循环控制变量,确定循 环次数。
“笨人之法”: 把所有可能的情况一一测试, 筛选出符合条件的各种结果进行输出。
2020/7/2
百钱买百鸡
公元五世纪末,我国古代数学家张丘建在 《算经》中提出了如下问题:
鸡翁一值钱五,鸡母一值钱三,鸡雏三值 钱一。凡百钱买百鸡,问鸡翁、母、雏各几 何?
2020/7/2
问题分析
设公鸡为cocks只, 母鸡为hens只, 小鸡为chicks只。 这是个不定方程——三元一次方程组问题 (三个变量,两个方程) cocks + hens + chicks =100 5 cocks +3 hens + chicks /3=100
s记录当前和,初值为0
n记录循环次数,初值为1
2020/7/2
为下一项 准备数据
【例2】 s2358... 求 前 10项 之 和 1235
void sum_before10() { double s=0,fz=2,fm=1,t;
int flag=1,n; for(n=1;n<=10;n++) { s=s+flag*fz/fm;
}
2020/7/2
3.递推法
所谓递推法就是从初值出发,归纳出新值与旧 值间的关系,直到求出所需值为止。新值的求出依 赖于旧值,不知道旧值,无法推导出新值。数学上 递推公式正是这一类问题。 “智人之法” :
通过分析归纳,找出从变量旧值出发求新值的 规律。
2020/7/2
猴子吃桃子
问题: 一天一只小猴子摘下一堆桃子,当即 吃去一半,还觉得不过瘾,又多吃了一个。 第二天接着吃了前一天剩下的一半,馋不 忍罢又多吃了一个。以后每天如此。 到第 十天小猴子去吃时,只剩下一个桃子了。 问小猴子共摘了多少桃子。
if(5*cocks+3*hens+chicks/3.0==100)
} }
printf(“%d\t%d\t%d\n”,cocks,hens,chicks);
2020/7/2
公鸡数 0 4 8 12
运行结果
母鸡数 25 18 11 4
小鸡数 75 78 81 84
2020/7/2
使用符号常数增强程序的可读性
2020/7/2
在上述对cocks , hens , chicks有限的 取值范围内的每一种组合进行试探,找到 满足前面两个方程的组合,就是本题的解 了。
2020/7/2
参考程序
void main() { int cocks, hens, chicks; for(cocks=0; cocks<20; cocks++) /* 穷举cocks */ for(hens=0; hens<33; hens++) { chicks = 100 – cocks - hens;
2020/7/2
下面考虑如何寻找另外的约束条件。 按常识,cocks、hens、chicks都应为
正整数,且它们的取值范围分别应为:
cocks :0~20 (假如100元全买cocks,最多20只) hens :0~33(假如100元全买hens,最多33只) chicks :0~100(假如全买chicks,最多100只)
else
{
if(ch>='a' && ch<='z' || ch>='A' && ch<='Z')
{n2++;}
else {n3++;}
n1=3,n2=4,n3=4,总数为11
}
}
printf("n1=%d,n2=%d,n3=%d,总数为%d\n",
n1,n2,n3,n1+n2+n3);
}
第四章 循环结构程序设计(续)
flag=flag*(-1); t=fm; fm=fz; fz=fz+t; } printf("s=%lf\n",s); } 2020/7/2
循环体: s =s +flag*fz/fm; flag = flag*(-1); t = fm; fm = fz; fz = fz+t;
2. “枚举法”
按问题本身的性质,一一列举出该问题所 有可能的解,并在逐一列举的过程中,检验每 个可能解是否是问题的真正解,若是,我们采 纳这个解,否则抛弃它。对于所列举的值,既 不能遗漏也不能重复。
分析:寻找规律性
正、负交替
循环体:
前项“分子”是后项的“分母s”=s +flag*fz/fm;
前项的“分子”+“分母”是后f项lag的=“fla分g*子(-”1);
变量的设计:
t = fm;
flag 标记正负,初值为1; fm = fz;
fz记录当前项的分子,初值为2fz = fz+t;
fm记录当前项的分母,初值为1
•第四章循环结构程序设计2资 料
void line_char( )
{
char ch; int n1=0,n2=0,n3=0; //计数器置零
for(ch=getchar( );ch != '\n' ;ch=getchar( ))
{ຫໍສະໝຸດ Baidu
if(ch>='0' && ch<='9') {n1++;}
Ab12,<>?cD3↙
#define Much 100 #define Many 100
void Buy_100() { int cocks, hens, chicks; for(cocks=0; cocks<Much/5; cocks++) for(hens=0; hens<Much/3; hens++) { chicks = Many – cocks - hens; if(5*cocks+3*hens+chicks/3.0 == Much) printf(“%d\t%d\t%d\n”,cocks,hens,chicks); }
2020/7/2
参考程序
#include <stdio.h>
void Ex1( )
{
int k; int result=0;
迭代初始值
for(k=1;k<=100;k++)
迭代终止条件
迭代式
result += k*k;
printf("result=%d\n",result);
}
2020/7/2
s2358... 求 前 10 项 之 和 1235
相关文档
最新文档