当前课程知识点:C语言程序设计(上) > 循环结构的程序设计(一) > 4.3 已知循环次数用for语句 > 4.3.2--循环的应用-求和
我们接下来看一下
for循环应用的一些实例
我们先看求和
这是最简单的
我们一直往下走
我们大家考虑
从宏观上讲这道题是不是
δ一个x
就是x是
1/2 2/3 3/4
那我们这个x每一次是在变的
但是这个变化是有规律的
1/2 2/3
我们看不管是分子还是分母
往后都增量1
那我们把这个放到循环里边
我们看循环题里边是不是第一件事情就是
要找这个x
而x又是有规律的
和计数器相关的
那么在找到了x
你就给它累加和就做这两件事
我们在编译环境下调一下这个程序
看一下结果
这样
不是0了 这是一个正确的结果
如果我们再给一个数
说是30
这个结构是这样
那我们现在说
我能不能把这道题变成
任意数的
这个数是任意项数求和
我们需要怎么做呢
如果是任意的项数求和
我们只要做一件事scanf
说你在这里边呢
你读进来一个n好不好
那我们这里边说
我百分号什么呢
百分号一个整型数n
然后
百分号d
然后呢
我要的是n
那你这块的这呢
就不要写30了 写成n
可不可以
那这个n呢
也是一个整型数
那scanf后边 别忘了给分号
那现在大家看 这个循环的次数
就是任意的 不一定是你给的常数次
是20次30次 我们看一下
那我现在给n 是刚才的20
它得到说 对20你求的和是这样
给一个50 它是这样求
那我们把
如果你从键盘上通过人机交互的方式
读进了这个n
这个程序就变成一个通用的程序
什么通用 任意项数求和
任意项数 这个数列是任意的
我们再来看一道例题 斐波那契数列
这个数列大家都知道
是这样的一个规律
我们看1 1 2 3
大家看到 5是2和3的和
8是3和5的和
也就说 中间的任一个数
这个数列里的任一个数
等于前边两项之和
那我们这个题目里边相当于要做什么呢
输入一个n
我要生成n项的这么一个数列
并且把生成的这个数列输出
以及把这些数列求和输出
那么看里边的核心是什么
生成当前这个数
并且要产生下一个前两个数
比如说我们要生成89的时候
我们把89生成了
我们还要把a1a2改变成
a1改变成34 a2改变成55
因为原来的a1是21 a2是34
是它俩生成的55
那我下一个要生成89的时候
a1变成了34 a2变成了55
这是我们循环题里要做的事
那我们把这个程序
直接拿过去 复制
复制到我们这个环境下
这里边已经有了
有了那我们直接看在这里边
前两个数列里边的前两个数a1a2
我们通过初始化的形式给它了
那s和t我们看是干嘛呢
t是在循环题里边
产生的当前这个数
那s呢
s是在求和的 s等于求累加和的
那我们在这个程序的里边
先读进了n就是你要多少项
我期望的是要n项我先读进来这个n
然后前两项我们先输出
因为前两项是已知的
都是1 a1a2是1
进入循环的入口从1开始
到小于等于n
每步增长1
在这里边我们看第一件事情
产生新的 当前新的数t
是前两个数之和
然后把新产生的这个数输出
把t输出
下边呢 求和
那下边这两项是做的什么呢
产生新的a1和a2
a1就是把a2放在a1里
把新的这个t放在a2里
产生了新的a1a2
已被这个for循环回去
在这下一个生成下一个新的t
所以这一块大家一定要注意
一个关键的环节就是
要产生新的a1和a2
然后当前这个数是前两个数之和
这是我们循环题里要做的事
跳出循环的时候输出s
那在循环题里边我们看输出的是谁
是这个t 每一个新的t
而进入循环之前
我们输出了前两个项
大家运行一下这个程序看一下
为了方便我们给这数列给小一点
给6吧
这是前两个数1 1
再下来2 3 5 8 13
没问题13是5和8的和
那5是2和3的和
我们说了刚才给的n是6
那我们这个数列是6项吗
8项 不是6项
那问题在哪呢
问题是在于 前边这两项已经有了
是已知的
那我们这个循环的初值
是不是一定从1开始呢
对这件事情来说 这个数列来说
这块应该改成3
那循环的次数是从3到小于等于n
它就没有问题了
就应该输出的是产生的新的数
然后再已知的前两个数
好了运行一下看 我们还给6
大家看 产生的
没有问题 和是18
那我们再运行一下给一个比较大的数
给一个30
我们看这个数列里边
这就比较
这个格式上
我们看这个数列排列下来这就容易混起来
把它再清楚的看一下
让它的输出前边 是给一个格式
这个前边我们也是给它一个格式
陪个域 让它每个隔得远一些
看一下还给30
这个没有对齐 但是数据隔开了
大家看到每一个数据是隔开了
而且这块我们想让它在新的一行上
让它换行
再运行一下
给30
我们现在看了前面这两个没有换行
下边的每一个都换了一个新的行
这是为什么呢
是因为我们在循环题里边给的数让它换行
这样是不是不是我们所要的
这个换行我们实际上是想说
你把s搁到另一个行上
再运行
大家看现在这里边的这个数据
是错位的
这就是我们大家说的
你每一个数据都给域是10
你产生的后边的数列的位数不一样了
这种情况下你怎么样能让它对整的
就是在你的屏幕上对整的好一些
斜杠t是一个好的方法
这个大家可以下去试一下
就说你使你的这个输出的数据看上去
每一列是对齐的比较好
那么是这个域这步域是绝对的
而这个斜杠t是一个相对的
是位数多了这个空格就会少
是这样的一个关系
大家可以把这个程序下去
把格式也调好看了
然后数列产生的位数
就是数列的个数可以不同
那我们要小心看一下
当你把这个n给的足够大的时候
这个数列还能不能正确的输出
如果不能 为什么
大家可以做一个考虑
-1.1 计算机的问题求解方法
--讨论题:数学模型
-1.1 计算机的问题求解方法--作业
-1.2 C语言与C程序
--讨论题:运算符
-1.3 C语言处理系统与程序调试运行
--例程
-1.4 程序中的人机交互
--例程
--作业讨论区
-2.1 算术运算的C程序实现
--算术混合运算.c
-2.1 算术运算的C程序实现--作业
-2.2 关系运算的C程序实现
--bukao.c
--字符比较.c
--讨论题:比较大小
-2.2 关系运算的C程序实现--作业
-第二周作业--作业
-2.3 逻辑运算的C程序实现
--计算结合性
--闰年.c
--自动购票问题.c
-2.3 逻辑运算的C程序实现--作业
-2.4 位运算的C程序实现
--讨论题:位运算
-2.5 几种很个别的运算
--讨论题
--讨论题
-2.5 几种很个别的运算--作业
-2.6 混合运算及数据类型转换
--讨论题:数据类型
-2.7 顺序结构程序实例
--Video
--三角形面积.c
--讨论题:工业产值
-2.7 顺序结构程序实例--作业
-3.1 程序中的路径选择实现
--打印学生成绩.c
--一元二次方程.c
-3.1 程序中的路径选择实现--作业
-3.2 路径中的再选择——嵌套判断
--例程
--讨论题:程序改错
-3.2 路径中的再选择——嵌套判断--作业
-3.3 复杂判断问题的C程序设计
--3.3 多级选择
--银行存款.c
--讨论题:多级选择
-3.4 多分支问题的C程序设计
--加减乘除运算.c
-3.4 多分支问题的C程序设计--作业
-3.5 GOTO的适当使用
-3.6 选择结构的程序实例
--3.6 程序展示
--计算第几天.c
--讨论题:输出奇数
--讨论题:计算税金
-3.6 选择结构的程序实例--作业
-第四周作业--作业
-4.1 需要重复执行的程序
--求和.c
--打印学生成绩.c
--统计录入速度.c
--求平均数.c
-4.1 需要重复执行的程序--作业
-4.2 至少要执行一次的循环
--n的阶乘.c
--字符分类统计.c
-4.2 至少要执行一次的循环--作业
-4.3 已知循环次数用for语句
--求和问题.c
--数列求和.c
--讨论题:循环语句
-4.3 已知循环次数用for语句--作业
-4.4 循环控制——简单循环应用
--水仙花数.c
--讨论题:死循环
--讨论题:猜数字
-循环结构的程序设计(一)--4.4 循环控制——简单循环应用
-4.5 循环的嵌套
--讨论题:程序运行
-4.5 循环的嵌套--作业
-4.6 break与continue
--最大素数.c
-4.6 break与continue--作业
-4.7 循环的综合应用
--数的排列组合.c
--鸡兔同笼.c
--打印空心字符.c
--讨论题:打印图形
--讨论题:计算闰年
-第六周作业
-第六周作业--作业
-5.1 同类有序数据处理问题
-5.2 一维数组的定义和引用
--数组定义.c
--数组初始化.c
--反向输出.c
--讨论题:对称数
-5.2 一维数组的定义和引用--作业
-5.3 一维字符串数组
--讨论题:编程
-5.4 字符串处理函数
--字符串反向.c
--字符串函数
-5.5 二维数组的定义与使用
-5.6 二维数组的输入输出
-5.6 二维数组的输入输出--作业
-5.7 二维数组的应用
--转置矩阵.c
--讨论题:修改程序
-5.8 二维字符数组
--5.8 单词排序
--单词排序.c
-5.8 二维字符数组--作业
-5.9 数组综合应用
--统计成绩.c
--统计字符次数.c
--讨论题:洗牌
-本期课程结束语
--end
-第八周编程作业
-《C语言程序设计(上)》期末复习参考
--html
-《C语言程序设计(上)》期末复习参考答案
--html