计算机程序设计A.ppt

上传人:王** 文档编号:187956 上传时间:2023-04-03 格式:PPT 页数:50 大小:779KB
下载 相关 举报
计算机程序设计A.ppt_第1页
第1页 / 共50页
计算机程序设计A.ppt_第2页
第2页 / 共50页
计算机程序设计A.ppt_第3页
第3页 / 共50页
计算机程序设计A.ppt_第4页
第4页 / 共50页
计算机程序设计A.ppt_第5页
第5页 / 共50页
计算机程序设计A.ppt_第6页
第6页 / 共50页
计算机程序设计A.ppt_第7页
第7页 / 共50页
计算机程序设计A.ppt_第8页
第8页 / 共50页
计算机程序设计A.ppt_第9页
第9页 / 共50页
计算机程序设计A.ppt_第10页
第10页 / 共50页
亲,该文档总共50页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《计算机程序设计A.ppt》由会员分享,可在线阅读,更多相关《计算机程序设计A.ppt(50页珍藏版)》请在优知文库上搜索。

1、第五章 数组本章目的n熟练掌握一维数组的定义和引用;熟练掌握一维数组的定义和引用;n掌握二维数组的定义和引用;掌握二维数组的定义和引用;n利用数组编写程序利用数组编写程序( 求最大最小值求最大最小值, 平均值平均值, 选选择排序择排序, 冒泡排序冒泡排序, 字符串的处理字符串的处理, 矩阵运算矩阵运算)为什么要使用数组n只用前面所讲的基本数据类型只用前面所讲的基本数据类型(int , long , float , double , char ), 解决复杂的问题有困解决复杂的问题有困难难.n例:排序问题例:排序问题两个数排序?两个数排序?if ( a b ) t = a; a = b; b =

2、 t; 三个数排序?三个数排序?if ( a b ) t = a; a = b; b = t; if ( a c ) t = a; a = c; c = t; if ( b c ) t = b; b = c; c = t; 四个数排序?if ( a b ) t = a; a = b; b = t; if ( a c ) t = a; a = c; c = t; if ( a d ) t = a; a = d; d = t; if ( b c ) t = b; b = c; c = t; if ( b d ) t = b; b = d; d = t; if ( c 1)#include void

3、 main ( ) int i;long f 40 = 1, 1;for ( i = 2; i 40; i+)f i = f i-2 + f i-1;for ( i = 0; i 40; i+) if ( i % 4 = 0) printf (n); printf (%16ld, f i );5-1 一维数组n应用举例应用举例n例例 2 :输入一个班级学生的一门课成绩:输入一个班级学生的一门课成绩( 人数人数=50) , 计算计算平均成绩平均成绩, 并并统计高于平均成绩统计高于平均成绩的学的学生人数生人数.n解解:必须用数组完成必须用数组完成。算法框图:。算法框图:5-1 一维数组n对对n 个

4、数排序问题个数排序问题( 以从小到大排序为例以从小到大排序为例)n(1) 选择法排序:找出最小的放在最前面。选择法排序:找出最小的放在最前面。5-1 一维数组n对对n 个数排序问题个数排序问题( 以从小到大排序为例以从小到大排序为例)n(1) 选择法排序:找出最小的放在最前面。每一选择法排序:找出最小的放在最前面。每一轮找出一个最小的,共轮找出一个最小的,共n1轮。轮。#include void main( )float a 100 , t ; int i, j, k, n; scanf(“%d”, &n) ; for( i=0 ; in ; i+) scanf(“%f”, &ai) ;for

5、( i=0; in-1; i+) k=i ;for( j=i+1 ; jaj ) k=j ;t=ai; ai=ak; ak=t; for( i=0 ; in ; i+) printf(“%.2f ”, ai );5-1 一维数组n对对n 个数排序问题个数排序问题( 以从小到大排序为例以从小到大排序为例)n(2)冒泡法排序:将相邻两个数比较,将小的调)冒泡法排序:将相邻两个数比较,将小的调到前头,大的调到后面。到前头,大的调到后面。98542098542089 59 49 29 099985420958 48 28 0888420589552045894402458922结果开始024589共循

6、环多少次?共循环多少次?每次循环进行了多少次比较?什么时候结束?每次循环进行了多少次比较?什么时候结束?如果序列为如果序列为5、8、9、4、2、0,先排在最后的还是,先排在最后的还是 9 吗?吗?如果要求先将最小的数排在最前面,该如何操作?如果要求先将最小的数排在最前面,该如何操作?5-1 一维数组n对对n 个数排序问题个数排序问题( 以从小到大排序为例以从小到大排序为例)n(2)冒泡法排序)冒泡法排序数据结构数据结构: 变量变量n: 这一组数的个数这一组数的个数,从键盘输入从键盘输入. 一维数组一维数组a: 存放这存放这n 个数个数(a0,an-1) 循环变量循环变量i表示轮次,初值表示轮次

7、,初值=0 循环变量循环变量j表示每轮中,比较时元素的下标值。表示每轮中,比较时元素的下标值。 j每轮都从每轮都从0开始,以开始,以aj 和和 aj+1 比较比较 每轮比较次数不断减每轮比较次数不断减1。5-1 一维数组n对对n 个数排序问题个数排序问题( 以从小到大排序为例以从小到大排序为例)n(2)冒泡法排序)冒泡法排序#include void main( ) int a 100 , n , i , j , t ; scanf(“%d”, &n) ; for( i=0 ; in ; i+) scanf(“%d”, &ai) ; for( i=0; in-1; i+) for( j=0 ;

8、 jaj+1 ) t=aj; aj=aj+1; aj+1=t; for( i=0 ; in ; i+) printf(“%d ”, ai );5-1 一维数组n对对n 个数排序问题个数排序问题( 以从小到大排序为例以从小到大排序为例)n(2)冒泡法排序:改进的冒泡排序:如果在某轮)冒泡法排序:改进的冒泡排序:如果在某轮外循环中外循环中,一次交换也没有发生一次交换也没有发生, 则说明已排好序则说明已排好序, 外循环可以不再进行外循环可以不再进行.n可以用一个标记变量来表示是否交换过。可以用一个标记变量来表示是否交换过。5-1 一维数组n在在n个数中查找某一个数。个数中查找某一个数。n顺序查找法:

9、顺序查找法:n个数一个个与被查找数比较。个数一个个与被查找数比较。n折半查找法:不要求,略!折半查找法:不要求,略!#include void main() int a100, i, n, x ; scanf(“%d”, &n) ; for( i=0; in; i+) scanf(“%d”, &ai) ; for( i=0; in; i+) if( ai =x ) break ; if( in ) printf(“find: %d it is a%dn”, x, i) ; else printf(“%d not been foundn”, x) ; for( i=0; in; i+) if(

10、ai =x ) printf(“find: %d it is a%dn”, x, i) ; exit(0) ; printf(“%d not been foundn”, x) ;练习n读程序写结果读程序写结果#include void main( ) int p7=11,13,14,15,16,17,18 , i=0, k=0 ;while( i7& pi%2) k+=pi ; i+;printf(“%dn”, k) ;5-2 二维数组nC语言中,数组元素又可以是一个数组,这样语言中,数组元素又可以是一个数组,这样就构成了多维数组。就构成了多维数组。n二维数组是二维数组是“ 数组的数组数组的数

11、组” ,数据有行列之分,数据有行列之分,用两个下标标识一个数组元素,适合处理矩阵。用两个下标标识一个数组元素,适合处理矩阵。5-2 二维数组n二维数组的定义二维数组的定义数组类型名数组类型名 数组名数组名行常量表达式行常量表达式列常量表达式列常量表达式 ;int a23; /*定义一个定义一个2行行3列的整型数组列的整型数组a, 共有共有6个元素,个元素, 分别为分别为a00, a01, a02,a10, a11, a12 , 这些元素均为简单的整型变量。这些元素均为简单的整型变量。 */char c310;float b22;可把二维数组看作是一种特殊的一维数组:它的元素又是可把二维数组看作

12、是一种特殊的一维数组:它的元素又是一个一维数组一个一维数组例如,可把例如,可把 a34 看作是一个一维数组,有看作是一个一维数组,有3个元素:个元素:a0、a1、a2,每个元素又是一个包含,每个元素又是一个包含 4 个元素的一维个元素的一维数组。见下图:数组。见下图:二、二维数组的存储二、二维数组的存储二维数组中元素排列的顺序是按二维数组中元素排列的顺序是按行行存放存放a0a1a2a00 a01 a02 a03aa10 a11 a12 a13a20 a21 a22 a23三、二维数组的初始化三、二维数组的初始化1、按行、按行2、按存放顺序、按存放顺序例:例: int b23 = 1, 2, 3

13、, 4, 5, 6;3、只给部分元素赋初值、只给部分元素赋初值例:例: int c23 = 1, 2, 4;int d23 = 0, 0, 9, 0, 6;按行存放按行存放例:例: int a23 = 1, 2, 3, 4, 5, 6;4、省略第一维长度;、省略第一维长度;例:例: int e3 = 1, 2, 3, 4, 5, 6,7;注意注意:不能省略第二维的长度。:不能省略第二维的长度。为什么?为什么?四、二维数组的引用四、二维数组的引用二维数组元素的表示二维数组元素的表示: : 数组名数组名 行下标行下标列下标列下标 如:如: a23a2-12*2-1b12 = a23 / 2注意数组

14、定义和数组元素引用的区别注意数组定义和数组元素引用的区别例如例如int a34;第一个元素是第一个元素是a00,最后一个元素是,最后一个元素是a23下标可以是整型表达式下标可以是整型表达式5-2 二维数组n二维数组的使用举例二维数组的使用举例n矩阵转置:将一个矩阵的行、列互换矩阵转置:将一个矩阵的行、列互换#include void main()int a23 = 1, 2, 3, 4, 5, 6;int b32, i, j;printf (array a:n);for ( i = 0; i 2; i+for ( j = 0; j 3; j+)printf (%3d, aij );bji =

15、aij;printf (n);printf(array b:n);for ( i = 0; i 3; i+)for ( j = 0; j 2; j+)printf(%3d, bij );printf(n);5-2 二维数组n二维数组的使用举例二维数组的使用举例n找出二维数组找出二维数组(M行行N列列)的最大值与最后一的最大值与最后一个元素交换后以行列对齐方式输出个元素交换后以行列对齐方式输出.(p115,例例5.13)5-3 字符数组n为什么要把字符数组单独作为一个内容讲解?为什么要把字符数组单独作为一个内容讲解?n是因为字符数组跟数值数组有不同之处。是因为字符数组跟数值数组有不同之处。n1.

16、 字符数组和数值数组的相同之处字符数组和数值数组的相同之处n(1) 定义格式相同定义格式相同 char c10; char d320;5-3 字符数组n1. 字符数组和数值数组的相同之处字符数组和数值数组的相同之处n(2) 引用数组元素的形式相同引用数组元素的形式相同 数组名数组名下标下标 或或 数组名数组名下标下标1下标下标2 其中:下标可以是其中:下标可以是 常量常量, 变量变量, 表达式表达式c0=a; int i=5; ci=g; scanf(“%c” ,&c3);printf(“%cn”, c0);5-3 字符数组n1. 字符数组和数值数组的相同之处字符数组和数值数组的相同之处n(3)数值数组初始化的格式同样适用字符数组)数值数组初始化的格式同样适用字符数组n这种初始化的方式是单字符方式这种初始化的方式是单字符方式char c10 ;char c10= a,b,c,d,e,f,g,h,i ;char c = a,b,c,d,e,f,g,h,i ;char c10=a,b ; /* 没有初始化的元素为没有初始化的元素为0 */5-3 字符数组n1. 字符数组和数值数组的相同之处

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 数据结构与算法

copyright@ 2008-2023 yzwku网站版权所有

经营许可证编号:宁ICP备2022001189号-2

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!