《Visual C++程序设计》课件第4章.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《Visual C++程序设计》课件第4章.ppt》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Visual C+程序设计 Visual C+程序设计课件第4章 Visual C+ 程序设计 课件
- 资源描述:
-
1、【问题问题】从键盘接收从键盘接收10个数,求平均数并输出小于平均数的数个数,求平均数并输出小于平均数的数分析:分析:从键盘接收从键盘接收10个数,求平均数很简单,可以采用简单变个数,求平均数很简单,可以采用简单变量和循环结构相结合的方法,程序段如下:量和循环结构相结合的方法,程序段如下:float aver=0;for(i=0;i10;i+)cout输入第输入第i+1ai;aver+=ai;aver=aver/10;/求求10个数的平均数个数的平均数 但是输出小于平均数的数就比较麻烦了,因为从键盘接收但是输出小于平均数的数就比较麻烦了,因为从键盘接收的的10个数在求和以后没有保存起来,等再比较
2、比平均数小的数个数在求和以后没有保存起来,等再比较比平均数小的数就无法实现。若要输出小于平均数的数,必须再重复输入这就无法实现。若要输出小于平均数的数,必须再重复输入这10个数。这样带来两个问题:个数。这样带来两个问题:(1)输入数据的工作量成倍增加;)输入数据的工作量成倍增加;(2)若本次输入的数与上次不同,则输出的结果不正确。)若本次输入的数与上次不同,则输出的结果不正确。在程序设计中,我们常把具有相同类型的若干变量按在程序设计中,我们常把具有相同类型的若干变量按有序的形式组织起来,这些有序的形式组织起来,这些按序排列的同类型数据元素的按序排列的同类型数据元素的集合称为集合称为数组数组。数
3、组属于。数组属于构造类型构造类型,在计算机中,一个数,在计算机中,一个数组在内存中占用一片连续的存储空间,在程序中用数组名组在内存中占用一片连续的存储空间,在程序中用数组名来标识这一数组,而下标指明数组中各元素的序号,用下来标识这一数组,而下标指明数组中各元素的序号,用下标变量来标识数组的每个元素。标变量来标识数组的每个元素。根据下标的个数不同可以根据下标的个数不同可以把数组分为把数组分为一维一维、二维二维和和多维多维的的,本章重点介绍一维和二,本章重点介绍一维和二维数组。维数组。数组在使用前数组在使用前必须先定义(数组名、类型、大小、维必须先定义(数组名、类型、大小、维数),后使用数),后使
4、用。ss0s1s2s 3 s4正确:正确:const int s=10;int as;float f5;错误:错误:int s=10;int as;float b3.4 下标从下标从0开始开始 数组名是常量,表示数组在内存中的首地址。数组名是常量,表示数组在内存中的首地址。数组长度应该为整型常量表达式,数组长度应该为整型常量表达式,不能是变量不能是变量。如:如:4.2.1 一维数组的定义、存储和初始化一维数组的定义、存储和初始化1.定义形式定义形式 数据类型数据类型 数组名数组名整型常量表达式整型常量表达式;如:如:int s5;2.数组的初始化数组的初始化花括号花括号错误错误:int a10
5、;a=1,3,5,7,9;/数组名是个地址常量,不能被赋值。数组名是个地址常量,不能被赋值。int a10;a10=1,3,5,7,9;/a10不是数组中的元素,不能用花括号为一个元素赋多个值。不是数组中的元素,不能用花括号为一个元素赋多个值。int c3=1,2,3,4;/常量个数超过数组定义的长度。常量个数超过数组定义的长度。2)给部分元素赋初值。给部分元素赋初值。如:如:int a10=1,3,5,7,9;花括号内列出的值赋给了前面的若干个元素,花括号内列出的值赋给了前面的若干个元素,其余元素系其余元素系统自动赋统自动赋0。1)给所有元素赋初值。给所有元素赋初值。如:如:int a5=0
6、,2,4,6,8;或或 int a=0,2,4,6,8;4.2.2 数组元素的引用和基本操作数组元素的引用和基本操作1数组元素的引用数组元素的引用 形式:形式:数组名数组名下标下标 相当于一个普通变量相当于一个普通变量如有:如有: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;2基本操作基本操作 假设有定义:假设有定义:int aN;N是已定义过的符号常量。是已定义过的符号
7、常量。(1)数组元素的输入数组元素的输入for(j=0;jaj;(2)通过随机函数通过随机函数rand()产生产生0 0100100的的N N个数据个数据 for(i=0;iN;i+)/rand()函数产生函数产生032727之间的整数之间的整数 ai=int(rand()%101);(3)数组元素的求和数组元素的求和 sum=0;for(j=0;jN;j+)sum+=aj;(4)求数组中的最大元素求数组中的最大元素 max=a0;/假设第一个元素值最大假设第一个元素值最大 for(j=1;jmax)max=aj;(5)求最大元素下标求最大元素下标 imax=0;/imax代表最大元素下标代表
8、最大元素下标 for(j=1;jaimax)imax=j;(6)将最大元素放于某一特定位置将最大元素放于某一特定位置(如放在最前头如放在最前头)imax=0;for(j=1;jaimax)imax=j;if(imax!=0)t=a0;a0=aimax;aimax=t;4.2.3 数组排序数组排序 排序是将一组数按递增或递减的次序排列,如按学生排序是将一组数按递增或递减的次序排列,如按学生的成绩、球赛积分等排序。常用的算法有的成绩、球赛积分等排序。常用的算法有:选择法选择法 ()冒泡法冒泡法 ()插入法插入法 快速排序法快速排序法 .1.选择法排序选择法排序基本思想基本思想:(1)从从n个数的序
9、列中选出最小的数个数的序列中选出最小的数(递增递增),与第与第1个数交换位置;个数交换位置;(2)除第除第1个数外,其余个数外,其余n-1个数再按个数再按(1)的方法选出次小的数,与的方法选出次小的数,与第第2个数交换位置个数交换位置;3)重复重复(1)n-1遍,最后构成递增序列。遍,最后构成递增序列。【例例4.2】对存放在数组中的对存放在数组中的6个数,用选择法按递增排序。个数,用选择法按递增排序。下标下标:0 15 1 25 2 35 3 45 4 5for(i=0;i5;i+)min=i;for(j=i+1;j6;j+)if(ajamin)min=j;if(i!=min)temp=ai;
10、ai=amin;amin=temp;2.冒泡法排序冒泡法排序 8 3497K=5348 79K=4 34789K=33 47 8 9K=2for(i=0;i5;i+)for(j=1;jaj)temp=aj-1;aj-1=aj;aj=temp;思考思考:当数据未交换当数据未交换,说明数组已有序说明数组已有序,如何如何结束排序结束排序?(1)从第一个元素开始,对数组中两两相邻的元素比较,将)从第一个元素开始,对数组中两两相邻的元素比较,将值较小的元素放在前面,值较大的元素放在后面,一轮比较比值较小的元素放在前面,值较大的元素放在后面,一轮比较比较完毕,最大的数存放在较完毕,最大的数存放在aN-1中
11、;中;(2)然后对)然后对a0到到aN-2的的N-1个数进行同个数进行同(1)的操作,次最大的操作,次最大数放入数放入aN-2元素内,完成第二趟排序;依次类推,进行元素内,完成第二趟排序;依次类推,进行N-1趟趟排序后,所有数均有序。排序后,所有数均有序。【例例4.3】用冒泡排序法实现例用冒泡排序法实现例4.2基本思想总结:基本思想总结:a00 a01 a02 a10 a11 a12 以以“先行后列先行后列”的规则连续存放的规则连续存放:序号序号=当前行号当前行号*每行列数每行列数+当前列号当前列号4.3.1 二维数组的定义和初始化二维数组的定义和初始化 1.数组的定义数组的定义 形式:形式:
12、数据类型数据类型 数组名数组名常量表达式常量表达式1常量表达式常量表达式2;如如:float a23;aa00a01a02a10a11a121000H1004H1008H100CH1010H1014H序号序号:012345(1)按在内存排列顺序对所有元素赋初值。)按在内存排列顺序对所有元素赋初值。int a23=1,2,3,4,5,6;或或 int a3=1,2,3,4,5,6;(2)按行给所有元素赋初值,每一行的数据放于一个花)按行给所有元素赋初值,每一行的数据放于一个花括号内。括号内。int a23=1,2,3,4,5,6;(3)按行给部分元素赋初值,在静态存贮类型)按行给部分元素赋初值,
13、在静态存贮类型static中省中省略的元素初值此时自动为略的元素初值此时自动为0。static int b34=1,2,0,3,4,0,0,5;对应的数组对应的数组b为为:050004300021b002000001c2.数组的初始化数组的初始化(4)按行赋初值也可省略第一维的长度。)按行赋初值也可省略第一维的长度。static int c 3=1,2;对应的数组对应的数组c为为:4.3.2 二维数组的基本操作二维数组的基本操作 1.数组的输入、输出数组的输入、输出【例例4.4】输入两个矩阵输入两个矩阵A、B的值,求的值,求C=A+B。61312753A161361084B分析:分析:A、B矩
14、阵相加,其实质是将两矩阵的对应元素矩阵相加,其实质是将两矩阵的对应元素相加。相加的条件是有相同的行、列数。相加。相加的条件是有相同的行、列数。#include iostream.h#include iomanip.h void main()int a23,b23,c23,i,j;for(i=0;i2;i+)for(j=0;jaij;for(i=0;i2;i+)for(j=0;jbij;for(i=0;i2;i+)/A+B矩阵,每个对应元素相加矩阵,每个对应元素相加 for(j=0;j3;j+)cij=aij+bij;for(i=0;i2;i+)for(j=0;j3;j+)coutsetw(4)
15、cij;coutendl;2.求二维数组中最大(或最小)元素及下标求二维数组中最大(或最小)元素及下标 max=a00;imax=0;jmax=0;for(i=0;i3;i+)for(j=0;jmax)max=aij;imax=i;jmax=j;【例例4.5】对对33方阵,求最大元素及下标。方阵,求最大元素及下标。与一维数组求最大值的方式相同,但要用双重循与一维数组求最大值的方式相同,但要用双重循环来实现。环来实现。3.矩阵转置矩阵转置 1 2 3 1 4 7a=4 5 6 b=2 5 8 7 8 9 3 6 9for(i=0;i3;i+)for(j=0;ji;j+)t=aij;aij=aji
16、;aji=t;将矩阵以主对角线为轴线,将元素的行和列位置调换。将矩阵以主对角线为轴线,将元素的行和列位置调换。【例例4.6】对对33方阵转置方阵转置 4.矩阵相乘矩阵相乘43129631185210741B4234C10nkkjikijbac设矩阵设矩阵A、B为:为:则则矩阵矩阵C C为:为:即即矩阵矩阵C C的第的第i i行第行第j j列元素可通过列元素可通过下边下边公式求得公式求得:c00元素的实现:元素的实现:s=0;for(k=0;k3;k+)s+=a0k*bk0;c00=s;程序:程序:#include iostream.h#define M 2#define N 3#define
17、P 4void main()int aMN=3,5,7,4,6,8,bNP=1,4,7,10,2,5,8,11,3,6,9,12;int cMP,i,j,k,s;for(i=0;iM;i+)for(j=0;jP;j+)s=0;/求一个元素的值求一个元素的值 for(k=0;kN;k+)s+=aik*bkj;cij=s;for(i=0;iM;i+)for(j=0;jP;j+)coutcij ;coutendl;字符串是由一对双引号作定界符的若干个有效字符组字符串是由一对双引号作定界符的若干个有效字符组成的字符序列。存储时自动在最后加入结束标志符成的字符序列。存储时自动在最后加入结束标志符0 。例
18、如对字符串常量:例如对字符串常量:ab123ab1230系统自动添加系统自动添加 0 结束标志符结束标志符处理字符串的方法处理字符串的方法有:有:字符数组、字符数组、CString(string)类和字符指针)类和字符指针。1.字符数组字符数组如:如:char s6;char s126;字符数组字符数组若干个字符若干个字符字符串字符串abcdabcd02.字符数组的初始化字符数组的初始化(1)逐个字符赋初值逐个字符赋初值 char s10=I,a,m,f,i,n,e;/s不是字符串不是字符串(2)用字符串为字符数组初始化用字符串为字符数组初始化 char s10=I am fine;char
19、s10=I am fine;s是字符串,是字符串,0 系统自动添加系统自动添加(3)字符串数组初始化字符串数组初始化 对二维数组以字符串形式初始化。对二维数组以字符串形式初始化。char a48=FOXPRO,FORTRAN,“BASIC,C/C+;注意:注意:对于二维字符数组,用两个下标表示数组中的一个对于二维字符数组,用两个下标表示数组中的一个字符。字符。注意注意不要出现下面的错误不要出现下面的错误:char s10=This is a book;char s10;s=I am fine;char s10;s=I,a,m,f,i,n,e;3.字符数组的输入字符数组的输入/输出输出(1)逐个
20、数组元素的输入逐个数组元素的输入/输出输出 char s110;for(i=0;is1i;/s1中是字符,不是字符串中是字符,不是字符串注意:注意:输入时各输入项之间不需加空格分隔输入时各输入项之间不需加空格分隔(2)字符串整体的输入字符串整体的输入/输出输出 char s110,s225;输入:输入:cins1;gets(s1);for(int i=0;is1;语句,字符串中不能有空格。语句,字符串中不能有空格。函数函数gets()和和puts()是是对字符串整体输入对字符串整体输入/输出输出,应,应加加#include stdio.h命令命令。gets(字符数组名或字符指针变量名字符数组名
21、或字符指针变量名);puts(字符数组名或字符指针变量名字符数组名或字符指针变量名);输出:输出:cout s1;puts(s1);for(i=0;i2;i+)puts(s2i);#include stdio.h#include iostream.hvoid main()int i;char c5=C,h,i,n,a;char b =China;for(i=0;i5;i+)/不能用不能用puts(c),也不能用也不能用coutc;cout ci;puts(b);/或或 coutb;for(i=0;bi!=0;i+)/正确的正确的,但不主张用这种方法但不主张用这种方法 cout bi;【例例4.
22、8】字符串的输入字符串的输入/输出输出 有关字符与字符串操作的区别详见有关字符与字符串操作的区别详见P88表表1.4.2。4.字符串处理函数字符串处理函数设设:char str210=aaa,str110;strcpy(str1,str2);str1=“bb;str1=str2;使用下面函数时,使用下面函数时,应应加加#include string.h命令命令。1)strlen(str)功能功能:求求str所指向的字符串长度。不包括字符串结束标志所指向的字符串长度。不包括字符串结束标志0。说明说明:str可为字符串常量、字符数组名或字符指针。可为字符串常量、字符数组名或字符指针。2)strlw
23、r(str)功能功能:将字符串中的大写字母转换成小写字母。将字符串中的大写字母转换成小写字母。说明说明:str为字符字符串常量、数组名或字符指针。为字符字符串常量、数组名或字符指针。3)strupr(str)功能功能:将字符串中的小写字母转换成大写字母。将字符串中的小写字母转换成大写字母。说明说明:str为字符字符串常量、数组名或字符指针。为字符字符串常量、数组名或字符指针。4)strcpy(str1,str2)功能功能:将将str2所指的字符串复制到所指的字符串复制到str1中。中。说明说明:str1和和str2为字符数组名或字符指针为字符数组名或字符指针,str2还可以是字符串常还可以是字
24、符串常量。量。str1要有足够大的空要有足够大的空 间间。5)strcat(str1,str2)功能:功能:将将str2字符串内容连接到字符串内容连接到str1字符串内容的后面字符串内容的后面 说明:说明:str1要有足够大的空间。要有足够大的空间。例如:例如:char s120=abcd;coutstrcat(s1,kkk)endl;/s1中的内容变为中的内容变为abcdkkk 6)strcmp(str1,str2)功能:功能:比较字符串比较字符串str1和和str2的大小。的大小。说明:说明:从左至右逐个字符进行比较从左至右逐个字符进行比较ASCII码值,直到出现不相码值,直到出现不相同字
25、符或遇到同字符或遇到0为止。为止。str1 小于小于str2 返回返回-1str1等于等于str2 返回返回 0str1大于大于str2 返回返回 1strcmp(ABCD,BD);/结果为:结果为:-1#include stdio.h#include string.hvoid main()char s80;while(1)gets(s);if(strcmp(s,pass)puts(Invalid password.n);else break;puts(passn);【例例4.9】字符串处理函数示例字符串处理函数示例&求地址求地址 变量的地址在编程阶段是不知道的,因为只有到程序运行变量的地址在
展开阅读全文