c语言第06章

上传人:luoxia****01813 文档编号:54594815 上传时间:2018-09-15 格式:PPT 页数:46 大小:149.50KB
返回 下载 相关 举报
c语言第06章_第1页
第1页 / 共46页
c语言第06章_第2页
第2页 / 共46页
c语言第06章_第3页
第3页 / 共46页
c语言第06章_第4页
第4页 / 共46页
c语言第06章_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《c语言第06章》由会员分享,可在线阅读,更多相关《c语言第06章(46页珍藏版)》请在金锄头文库上搜索。

1、为了解决比较复杂的问题,本章介绍C语言提供的一种最简单的构造类型数组。6.1 一维数组的定义和应用 6.2 二维数组的定义和应用 6.3 字符数组与字符串,第六章 数 组,6.1 一维数组的定义和应用,6.1.1 一维数组的定义 6.1.2 一维数组元素的引用 6.1.3 一维数组元素的初始化 6.1.4 一维数组应用举例,6.1.1 一维数组的定义,如何存放某班30名同学的数学考试成绩,并对它们进行排序? 基本类型:整型、实型、字符型由基本类型的数据可以按一定规则组成构造类型。 数组就是一类最简单的构造类型。 数组:是有序数据的集合,每一个元素都属于同一数据类型。float a30; /*存

2、放30名同学的数学考试成绩*/ 元素:a0, a1, a2 , a29,数组同变量一样,也必须先定义、后使用。 一维数组是只有一个下标的数组,定义形式如下:数据类型说明 数组名常量表达式 ;(1)“数据类型说明”是指数组元素的数据类型。 (2)数组名,与变量名一样,必须遵循标识符命名规则。 (3)“常量表达式”必须用方括号括起来,指的是数组的元素个数,它是一个整型值,其中可以包含常数和符号常量,但不能包含变量。注意:C语言中不允许动态定义数组。,特别说明:在数组定义时,“常量表达式”外的方括号;以及元素引用时,“下标表达式”外的方括号,都是C语言语法规则所要求的,不是以前所约定的可选项的描述符

3、号! (4)数组元素的下标,是元素相对于数组起始地址的偏移量,所以从0开始顺序编号。 (5)数组名中存放的是一个地址常量,它代表整个数组的首地址。同一数组中的所有元素,按其下标的顺序占用一段连续的存储单元。,Return,6.1.2 一维数组元素的引用,引用数组中的任意一个元素的形式:数组名下标表达式1“下标表达式”可以是任何非负整型数据,取值范围是0(元素个数-1)。特别强调:在运行C语言程序过程中,系统并不自动检验数组元素的下标是否越界。因此在编写程序时,保证数组下标不越界是十分重要的。2一个数组元素,实质上就是一个变量,它具有和相同类型单个变量一样的属性,可以对它进行赋值和各种运算。3在

4、C语言中,数组作为一个整体,不能参加数据运算,只能对单个的数组元素进行处理!,Return,6.1.3 一维数组元素的初始化,初始化格式: 数据类型 数组名常量表达式初值表 (1)如果对数组的全部元素赋以初值,定义时可以不指定数组长度(系统根据初值个数自动确定)。如果被定义数组的长度,与初值个数不同,则数组长度不能省略。 (2)“初值表”中的初值个数,可以少于元素个数,即允许只给部分元素赋初值。 (3)根据存储类型的不同,数组有静态数组(static)和动态数组(auto)之分;根据定义的位置不同,数组有内部数组(在函数内部定义的数组)和外部数组(在函数外部定义的数组)之分。,有两种初始化的方

5、法:用赋值语句或输入语句在运行时进行初始化int i, a10;for(i=0;i=9; i+) ai=i;定义时进行初始化 (编译阶段)int a10=0,1,2,3,4,5,6,7,8,9;int a10=0,1,2,3,4; /*后面元素值为0*/int a10=0,0,0,0,0,0,0,0,0,0;int a =1,2,3,4,5;在对全部数组元素赋初值时,可以不指定数组长度。,例:用户任意输入10个数,求它们的平均值。main( )float a10, sum=0.0, ave;int i;for ( i=0;i10;i+) scanf(“%f”,6.1.4 一维数组应用举例,例6

6、.1 从键盘上任意输入10个整数,要求按从小到大的顺序在屏幕上显示出来。 排序的方法有很多,本题采用冒泡法。 冒泡法的基本思想:通过相邻两个数之间的比较和交换,使排序码(数值)较小的数逐渐从底部移向顶部,排序码较大的数逐渐从顶部移向底部。就像水底的气泡一样逐渐向上冒,故而得名。 由AnA1组成的n个数据,进行冒泡排序的过程可以描述为: (1)首先将相邻的An与An-1进行比较,如果An的值小于An-1的值,则交换两者的位置,使较小的上浮,较大的下沉;接着比较An-1与An-2,同样使小的上浮,大的下沉。依此类推,直到比较完A2和A1后,A1为具有最小排序码(数值)的元素,称第一趟排序结束。 (

7、2)然后在AnA2区间内,进行第二趟排序,使剩余元素中排序码最小的元素上浮到A2;重复进行n-1趟后,整个排序过程结束。,两层循环结构 外层循环每次把操作范围内最大的数放到最后位置 内层循环每次把较大的数放到靠后的位置 确定每层循环的边界 外层循环n-1次j=0 to n-2 内层循环n-1-j次i=0 to n-2-j,冒泡排序法,#include “stdio.h“ #define NUM 10 /*定义符号常量*/ main() int dataNUM; /*定义1个1维整型数组data*/int i,j,temp; /*定义循环变量和临时变量*/clrscr(); /*库函数clrsc

8、r():清屏*/printf(“Please input 10 numbers:n“);for(i=0; iNUM; i+)scanf(“%d“, ,/*冒泡法排序*/for(j=0; jdatai+1) temp=datai;datai=datai+1;datai+1=temp;/*输出排序后的数据*/printf(“n The result of sort:n“);for(i=0; iNUM; i+)printf(“%d “,datai); ,例6.2 已知某课程的平时、实习、测验和期末成绩,求该课程的总评成绩。其中平时、实习、测验和期末分别占10、20、20、50。 /*功能:从键盘上循

9、环输入某课程的平时、实习、测验和期末成绩,按10,20,20,50的比例计算总评成绩,并在屏幕上显示出来。按空格键继续循环,其他键终止循环。*/ #include “stdio.h” main( ) int i=1,j; char c;float score5,ratio4=0.1,0.2,0.2,0.5; /*定义成绩、比例系数数组*/,while(c=y)printf(“输入第%2d个学生的成绩n“, i+);printf(“平时 实习 测验 期末成绩n“);score4=0; /* score4:存储总评成绩*/for(j=0; j4; j+)scanf(“%f“, Return,筛法求

10、素数,for(i=2;iN;i+) ai=i; /*初始化*/ for(i=2;isqrt(N); i+)for(j=i+1;jN;j+) if(ai!=0 /*表示已被删除*/ ,6.2 二维数组的定义和引用,6.2.1 二维数组的定义 6.2.2 二维数组元素的引用 6.2.3 二维数组元素的初始化 6.2.4 二维数组应用举例,Return,6.2.1 二维数组的定义,定义形式 类型 数组名常量表达式常量表达式; 可以看作元素是一维数组的一维数组 举例 char a34; /* 3行4列 */,二维数组的存储形式,按行存放,先行后列char a34;,例6.3 给一个23的二维数组各元素

11、赋值,并输出全部元素的值。 #define Row 2 #define Col 3 #include “stdio.h“ main() int i, j, arrayRowCol; for(i=0; iRow; i+) /*外循环:控制二维数组的行*/for(j=0; jCol; j+) /*内循环:控制2维数组的列*/printf(“please input array%2d%2d:“,i,j);scanf(“%d“,6.2.1 二维数组的定义,/*输出2维数组array*/for(i=0;iRow;i+) for(j=0;jCol;j+)printf(“%8d“,arrayij); pri

12、ntf(“n“); 二维数组的定义方式如下:数据类型 数组名行常量表达式列常量表达式 ; 1数组元素在内存中的排列顺序为“按行存放”,即先顺序存放第一行的元素,再存放第二行,以此类推。 2. 设有一个m*n的数组x,则第i行第j列的元素xij在数组中的位置为:i*n+j(注意:行号、列号均从0开始计数)。,3可以把二维数组看作是一种特殊的一维数组:它的元素又是一个一维数组。 例如,对x32,可以把x看作是一个一维数组,它有3个元素:x0、x1、x2,每个元素又是一个包含2个元素的一维数组,即把x0、x1、x2看作是3个一维数组的名字。,Return,6.2.2 二维数组元素的引用,引用二维数组

13、元素的形式为: 数组名行下标表达式列下标表达式 1“行下标表达式”和“列下标表达式”,都应是整型表达式或符号常量。 2“行下标表达式”和“列下标表达式”的值,都应在已定义数组大小的范围内。假设有数组x34,则可用的行下标范围为02,列下标范围为03。 3对基本数据类型的变量所能进行的操作,也都适合于相同数据类型的二维数组元素。,Return,6.2.3 二维数组元素的初始化,1按行赋初值 数据类型 数组名行常量表达式列常量表达式第0行初值表,第1行初值表,最后1行初值表; 赋值规则:将“第0行初值表”中的数据,依次赋给第0行中各元素;将“第1行初值表”中的数据,依次赋给第1行各元素;以此类推。

14、2按二维数组在内存中的排列顺序给各元素赋初值 数据类型 数组名行常量表达式列常量表达式初值表; 赋值规则:按二维数组在内存中的排列顺序,将初值表中的数据,依次赋给各元素。 如果对全部元素都赋初值,则“行数”可以省略。注意:只能省略“行数”。,Return,6.2.4 2维数组应用举例,例6.4 有M个学生,学习N门课程,已知所有学生的各科成绩,编程:分别求每个学生的平均成绩和每门课程的平均成绩。 #define NUM_std 5 /*定义符号常量人数为5*/ #define NUM_course 4 /*定义符号常量课程为4*/ #include “stdio.h“ main() int i

15、,j;static float scoreNUM_std+1NUM_course+1= 78,85,83,65, 88,91,89,93, 72,65,54,75, 86,88,75,60, 69,60,50,72;,for(i=0;iNUM_std;i+)for(j=0;jNUM_course;j+) scoreiNUM_course += scoreij;/*求第i个人的总成绩*/scoreNUM_stdj += scoreij; /*求第j门课的总成绩*/scoreiNUM_course /= NUM_course;/*求第i个人的平均成绩*/for(j=0;jNUM_course;j+)scoreNUM_stdj /= NUM_std; /*求第j门课的平均成绩*/ /*输出表头*/printf(“学生编号 课程1 课程2 课程3 课程4 个人平均n“);/*输出每个学生的各科成绩和平均成绩*/,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 资格认证/考试 > 计算机等级考试

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号