C++程序设计(谭浩强完整版)第六章PPT学习教案
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第19页/共93页
程序模拟这个方法,开始时把a[0][0] 的值赋给变量max,max就是开始时的擂 主,然后让下一个元素与它比较,将二 者中值大者保存在max中,然后再让下 一个元素与新的max比,直到最后一个 元素比完为止。max最后的值就是数组 所有元素中的最大值。
第20页/共93页
max=a[0][0]; //使max开始时取a[0][0]的值 for (i=0;i<=2;i++) //从第0行到第2行 for (j=0;j<=3;j++) //从第0列到第3列 if (a[i][j]>max)//如果某元素大于max { max=a[i][j]; //max将取该元素的值 row=i; //记下该元素的行号i colum=j; //记下该元素的列号j }
static int a[2][3];
第17页/共93页
void main(void)
{ int a[3][3], i, j;
i=0 a[0][0]=0 a[0][1]=1 a[0][2]=2
for (i=0; i<3; i++) i=1 a[1][0]=0 a[1][1]=1 a[1][2]=2
数组必须先定义,具体引用时(赋值、运算、输出)其元
素等同于变量。
a
void main(void )
i=0, a[0]=0
{ int i, a[10]; 定义 i=1, a[1]=1
for ( i=0; i<10; i++) i=2, a[2]=2
赋值 a[i]=i; i=9, a[9]=9
for ( i=9; i>=0 ; i--)
其元素分别为:a[0][0], a[0][1], a[0][2], a[0][3],
a[1][3],
a[1][0], a[1][1], a[1][2],
a[2][0], a[2][1], a[2][2], 其a[2行][列3] 的序号均从0开始。若存放首地址为2000H ,则在内存中为:
2000H
C++不允许对数组的大小作动态的定义,即数组的 大小不能是变量,必须是常量。
第2页/共93页
如果要根据不同的数值改变数组的大小,可 用常量表达式。如:
#define SIZE 50 void main(void) { int art[SIZE];
...... }
第3页/共93页
二、一维数组元素的引用
int a[10]= {0,1, 2, 3, 4, 5};
int a[10]= {0,1, 2, 3, 4, 5, 0, 0, 0, 0}; 2、不能给数组整体赋值,只能一个一个地赋值。
int a[10]= {0,1,2,.....,9}; 非法
int a[10]= {0,1, 2, 3, 4, 5,6,7,8,9};
第15页/共93页
3、部分赋值
int a[3][4]={{1},{5},{9}};
/* a[0][0]=1, a[1][0]=5, a[2][0]=9 其余元素为0
*/ 1000
0100
5000
5000
9000
0000
int a[3][4]={{0,1},{5}}; /* a[0][0]=0, a[0][1]=1, a[1][0]=5 */
第10页/共93页
一般,元素的序号从0开始,因此,程序可以变动如下:
for (j=0; j<n-1; j++) for (i=0; i<n-1-j; i++) { if (a[i]>a[i+1]) { t=a[i]; a[i]=a[i+1]; a[i+1]=t; } }
第11页/共93页
二维数组的定义和引用
{ t=a[i][j];
{ t=a[i][j];
a[i][j]=a[j][i];
a[i][j]=a[j][i];
a[j][i]=t; }
a[j][i]=t; } 第22页/共93页
打印杨辉三角形 1 11 12 1 13 3 1 14 6 4 1 1 5 10 10 5 1
a[i][j]=a[i-1][j-1]+a[i-1][j]
第5页/共93页
3、可以用 int a[ ]= {0,1, 2, 3, 4, 5, 6, 7, 8, 9}; 给数组赋值,编译器会自动计算出内的元素项数, 并将数组定义为该长度。
4、用局部static 或全局定义的数组不赋初值,系 统均默认其为‘\0’。 static int a[10];(即存储在静态数据区中的数组 其元素默认为0)
第16页/共93页
4、分行或全部赋值时,可以省略第一维,第二维 不可省。 int a[ ][4]={{1,2},{5,6,7,8,}{9,10,11,12}}; 5、不能给数组整体赋值,只能一个一个地赋值。
int a[2][3]={1,2,3,.....,12}; 6、用static 定义的数组不赋初值,系统均默认其 为‘\0’。
C++程序设计(谭浩强完整版)第六章
会计学
1
一维数组的定义和引用
数组是同一类型的一组值(10个 char 或15个 int) ,在内存中顺序存放。
整个数组共用一个名字,而其中的每一项又称 为一个元素。
一、定义方式:
类型说明符 数组名[常量表达式];
定义类型 元素个数
int a[4]; // 表明a数组由4个int型元素组成
}
第7页/共93页
下面程序的运行结果是:
void main(void)
{ int a[6], i;
for (i=1; i<6; i++)
{ a[i]=9*(i-2+4*(i>3))%5 ;
cout<<a[i]<<‘\t’;
} }
a[0] a[1] a[2] a[3] a[4] a[5] 随机 -4 0 4 4 3
85 5 55
58 4 44 44 8 23 22 2 80 00 0 08 99 9 99
544 4
453 3 335 0 000 5 888 8 999 9
第一趟 循环5次
第二趟
循环4次
第9页/共93页
第三趟
循环3 次
433 340 004 555 888 999
第四趟 循 环 2次
30 03 44 55 88 99
a0000000000
数组在内存中顺序存放,第一个元素位于地址的最 低端。
第6页/共93页
求Fibonacci数列:1,1,2,3,5,8,......的前20个数,即
F1=1
(n=1)
F2=1
(n=2)
Fn=Fn-1+Fn-2
(n>=3)
f[0] f[1] f[2] f[3] f[4] f[5] f[5] f[6] f[7] .... 1 1 2 3 5 8 13 21
一、[常量表达式];
行数
列数
int
定义类型
a[3][4];
数组名
表明a数组由3×4个int型元素组成
其元素分别为:a[0][0], a[0][1], a[0][2], a[0][3],
a[1][3], a[2][3]
a[1][0], a[1][1], a[1][2], a[第212]页[0/共]9,3页a[2][1], a[2][2],
第23页/共93页
void main(void)
{
static int n[2],i,j,k;
第五趟 循 环 1次
总结:
共有6个数
n
趟数 1 2 3 4 5 j(1~n-1)
次数 5 4 3 2 1 n-j
for (j=1; j<=n-1; j++) for (i=1; i<=n-j ; i++) { if (a[i]>a[i+1]) { t=a[i]; a[i]=a[i+1]; a[i+1]=t; } }
2008H
2010H 2014H
201cH 2020H
2028H 202cH
a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2]a[1][3] a[2][0] a[2][1] a[2][2] a[2][3]
即在内存中,多维数组依然是直线顺序排列的,第 一个元素位于最低地址处。
数组名称
第1页/共93页
必须是常数
int a[4]; // 表明a数组由4个int型元素组成 其元素分别为:a[0], a[1], a[2], a[3] 其序号从0开始。若存放首地址为2000H,则在 内存中为:
2000H 2004H 2008H 200CH 2010H a[0] a[1] a[2] a[3]
for(j=0; j<3; j++) cin>>a[i][j ] ;
for (i=0; i<2; i++) /* 输 出 */ { for(j=0; j<3; j++) cout<<a[i][j]<<‘ \t’ ; cout<<“ \n” ; }
}
输入:1 2 3 4 5 6<CR> 输出: _ _ _1_ _ _2_ _ _3
cnodul;t<<row<<‘\t’<第<2c1页o/共lu93m页 <<‘\t’<<max<<e
将数组行列式互换。
1
2
3
4
5
6
7
8
9
1
4
7
2
5
8
3
6
9
for (i=0; i<3; i++)
for (i=0; i<3; i++)
for (j=0; j<3; j++)
for (j=0; j<i; j++)
f [i]=f [i-1]+f [i-2]
void main (void) { int i;
int f [20]={1,1}; for (i=2 ; i<20 ; i++ )
f [i]=f [i-1]+f [i-2];
for ( i=0; i<20; i++) { if (i% 5= =0) cout<<“ \n” ; cout<<f [i]<<‘ \t’ ; }
cout<<a[i][j]<<‘\t’; 输出:_ _ _0_ _ _1_ _ _ 2
}
_ _ _0_ _ _1_ _ _ 2
cout<<“\n”;
_ _ _1_ _ _2_ _ _ 3
}
第18页/共93页
有一个3×4的矩阵,要求编程序求出其中值最大 的那个元素的值,以及其所在的行号和列号。
先考虑解此问题的思路。从若干个数中求最大者 的方法很多,我们现在采用“打擂台”算法。如 果有若干人比武,先有一人站在台上,再上去一 人与其交手,败者下台,胜者留台上。第三个人 再上台与在台上者比,同样是败者下台,胜者留 台上。如此比下去直到所有人都上台比过为止。 最后留在台上的就是胜者。
_ _ _4_ _ _5_ _ _6
第14页/共93页
定义 赋值
输出
三、二维数组的初始化
在定义数组的同时给数组元素赋值。即在编译阶段 给数组所在的内存赋值。
1、分行赋值
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 2、顺序赋值 int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; //依次赋 值
第13页/共93页
二、二维数组的引用
与一维数组一样,二维数 组必须先定义,其维数必 须是常量。具体引用时( 赋值、运算、输出)其元 素等同于变量。
void main(void) { int a[2][3], i, j;
cout<<“ Input 2*3 numbers\n” ; for (i=0; i<2; i++) /* 输 入 */
{ for (j=0; j<3; j++)
if (i= =2)
i=2
a[i][j]=a[i-1][a[i-
1][j]]+1;
a[2][0]=a[1][a[1][0]]+1=a[1][0]+1=1
else
a[2][1]=a[1][a[1][1]]+1=a[1][1]+1=2
a[i][j]=j;
a[2][2]=a[1][a[1][2]]+1=a[1][2]+1=3
i 1 2 3 45 a[i] -4 0 4 4 3
输出:-4 0 4 4 3
第8页/共93页
排序算法 用起泡法对6个数排序(由小到大) 将相邻的两个数两两比较,将小的调到前头。
9 8 88 8 8 8 9 55 5 5 5 5 94 4 4 4 4 49 2 2 2 2 22 9 0 0 0 00 0 9
cout<<a[i]<<‘\输t’出; cout<<“\n”;
输出:9_ }_8_ _7_ _6_ _5_ _4_ _3_ _2_ _1_ _0
第4页/共93页
0
a[0]
1
a[1]
2
a[2]
3
a[3]
4
a[4]
5
a[5]
6
a[6]
7
a[7]
8
a[8]
9
a[9]
三、一维数组的初始化 在定义数组的同时给数组元素赋值。 注意: 1、对数组中的一部分元素列举初值,未赋值的部 分是0。
程序模拟这个方法,开始时把a[0][0] 的值赋给变量max,max就是开始时的擂 主,然后让下一个元素与它比较,将二 者中值大者保存在max中,然后再让下 一个元素与新的max比,直到最后一个 元素比完为止。max最后的值就是数组 所有元素中的最大值。
第20页/共93页
max=a[0][0]; //使max开始时取a[0][0]的值 for (i=0;i<=2;i++) //从第0行到第2行 for (j=0;j<=3;j++) //从第0列到第3列 if (a[i][j]>max)//如果某元素大于max { max=a[i][j]; //max将取该元素的值 row=i; //记下该元素的行号i colum=j; //记下该元素的列号j }
static int a[2][3];
第17页/共93页
void main(void)
{ int a[3][3], i, j;
i=0 a[0][0]=0 a[0][1]=1 a[0][2]=2
for (i=0; i<3; i++) i=1 a[1][0]=0 a[1][1]=1 a[1][2]=2
数组必须先定义,具体引用时(赋值、运算、输出)其元
素等同于变量。
a
void main(void )
i=0, a[0]=0
{ int i, a[10]; 定义 i=1, a[1]=1
for ( i=0; i<10; i++) i=2, a[2]=2
赋值 a[i]=i; i=9, a[9]=9
for ( i=9; i>=0 ; i--)
其元素分别为:a[0][0], a[0][1], a[0][2], a[0][3],
a[1][3],
a[1][0], a[1][1], a[1][2],
a[2][0], a[2][1], a[2][2], 其a[2行][列3] 的序号均从0开始。若存放首地址为2000H ,则在内存中为:
2000H
C++不允许对数组的大小作动态的定义,即数组的 大小不能是变量,必须是常量。
第2页/共93页
如果要根据不同的数值改变数组的大小,可 用常量表达式。如:
#define SIZE 50 void main(void) { int art[SIZE];
...... }
第3页/共93页
二、一维数组元素的引用
int a[10]= {0,1, 2, 3, 4, 5};
int a[10]= {0,1, 2, 3, 4, 5, 0, 0, 0, 0}; 2、不能给数组整体赋值,只能一个一个地赋值。
int a[10]= {0,1,2,.....,9}; 非法
int a[10]= {0,1, 2, 3, 4, 5,6,7,8,9};
第15页/共93页
3、部分赋值
int a[3][4]={{1},{5},{9}};
/* a[0][0]=1, a[1][0]=5, a[2][0]=9 其余元素为0
*/ 1000
0100
5000
5000
9000
0000
int a[3][4]={{0,1},{5}}; /* a[0][0]=0, a[0][1]=1, a[1][0]=5 */
第10页/共93页
一般,元素的序号从0开始,因此,程序可以变动如下:
for (j=0; j<n-1; j++) for (i=0; i<n-1-j; i++) { if (a[i]>a[i+1]) { t=a[i]; a[i]=a[i+1]; a[i+1]=t; } }
第11页/共93页
二维数组的定义和引用
{ t=a[i][j];
{ t=a[i][j];
a[i][j]=a[j][i];
a[i][j]=a[j][i];
a[j][i]=t; }
a[j][i]=t; } 第22页/共93页
打印杨辉三角形 1 11 12 1 13 3 1 14 6 4 1 1 5 10 10 5 1
a[i][j]=a[i-1][j-1]+a[i-1][j]
第5页/共93页
3、可以用 int a[ ]= {0,1, 2, 3, 4, 5, 6, 7, 8, 9}; 给数组赋值,编译器会自动计算出内的元素项数, 并将数组定义为该长度。
4、用局部static 或全局定义的数组不赋初值,系 统均默认其为‘\0’。 static int a[10];(即存储在静态数据区中的数组 其元素默认为0)
第16页/共93页
4、分行或全部赋值时,可以省略第一维,第二维 不可省。 int a[ ][4]={{1,2},{5,6,7,8,}{9,10,11,12}}; 5、不能给数组整体赋值,只能一个一个地赋值。
int a[2][3]={1,2,3,.....,12}; 6、用static 定义的数组不赋初值,系统均默认其 为‘\0’。
C++程序设计(谭浩强完整版)第六章
会计学
1
一维数组的定义和引用
数组是同一类型的一组值(10个 char 或15个 int) ,在内存中顺序存放。
整个数组共用一个名字,而其中的每一项又称 为一个元素。
一、定义方式:
类型说明符 数组名[常量表达式];
定义类型 元素个数
int a[4]; // 表明a数组由4个int型元素组成
}
第7页/共93页
下面程序的运行结果是:
void main(void)
{ int a[6], i;
for (i=1; i<6; i++)
{ a[i]=9*(i-2+4*(i>3))%5 ;
cout<<a[i]<<‘\t’;
} }
a[0] a[1] a[2] a[3] a[4] a[5] 随机 -4 0 4 4 3
85 5 55
58 4 44 44 8 23 22 2 80 00 0 08 99 9 99
544 4
453 3 335 0 000 5 888 8 999 9
第一趟 循环5次
第二趟
循环4次
第9页/共93页
第三趟
循环3 次
433 340 004 555 888 999
第四趟 循 环 2次
30 03 44 55 88 99
a0000000000
数组在内存中顺序存放,第一个元素位于地址的最 低端。
第6页/共93页
求Fibonacci数列:1,1,2,3,5,8,......的前20个数,即
F1=1
(n=1)
F2=1
(n=2)
Fn=Fn-1+Fn-2
(n>=3)
f[0] f[1] f[2] f[3] f[4] f[5] f[5] f[6] f[7] .... 1 1 2 3 5 8 13 21
一、[常量表达式];
行数
列数
int
定义类型
a[3][4];
数组名
表明a数组由3×4个int型元素组成
其元素分别为:a[0][0], a[0][1], a[0][2], a[0][3],
a[1][3], a[2][3]
a[1][0], a[1][1], a[1][2], a[第212]页[0/共]9,3页a[2][1], a[2][2],
第23页/共93页
void main(void)
{
static int n[2],i,j,k;
第五趟 循 环 1次
总结:
共有6个数
n
趟数 1 2 3 4 5 j(1~n-1)
次数 5 4 3 2 1 n-j
for (j=1; j<=n-1; j++) for (i=1; i<=n-j ; i++) { if (a[i]>a[i+1]) { t=a[i]; a[i]=a[i+1]; a[i+1]=t; } }
2008H
2010H 2014H
201cH 2020H
2028H 202cH
a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2]a[1][3] a[2][0] a[2][1] a[2][2] a[2][3]
即在内存中,多维数组依然是直线顺序排列的,第 一个元素位于最低地址处。
数组名称
第1页/共93页
必须是常数
int a[4]; // 表明a数组由4个int型元素组成 其元素分别为:a[0], a[1], a[2], a[3] 其序号从0开始。若存放首地址为2000H,则在 内存中为:
2000H 2004H 2008H 200CH 2010H a[0] a[1] a[2] a[3]
for(j=0; j<3; j++) cin>>a[i][j ] ;
for (i=0; i<2; i++) /* 输 出 */ { for(j=0; j<3; j++) cout<<a[i][j]<<‘ \t’ ; cout<<“ \n” ; }
}
输入:1 2 3 4 5 6<CR> 输出: _ _ _1_ _ _2_ _ _3
cnodul;t<<row<<‘\t’<第<2c1页o/共lu93m页 <<‘\t’<<max<<e
将数组行列式互换。
1
2
3
4
5
6
7
8
9
1
4
7
2
5
8
3
6
9
for (i=0; i<3; i++)
for (i=0; i<3; i++)
for (j=0; j<3; j++)
for (j=0; j<i; j++)
f [i]=f [i-1]+f [i-2]
void main (void) { int i;
int f [20]={1,1}; for (i=2 ; i<20 ; i++ )
f [i]=f [i-1]+f [i-2];
for ( i=0; i<20; i++) { if (i% 5= =0) cout<<“ \n” ; cout<<f [i]<<‘ \t’ ; }
cout<<a[i][j]<<‘\t’; 输出:_ _ _0_ _ _1_ _ _ 2
}
_ _ _0_ _ _1_ _ _ 2
cout<<“\n”;
_ _ _1_ _ _2_ _ _ 3
}
第18页/共93页
有一个3×4的矩阵,要求编程序求出其中值最大 的那个元素的值,以及其所在的行号和列号。
先考虑解此问题的思路。从若干个数中求最大者 的方法很多,我们现在采用“打擂台”算法。如 果有若干人比武,先有一人站在台上,再上去一 人与其交手,败者下台,胜者留台上。第三个人 再上台与在台上者比,同样是败者下台,胜者留 台上。如此比下去直到所有人都上台比过为止。 最后留在台上的就是胜者。
_ _ _4_ _ _5_ _ _6
第14页/共93页
定义 赋值
输出
三、二维数组的初始化
在定义数组的同时给数组元素赋值。即在编译阶段 给数组所在的内存赋值。
1、分行赋值
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 2、顺序赋值 int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; //依次赋 值
第13页/共93页
二、二维数组的引用
与一维数组一样,二维数 组必须先定义,其维数必 须是常量。具体引用时( 赋值、运算、输出)其元 素等同于变量。
void main(void) { int a[2][3], i, j;
cout<<“ Input 2*3 numbers\n” ; for (i=0; i<2; i++) /* 输 入 */
{ for (j=0; j<3; j++)
if (i= =2)
i=2
a[i][j]=a[i-1][a[i-
1][j]]+1;
a[2][0]=a[1][a[1][0]]+1=a[1][0]+1=1
else
a[2][1]=a[1][a[1][1]]+1=a[1][1]+1=2
a[i][j]=j;
a[2][2]=a[1][a[1][2]]+1=a[1][2]+1=3
i 1 2 3 45 a[i] -4 0 4 4 3
输出:-4 0 4 4 3
第8页/共93页
排序算法 用起泡法对6个数排序(由小到大) 将相邻的两个数两两比较,将小的调到前头。
9 8 88 8 8 8 9 55 5 5 5 5 94 4 4 4 4 49 2 2 2 2 22 9 0 0 0 00 0 9
cout<<a[i]<<‘\输t’出; cout<<“\n”;
输出:9_ }_8_ _7_ _6_ _5_ _4_ _3_ _2_ _1_ _0
第4页/共93页
0
a[0]
1
a[1]
2
a[2]
3
a[3]
4
a[4]
5
a[5]
6
a[6]
7
a[7]
8
a[8]
9
a[9]
三、一维数组的初始化 在定义数组的同时给数组元素赋值。 注意: 1、对数组中的一部分元素列举初值,未赋值的部 分是0。