5.4.1 二维数组 (一) 二维数组的定义 1. 二维数组定义的一般形式 类型说明符 数组名[常量表达式][ 常量表达式]

Slides:



Advertisements
Similar presentations
数据结构的引入. 通讯录管理 社团机构管理 校园导航管理 通讯录管理 社团机构管理 校园导航管理.
Advertisements

只怕有心人只怕有心人 世上无难事世上无难事 浙江长征职业技术学院 — 计算机与信息技术系 — 相方莉制作.
《C语言程序设计》复习
§1 二阶与三阶行列式 ★二元线性方程组与二阶行列式 ★三阶行列式
C程序设计 第6章 数 组 主讲教师: 鲁 萍 西安建筑科技大学 理学院 任务:键盘输入整数,排序.
二级指针与二维数组.
10.1 二级指针 10.2 指针与二维数组 10.3 指针的动态存储分配 10.4 函数指针 10.5 main函数的参数
第6章 数组 公共计算机基础教研部.
一维数组 乾坤以有亲可久; 君子以厚德载物。.
C语言程序设计.
4.3 使用二维数组 P 求两个矩阵的和 求方阵对角线上元素之和 显示算术题和学生答题信息
C语言基础——指针的高级应用 Week 05.
第6章 指针 6.1 指针的概念 6.2 变量与指针 6.3 数组与指针 6.4 字符串与指针 6.5 函数与指针 6.6 返回指针值的函数
6.4 字符串与指针 1. 用字符数组存放一个字符串.
第六节 二维数组和指针 二维数组的地址 对于一维数组: (1)数组名array表示数组的首地址, 即array[0]的地址;
C语言实验 第一课 标题:学号+姓名.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
字符串与二维数组.
C语言程序设计 第十二章 位运算.
第5章 函数与模块化设计 学习目的与要求: 掌握函数的定义及调用方法 理解并掌握参数的传递方法 理解函数的嵌套与递归调用
第六章 数 组 主讲教师 贾月乐 联系电话:
選擇排序法 通訊一甲 B 楊穎穆.
VB程序设计语言 主讲教师:王 杨.
目录 第八章 数组 1 简单学生成绩管理系统的开发 2 一维数组 3 多维数组 4 字符数组 5 数组作函数参数.
在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。
走进编程 程序的顺序结构(二).
Zhao4zhong1 (赵中) C语言指针与汇编语言地址.
Zhao4zhong1 (赵中) C语言指针与汇编语言地址.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
C语言 程序设计基础与试验 刘新国、2012年秋.
第六单元 应用数组的程序设计 从现在开始,将详细讲述C语言的方方面面。第一章中的所有疑惑,都将一一消灭。
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
第6章 数 组 本章要点: 数组的定义、初始化、数组元素的引用 字符数组的输入输出 字符串处理函数 数组的应用 学习方法建议:
第13章 结构体的应用 13.1 了解由用户构造的数据类型 13.2 结构体类型说明及结构体变量 13.3 结构体数组
第四章 数组 4.4.1一维数组的定义和初始化 一、一维数组的定义和初始化 1.一维数组定义 定义格式:类型 数组名[常量表达式];
欲穷千里,更上层楼 第十章 指 针 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; 能很方便地使用数组和字符串; 并能象汇编语言一样处理内存地址,从而编出精练而高效的程序。指针极大地丰富了C语言的功能。 学习指针是学习C语言中最重要的一环,
第五章 习题课 电子信息与计算机科学系 曾庆尚.
第六章 数组 西安工程大学.
实验九 函数嵌套、函数参数 第27讲 C程序设计 Main() { int x,y; X=10; y=x*x+1;
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第七章 数组.
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
資料結構與C++程式設計進階 排序與搜尋 講師:林業峻 CSIE, NTU 6/ 14, 2010.
顺序表的删除.
第4章 数组 本章导读 本章主要知识点 《 C语言程序设计》 (Visual C++ 6.0环境)
线 性 代 数 厦门大学线性代数教学组 2019年4月24日6时8分 / 45.
浙江长征职业技术学院-计算机应用系-相方莉制作
C语言大学实用教程 第6章 数组 西南财经大学经济信息工程学院 刘家芬
Main() { Dfas Asdfasf fasdfa } #include <stdio.h> void main( ) {
第二章 Java基本语法 讲师:复凡.
函数 概述 模块化程序设计 基本思想:将一个大的程序按功能分割成一些小模块, 特点: 开发方法: 自上向下,逐步分解,分而治之
请编写程序在屏幕上打印出一个“*”? printf(”*\n”); 请编写程序在屏幕上打印四行,每行一个“*”?
第六章 数组.
C语言的特点 1. C程序由许多函数组成 2. C程序必须有且只有一个主函数main( ) 3. 函数用“{”和“}”表示起点和终点
请编写如下程序: 输入100名学生的成绩,要求输出高于平均分的成绩。
C语言程序设计 第一章 数据类型, 运算符与表达式 第二章 顺序程序设计 第三章 选择结构程序设计 第四章 循环控制 第五章 数组.
浙江长征职业技术学院—计算机与信息技术系—相方莉制作
7.1 C程序的结构 7.2 作用域和作用域规则 7.3 存储属性和生存期 7.4 变量的初始化
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
第6章 数组.
第4章 Excel电子表格制作软件 4.4 函数(一).
C程序设计.
第九节 赋值运算符和赋值表达式.
实验七 数 组 第21讲 C程序设计 Main() { int x,y; X=10; y=x*x+1;
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
第七章  数 组.
C/C++基礎程式設計班 陣列 講師:林業峻 CSIE, NTU 3/14, 2015.
插入排序的正确性证明 以及各种改进方法.
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
C语言基础学习 从外行到入门.
Presentation transcript:

5.4.1 二维数组 (一) 二维数组的定义 1. 二维数组定义的一般形式 类型说明符 数组名[常量表达式][ 常量表达式] 类型说明符 数组名[常量表达式][ 常量表达式] 例如:int a[3][4] 定义了一个3×4(3行4列)的整型数组a 浙江长征职业技术学院—计算机与信息技术系—相方莉制作

5.4.1 二维数组 2. 二维数组的理解 二维数组是一种特殊的一维数组 例如 int a[3][4]; 三个元素分别为a[0],a[1],a[2]。 再看第二维,表明每个元素又是一个包含4个元素的一维数组, 如a[0]这个元素包含4个元素:a[0][0],a[0][1],a[0][2],a[0][3] 浙江长征职业技术学院—计算机与信息技术系—相方莉制作

5.4.1 二维数组 ( 二) 二维数组的使用 二维数组元素的表示形式: 数组名[下标][下标] 例:int a[3][4], 表示行下标值最小从0开始,最大为3-1=2; 列下标值最小为0,最大为4-1=3, 即: a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[2][0] a[2][1] a[2][2] a[2][3] 浙江长征职业技术学院—计算机与信息技术系—相方莉制作

5.2 项目相关知识 (三) 二维数组的初始化 二维数组初始化的方法如下。 (1) 分行给二维数组赋初值(推荐使用) int a[3][4]={{1,2,3,4},{4,5,6,7},{6,7,8,9}}; (2) 将所有数据写在一个花括弧内,按数值排列的顺序对各元素赋初值。 int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12} (3) 可以对部分元素赋初值。 int a[3][4]={{1,2},{4},{6,7,8}}; a数组分布如图所示。 (4) 如果对全部数组元素赋值,则第一维的长度可以不指定, 但必须指定第二维的长度,全部数据写在一个大括号内。 如: int a[][3]={1,2,3,4,5,6,7,8,9,10,11,12}; 第一维长度4省略。 1 2 0 0 4 0 0 0 6 7 8 0 浙江长征职业技术学院—计算机与信息技术系—相方莉制作

(四) 二维数组的应用 【例5-11】输入五个同学三门课的成绩并输出。 #include "stdio.h" #define N 5 main() {int i,j; int score [N][3]; printf("请输入五个同学三门课的成绩:\n"); for (i=0;i<N;i++) for(j=0;j<3;j++) scanf("%d",&score[i][j]); printf("输出五个同学三门课的成绩:\n"); for (i=0;i<N;i++) { printf("第%d位同学:",i+1); for(j=0;j<3;j++) printf("%5d",score[i][j]); printf("\n"); } 浙江长征职业技术学院—计算机与信息技术系—相方莉制作

【例】有3*3的方阵,其中的元素由键盘输入。 求出(1)主对角线上元素之积; (2)辅对角线上元素之和; 5 6 7 9 10 11 (四) 二维数组的应用 【例】有3*3的方阵,其中的元素由键盘输入。 求出(1)主对角线上元素之积; (2)辅对角线上元素之和; 5 6 7 9 10 11 13 14 15 浙江长征职业技术学院—计算机与信息技术系—相方莉制作

zdjx*=a[i][j]; if(i+j==N-1) fdjx+=a[i][j]; 浙江长征职业技术学院—计算机与信息技术系—相方莉制作 #include <stdio.h> #define N 3 main() { int a[N][N],zdjx=1,fdjx=0,i,j; //zdjx代表主对角线之积,fdjx代表辅对角线之和 printf("请输入%d行%d列的数据!\n",N,N); for(i=0; i<N; i++) for(j=0; j<N; j++) scanf("%d",&a[i][j]); if(i==j) zdjx*=a[i][j]; if(i+j==N-1) fdjx+=a[i][j]; } printf("主对角线之积为=%d,辅对角线之和为=%d\n",zdjx,fdjx ); 浙江长征职业技术学院—计算机与信息技术系—相方莉制作

【例5-12】输出如下的杨辉三角形,要求一共有10行10列。 /*给每一列及主对角元素赋值*/ for(i=0;i<10;i++) {a[i][0]=1; a[i][i]=1;} /*计算其它列的值*/ for(i=2;i<10;i++) for(j=1;j<i;j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; #include "stdio.h" main() {int a[10][10],i,j; /*给每一列及主对角元素赋值*/ for(i=0;i<10;i++) { a[i][0]=1; a[i][i]=1; } /*计算其它列的值*/ for(i=2;i<10;i++) f or(j=1;j<i;j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; printf("杨辉三角形的图形为:\n"); for(i=0;i<10;i++) {for(j=0;j<=i;j++) printf("%5d",a[i][j]); printf("\n");} } 浙江长征职业技术学院—计算机与信息技术系—相方莉制作

练一练 浙江长征职业技术学院—计算机与信息技术系—相方莉制作

浙江长征职业技术学院—计算机与信息技术系—相方莉制作

冒泡排序 输入6个数,用“冒泡法”对6个数排序(由小到大)。 冒泡法的基本思想: 通过相邻两个数之间的比较和交换, 使排序码(数值)较小的数逐渐从底部移向顶部, 排序码较大的数逐渐从顶部移向底部。 就像水底的气泡一样逐渐向上冒,故而得名。 浙江长征职业技术学院—计算机与信息技术系—相方莉制作

冒泡排序 第1趟比较(下图1 ) 第2趟比较(下图2) 浙江长征职业技术学院—计算机与信息技术系—相方莉制作

冒泡排序 第1趟,两两比较5次,剩5个数未排好序; 第2趟,两两比较4次,剩4个数未排好序; 第3趟,两两比较3次,剩3个数未排好序; 第4趟,两两比较2次,剩2个数未排好序; 第5趟,两两比较1次,全部排好序; 算法结论:对于n个数的排序,需进行n-1趟比较, 第j趟比较需进行n-j次两两比较。 浙江长征职业技术学院—计算机与信息技术系—相方莉制作

{t=a[j];a[j]=a[j+1];a[j+1]=t;} #include <stdio.h> void main() { int a[10]; int i,j,t; printf(“请输入10个整数:\n”); for(i=0;i<=9;i++) scanf((“%d”,&a[i]); printf(“\n”); for(i=1;i<=9;i++) for(j=0;j<10-i;j++) if(a[j]>a[j+1]) {t=a[j];a[j]=a[j+1];a[j+1]=t;} printf(“冒泡排序后10个整数:\n”); for(i=0;i<10;i++) printf(“%4d“,a[i]); } 浙江长征职业技术学院—计算机与信息技术系—相方莉制作

选择排序 选择排序的基本思想: 每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 浙江长征职业技术学院—计算机与信息技术系—相方莉制作

if(math[j]<math[i]) t=math[j]; math[j]=math[i]; math[i]=t; } 【例5-14】用选择法对10个同学的成绩进行排序(由高到低)。 #include "stdio.h" main( ) { int i,math[10],t,j; printf(" 请输入10个同学的成绩:"); for(i=0;i<10;i++) scanf("%d",&math[i]); for(j=0;j<9;j++) for(i=j+1;i<10;i++) if(math[j]<math[i]) t=math[j]; math[j]=math[i]; math[i]=t; } printf("10个同学的成绩排序为:"); printf("%3d", math[i]); printf("\n"); 浙江长征职业技术学院—计算机与信息技术系—相方莉制作

浙江长征职业技术学院—计算机与信息技术系—相方莉制作

知识扩展 【例5-7】有二个学生A,B合力完成下面一个问题:求20个学生的平均成绩。他们的分工是这样的: 使用数组名作为函数参数时,实参与形参都应使用数组名(或指针变量,见项目六)。当数组名作为函数实参时,不是把数组的值传递给形参,而是把实参数组的起始地址传递给形参数组,实参和形参的地址是相同的,即当形参的值发生变化时,实参的值也发生了变化。 【例5-7】有二个学生A,B合力完成下面一个问题:求20个学生的平均成绩。他们的分工是这样的: B完成20个数的平均值,不负责数据的输入; A完成20个数的输入,然后问B要20个数的平均值后输出。 浙江长征职业技术学院—计算机与信息技术系—相方莉制作

(三)相关知识 #include "stdio.h" /*B所完成的程序*/ float average(int b[20]) { int i,s; float avg; s=0; for (i=0;i<20;i++) s=s+b[i]; avg=s/20.0; return avg; } /*A所完成的程序*/ main() { int i,a[20]; float avg; printf("请输入20个同学的成绩\n"); for (i=0;i<20;i++) scanf("%d",&a[i]); avg=average(a); printf("这些同学的平均分为%.1f\n",avg); } 浙江长征职业技术学院—计算机与信息技术系—相方莉制作

注 意 (4)形参数组也可不指定大小,或者在被调函数中另设一个参数,来传递数组的大小。如上面的程序可改为: (1)数组名作为函数参数,应该在主调函数和被调函数中分别定义数组, 如上面程序中的b是形参数组,a是实参数组,分别在其所在的函数中定义。 #include "stdio.h" float average(int b[ ],int n) {int i,s; float avg; s=0; for (i=0;i<n;i++) s=s+b[i]; avg=(float)s/n; return avg; } (2)实参数组与形参数组类型应当相同,如果不同,将会出错,如上面程序中的形参数组b是整型,实参数组a也是整型。 (3) 实参数组与形参数组大小可以不同也可以相同,C编译器对形参数组大小不做检查,只是将实参数组的首地址传递给形参数组。 如上面程序中的float average(int b[20])改为float average(int b[10]),并不影响程序的正常运行,最后的结果也是相同的,我们甚至可以写成float average(int b[ ]),即只要b是数组即可。 (4)形参数组也可不指定大小,或者在被调函数中另设一个参数,来传递数组的大小。如上面的程序可改为: (5)形参数组与实参数组是占用同一个地址,所以是地址传递,即当形参的值发生变化时,实参的值也会跟着变化。 浙江长征职业技术学院—计算机与信息技术系—相方莉制作

【例5-8】输入十个同学的成绩,要求用函数进行排序(降序)。 即有二个学生A,B合力完成下面一个问题:将10个学生的成绩排序(降序)。他们的分工是这样的:A是完成主函数的编写:也就是完成10个数的输入,调用B编写的函数sort( ),就得到排序完的10个数,然后进行输出。B所编写的函数sort( )的功能是完成10个数的排序,不负责数据的输入。 main( ) {int a[10],i; printf("请输入十个同学的成绩\n"); for(i=0;i<10;i++) scanf("%d",&a[i]); sort(a); printf("排序后的成绩为:\n"); printf("%3d",a[i]); printf("\n"); } #include "stdio.h" void sort(int b[ ]) { int i,j,t; for (i=0;i<9;i++) for(j=i+1;j<10;j++) if(b[i]<b[j]) {t=b[i];b[i]=b[j];b[j]=t;} } 浙江长征职业技术学院—计算机与信息技术系—相方莉制作

浙江长征职业技术学院—计算机与信息技术系—相方莉制作 【例5-13】在函数中进行 n个学生成绩从高到低排名。即有二个学生A,B合力完成下面一个问题:将n个学生的成绩进行排序(降序)。他们的分工是这样的:A是完全成主函数的编写:也就是完成n个数的输入,调用B编写的函数sort(),就得到排序后的n个数,然后进行输出。B所编写的函数sort()的功能是完成n个数的排序,不负责数据的输入。 #include "stdio.h" void sort(int b[],int n) { int i,j,t; for (i=0;i<n-1;i++) for(j=i+1;j<n;j++) if(b[i]<b[j]) t=b[i]; b[i]=b[j]; b[j]=t; } main() { int a[100],i,n; printf("请输入参加排序的学生数n="); scanf("%d",&n); printf("请输入%d个同学的成绩\n",n); for(i=0;i<n;i++) scanf("%d",&a[i]); sort(a,n); printf("排序后的成绩为:\n"); printf("%3d",a[i]); printf("\n"); } 浙江长征职业技术学院—计算机与信息技术系—相方莉制作

练一练 浙江长征职业技术学院—计算机与信息技术系—相方莉制作