二维数组及应用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

例3:输入3个学生、5门课程的成绩,分别存放在3×6矩阵的
前5列上,求出每个学生的平均成绩并存放在该行最后一列 上。
学生s0 s00 s01 s02 s03 s04 s05 学生s1 s10 s11 s12 s13 s14 s15 学生s2 s20 s21 s22 s23 s24 s25
平均成绩
分析:可以定义一个二维数组s记录学生的成绩,将输入的15 个成绩分别存入数组每一行的前5个元素中,再根据每一行 前5个元素的值求出平均值,也就是该行最后一个元素的值。
#include<stdio.h> main() { int i,j; float s[3][6],sum; for(i=0;i<3;i++) //输入 for(j=0;j<5;j++) scanf("%f", &s[i][j]); for(i=0;i<3;i++) //求平均值 { sum=0; for(j=0;j<5;wk.baidu.com++) sum=sum+s[i][j]; // 用循环计算每行前5个元素的和 s[i][5]=sum/5; //求出平均并存入该行最后一个元素的位置 } for(i=0;i<3;i++) { for(j=0;j<6;j++) //用for循环输出数组s,运行结果如下 printf("%5.1f",s[i][j]); printf("\n"); } }
例2:打印杨辉三角形。
1 1 1 1 2 1 3 1 4 1 5 …… int y[N][N] 1 3 1 6 4 1 10 10 5 1
y[i][j]
y[i-1][j-1]
y[i-1][j]
分析上图可以知道: 杨辉三角形 每一行的第一个和最后元素都是1 其余的元素: y[i][j]=y[i-1][j-1]+y[i-1][j](1≤j≤i-1)
a[2][0] a[2][1]
②表示行数和列数的下标值必须写在两个方括号中 ③二维数组在机器内部存储时,先存放第一行的元素, 再存放第二行的元素,以此类推,如上面定义的数组在 内存的存储次序为: a[0][0],a[0][1], a[1][0],a[1][1],a[2][0] ,a[2][1] ④可将二维数组看做元素也是数组的数组。如上面定义 的数组a,可看做是由a[0],a[1],a[2]组成的数组,而 a[0],a[1],a[2]又是分别包含两个元素的数组
• • • • • • • • • • • • • • • • • • • • • • • • •
#include <stdio.h> #include<time.h> #include<stdlib.h> #define N 5 #define M 4 void main() { int a[N][M],i,j; srand(time(0)); for(i=0;i<N;i++) for(j=0;j<M;j++) a[i][j]=rand()%90+10; for(i=0;i<N;i++) { for(j=0;j<M;j++) printf("%5d",a[i][j]); printf("\n"); } printf("-------------------------------------------------------------------\n"); for(j=0;j<M;j++) { for(i=0;i<N;i++) printf("%5d",a[i][j]);printf("\n"); } printf("\n"); }
第六章 讲 二维数组及其应用
教学目的及教学内容
教学目的
1、熟练掌握二维数组的定义、引用、初始化及示例。 2、以一维数组为基础,能够应用熟应用二维数组,对具体 问题进行分析和编程。
教学内容
1、二维数组的定义、引用、初始化 2、求二维数组中元素的最大值和最小值 3、二维数组的变换 4、一维数组中相关算法在二维数组中的实现
课后练习
• 例:由程序随机产生一个M×N的二维数组,并分别求出数组中最大元素 和最小元素。 • 例:由程序随机产生一个M×N的二维数组,并输出数组中各列中最小元 素之和。 • 例:编写程序求如下二维数组下三角元素的平方根的和。 23 45 56 73 34 34 74 85 54 764 56 98 56 89 67 98 54 83 12 59 98 87 74 48 62 • 例:由程序产生一个5x5的二维数组,并且使每个数组元素n为10—100 之间的正整数,把小于所有元素的平均值的数据存放到一个一维数组 之中并输出之。 • 例:求nXm二维数组中的所有奇数的平方根之和。其中二维数组中数据 为2位正整数,由随机函数给出。
#define N 10 main() { int i,j; int y[N][N]; for(i=0;i<N;i++) { y[i][0]=y[i][i]=1; //每行首尾元素为1 for(j=1;j<i;j++) y[i][j]=y[i-1][j-1]+y[i-1][j]; //其他元素由上一行得到 } //数组y初始化完毕 for(i=0;i<N;i++) //用for循环输出数组y { for(j=0;j<=i;j++) printf(“%6d”,y[i][j]); printf(“\n”); } }
6.3 二维数组的输入与输出
• 使用双重循环输入一个二维N*M的数组,并输出
例 二维数组程序举例
例1:将一个二维数组行和列的元素互换,存入另一个二维 数组中。
j i i
123 a= 456
14 b= 2 5 36
j
分析:首先定义原数组a[2][3],设定两个下标变量i和j, 用以标示a的某个元素所在的行和列,这样的话,两个 数组行列互换,也就是把a中元素a[i][j]的值赋给b[j][i]
6.1 二维数组的定义和引用
6.1 二维数组的定义 二维数组是由两个下标表示的数组,定义如下:
类型说明 数组名[常量表达式][常量表达式 ] 说明: ①第一个常量表达式表示数组第一维的长度(行数), 第二个表示数组第二维的长度(列数)。 例如:int a[3][2]; 定义了一个3×2(3行2列) a[0][0] a[0][1] 的二维数组a,逻辑结构如图 a[1][0] a[1][1] (以行为主序的存储方式)
a
a[0] a[1] a[2]
a[0][0] a[0][1] a[1][0] a[1][1] a[2][0] a[2][1]
6.2 二维数组的引用和初始化
6.2 二维数组元素引用:数组名 [下标][下标] 如:a[3][4]表示数组a的第3行第4列所对应的元素 6.2 二维数组初始化:
① 分行赋值 如:int a[3][2]={{0,1},{2,3},{4,5}}; 赋值结果 ② 按数组排列次序赋值 0 0 如:int a[3][2]={0,1,2,3,4,5}; 1 0 ③ 对部分元素赋值 0 0 如:int a[3][2]={{0},{1,0}}; ③ 省略第一维长度对全部元素赋值 如:int a[][2]={0,1,2,3,4,5}; /*由全部元素的个数可以确定第一 维的长度为3,省略第一维时,第二维不能缺省*/
#include<stdio.h> void main() { int a[2][3]={{1,2,3},{4,5,6}}; int b[3][2] , i, j; //定义数组a和b printf(“array a:\n”); for(i=0;i<2;i++) { for(j=0;j<3;j++) { printf(“%5d”,a[i][j]); //输出数组a b[j][i]=a[i][j]; //a的行列互换,存入b } printf(“\n”); } printf(“array b:\n”); for(i=0;i<3;i++) { for(j=0;j<2;j++) printf(“%5d”,b[i][j]); //输入数组b printf(“\n”); } }
相关文档
最新文档