免费预览已结束,剩余107页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
吕韫 2011.3,c+程序设计,掌握结构化程序设计方法 掌握各种选择语句的使用 掌握各种循环语句的使用 掌握各种转向语句的使用 学会综合运用结构控制语句进行简单的编程,教学目标,教学内容,3.1 面向过程的程序设计和算法,3.2 c+的程序和语句,3.4 顺序结构程序设计,3.5 选择结构程序设计,3.6 循环结构程序设计,3.7 转向控制语句,3.8 实例分析,3.9 本章小结,3.3 c+的输入与输出,3.1 面向过程的程序设计和算法,早期沃思提出程序的组成: 程序=数据结构+算法,具体操作步骤,一个完整程序的组成: 程序=算法+数据结构+程序设计方法+语言,3.1.1 算法的概念,对数据的描述:在 程序中要指定数 据的类型和数据 的组织形式,算法的概念: 为解决一个问题,而采取的方法和步骤; 质量高的算法的衡量标准: 1. 方法简单 2. 运算步骤少 3. 运算速度快 算法的分类: 数值算法:求解 非数值算法:帮助解决事务,3.1.1 算法的概念,描述:a = c b = a c = b,例一:互换两个盛有东西的杯子 分析:在准备一个空杯子,简单算法举例(一),a,c,b,简单算法举例(二),例二:计算3个数的和及平均值 解法及描述: 1. 输入 num1,num2,num3 2. num1+num2+num3 = sum 3. sum/3 = ave 4. 输出 sum 和 ave 的值,分析: 乘数:i 乘数变化:i +1 = i 乘积:p 描述: s1:1= p s2:2= i s3:p*i= p s4:i+1= i s5:若 i=5,则返回 s3,否则输出 p,例三:求5!即1*2*3*4*5,简单算法举例(三),例四:求1+2+3+4+5+100的值 分析:典型的累加题 累加器:sum 加数:term 加数变化:term+1= term 描述: s1:0= sum s2:1= term s3:term+sum= sum s4:term+1= term s5:若 term=100,则返回 s3,否则输出 sum,简单算法举例(四),练习: 1. 求:1+1/2+1/3+1/4+1/100 2. 求:1 - 1/2+1/3 - 1/4+- 1/100 作业: 1. 求:1+3+5+7+99 2. 求 pi 的近似值 pi/4 = 1-1/3+1/5-1/7+直到某一项的绝对值小于10(-4)为止,第二节 简单算法举例(四),特性: 有穷性; 确定性; 有零个或多个输入; 有一个或多个输出; 有效性; 总之: 算法如同“黑箱子” 使用者只知其言不知其所以言; “黑箱子”内的所以言由程序设计人员完成,算法的特性,用自然语言表示算法: 特点:通俗易懂,文字冗长; 用流程图表示算法: 特点:直观形象,易于理解; 基本符号: 三种基本结构流程图表示方法: 用n-s图表示算法: 特点:在流程图的基础上省去了带箭头的流程线; 三种基本结构的表示: 用计算机语言表示算法: 低级语言:机器语言、汇编语言 高级语言:pascal、 fortran、 c、 java等,算法的表示,3.1.2 算法的表示,流程图基本符号:,返 回,输入输出框,判断框,处理框,流程线,连接点,起止框,三种基本结构流程图表示方法(一),顺序结构: 例:求个数的总和及均值,返 回,选择结构:,例:求 |x|,返 回,三种基本结构流程图表示方法(一),循环结构: 当型循环结构:先判断后执行 直到型循环结构:先执行后判断,示例:,当型循环,直到型循环,返 回,三种基本结构流程图表示方法(一),循环结构的流程图示例,求 s=1+2+3+10,直到型循环,当型循环,返 回,思路:将复杂问题分布解决 方法:自顶向下、逐步细化、模块化,返 回,3.1.3 结构化程序设计方法,3.2 c+程序和语句,3.2. c+程序的组成,预处理语句 声明部分 对外部函数的声明 对外部数据的声明 函数 函数首部 函数体 局部变量与内部函数声明 执行语句,一个程序单位的基本组成:(p47/图3.1),3.2. c+语句,1. 声明语句:对变量和函数的声明; 2. 执行语句 控制语句:三大基本结构语句。 函数调用语句: 表达式语句:由赋值语句构成的。 空语句:只有一个分号的语句。 复合语句(分程序):用 括起来的语句。,返 回,c+输入输出简介: 输入:从键盘上输入的数据赋给变量; 输出:将程序的运行结果送到屏幕上显示出来; 使用输入输出流在程序开头必须加上编译预处理语句:include 数据输出流cout: 数据输入流cin 简单的输入输出格式控制:,3. c+的输入与输出,格式: cout表达式1表达式2表达式3; 插入运算符 输出数据显示: 多数据输出:默认情况 按每一个数据的实际长度输出,之间没有分隔符; 多数据输出:加入分隔符 可加空格、制表符、换行符;,3.3.1 数据输出流,例:int i=10, j=20, k=30; float x=3.14159, y=100;,默认情况: coutijkn”; coutxyn;,输出结果: 102030 3.14159100,加入分隔符形式: coutitjtkn”; cout“x=“xt“y=“yn;,输出结果: 10 20 30 x=3.14159 y=100,格式: cin变量名1变量名2变量名3 提取运算符 输入数据格式: 输入数据时,各数据间要用分隔符(一般为空格)隔开; 输入回车键的目的: 1.分割作用 2.告诉cin已输入一行数据 注:输入数据的个数、类型、顺序必须与cin列举的变量一一对应。,3.3.2 数据输入流,格式控制函数:书p53/表3.1 函数包含在头文件“iomanip.h”中 示例:书上例子 说明: 指明某进制,对其后均有效; 设置域宽仅对其后一个输出项有效; 小数对其后均有效; 八进制、十六进制适用于整形,3.3.3 输入输出格式控制,字符输出函数putchar( ) 字符输入函数getchar( ),3.3.4 单个字符输入输出函数,字符输出函数,格式: putchar ( 参数 ) 功能: 向终端输出一个字符(也包括控制字符). 例: putchar (b); putchar (66 ); putchar ( 101 ); putchar ( ” ); putchar ( 015 ),返 回,字符输入函数,格式: getchar ( ) 功能: 从键盘上输入一个字符. 说明: 可将得到的代码值赋给一字符型或整型变量. 示例: 输入单个字符. #include main ( ) char c ; /或 int c; / c = getchar ( ); /或 putchar (getchar ( ) ); putchar ( c ) 或 cout ( “%c”,getchar ( ) ); /,返 回,顺序结构的一般形式为:,语句1 语句2 语句n,3.4 顺序结构程序设计,注:在顺序结构程序中,各语句(或命令)是按照位置的先后次序,顺序执行的,且每个语句都会被执行到。,3.4 顺序结构程序设计举例,例l3.4.1.c 输入任意三个整数,求它们的和及平均值。 /*功能:设计一个顺序结构程序,求三个整数的和及平均值。*/ #include int main() int num1,num2,num3,sum=0 ; float aver=0; coutnum1num2num3; /*输入三个整数*/ sum=num1+num2+num3; /*求累计和*/ aver=sum/3.0; /*求平均值*/ cout“num1=“num1“,num2=“num2“,num3=“num3endl; cout“sum=“sum“,aver=“averendl; return 0; ,思考题:能否将“aver=sum/3.0;”中“3.0”改为“3”?,不能,sum为整型,aver定义为浮点型,如果把3.0改为3,输出结果时aver的小数部分自动省略,成为整型,例l3.4.2.c 求方程ax2+bx+c=0的实数根。a,b,c由键盘输入,a0且b2-4ac0。 /*功能:设计一个顺序结构程序,求方程的根。*/ #include #include int main() float a,b,c,disc,x1,x2; coutabc; /*输入方程的三个系数的值*/ disc=b*b-4*a*c; /*求判别式的值赋给disc*/ x1=(-b+sqrt(disc)/(2*a); x2=(-b-sqrt(disc)/(2*a); cout“x1=“x1endl; cout “x2=“x2endl; return 0; ,例l3.4.3.c 从键盘输入一个小写字母,要求用大小写字母形式输出该字母及对应的ascii码值。 #include #include using namespace std; int main() int c1,c2; cout“input a lowercase letter: “; c1=getchar(); putchar(c1); coutdecc1endl; c2=c1-32; /*将小写字母转换成对应的大写字母*/ putchar(c2); coutdecc2endl; return 0; ,程序运行情况如下: input a lowercase letter: a a97 a65,1. 单分支if 语句 其语法形式:,if(表达式) 语句,3.5.1 if语句,3.5 选择结构程序设计,演示【例3.5.1.1】从键盘输入三个整数,按数值从大到小的顺序输出。,#include void main() int i,j,k,temp; coutijk; cout“按您输入的顺序输出:“; couti“,“j“,“kendl; /三个数按从大到小的顺序排序 if(ij) temp=i; i=j; j=temp; ,if(ik) temp=i; i=k; k=temp; if(jk) temp=j; j=k; k=temp; cout“按从大到小的顺序输出:“endl; couti“,“j“,“kendl; ,2. 双分支if -else语句 其语法形式:,if(表达式) 语句1 else 语句2,演示【例3.5.1.2】输入一个年份,判断是否闰年。,#include void main() int year; bool isleapyear; coutyear; isleapyear = (year % 4 = 0 ,3. 多分支if else if语句 其语法形式:,if(表达式1) 语句1 else if(表达式2) 语句2 else if(表达式n) 语句n else 语句n+1,演示【例3.5.1.3】从键盘输入一个表示百分制成绩的非负整数,按相应的五级记分制(a、b、c、d、f)转换,并输出结果。对于所输入的数据,需进行合理性判断,即输入成绩应在0100之间。,#include void main() int score; char grade; coutscore; if(score100) cout“出错!输入成绩超出(0-100)边界!“endl; return; ,else if(score=90) grade=a; else if(score=80) grade=b; else if(score=70) grade=c; else if(score=60) grade=d; else grade=f; cout“输入的成绩是“grade“级!“endl; ,选择结构程序设计 1、if语句 示例,【例一】以下程序的作用是什么? #include void main() char c; coutc; if (c=a ,/*将小写字母转换为大写字母*/,【例二】以下程序的执行结果是什么? #include void main() int x=2,y=-1,z=2; if (xy) if (y0) z=0; else z+=1; coutzendl; ,/*结果是2*/,因为else 总是与靠近它的if配套,常见错误: if (x0) ; if (x=2) if (10”; y=x-1;,if语句小结,三种形式:if 表达式 语句if (表达式)语句1 if (表达式)语句1 else语句2 else if(表达式)语句2 else if (表达式)语句m else 语句n 1、三种形式的if语句都是有一个入口进入,经过对表达式的判断,分别执行相应语句,最后归结到一个出口。 2、三种形式的if语句在if后面都有一个用括号括起来的表达式,一半是逻辑关系或者是关系表达式 3、第2、3种形式的if语句中,在每个else前面都有一个分号,整个语句结束处也有一格分号 4、在if和else后面可以只含一个内嵌的操作语句,也可以含有多个操作语句,次使用花括号“”将几个语句括起来成为一个复合句。,【例一】 #include void main() int m=5; if (m+5) cout5”; else cout“m=”m-; cout“m=“m-); ,运算结果: m=6,m=5,【例二】 #include void main() int m=5; if (+m5) cout5”; else cout“m=”m-; cout“m=”m-; ,运算结果: m5,3.5.2 if语句嵌套,c+语言中规定else始终与同一层中上面最接近它的if语句配对,而这个if语句又没有其他的else与之匹配。最好用大括号括起该层的if语句来确定层次关系。,运算符: ? : 格式:(条件 ? 表达式 1 :表达式 2 ) n-s 图:,优先级:高于赋值, 逗号运算符。 例 : max = a b ? a : b a b ? a : b + 1 结合性:右结合性 例: a b ? a : c d ? c : d,3.5.3 条件运算符和条件表达式,条件运算符注意事项,可以用if分支代替条件运算符。 u 例: a b ? ( a = 100 ) : ( b = 100 ) ; 或 a b ? cout b) cout a ); else cout b ; l 注:只有双路条件分支才能与条件运算符等价。 条件和表达式1,2的类型可以不同。 u 例: (1) x ? a : b (x为整型) (2) x y ? 1 : 1.5 (x , y可为整字符型),【例】分别令x=3,x=0,x= -5,求运行结果。本程序功能? main( ) int x,y; coutx; y=x0?1:x0?-1:0; /*结合方向:由右向左*/ cout“x=x“,”“y=”y; ,结果: x=3,y=1 x=0,y=0 x=-5,y=-1,其语法形式为:,switch(表达式) case 常量表达式1:语句组1;break; case 常量表达式2:语句组2;break; case 常量表达式n:语句组n;break; default:语句组n+1 ,3.5.4 switch开关语句,/*表达式(整型、字符型或枚举型)*/,常量表达式可以为: 整数、字符、表达式如3+4 但不含变量或函数,default 不是c1cn的情况 (位置不一定在最后)。,选择结构程序设计:switch语句 示例,main() char s; cins; switch(s) case a : cout“85100n”; case b : cout“7084n”; case c : cout“6069n”; case d : cout“60n”; default : cout“错误输入n”; ,输入“c”,求输出结果。,结果: 6069 60 错误输入,?!,解决方法break语句: main() char s; cins; switch(s) case a : cout“85100n”;break; case b : cout“7084n”;break; case c : cout“6069n”;break; case d : cout“60n”;break; default : cout“错误输入n”; ,运行结果: 6069,选择结构程序设计:switch语句 示例,讨论 switch(s)语句中的s实际上并非真正的条件选择,而只是一种跳转指示(与if语句不同),表示下面应该跳转到什么位置继续执行。而各case实际上只是一个跳转处的标记。当程序跳转到某个case处时,并非只执行此case行的程序组,而是从此处开始一直向下执行各条语句,直到整个switch开关体结束(“”)。 如果要使每个case处相当于一种if(s)else的效果,必须在其语句组最后加上break语句。,演示【例3.5.4.1】使用switch语句改写例3.5.1.3。,#include void main() int score; char grade; coutscore; if(score100) cout“出错!输入成绩超出(0-100)边界!“endl; else, switch(score/10) case 10: case 9: grade=a;break; case 8: grade=b;break; case 7: grade=c;break; case 6: grade=d;break; default: grade=f;break; cout“输入的成绩是”grade“级!“endl; ,switch开关语句注意事项,1、switch后面的括号内的 “表达式”允许为任何类型 2、当switch表达式的值与某一个case子句中的常量表达式的值相匹配时,就执行case语句,若所有case语句都不能与switch表达式相匹配,就执行default语句 3、每个case表达式的值必须互不相同 4、各个case和default的出现次序不影响执行结果 5、“case常量表达式”只是起语句标号作用 6、default语句可以不加break语句,循环控制,概述 while 语句 do-while 语句 for 语句 几种循环的比较 循环的嵌套,3.6 循环结构程序设计,概述,定义: 循环是在循环条件为真时计算机反复执行的一组指令(循环体)。 循环控制通常有两种方式: 计数控制 事先能够准确知道循环次数时用之 标记控制 事先不知道准确的循环次数时用之 循环语句的几种形式: (1) 用goto语句和if语句构成循环; (2) 用while语句; (3) 用dowhile语句; (4) 用for语句。,返 回,循环结构两大要素: 循环条件 p 结束循环的条件表达式 循环体 a 循环执行的语句或语句组 设置循环条件要特别注意确定: 循环变量的初值 循环变量的终值 循环变量的变化规律,名词解释无限循环死循环,名词解释空循环,概述,其语法形式:,while(表达式) 语句,3.5.1 while语句,while 语句,其循环类型:当型循环,演示【例3.5】计算前n(设n为99)个自然数中所有偶数之和,并输出结果。,#include void main() const int n=99; int counter,sum=0; counter=2; while(counter=n) sum+=counter; counter+=2; cout“the total is “sumendl; ,while 语句,#include void main() int i=1,sum=0; while(i=99) if(i%2=0) sum+=i; else sum=sum; i+; cout “the total is “sumendl; ,方法一,方法二,while语句示例:,示例:求1+2+3+100 #include void main() int i,sum=0; i=1; while (i=100) sum=sum+i; i+; coutsumendl; ,示例:求s *= 100 #include void main() int i , s;s= 1; i = 1; while ( i = 100 ) s * = i ; i + + ; cout “100!” s; ,分析下列程序的功能: #include void main() int n=0; cout“input a string:”endl; while(getchar()!=n) n+; coutn; ,统计输入字符串中字符 的个数,其语法形式:,do 语句 while(表达式);,3.5.2 do-while语句,do-while 语句,do-while 语句,示例: #include void main() int i,sum=0; i=1; do sum=sum+i; i+; while(i100); coutsum; ,返 回,dowhile语句示例,#include void main() int num,c; coutnum; do c=num%10; cout0); coutendl; ,/*取得num的个位数*/,/*输出num的个位数*/,/*直到num=num/10为0*/,结果: 65421 将各位数字反序显示出来,从键盘输入一个整数12456,分析以下程序运行结果。,返 回,其语法形式:,for(表达式1;表达式2;表达式3) 语句,3.5.3 for语句,for 语句,for 语句,循环变量赋初值,循环条件,循环变量增值,格式: for (表达式1; 表达式2; 表达式3 ) 循环体; 流程图: 示例: 表达式的缺省情况:,返 回,for语句示例,例: 求 s = 100! s = 1 ; for ( i = 1;i = 100;i + + ) s * = i ; cout “100!=“ sendl; 例: 求sum = 1+2+3+100 sum = 0; for ( i = 1;i = 100;i + + ) sum+= i; ,返 回,演示【例3.8】将可打印的ascii码制成表输出,使每个字符与它的编码值对应起来,每行打印5个字符。,#include void main() int counter=0,ascii; cout“t ascii码对照表“endl; for(ascii=32;ascii=126;ascii+) coutchar(ascii)“=“asciit; counter+; if(counter%5=0) coutendl; ,可打印的字符的编码值为32126,for语句示例,for语句表达式的缺省情况,1. 表达式或表达式或表达式和省略 例: s=1; i=1; for ( ; i 100 ) break ; 3.表达式1,3可用逗号表达式 例: for (s = 1 , i = 1 ; i = 100 ; i + + , s* = i ) ; 4.三个表达式全省, 但分号不能省 for ( ; ; ) while ( 1 ),返 回,几种循环的比较,已知循环条件: while 循环 : 当循环 do-while 循环:直到循环 已知循环的次数:for循环,返 回,循环的嵌套,含义: 一个循环体内又包含另一个完整的循环结构称为循环的嵌套。 内嵌的循环中还可再嵌套循环多层循环。 示例: 【例一】编程求n! =1!+2!+3!+n!(n由键盘输入) 【例二】求e的近似值: 【例三】打印九九乘法表 : 【例四】100个学生植100棵树, 高中生每人种3棵,初中生每人种2棵, 小学生每3人种1棵, 问高中生, 初中生, 小学生各多少人?,返 回,循环嵌套示例一,外循环为累加型 内循环为阶乘型,方法1:从变化规律分析,程序: #include void main() int i,j,n; long sum=0,s1; coutn; if (n=0) sum=1; else for (i=1;i=n;i+) s1=1; for(j=1;j=i;j+) s1=s1*j ; sum+=s1; cout “sum=“sumendl; ,运行结果: n=5 sum=153,返 回,循环嵌套示例一,在同一个循环中 先阶乘,后累加,方法2:通过单循环实现,#include void main() int i, n ; float s,s1; coutn; s=0, s1=1; if (n=0)s=1; else for (i=1;i=n;i+) s1=s1* i ; s=s+s1; cout “sum=“sendl; ,运行结果: n=5 sum=153,返 回,实现阶乘,累加,循环嵌套示例二,例1:求e的近似值: e = 1 + 1/1! + 1/2! + 1/3! + + 1/10! #include void main() int i,j; float e,t,p; e=1.0; for(i=1;i=10;i+) t=1.0; for(j=1;j=i;j+) t=t*j; p=1.0/t; e=e+p; cout“e=“eendl; ,返 回,循环嵌套示例三,例2:打印九九乘法表 : #include void main() int i,j,t; for(i=1;i=9;i+) for (j=1;j=i;j+) t=i*j; coutj“*”i“=“t“ “; coutendl; ,返 回,循环嵌套示例四,例3: 100个学生植100棵树, 高中生每人种3棵,初中生每人种2棵, 小学生每3人种1棵, 问高中生, 初中生, 小学生各多少人? #include void main() int i,j,k; cout“高中生“ “初中生“ “小学生“endl; for(i=1;i=33;i+) for(j=1;j=50;j+) k=100-i-j; if (k%3=0) ,练习:,写出下列程序的运行结果: #include void main() int i,m=0,n=0,k=0; for(i=9;i=11;i+) switch(i/10) case 0: m+;n+;break; case 10: n+;break; default: k+;n+; coutm“,“n“,“k; ,输出结果为:1,3,2,返 回,练习:,写出下列程序的运行结果: #include void main() int x=0,y=5,z=3; while(z0 运行结果为: 3,2,-1,返 回,变量追踪: z=30&x=10&x=20&x=30 条件不满足 输出x,y,z,此时z使用后自减变为-1,x未自增仍未3,y为2,练习:,写出下列程序的运行结果: #include “stdio.h“ #include void main() int a=1,b=10; do a+; b-=a; b-; while(b0); cout“a=“a“,b=“bendl; ,返 回,变量追踪 a=2,b=b-2=8;b-,b=70 a=3,b=7-3=4;b-,b=30 a=4,b=3-4=-1;b-,b=-20 输出:a=4;b=-2,练习:,以下程序的输出结果是 #include #include void main() int i=0,a=0; while(i20) for(;) if(i%10)=0) break; else i-; i+=11; a+=i; couta; ,返 回,变量追踪 i=0,a=0 i=0+11=11;a=0+11=11 i=11%10=1!=0;i- i=10+11=21;a=11+21=32 i=210跳出循环,3.6 转向控制语句,3.6.1 break语句,break语句用来跳转控制流程。在switch语句或while语句、do-while语句、for语句中使用break语句,其作用是跳出switch语句或内层循环,继续执行逻辑上的下一条语句。,break语句: continue 语句:,break语句,功能:终止语句的执行,提前结束。 适应语句:循环,条件,开关语句。 示例:,main( ) int a=10,y=0; do a+=2;y+=a; if (y50) break; while (a=14); cout“a=“a“,y=“yendl; ,变量跟踪 a y 10 0 12 12 14+2 16+12=28 14+2 16+28=44 14+2 16+44=60,变量跟踪 分析法,3.6 break语句,break语句,示例:输入一个正整数,判断该数是否是素数。 #include #include void main() int i,a; couta; for(i=2;i=a-1;i+) if(a%i=0)break ; if (i=a)cout a“is a prime number.“endl; else cout a“is not a prime number.“endl; ,返 回,演示【例3.11】求2100之间的所有素数,每行显示5个。,#include void main() const int max=100; int n,m,counter=0; bool b; for(n=2;n=max;n+) b=true; for(m=2;m=n-1;m+) if(n%m=0) b=false;break;,if(b) coutnt; counter+; if(counter%5=0) coutendl; ,break语句,3.6.2 continue语句,continue语句可用于循环语句中,其作用是结束本次循环,接着立即测试循环控制表达式,判断是否继续执行下一次循环。,continue 语句,continue 语句示例,返 回,求以下程序段执行后x和i的值。 int i,x; for ( i=1,x=1;i=10) break; if (x%2=1) x+=5; continue; /*结束本次循环*/ x-=3; ,变量跟踪 i x 1 16 2 63 3 38 4 85 5 510 6,continue 语句,#include void main() int i=1; while (i=15) if (+i%3!=2) continue; else couti; coutendl; ,变量跟踪 i +i%3 输出i 12 2 2 23 0 34 1 45 2 5 56 0 ,分析下列程序的功能 #include void main() int a,i,k=0,s=0; couta; if(a=0) continue; k+; s+=a; cout“k=“k“,s=“s; ,输入10个数,判断10个数中大于0的数的个数,并求这10个数的和,演示【例3.12】输出1100之间所有不能被3或5或7整除的整数。每行显示10个。,#include void main() int n,counter(0); for(n=1;n=100;n+) if(n%3=0|n%5=0|n%7=0) continue; coutnt; counter+; if(counter%10=0) coutendl; coutendl; ,continue 语句,判断该数是否能被3、5、7整除,输出不能被3、5、7整除的数,累加器,计算输出数的个数,控制每行输出10个数,break 和 continue 的区别,共性:均是强行跳出某个流程。 区别: continue :结束本次循环,进行下一次循环。 break :结束整个循环,不管循环条件是否成立。 图示: while(表达式 1) while (表达式1) if (表达式2) break; if (表达式 2) continue ; ,返 回,程序举例,常见题型: 1. 累加题型: 2. 累乘题型: 3. 分析归纳法: 4. 筛选法: 5. 图形输出问题: 6. 密码问题:,返 回,常见题型之累加型,题型:诸如以下模式 s = + 分析: 初值设置:1.累加器:s=0; 2. 加数:i =第一个加数; 循环体:1. 将当前加数放在累加器里; 2.加数变换; 循环次数:1. 已知加数的个数; 2.已知最后一项的条件 算法: s=0; for( i=1 ;i=n ;i+ ) s=s+;,返 回,累加题型事例:,【例一】 编程求i =1+2+3+4+n ( n 100),程序: #include void main() int i ,n, s=0; coutn; for ( i=1;i=n;i+) s=s+i; cout“sum=“s; ,如果是 i =1+1/2+1/3+1/n 呢?,返 回,求i =1+1/2+1/3+1/n,#include void main() int n; float i,s=0; coutn; for ( i=1;i=n;i+) s=s+1/i; cout“sum=“sendl; ,累加题型事例:,【例二】编程求11/2+1/31/4+1/5 +1/991/100,方法1:从变化规律分析,分母为奇数时,相加 分母为偶数时,相减,程序: #include void main() int i; float s=0; for (i=1;i=100;i+) if (i%2) s=s+1/i; else s=s-1/i; cout“sum=“s; ,运行结果:sum=1.000000,错在哪里?,返 回,i为整型,1也是整型,所以1/i=0,累加题型事例:,【例二】编程求11/2+1/31/4+1/5 +1/991/100,方法2:这是个累加型算法的编程题,程序: #include #include void main() int i; double s=0; for (i=1;i=100;i+) s+=pow(-1,i+1)/i; cout“sum=“s; ,程序: #include #include void main() int i ,k=1; float s=0; for (i=1;i=100;i+) s=s+ k / i ; k = -k ; cout“sum=“s; ,运行结果:sum=0.688172,运行结果:sum=1.000000,错在哪里?,i为整型,k也是整型,所以k/i=0,累加题型事例:,【例三】用/4=1-1/3+1/5-1/7+公式求的近似值,直到某一项的绝对值小于10-6为止。,#include #include void main() int s; float n,t,pi; t=1,pi=0,n=1,s=1; while(fabs(t)1e-6) pi=pi+t;n=n+2;s=-s;t=s/n; pi=pi*4; cout“pi=“pi; ,返 回,判断某一项绝对值是否小于10-6,常见题型之累乘型:,题型:诸如以下模式 s = * * * * * * 分析: 初值设置:1.累乘器:s=1; 2.乘数:t =第一个乘数; 循环体:1. 将当前乘数放在累乘器里; 2.乘数变换; 循环次数:1. 已知乘数的个数; 2.已知最后一项的条件 算法: s=1; for( i=1 ;i=n ;i+ ) s=s*;,返 回,【例一】 编程求n! (n由键盘输入),分析 i=1 s0= 1=s0 (初值) i=1 s1= 01=s01 i=2 s2=12=s12 i=3 s3=123=s23 i=4 s4=1234=s34 i=n sn=1 234n=sn-1n,累乘题型事例:,返 回,【例一】 编程求n! (n由键盘输入),程序: #include void main() int i ,n, s=1; coutn; for ( i=1;i=n;i+) s=s*i; cout“sum=“s; ,运行结果: n=5 sum=120,运行结果: n=8 sum=-25216,why?,累乘题型事例:,返 回,s设为了整型,8!32767,所 以会报错,此时应把s设为长 整型,常见题型之分析归纳法:,方法:通过分析归纳,找出变量的变化规律 【例】 兔子繁殖问题(斐波那契数列问题) 著名意大利数学家斐波那契(fibonacci)1202年提出一个有趣的问题。某人想知道一年内一对兔子可以生几对兔子。他筑了一道围墙,把一对大兔关在其中。已知每对大兔每个月可以生一对小兔,而每对小兔出生后第三个月即可成为“大兔”再生小兔。问一对大兔一年能繁殖几对小兔?,返 回,分析归纳法事例:,已知每对大兔每个月可以生一对小兔,而每对小兔出生后第三个月即可成为“大兔”再生小兔。问一对大兔一年能繁殖几对小兔?,由分析可以推出,每月新增兔子数fn=1,1,2,3,5,8,13,21,34,(斐波那契数列) 月份n 兔子数fn 1 f1=1 2 f2=1 3 f3=2=f1+f2 4 f4=3=f2+f3 5 f5=5=f3+f4 n fn=fn-1+fn-2,返 回,分析归纳法事例:,#include void main() int f1=1,f2=1,f=2,i,s=2,n; cout(“input n=“); cin(“%d“, ,兔子繁殖问题(斐波那契数列问题),返 回,常见题型之筛选法:,方法:把所有可能的情况一一测试,筛选出符合条件的各种结果进行输出。,【例】求100200之间不能被3整除也不能被7整除的数 。,分析:求某区间内符合某一要求的数,可用一个变量“穷举”。所以可用一个独立变量x,取值范围100200。,for (x=100;x=200;x+) if (x%3!=0,如果是求指定条件的奇数呢?,x=101;x=200;x=x+2,如果是求
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 包装设计师多选题习题库及参考答案
- 2025~2025专升本考试题库及答案第522期
- 局学雷锋主题活动工作总结-活动总结范文-
- 2025年“安康杯”活动竞赛培训复习题库及答案
- 全国大学生双碳科普知识竞赛答案
- 《创新思维与创业》复习题
- 中级经济师考试金融专业考前预测模拟模拟试题及答案2
- 华二自招练习题(4)-内部资料
- 中级经济师考试题库1000题
- 《个人与团队管理》期末复习选择题题库
- 动物疫病防治员岗前核心能力考核试卷含答案
- 2025广东深圳市盐田区第二批次招聘公共事务辅助员12人笔试考试备考题库及答案解析
- 2025年初中历史学科教师课程标准考试测试题及参考答案
- 2025重庆江城水务招聘15人笔试历年典型考点题库附带答案详解试卷2套
- 社会保险会计培训
- 《2025年健康体检服务合同协议》
- 2025河南省农业信贷担保有限责任公司秋季专场招聘28人考试笔试备考试题及答案解析
- 西藏养老护理考试题库大全及答案解析
- DZ∕T 0033-2020 固体矿产地质勘查报告编写规范(正式版)
- Q∕SY 1180.3-2014 管道完整性管理规范 第3部分:管道风险评价
- 光伏组件培训全ppt课件(PPT 77页)
评论
0/150
提交评论