精通C程序设计第四章基本程序设计技术_07[1].1_
第四章基本程序设计技术
本章内容提要:4.1 计数(统计)问题
4.2 求最大值与最小值4.3 递推迭代
4.4 字符图形4.5 搜索(穷举)求解 4.6 数论有关问题 作业Ch4-1
4.1 统计(计数)问题方法:计数变量c的初值为0, 每输入一个数据,进行 必要判断后,若输入的数据满足统计条件,则计数 变量c自加1,这样当对所有输入进行判断后,计数 变量c的值就是统计的结果。
例1(教材例4.2):输入若干非0实数,直到输入0时停 止,要求输入的实数最多不超过20个,统计其中正 数的个数,负数的个数。 分析:设三个计数变量: n-统计输入的数据总个数(为什么有必要?) posn-统计正数的数目 negn-统计负数的数目Ch4-2
4.1 统计(计数)问题(续1)#include "stdio.h" void main() { int n,posn,negn;double a; n=posn=0; printf("Input real numbers:\n"); while(1) /*典型循环结构(一)*/ { scanf("%lf",&a); if(!a) break; if(a>0) posn++; n++; if(n>=20) break; } negn=n posn; printf("posn=%d,negn=%d\n",posn,negn); }Ch4-3
4.1 统计(计数)问题(续2)典型循环结构(一) 必需break永真条件真
典型循环结构(二) 无需break预输入一个数据是
输入一个数据 到停止吗?否 是
到停止吗?否
统计或其它处理 再输入一个数据
统计或其它处理
Ch4-4
4.1 统计(计数)问题(续3)用典型循环结构(二)改写例1程序 #include "stdio.h" void main() { int n,posn,negn;double a; n=posn=0; printf("Input real numbers:\n"); scanf("%lf",&x); while(a!=0&&n<20) { if(a>0) posn++; n++; if (n<20) scanf(“%lf”,&a); } negn=n-posn; printf(“posn=%d,negn=%d\n”,posn,negn); }Ch4-5
4.1 统计(计数)问题(续4完)例2(教材例4.1):输入一行字符,统计其中的英文字 母个数。提示:即输入若干字符,直到输入'\n'时停 止输入#include “stdio.h” void main() { char ch; int n=0; printf(“Input a string:\n”); while(1) { ch=getchar();if(ch=='\n') break; if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z') n++; } printf(“Number of letters is %d.\n”,n); }Ch4-6
4.2 求最大值与最小值方法:设置最大(小)值变量max(min), 其初值为其数 据类型能够表示的最小(大)值,或者一个比待选数据 集合中所有数据都小(大)的值,或者待选数据集合中 的任一个数据。
将待选数据集合中的每一个数据与max(min)比 较, 若大于max(小于min),则该数据存入max(min), 直到所有数据比较结束。 例1(教材例4.3):输入若干long型非0整数,直到输 入0时停止,求输入的非0整数中的最大值。
Ch4-7
4.2 求最大值与最小值(续1)源程序1:/ 预置变量max初值为 2147483648 /#include "stdio.h" void main() { long a,max= 2147483648; printf("Input long integers until input 0:\n"); while(1) /*典型循环结构(一)*/ { scanf("%ld",&a);if(!a) break; if
(a>max) max=a; } printf("max=%ld\n",max); }Ch4-8
4.2 求最大值与最小值(续2完)源程序2:/ 预置变量max初值为第一个输入数据 /#include "stdio.h" void main() { long a,max; printf("Input long integers until input 0:\n"); scanf("%ld",&max); if(!max) { printf("No input.\n");return; } while(1) { scanf("%ld",&a);if(!a) break; if(a>max) max=a; } printf("max=%ld\n",max); }Ch4-9
4.3 递推迭代4.3.1 数列求和/求积的累加/累乘法
记数列前n项为a0, a1, … , an 1。1. 累加法求数列前n项和
数学算式: s
ai 0
n 1
i
程序算法:s=0; for(i=0;i<n;i++) s+=ai; 2. 累乘法求数列前n项积数学算式: p
i 0
n 1
ai
程序算法:p=1; for(i=0;i<n;i++) p =ai;Ch4-10
4.3 递推迭代(续1)4.3.2 计算数列通项的算法 1. 直接用通项公式计算 局限性: (1) 通项公式可能不存在; (2) 通项公式比较复杂时,算法效率低。 2. 用递推迭代法计算通项a0 (已知) i=0 i>0
数学算式:ai=f(i)·i 1 a
程序算法:a=a0; /*初始化*/ a=f(i) a; /* i从1循环到n 1 */ 迭代Ch4-11
4.3 递推迭代(续2)优越性: 当通项ai含有与项号i有关的 阶(累)乘或者 指数运算时,源代码简捷,效率高。 4.3.2 综合举例 例1(教材例4.5)利用下面的公式计算 的近似值,要 求计算到最后一项的绝对值小于10 6时停止计算。 4 1 1 3 1 5 1 7
算法设计:正负交叉项的实现方法一般是采用一个 符号变量s,初值为1,每循环一次,执行语句 s s;显然这样s变量的值就会产生正负交叉的序列 1, 1, 1, 1, 1, 1, …。Ch4-12
4.3 递推迭代(续3)通项的绝对值直接由项号计算(无需迭代法),即 1 ai i=1, 3, 5, 7, …i
#include "stdio.h" #include "math.h" /*为什么需要这一行?*/ void main() { double a,pi;int i,s; a=1.0;pi=0;s=1;i=1; while(fabs(a)>1e 6) /* 注意计算精度控制方法 */ { pi+=s a; i+=2; a=1.0/i; s= s; } pi=pi 4;printf("pi=%f\n",pi); } Ch4-13
4.3 递推迭代(续4)例2(教材例4.6)计算下面的级数,直到最后一项的绝 对值小于10-6时停止计算,输出计算结果。s ex
1
x 1!
x
2
x
3
x
4
2!
3!
4!
算法设计:适合迭代法,不适合直接计算通项 1 ak=x k a k 1
k=0
k=1, 2, 3, …
通项迭代表达式: a =x/k; //k从1起循环Ch4-14
4.3 递推迭代(续5)#include "stdio.h" #include "math.h" void main() { double x,s,a;int k; printf("Input x=");scanf("%lf",&x); a=1;s=0;k=0; while(fabs(a)>1e 6) { s+=a; k++; a =x/k; } printf("s=%g\n",s); } 程序运行情况: 问题与思考: Input x=0.5 k初值为1,程序怎样修改? s=1.64872Ch4-15
4.3 递推迭代(续6)例3(教材例4.7) 输入x的值,用下面的公式计算cos x。 要求计算到最后一项绝对值小于10-6时停止计算,输 出计算结果。cos x 1
x2
x
4
x
6
x
8
x
10
2!
4!
6!
8!
10 !
算法设计:适合迭代法 1 k=0 ak=x2
k ( k 1)
ak 2
k=2, 4, 6, …
通项迭代表达式: a =x x/k/(k 1); //k从2起加2循环Ch4-16
4.3 递推迭代(续7)#include "stdio.h" #include "math.h" void main() { double x,s,a;int k; printf("Input x=");scanf("%lf",&x); a=1;s=0;k=0; while(fabs(a)>1e 6) { s+=a; k+=2; a = x x/k/(k 1); } printf("s=%g\n",s); } 程序的运行情况: Input x=1.047 s=0.500172Ch4-17
4.3 递推迭代(续8)例4(教材例4.8) 输入n, m …… 此处隐藏:2697字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [资格考试]石油钻采专业设备项目可行性研究报告编
- [资格考试]2012-2013学年度第二学期麻风病防治知
- [资格考试]道路勘测设计 绪论
- [资格考试]控烟戒烟知识培训资料
- [资格考试]建设工程安全生产管理(三类人员安全员
- [资格考试]photoshop制作茶叶包装盒步骤平面效果
- [资格考试]授课进度计划表封面(09-10下施工)
- [资格考试]麦肯锡卓越工作方法读后感
- [资格考试]2007年广西区农村信用社招聘考试试题
- [资格考试]软件实施工程师笔试题
- [资格考试]2014年初三数学复习专练第一章 数与式(
- [资格考试]中国糯玉米汁饮料市场发展概况及投资战
- [资格考试]塑钢门窗安装((专项方案)15)
- [资格考试]初中数学答题卡模板2
- [资格考试]2015-2020年中国效率手册行业市场调查
- [资格考试]华北电力大学学习实践活动领导小组办公
- [资格考试]溃疡性结肠炎研究的新进展
- [资格考试]人教版高中语文1—5册(必修)背诵篇目名
- [资格考试]ISO9001-2018质量管理体系最新版标准
- [资格考试]论文之希尔顿酒店集团进入中国的战略研
- 全国中小学生转学申请表
- 《奇迹暖暖》17-支2文学少女小满(9)公
- 2019-2020学年八年级地理下册 第六章
- 2005年高考试题——英语(天津卷)
- 无纺布耐磨测试方法及标准
- 建筑工程施工劳动力安排计划
- (目录)中国中央空调行业市场深度调研分
- 中国期货价格期限结构模型实证分析
- AutoCAD 2016基础教程第2章 AutoCAD基
- 2014-2015学年西城初三期末数学试题及
- 机械加工工艺基础(完整版)
- 归因理论在管理中的应用[1]0
- 突破瓶颈 实现医院可持续发展
- 2014年南京师范大学商学院决策学招生目
- 现浇箱梁支架预压报告
- Excel_2010函数图表入门与实战
- 人教版新课标初中数学 13.1 轴对称 (
- Visual Basic 6.0程序设计教程电子教案
- 2010北京助理工程师考试复习《建筑施工
- 国外5大医疗互联网模式分析




