四个学生三门成绩 C语言二维数组,C语言程序设计第6章-6.2.pptx

C语言程序设计第6章-6.2.pptx

C 语 言 程 序 设 计 实 例 教 程6.2 二维数组,C 语 言 程 序 设 计 实 例 教 程,第6章 数组,二维数组的定义和数组元素的引用方法 二维数组的初始化方法,本节要点实例21 二维数组的定义与引用-统计总成绩及平均成绩,【实例任务】 从键盘上任意输入某班n个学生的三门课程的成绩,计算每个学生的平均成绩、计算每门课程的平均成绩,并且打印成绩单,输出三门课程成绩的平均分及课程的平均分。运行结果如图6-6所示。,图6-6 程序运行结果实例21 二维数组的定义与引用-统计总成绩及平均成绩,【程序代码】 include “stdio.h“ define N 40 main float ave3,scoreN4,sum; int i,j,n; printf“请输入学生的人数“; scanf“d“, 实例21 二维数组的定义与引用-统计总成绩及平均成绩,【程序代码】 fori0;in;i /*计算每个学生的平均成绩*/ sum0; forj0;j3;j sumsumscoreij; scorei3 sum/3; forj0;j3;j /*计算每门课的平均成绩*/ sum0; fori0;in;i sumsumscoreij; avej sum/n; 实例21 二维数组的定义与引用-统计总成绩及平均成绩,【程序代码】 /*打印成绩单*/ printf“序号 课程1 课程2 课程3 平均成绩 n“; /*输出表头*/ fori0;in;i printf“-10d“,i1; /*左对齐,输出学生编号*/ /*输出3科成绩平均分*/ forj0;j4;j printf“-9.1f“, scoreij; /*左对齐输出*/ printf“n“; /*输出课程平均分*/ printf“平均成绩 “; /*一个汉字占两个字符的位置,后面添加2个空格*/ for j 0; j 3; j printf“-9.1f“, avej; /*左对齐输出*/ getch; 实例21 二维数组的定义与引用-统计总成绩及平均成绩,【相关知识 】 1二维数组的定义 定义二维数组的一般格式为 类型标识符 数组名常量表达式1常量表达式2 ; 在二维数组的定义中,数组名后面紧跟两个方括号括起来两个下标。常量表达式1的值指明了二维数组的行数,常量表达式2的值指明了二维数组的列数。行下标值和列下标值的乘积,是数组元素的个数。 例如float score404; 定义了一个实型二维数组score,共有40*4160个元素,可以称为40行4列的数组。实例21 二维数组的定义与引用-统计总成绩及平均成绩,【相关知识 】 对于以上定义的数组有以下几点说明,这些说明同样适合其他二维数组。 1二维数组中每个数组元素必须有两个下标,常量表达式的值即为下标的值,与一维数组要求一样,其下标只能是正整数,并且从0开始。 2二维数组可看作是一种特殊的一维数组。可以将二维数组元素排列成一个矩阵,用二维数组的第1个下标表示数组元素所在的行,第2个下标表示所在的列,二维数组只是在逻辑上是二维的,从存储上看,二维数组仍是一维线性空间。C语言中,按照行优先方式存储二维数组,即先存放第0行的元素,再存放第1行的元素;同一行中再按列顺序存放。 例如float score404;可以把score数组看作是包含40个元素的一维数组,每个元素又是一个含有四个元素一维数组。实例21 二维数组的定义与引用-统计总成绩及平均成绩,【相关知识 】 2二维数组元素的引用 C语言规定,不能引用整个数组,只能逐个引用元素。 二维数组中各个元素可看作具有相同数据类型的一组变量。因此,对变量的引用及一切操作,同样适用于二维数组元素。二维数组元素引用的格式为 数组名行下标表达式列下标表达式实例21 二维数组的定义与引用-统计总成绩及平均成绩,【相关知识 】 说明 1下标可以是整型常量或整型表达式。第一维下标的取值范围是0,第一维长度-1, 第二维下标的取值范围是0,第二维长度-1。 2二维数组的引用和一维数组的引用类似,要注意下标取值不要超过数组的范围。 例如,下面的语句均是正确的二维数组引用格式。 int a34; a003; a01a0010; ai-1iij; a01a00; a02a01intx; a20; scanf “d“ , 21; printf “d“ , a21;实例22 二维数组的初始化与引用求矩阵的乘积,【实例任务】 编写程序求一个M行N列的矩阵和一个N行W列的矩阵的乘积。运行结果如图6-7所示。,图6-7 程序运行结果实例22 二维数组的初始化与引用求矩阵的乘积,【程序代码】 include “stdio.h“ define M 4 define N 5 define W 4 main int aMN,bNW,cMW,i,j,k; printf“please enter array ad*dn“,M,N; fori0;iM;i /*输入第一个矩阵*/ forj0;jN;j scanf“d“,实例22 二维数组的初始化与引用求矩阵的乘积,【程序代码】 fori0;iN;i /*输入第二个矩阵*/ forj0;jW;j scanf“d“, 实例22 二维数组的初始化与引用求矩阵的乘积,【相关知识 】 1二维数组的初始化 定义之后进行数组的初始化操作,则只能对每个数组元素一一赋值。 int arr410,i,j; fori0;i4;i forj0;j10;j arrij0; 2赋值格式 如果在定义数组时完成数组的初始化操作,赋值格式有三种。 (1)将数组元素的初值依次放在一对中并用赋值号与数组连接。具体格式为 存储类型 数据类型 数组名数组长度初值列表; 例如int a231,2,3,4,5,6;实例22 二维数组的初始化与引用求矩阵的乘积,【相关知识 】 (2)内各个初值之间用逗号分隔,初值类型必须与数组类型一致。系统自动按数组元素在内存的顺序将初值依次赋给相应的元素。若数值型数组的初值数量不足时,将0赋给其余数组元素,有定义如下 int x231,2,3,4,5; 运行后,x001、x012、x023、x104、x115,其余元素被自动赋值为0。 3赋初值时,每一行的初值放在一对中,所有行的初值再放在一对中。系统将第一对内数据依次赋值给数组的第0行,将第二对内数据依次赋值给数组的第1行,依次类推。具体格式为 存储类型 数据类型 数组名数组长度第0行初值列表,第1行初值列表, ;实例22 二维数组的初始化与引用求矩阵的乘积,【相关知识 】 有定义如下 int x441,2,3,4,4,5,67; 系统将1、2、3、4依次赋给第0行的x00、x01、x02和x03;4、5、6依次赋给第1行的x10、x11和x12, x03的初值,系统自动赋0;系统给第2行的x20、x21、x22和x23均赋值0;第3行对应7,则系统将7赋值给x30,余下的x31、x32和x33均被系统赋值为0。实例22 二维数组的初始化与引用求矩阵的乘积,【相关知识 】 4数组初始化时,行长度可省,列长度不能省。编译系统会根据赋初值的情况,自动得到第一维的长度。所给初值的个数也不能多于数组元素的个数。 例如int a31,2,3,4,5,6,7; /*隐含指明行下标为3*/ int b41,4,5;/*隐含指明行下标为2*/ 下面对二维数组的初始化都是错误的 int a ,b 2,c3 ; /*数组初始化时,行长度和列长度不正确*/ float x3 1.0,2.0,3.0,4.0,5.0,6.0;/*列长度不能省*/ int m241,2,3,4,5,6,7,8,9 /* 编译出错,初值个数多于数组元素的个数 */实例22 二维数组的初始化与引用求矩阵的乘积,【相关知识 】 3二维数组元素的地址 二维数组数组元素的地址可用数组元素前面加地址操作符的方式来表示 数组名下标1下标2【课堂精练】,1求出矩阵a的主对角线上的元素之和,程序运行结果如图6-8所示。,图6-8 程序的运行结果【课堂精练】,根据程序运行结果,将下面程序补充完整。 include “stdio.h“ main int a331,3,5,7,9,11,13,15,17,sum0,i,j; fori0;i3;i forj0;j3;j ifij/*对角线上元素的行列下标值是相等的*/ printf“sumd“,sum; getch; 【课堂精练】,2.定义一个二维数组,编程求出最大值的元素所在的行和列下标值。程序的运行结果如图6-9所示。,图6-9 程序运行结果【课堂精练】,根据程序运行结果,将下面程序补充完整。 include “stdio.h“ main int i,j,row0,col0,max; int a333,-6,90,15,-53,71,12,48,91;/*定义二维数组并初始化*/ maxa00;/*假设第一个数组元素就是最大值,后面再进行比较*/ fori0;imax _ rowi; colj; printf“最大值dn所在行号为dn所在列号为d“,max,row,col; getch; 谢谢,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值