为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

数组

2013-01-29 33页 ppt 623KB 3阅读

用户头像

is_446578

暂无简介

举报
数组null数组的概念及应用数组的概念及应用数组的概念 ——概念引入数组的概念 ——概念引入用基本数据类型可以解决所有问题吗? 例如:对某班学生的成绩按由高到底的次序进行排序。 3 名? 30 名?数组的概念数组的概念数组是具有一定顺序关系的若干相同 类型变量的集合体,组成数组的变量称为 该数组的元素。 数组属于构造类型。 一维数组 一维数组 一维数组的定义 存储类型 类型说明符 数组名[ 常量表达式 ]; ...
数组
null数组的概念及应用数组的概念及应用数组的概念 ——概念引入数组的概念 ——概念引入用基本数据类型可以解决所有问题吗? 例如:对某班学生的成绩按由高到底的次序进行排序。 3 名? 30 名?数组的概念数组的概念数组是具有一定顺序关系的若干相同 类型变量的集合体,组成数组的变量称为 该数组的元素。 数组属于构造类型。 一维数组 一维数组 一维数组的定义 存储类型 类型说明符 数组名[ 常量达式 ]; 例如:int a[10] , b[‘a’+1]; 无a[10]表示 a 为整型数组,有10个元素:a[0] ... a[9] 下标是从0开始! 一维数组 一维数组 一维数组的存储顺序 例如:int a[10] ;系统会在内存分配地址连续的10个int 空间给此数组 数组名是一个地址常量,不能被赋值…数组一旦定义,不能改变大小 数组大小最好用宏来定义,以适应未来可能的变化 #define SIZE 10 int a[SIZE]; Static int a[3][4]; 与 int a[3][4];有区别? 一维数组 一维数组 一维数组的引用 不能把整个数组作为一个整体输入/出或赋值,只能逐个引用数组元素 必须先定义,后引用。 元素引用格式: 数组名 [下标]; 下标既可以是常量,也可以是整型表达式,允许快速地随机访问,如a[i] 下标越界是大忌! 编译程序不检查是否越界,下标越界,将访问数组以外的空间, 可能带来严重后果 元素被引用后使用与一般变量相同 例如:a[0]=a[5]+a[7]-a[2*3]如何使两个一维数组的值相等如何使两个一维数组的值相等main() { int a[4] = {1,2,3,4}, b[4]; b = a; }解决方法 法1:逐个元素赋值 b[0]=a[0]; b[1]=a[1]; b[2]=a[2]; b[3]=a[3]; 法2:通过循环赋值 int i; for (i=0;i<4;i++) { b[i] = a[i]; }原因: 数组名表示数组的首地址,其值不可改变!null一维数组输入方法:int a[10],i;输入第i个数组元素:scanf("%d",&a[i]);输入整个数组元素:for (i=0;i<10;i++) scanf("%d",&a[i]);输出方法:输出第i个数组元素:printf("%d",a[i]);输出整个数组元素:for (i=0;i<10;i++) printf("%d",a[i]);一维数组的输入和输出只能逐个对数组元素进行操作(字符数组例外) 一维数组 ——初始化 一维数组 ——初始化数组元素初始化: 在定义数组时对数组元素赋以初值。 例如: int a[10]={0,1,2,3,4,5,6,7,8,9}; 可以只给一部分元素赋初值 例如: int a[10]={ 0,1,2,3}; 所赋初值元素从数组第0个 元素开始,无初值元素均为0 对多维数组如此.{0,1,2,3,0,0,0,0,0,0}可以不指定数组长度,系统自动确定 例如:int a[]={1,2,3,4,5} 即 a[5] 一维数组举例一维数组举例void main() { int i; static int f[20]={1,1};/*初始化第0、1个数*/ for(i=2;i<20;i++) f[i]=f[i-2]+f[i-1]; /*求第2~19个数*/ for(i=0;i<20;i++) /*输出,每行5个数*/ { if(i%5==0) printf(“\n”); printf("%d", f[i]); } }运行结果: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 67651.求Fibonacci数列问题null...... main() { ...... for (i=0; i maxScore) { maxScore = score[i]; } } printf("maxScore = %.0f\n", maxScore); }例2: 从键盘输入学生人数n 输入所有学生的学号和成绩 求最高分。若还需打印最高分学生学号呢?null例初始: [ 49 38 65 97 76 13 27 ]i=01349一趟: 13 [38 65 97 76 49 27 ]i=12738六趟: 13 27 38 49 65 76 [97 ]从小到大排序例3. 选择法排序 二维数组 ——定义及引用二维数组 ——定义及引用二维数组的定义 类型说明符 数组名[常量表达式][常量表达式] 例如:float a[3][4];引用 例如:b[1][2]=a[2][3]/2 下标不要越界二维数组的存储结构二维数组的存储结构short int a[2][3];a[1][0]a[1][1]a[1][2]a[0][0]a[0][1]a[0][2]存放顺序:按行存放 需要知道数组的每一行有多少列,这样从起始地址开始,才能正确的读出数组的元素二维数组 ——初始化二维数组 ——初始化分行给二维数组赋初值 例如: int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 所有数据写在一个{ }内,按存储顺序依次赋值 例如:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 可以对部分元素赋初值 例如:int a[3][4]={{1},{0,6},{0,0,11}}; 根据给定初值,系统自动定行数 例如:int a[ ][3]={{1},{2},{3,4,5}}; 即 a[3][3]1 0 0 0 0 6 0 0 0 0 11 0 二维数组的初始化示例【例一】以下程序的运行结果是什么? main() { int a[][3]={{1,2,3},{4,5},{6},{0}}; printf("%d,%d,%d\n",a[1][1],a[2][1],a[3][1]); }1 2 3 4 5 0 6 0 0 0 0 0结果:5, 0, 0【例二】若int a[ ][3]={1, 2, 3, 4, 5, 6, 7}, 则a数组的第一维大小是多少? 1 2 3 4 5 6 7 0 0二维数组的初始化示例如何使两个二维数组的值相等?如何使两个二维数组的值相等?通过双重循环赋值 int a[4][2]={1,2,3,4,5,6,7,8}; int b[4][2]; int i,j; for (i=0; i<4; i++) { for (j=0; j<2; j++) { b[i][j] = a[i][j]; } }二维数组的输入和输出二维数组的输入和输出使用双重循环 int a[4][2]; int i,j; for (i=0; i<4; i++) { for (j=0; j<2; j++) { scanf("%d", &a[i][j]); } }null【例4-5 】有一3×4矩阵,编程求其元素最大值并 输出其行、列号。main() { int i,j,x,y,max; int a[][4]={3,5,8,1,6,9,7,12,-6}; max=a[0][0]; for (i=0;i<3;i++) for (j=0;j<4;j++) if (a[i][j]>max) { max=a[i][j]; x=i; y=j; } printf("max is a[%d][%d]=%d\n",x,y,max); } 3 5 8 1 6 9 7 12 -6 0 0 0要点:用两重循环遍历所有元素。【讨论】 如果求最小值? 数组作为函数参数1、传值方式 2、传址方式回顾:函数参数传递的两种方式数组作为函数参数null传值方式举例:main() { ……. int a=10,b=20; swap(a,b); printf("%d,%d\n",a,b); …….. } swap( int x, int y) { int t; t=x; x=y; y=t; printf("%d,%d\n",x,y); }数组作为函数参数数组作为函数参数1.数组元素作函数参数 传值方式 2.数组名作函数参数数 传址方式 【例4-7】 数组元素作为函数的参数【例4-7】 数组元素作为函数的参数void main(void) { int gcd(int ,int ); int a[8]={26,1007,956,705,574,371,416,517}; int b[8]={994,631,772,201,262,763,1000,781}; int c[8],i; for(i=0;i<8;i++) c[i]=gcd(a[i],b[i]); /*求数组a,b对应元素的最大公约数 */ for(i=0;i<8;i++) printf("%d\t",c[i]); printf("\n"); }2 1 4 3 2 7 8 11求最大公约数的函数 求最大公约数的函数 /******************************************** 算法:求两个整数a和b的最大公约数 返回值:返回a和b的最大公约数 *********************************************/ int gcd(int a,int b) { int r,t; if(a float average(int stu[10], int n); main() { int score[10], i; float av; printf("Input 10 scores:\n"); for( i=0; i<10; i++ ) scanf("%d", &score[i]); av=average(score , 10); printf("Average is:%.2f", av); }float average(int stu[ ], int n) { int i; float av,total=0; for( i=0; i
/
本文档为【数组】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索