26
C++ C++ 面面面面面面面面 面面面面面面面面 授授授授 :

C++ 面对对象程序设计

  • Upload
    nevan

  • View
    108

  • Download
    2

Embed Size (px)

DESCRIPTION

C++ 面对对象程序设计. 授课老师 :. 第 4 章 数组. 本章要点 4.1 一维数组 4.2 二维数组 4.3 字符数组. 本章要点 一维数组的定义和初始化及应用 二维数组的定义和初始化及应用 字符数组的定义和初始化及应用. 4.1 一维数组. 4.1.1 一维数组的定义 一维数组的声明格式为: 数据类型 数组名[常量表达式]; 4.1.2 一维数组的初始化 ( 1 )给数组的所有元素赋初值。 ( 2 )给数组的部分元素赋初值。 ( 3 )当把数组定义为全局变量或静态变量时,所有数组元素的初值均为 0 ;. - PowerPoint PPT Presentation

Citation preview

Page 1: C++  面对对象程序设计

C++ C++ 面对对象程序设计面对对象程序设计授课老师 :

Page 2: C++  面对对象程序设计

第 4 章 数组• 本章要点• 4.1 一维数组• 4.2 二维数组• 4.3 字符数组

Page 3: C++  面对对象程序设计

• 本章要点• 一维数组的定义和初始化及应用• 二维数组的定义和初始化及应用• 字符数组的定义和初始化及应用

Page 4: C++  面对对象程序设计

4.1 4.1 一维数组一维数组• 4.1.1 一维数组的定义• 一维数组的声明格式为:• 数据类型 数组名[常量表达式];• 4.1.2 一维数组的初始化• ( 1 )给数组的所有元素赋初值。 • ( 2 )给数组的部分元素赋初值。 • ( 3 )当把数组定义为全局变量或静态变量时,所有数组元素的初值均为 0 ;

Page 5: C++  面对对象程序设计

4.1.34.1.3 一维数组元素的访问一维数组元素的访问• 通过变量定义语句定义了一个数组后,用户便可以随时使用其中的任何元素。数组元素的使用是通过下标运算符 []指明和访问的,其中运算符左边为数组名,中间为下标。使用数组时,只能分别对数组的各个元素进行操作。数组要先定义后使用,数组元素的访问格式:• 数组元素的访问格式:• 数组名[下标]• 例如:• int a [ 10 ];//声明数组 a• a [ 0 ] =6 ;//将整数 6 存入数组 a 的第 1 个元素中• a [ 5 ] =7 ;//将整数 7 存入数组 a 的第 6 个元素中• cout a [ 5 ];//输出数组 a 的第 6 个元素• int x ;• x=a [ 5 ];//将数组 a 的第 6 个元素存入变量 x 中

Page 6: C++  面对对象程序设计

4.1.44.1.4 一维数组应用示例一维数组应用示例• 将数据 1 ~ 10 赋给 10 个数组元素,然后按倒序输出来。#include "stdafx.h"#include "stdio.h"#include "iostream.h"void main(){

int i ,a[10];for (i=0; i<10; i++)

a[i]=i+1;for (i=0; i<10; i++)

cout<<a[9-i]<<" ";cout<<endl;getchar();

}• 运行结果如下:• 10 9 8 7 6 5 4 3 2 1

Page 7: C++  面对对象程序设计

找出数组中的最大数。找出数组中的最大数。#include "stdafx.h"#include "stdio.h"#include "iostream.h"void main(){

int a[8]={25, 64, 38, 40, 75, 66, 38, 54};int max=a[0];for (int i=1; i<8; i++)if (a[i]>max)max=a[i];cout<<"max:"<<max<<endl;getchar();

}

Page 8: C++  面对对象程序设计

设计一个数组,使得它从第三个元素开始每个元素值均等设计一个数组,使得它从第三个元素开始每个元素值均等于它前两个元素值之和(设数组前两个元素值为于它前两个元素值之和(设数组前两个元素值为 11 和和 22 ))

#include "stdafx.h"#include "stdio.h"#include "iostream.h"const int M=10;void main(){

int a[M+1];a[0]=1;a[1]=2;int i;for (i=2; i<=M; i++)

a[i]=a[i-1]+a[i-2];for (i=0; i<M; i++)

cout<<a[i]<<" ";cout<<a[M]<<endl;getchar();

}

Page 9: C++  面对对象程序设计

4.24.2 二维数组二维数组• 4.2.1 二维数组定义• 二维数组的声明格式:• 数据类型 数组名[常量表达式 1 ][常量表达式 2 ];• 4.2.2 二维数组初始化• 1. 给数组的所有元素赋初值• 给数组的所有元素赋初值的方法有 2 种:• ( 1 )按行的顺序,将每一行元素的初值放在一个用花括号括起来的、各初值间用逗号分开的序列中,用花括号括起来的序列间用逗号分隔,全部初值再用一个花括号括起来。 • ( 2 )将所有初值放在一个花括号括起来的序列中,按数组排列的顺序给各元素赋初值。• 2. 给数组的部分元素赋初值• 给数组的部分元素赋初值的方法与给数组的所有元素赋初值的方法类似

Page 10: C++  面对对象程序设计

4.2.34.2.3 二维数组元素的访问二维数组元素的访问• 访问二维数组元素的形式为:• 数组名[下标 1 ][下标 2 ]• 例如:• int a [ 2 ][ 3 ];//声明二维数组• int x ;• a [ 1 ][ 2 ] =3 ;//将 3 存入数组 a 的第 2行第 3 列• x=a [ 1 ][ 2 ];//将数组 a 的第 2 行第 3列元素的值赋给变量 x• cout a [ 0 ][ 1 ];//输出数组的第 1 行第

2 列的元素

Page 11: C++  面对对象程序设计

4.2.44.2.4 二维数组应用示例二维数组应用示例#include "stdafx.h"#include "stdio.h"#include "iostream.h"#include "iomanip.h"const int M=3, N=4;void main(){

int a[M][N]={{7, 5, 14, 3},{6, 20, 7, 8},{14, 6, 9, 18}};int i, j;for (i=0; i<M; i++){

for (j=0; j<N; j++)cout<<setw(5)<<a[i][j];

cout<<endl;}cout<<endl;getchar();

}

Page 12: C++  面对对象程序设计

说明说明 • 该程序首先定义了一个元素类型为 int 的二维数组 a[ M ][ N ],并对它进行了初始化;接着通过双重

for 循环输出每一个元素的值,其中外循环变量 i 控制行下标从小到大依次变化,内循环变量 j 控制列下标从小到大依次变化,每输出一个元素值占用显示窗口的5 个字符宽度,当同一行元素 ( 即行下标值相同的元素 ) 输出完毕后,将输出一个换行符,以便下一行元素在显示窗口另起一行显示出来。该程序的运行结果为:

• 7 5 14 3• 6 20 7 8• 14 6 9 18

Page 13: C++  面对对象程序设计

输入四个学生、五门课程的成绩,分别存放在输入四个学生、五门课程的成绩,分别存放在 4×64×6矩阵的前矩阵的前 55 列上,计算每个学生的平均成绩后,存列上,计算每个学生的平均成绩后,存放在该数组最后一列的对应行上。放在该数组最后一列的对应行上。#include "stdafx.h"#include "stdio.h"#include "iostream.h"#include "iomanip.h"void main(){

const int M=4;const int N=6;float a[M][N], sum;int i, j;cout<<endl<<" 请输入四个学生五门课程的成绩 :\n";

for (i=0; i<M; i++)for (j=0; j<N-1; j++)

cin>>a[i][j];

Page 14: C++  面对对象程序设计

for (i=0; i<M; i++){

sum=0;for (j=0; j<N-1; j++)

sum=sum+a[i][j];a[i][N-1]=sum/(N-1);

}cout<<"\n 输出四个学生五门课程的成绩和均分 :\n";

for (i=0; i<M; i++){

for (j=0; j<N; j++)cout<<setw(6)/*<<setiosflags(ios:fixed)<<setprecision

(1)*/<<a[i][j];cout<<endl;

}cout<<endl;getchar();

}

Page 15: C++  面对对象程序设计

运行情况是:运行情况是:• 请输入四个学生五门课程的成绩:• 78 86 68 82 99<Enter>• 97 82 88 94 75<Enter>• 89 79 99 84 56<Enter>• 85 78 68 57 90<Enter>• 输出四个学生五门课程的成绩和均分:• 78 86 68 82 99 82.6• 97 82 88 94 75 87.2• 89 79 99 84 56 81.4• 85 78 68 57 90 75.6

Page 16: C++  面对对象程序设计

有一个有一个 3×43×4 的矩阵,要求找到并输出其中最小值的矩阵,要求找到并输出其中最小值的元素以及其所在的行号和列号。的元素以及其所在的行号和列号。#include "stdafx.h"#include "stdio.h"#include "iostream.h"void main(){

int a[3][4]={{8, 2, 10, -5},{13, 6, 4, 7},{20, 5, -2, 1}};int i, j, min, row=0, col=0;min=a[0][0];for (i=0; i<3; i++)

for (j=0; j<4; j++)if (a[i][j]<min){

min=a[i][j];row=i;col=j;

}cout<<"min="<<min<<", rwo="<<row<<", col="<<col<<endl;getchar();

}• 运行结果为:• min=-5 , row=0 , col=3

Page 17: C++  面对对象程序设计

4.34.3 字符数组字符数组• 4.3.1 字符数组的定义和初始化• 初始化字符数组可用下列形式:

Page 18: C++  面对对象程序设计

4.3.24.3.2 字符串和字符串结束标志字符串和字符串结束标志• 在 C++ 中,为了判断字符串是否结束,系统自动在字符串的末尾加上一个字符‘\ 0’ 作为字符串的结束标志。 • 4.3.3 字符数组的输入和输出• 4.3.4 字符串处理函数• 1. 求字符串长度• 函数原型: int strlen(const char s [] ) ;• 2. 字符串拷贝• 函数原型: char*strcpy(char*dest , const char*src) ; • 3. 字符串连接• 函数原型: char*strcat(char*dest , const char*src) ; • 4. 字符串比较• 函数原型: int strcmp(const char*s1 , const char*s2);• 5. 从字符串中查找字符• 函数原型: char*strchr(const char*s , int c);• 6. 从字符串中逆序查找字符• 函数原型: char*strrchr(const char*s,int c);• 7. 从字符串中查找子串• 函数原型: char* strstr(const char*s1 , const char*s2);

Page 19: C++  面对对象程序设计

4.3.54.3.5 字符数组应用示例字符数组应用示例输入长度不超过 100 的字符串,计算并输出该字符串的长度。#include "stdafx.h"#include "stdio.h"#include "iostream.h"void main(){

char str[100]=" ";int l=0;cout<<" 请输入一个字符串 :"<<endl;cin>>str;int i=0;while (str[i]!='\0'){

l++;i++;

}cout<<" 字符串的长度 :"<<l<<endl;getchar();

}程序执行结果如下:请输入一个字符串:• I love China<Enter>• 字符串的长度: 10

Page 20: C++  面对对象程序设计

编写程序将字符数组编写程序将字符数组 str2str2 中的字符全部复制到字符中的字符全部复制到字符数组数组 str1str1 中,要求不用中,要求不用 strcpystrcpy 函数。函数。#include "stdafx.h"#include "stdio.h"#include "iostream.h"void main(){

int i;char str1[20], str2[20];cout<<" 请输入字符串 :\n"; cin>>str2;for (i=0; str2[i] != '\0'; i++)str1[i]=str2[i];str1[i]='\0';cout<<" 输出拷贝后的字符串 :\n"<<str1<<endl;getchar();

}

Page 21: C++  面对对象程序设计

运行结果为:运行结果为:• 请输入字符串:• How are you<Enter>• 输出拷贝后的字符串:• How are you

Page 22: C++  面对对象程序设计

编一程序,首先输入编一程序,首先输入 1010 个字符串到一个二维字符数组中,接着个字符串到一个二维字符数组中,接着输入一个待查的字符串,然后从二维字符数组中查找统计出含有输入一个待查的字符串,然后从二维字符数组中查找统计出含有待查字符串的个数。待查字符串的个数。#include "stdafx.h"#include "stdio.h"#include "iostream.h"#include "string.h"void main(){

char a[10][30]={" "}; // 用于 10 个字符串 , 假设每个串的长度小于 30char s[30]; // 存储待查的字符串int i, k=0;cout<<" 输入 10 个字符串 "<<endl;

Page 23: C++  面对对象程序设计

for (i=0; i<10; i++)cin>>a[i];cout<<" 输入一个待查的字符串 :"<<endl;cin>>s;for (i=0; i<10; i++)if (strcmp(a[i], s) == 0)k++;cout<<" 字符串个数 :"<<k<<endl;getchar();

}• 程序执行结果:• abc def def abc abc ghj kuyk juy abc gfd <Enter>• 输入一个待查的字符串:• abc<Enter>• 字符串个数: 4

Page 24: C++  面对对象程序设计

从键盘上输入从键盘上输入 44 个字符串,输出其中最大个字符串,输出其中最大者者 #include "stdafx.h"#include "stdio.h"#include "iostream.h"#include "string.h"void main(){

int i;char max[15], str[4][15];cout<<" 输入第 0 行字符串 :"<<endl;cin.getline(str[0],15);strcpy(max, str[0]);cout<<" 输入第 1~3 行字符串 :"<<endl;for (i=0; i<3; i++){

cin.getline(str[i], 15);if (strcmp(max, str[i])<0)

strcpy(max,str[i]);}cout<<" 最大的串是 :"<<max<<endl;getchar();

}

Page 25: C++  面对对象程序设计

运行结果运行结果• 运行结果如下:• 输入第 0 行字符串:• From<Enter>• 输入第 1 ~ 3 行字符串:• goto<Enter>• girl<Enter>• first<Enter>• 最大的串是:• goto

Page 26: C++  面对对象程序设计

本章小结本章小结• 1 .数组是一种组合数据类型,它由同一种数据类型、固定数目的元素所组成。数组中的每个元素按下标标记访问的。• 2 .数组在内存中占用一块连续的存储空间,占用内存空间的大小等于每个元素的类型长度与数组中元素个数的乘积。• 3 .一维数组是数组的基本形式,二维数组是一维数组的推广,即一维数组中的每个元素仍为一维数组时就构成了二维数组。同理,三维数组是二维数组的推广,依次类推。• 4 .在 C++ 中,字符串不作为单独的数据类型而存在,而是作为一种特殊的字符数组,每个字符串都隐含以空字符作为结束符。• 5 .对字符串进行赋值、比较、连接等操作都是通过相应字符串函数的功能实现的,对字符串的输入、输出操作与同简单类型的数据一样可直接进行。• 6 .数组作为一种组合数据类型有着广泛的应用,如可以利用数组进行数值计算、数据统计、数据排序、数据查找等。