《大学c++流程控制课件.ppt》由会员分享,可在线阅读,更多相关《大学c++流程控制课件.ppt(39页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第三章第三章 流程控制流程控制顺序结构顺序结构 选择结构选择结构 循环结构循环结构 其它控制语句其它控制语句 应用举例应用举例 循环的嵌套循环的嵌套 循环体内包含另一个完整的循环结构。循环体内包含另一个完整的循环结构。例例:打印九九乘法表打印九九乘法表#include using namespace std;void main()coutt 九九乘法表九九乘法表endl;coutt-endl;for(int i=1;i=9;i+)for(int j=1;j=9 ;j+)coutij=i*jt;coutendl;思考:思考:打印上三角或下三角程序如何改动?打印上三角或下三角程序如何改动?j=i/
2、控制输出的行数控制输出的行数/每行输出的格式每行输出的格式#include using namespace std;void main()cout*endl;cout-endl;for(int i=1;i=9;i+)for(int j=1;j10;j+)if(ji)coutt;else coutij=i*jt;coutendl;空格空格字母个数以及规律字母个数以及规律1.1.外循环控制输出外循环控制输出的行数的行数2.2.内循环中一个循内循环中一个循环控制每行输出的环控制每行输出的空格数目。空格数目。3.3.内循环中另一内循环中另一个循环控制每行个循环控制每行输出字母输出的输出字母输出的个数及
3、规律。个数及规律。4.4.输完一行输完一行换行。换行。#includeusing namespace std;void main()int i,j,k;char c;for(i=1;i =26;i+)换行换行 for(j=1;j=26-i;j+)cout;控制每行输出的空格控制每行输出的空格for(k=1;k=i;k+)c=a+k-1;控制每行输出的字母控制每行输出的字母个数个数 coutc ;coutn;例:打印出如下图案(菱形)例:打印出如下图案(菱形)1.前前5行一个规律,后行一个规律,后4行一个规律,利用双重行一个规律,利用双重for循环,第一层控制行,第二层控制循环,第一层控制行,第
4、二层控制列列。*程序分析:程序分析:空格空格和和“*”#includeusing namespace std;void main()int i,j,k;*for(i=1;i=5;i+)for(j=1;j=5-i;j+)cout;控制控制空格空格输出输出for(k=1;k=2*i1;k+)cout*;控制控制“*”输出输出coutendl;for(i=1;i=4;i+)for(j=1;j=i;j+)cout;for(k=1;k=9-2*i;k+)cout*;coutendl;*扩展到扩展到n行菱形图案行菱形图案?#includeusing namespace std;void main()int
5、 i,j,k;*for(i=1;i=5;i+)for(j=1;j=5-i;j+)cout;for(k=1;k=2*i-1;k+)cout*;coutn;if(n%2)i=(n+1)/2;j=(n+1)/2-i;for(i=1;i=4;i+)for(j=1;j=i;j+)cout;for(k=1;k=9-2*i;k+)cout*;coutendl;*i=n/2;k=n-2*i;例:利用牛顿迭代法求方程例:利用牛顿迭代法求方程在在x0=3附近的根的近似值。附近的根的近似值。0yx(x0,f(x0)(x1,f(x1)x0 x1x2x3x输入输入x0值,由公式求出值,由公式求出x1,再由再由x1从公式
6、求出从公式求出x2,.,直直到到 x n+1为方程为方程f(x)=0在在X0附近的一个近似附近的一个近似根根,设设 为为10-5#include#includeusing namespace std;void main()double x0,x1,flx,fx;truex1=初值初值x0=x1x1=根据公式求根据公式求|x1-x0|精度精度x1为求得的根为求得的根false x1=3;x1=3;do x0=x1;x0=x1;fx=3*x0*x0*x0-4*x0*x0-5*x0+1;flx=9*x0*x0-8*x0-5;x1=x0-fx/flx;x1=x0-fx/flx;while(fabs(x
7、1-x0)1e-5);while(fabs(x1-x0)1e-5);coutx1;coutx1;思考思考:若若若若迭迭迭迭代代代代最最最最高高高高次次次次数数数数MM后后后后,即即即即使使使使达达达达不不不不到到到到精精精精度度度度也也也也要要要要输输输输出出出出结结结结果果果果,程程程程序序序序该如何修改?该如何修改?该如何修改?该如何修改?int n=0;n=n+1;n=M;1.1.求级数和:求级数和:关键:找通项关键:找通项方法:指定项数或指定精度方法:指定项数或指定精度2.2.双重循环双重循环打印九九乘法表打印九九乘法表3.3.求极值求极值指定项数、指定结束数据、假设第一个数、指定项数
8、、指定结束数据、假设第一个数、假设一不可假设一不可能的数能的数4.4.最大公约数最大公约数5.5.质数质数应用:应用:第四章第四章 复杂数据及运算复杂数据及运算数组数组指针指针字符串字符串枚举类型枚举类型运算优先级与类型转换运算优先级与类型转换数组例:求例:求N N个学生的平均成绩,并统计个学生的平均成绩,并统计高于平均高于平均分分的人数的人数 。int k=0;float mark,ave,sum=0;for(int i=0;imark;sum=sum+mark;ave=sum/N;for(i=0;imark;if(markave)k+;再次输入每个再次输入每个学生的分数学生的分数3 名?名
9、?100名?名?int k=0;float s100,ave,sum=0;for(i=0;isi;sum=sum+si;ave=sum/100;for(i=0;iave)k+;数数组组:一一组组数数据据类类型型相相同同的的元元素素按按一一定定顺顺序序存存放放,构构成成的数据集合。的数据集合。float s100;学生分数学生分数数据数据类型类型基本基本类型类型 构造构造类型类型 整型整型 (intint)实型实型 字符型字符型(char)(char)布尔型布尔型(boolbool)空类型空类型(void)(void)指针指针 单精度型单精度型(float)(float)双精度型双精度型(dou
10、ble)(double)数组数组结构型结构型(structstruct)共用体共用体(union)(union)枚举枚举(enumenum)类类(class)(class)一维数组一维数组数组定义数组定义存储和初始化存储和初始化数组元素的引用和基本操作数组元素的引用和基本操作一维数组的应用举例一维数组的应用举例一维数组的定义、存储和初始化一维数组的定义、存储和初始化数组定义数组定义1 1、数组概念、数组概念:一组:一组同类型数据同类型数据组成的组成的序列序列,用一个统一的用一个统一的数组名标识数组名标识这一组数据,用这一组数据,用下下标标指示数组中元素的序号。指示数组中元素的序号。int a1
11、0;2 2、定义:数据类型、定义:数据类型 数组名数组名 元素个数元素个数 ;可为常量可为常量 和和 符号常量符号常量,不能用变量不能用变量说明:说明:数组名的命名方法遵循标识符命名规则。数组名的命名方法遵循标识符命名规则。C+C+语言用方括号语言用方括号 表示数组元数个数。表示数组元数个数。元素个数为元素个数为常量表达式常量表达式,且下标从,且下标从0 0开始。开始。数组必须数组必须先定义后使用先定义后使用,每一个元素相当,每一个元素相当于一个变量于一个变量数组由一段数组由一段连续的存储空间构成连续的存储空间构成,数组名代,数组名代表数组的起始地址表数组的起始地址,是常量。是常量。存储和初始
12、化存储和初始化int s5;s0 s1 s2 s3 s4 s错误错误:int s=10;int as;float b3.4 正确:正确:const int s=10;int as;float f5;数组初始化数组初始化给所有元素赋初值。给所有元素赋初值。int a5=0,2,4,6,8;int a=0,2,4,6,8;给部分元素赋初值。给部分元素赋初值。int a10=1,3,5,7,9;int a10;a=1,3,5,7,9;/数组名是个地址常量,不能被赋值。数组名是个地址常量,不能被赋值。int a10;a10=1,3,5,7,9;a10a10不是数组中不是数组中的元素,不能用的元素,不能
13、用花括号为一个元花括号为一个元素赋多个值素赋多个值int c3=1,2,3,4;/常量个数超过数组定义的长度。常量个数超过数组定义的长度。数组元素的引用和基本操作数组元素的引用和基本操作数组元素的引用数组元素的引用形式:数组名形式:数组名 下标下标 int a10=1,2,3,4,5,6,7,8,9,10,b10,i(2);普通普通变量变量a3=a0+ai;couta2+i;coutaa3;couta10;couta;b=a;/对对数值数组数值数组一般不能作为一个整体进行操作一般不能作为一个整体进行操作/数组下标越界数组下标越界 基本操作基本操作(1)(1)数组元素的输入数组元素的输入for(
14、j=0;jaj;(2)(2)通过随机函数通过随机函数rand()rand()产生产生0 0100100的的N N个数据个数据for(i=0;iN;i+)ai=rand()%101;/stdlib.h中含该函数说明中含该函数说明(3)(3)数组元素的求和数组元素的求和sum=0;for(j=0;jN;j+)sum+=aj;(4)(4)求数组中的最大元素求数组中的最大元素max=a0;for(j=1;jmax)max=aj;(5)(5)求最大元素下标求最大元素下标imax=0;for(j=1;jN;j+)(6)(6)将最大元素放于某一特定位置将最大元素放于某一特定位置imax=0;for(j=1;
15、jaimax)imax=j;if(imax!=0)t=a0;a0=aimax;aimax=t;if(ajaimax)imax=j;例例1:著名意大利数学家斐波那契(:著名意大利数学家斐波那契(Fibonacci)1202年提出一个有趣的问题。某人想知道年提出一个有趣的问题。某人想知道一年内一对一年内一对兔子可以生几对兔子兔子可以生几对兔子。他筑了一道围墙,把一对。他筑了一道围墙,把一对大兔关在其中。已知大兔关在其中。已知每对大兔每个月可以生一对每对大兔每个月可以生一对小兔小兔,而,而每对小兔出生后第三个月即可成为每对小兔出生后第三个月即可成为“大大兔兔”再生小兔再生小兔。问一对小兔一年能繁殖几
16、对小兔。问一对小兔一年能繁殖几对小兔?一维数组的应用举例一维数组的应用举例用循环该如何实现呢?用循环该如何实现呢?分析:分析:表示大兔,表示大兔,表示小兔表示小兔例例1:用数组求:用数组求Fibonacci数列问题。数列问题。#includeusing namespace std;void main()int i,f20=1,1;for(i=2;i20;i+)fi=fi-1+fi-2;for(i=0;i20;i+)if (i%5=0)coutendl;coutfi;运行结果:运行结果:11235813213455891442333776109871597258441816765程序填空:程序填
17、空:利用一维数组求显示利用一维数组求显示fibonacci数列的前数列的前20项,每行显示项,每行显示5个数,每个数宽度个数,每个数宽度5位,即位,即0,1,1,2,3,5,8,13。#include”iostream”void main()int i;int x20=;for(i=2;i20;i+)for(i=2;i20;i+)if(i%5=0)coutendl;cout ;coutendl;using namespace std;#include”iomanip”0,1xi=xi-1+xi-2sew(5)xi;例例2:下列程序将数组:下列程序将数组a中的每中的每4个相邻元素的平均个相邻元素
18、的平均值存放于数组值存放于数组b中中。#include”iostream”void main()using namespace std;int a10,m,n;float b7;for(m=0;mam;for(m=0;m7;m+);for(n=m;n+)bm=bm+an;for(m=0;m7;m+)coutbm;bm=0;nm+4;bm=bm/4;例例3:从键盘上输入一个正整数,判断其是否:从键盘上输入一个正整数,判断其是否为回文数,所谓为回文数,所谓回文数是顺读与反读回文数是顺读与反读都是都是一样的数,如一样的数,如12321,45654都是回文数。都是回文数。#includevoid ma
19、in()int i,k;long n,m;int digit10;coutn;m=n;k=0;while(m0)digitk+=m%10;m/=10;k-;for(i=0;ik;i+,k-)if(digiti!=digitk)break;if(ik)coutn“不是回文数不是回文数;else coutn“是回文数是回文数;例例4:插入数据:插入数据基本思想:基本思想:1)首先要查找待插入数据在数组中的位置)首先要查找待插入数据在数组中的位置k;2)然后从然后从最后一个元素开始往前直到下标为最后一个元素开始往前直到下标为k的元的元素依次往后移动一个位置;素依次往后移动一个位置;3)第第k个元素个元素的位置空出,将欲插入的数据插入。的位置空出,将欲插入的数据插入。例例:在有序数组在有序数组a中插入数值中插入数值x for(k=0;k9;k+)if(x=k;i-)ai+1=ai;ak=x;例例5.删除数据删除数据 从从k+1k+1到到n n个位置向前移动;将数组元素减个位置向前移动;将数组元素减1 1。删除操作首先也是要找到欲删除的元素的位置删除操作首先也是要找到欲删除的元素的位置k k;for(k=0;k10;i+)if(key=ak)break;for(j=k;j10;j+)aj=aj+1;
限制150内