




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、为解决比较复杂的问题,本章介绍为解决比较复杂的问题,本章介绍C语言提语言提供的一种了最简单的构造类型供的一种了最简单的构造类型数组。数组。6.1 一维数组一维数组6.2 二维数组二维数组6.3 字符数组与字符串字符数组与字符串Return(一)教学目的:(一)教学目的: 1.掌握数组的基本概念和使用方法,掌握数组的基本概念和使用方法,2.掌握字符数组的构成和使用。掌握字符数组的构成和使用。3.理解数组名就是数组起始地址的原理。理解数组名就是数组起始地址的原理。4.掌握数组元素的访问方法。掌握数组元素的访问方法。 (二)教学重点与难点:(二)教学重点与难点:1.数组的定义和引用数组的定义和引用2
2、.字符数组和字符串数组的区别字符数组和字符串数组的区别3.二维数组的应用,熟练掌握字符数组与二维数组元素的访二维数组的应用,熟练掌握字符数组与二维数组元素的访问方法问方法 4.掌握二维数组的元素与其地址的对应关系、二维数组编程掌握二维数组的元素与其地址的对应关系、二维数组编程技巧与方法技巧与方法 。几个概念:几个概念:1、数组:具有相同类型的有序数据构成的集合。、数组:具有相同类型的有序数据构成的集合。2、元素:数组中每个数据都被称为数组的元素。、元素:数组中每个数据都被称为数组的元素。3、下标:数组元素在数组中的序号,下标变量从、下标:数组元素在数组中的序号,下标变量从0开始。开始。一、一维
3、数组的定义:一、一维数组的定义:数据类型数据类型 数组名数组名常量表达式常量表达式, 数组名数组名2常量表达常量表达2;说明:说明:1、“数据类型数据类型”是指数组元素的数据类型。是指数组元素的数据类型。2、数组名,与变量名一样,必须遵循标识符命名规则。、数组名,与变量名一样,必须遵循标识符命名规则。3、“常量表达式常量表达式”必须用方括号括起来,指的是数组的元素个必须用方括号括起来,指的是数组的元素个数(又称数组长度),它是一个整型值,其中可以包含常数和数(又称数组长度),它是一个整型值,其中可以包含常数和符号常量,但不能包含变量。符号常量,但不能包含变量。4、数组同变量一样,也必须先定义、
4、后使用。、数组同变量一样,也必须先定义、后使用。5、数组名中存放的是一个地址常量,它代表整个数组的、数组名中存放的是一个地址常量,它代表整个数组的首地址。同一数组中的所有元素,按其下标的顺序占用一段连首地址。同一数组中的所有元素,按其下标的顺序占用一段连续的存储单元。续的存储单元。二、一维数组变量的存储:二、一维数组变量的存储:1、数组变量在内存中占据一连续的存储空间。、数组变量在内存中占据一连续的存储空间。2、数组战据内存的大小与数组的长度(元素的个数及其、数组战据内存的大小与数组的长度(元素的个数及其类型)有关。类型)有关。3、数组名为该数组的首地址。、数组名为该数组的首地址。ai的实际地
5、址:的实际地址:a+id其中:其中:i为第为第i个元素个元素 d为该元素的数据类型占有的字节长度。为该元素的数据类型占有的字节长度。指针表示法指针表示法 p =&a 指针指针p指向指向a数组的首地址数组的首地址p=*a指针取出单元的内容指针取出单元的内容三、一维数组中元素的引用:、一维数组中元素的引用: 数组名数组名下标表达式下标表达式说明:说明: 1、“下标表达式下标表达式”可以是任何非负整型数据,取值范围可以是任何非负整型数据,取值范围是是0(元素个数(元素个数-1)。)。 特别强调:特别强调:在运行在运行C语言程序过程中,系统并不自动检验语言程序过程中,系统并不自动检验数组元素的
6、下标是否越界。因此在编写程序时,保证数组下标数组元素的下标是否越界。因此在编写程序时,保证数组下标不越界是十分重要的。不越界是十分重要的。 2、1个数组元素,实质上就是个数组元素,实质上就是1个变量,它具有和相同类个变量,它具有和相同类型单个变量一样的属性,可以对它进行赋值和参与各种运算。型单个变量一样的属性,可以对它进行赋值和参与各种运算。 3、在、在C语言中,数组作为一个整体,不能参加数据运算,语言中,数组作为一个整体,不能参加数据运算,只能对单个的元素进行处理。只能对单个的元素进行处理。4、C语言规定:数组的输入输出必须采用循环语句逐个输入或输出。语言规定:数组的输入输出必须采用循环语句
7、逐个输入或输出。5、采用指针运算时,指针变量的类型必须与数组的类型一致。、采用指针运算时,指针变量的类型必须与数组的类型一致。四、一维数组元素的初始化四、一维数组元素的初始化 1、初始化格式:、初始化格式: 数据类型数据类型 数组名数组名常量表达式常量表达式初值表初值表;2、说明:、说明:(1)如果对数组的全部元素赋以初值,定义时可以不指定数组长度)如果对数组的全部元素赋以初值,定义时可以不指定数组长度(系统根据初值个数自动确定)。如果被定义数组的长度,与初值(系统根据初值个数自动确定)。如果被定义数组的长度,与初值个数不同,则数组长度不能省略。个数不同,则数组长度不能省略。(2)“初值表初值
8、表”中的初值个数,可以少于元素个数,即允许只给部分中的初值个数,可以少于元素个数,即允许只给部分元素赋初值。元素赋初值。(3)根据存储类型的不同,数组有静态数组()根据存储类型的不同,数组有静态数组(static)和动态数组)和动态数组(auto)之分;根据定义的位置不同,数组有内部数组(在函数内)之分;根据定义的位置不同,数组有内部数组(在函数内部定义的数组)和外部数组(在函数外部定义的数组)之分。部定义的数组)和外部数组(在函数外部定义的数组)之分。3、数组初始化形式、数组初始化形式 数组初始化形式数组初始化形式1 例如:将整型数据例如:将整型数据0,1,2,3,4分别赋给整型数组元素分别
9、赋给整型数组元素a0,a1,a2,a3,a4。可以写为下面的形式:。可以写为下面的形式: int a5=0, 1, 2, 3, 4 ; 数组初始化形式数组初始化形式2例如:对例如:对a数组中所有元素赋初值数组中所有元素赋初值0。可以写作下面形式:。可以写作下面形式: int a 10=0 ; 通过赋初值定义数组大小通过赋初值定义数组大小 例如:例如: int a =1, 2, 3, 4, 5 ; 等价于:等价于:int a5=1, 2, 3, 4, 5 ;五、一维数组的应用五、一维数组的应用使用数组必须先定义,后引用。使用数组必须先定义,后引用。 引用时只能对数组元素引用,如引用时只能对数组元
10、素引用,如a0,ai,ai+1等,等,而不能引用整个数组。而不能引用整个数组。 在引用时应注意以下几点在引用时应注意以下几点 (1) 由于数组元素本身等价于同一类型的一个变量,因此,由于数组元素本身等价于同一类型的一个变量,因此,对变量的任何操作都适用于数组元素。对变量的任何操作都适用于数组元素。 (2) 在引用数组元素时,下标可以是整型常数或表达式,在引用数组元素时,下标可以是整型常数或表达式,表达式内允许变量存在。在定义数组时下标不能使用变量。表达式内允许变量存在。在定义数组时下标不能使用变量。 (3) 引用数组元素时下标最大值不能出界引用数组元素时下标最大值不能出界例例6.1 从键盘上任
11、意输入从键盘上任意输入10个整数,要求按从小到大的顺序在个整数,要求按从小到大的顺序在屏幕上显示出来。屏幕上显示出来。 排序的方法有很多,本题采用冒泡法。排序的方法有很多,本题采用冒泡法。冒泡法的基本思想:通过相邻两个数之间的比较和交换,使排序冒泡法的基本思想:通过相邻两个数之间的比较和交换,使排序码(数值)较小的数逐渐从底部移向顶部,排序码较大的数逐渐从码(数值)较小的数逐渐从底部移向顶部,排序码较大的数逐渐从顶部移向底部。就像水底的气泡一样逐渐向上冒,故而得名。顶部移向底部。就像水底的气泡一样逐渐向上冒,故而得名。 由由ana1组成的组成的n个数据,进行冒泡排序的过程可以个数据,进行冒泡排
12、序的过程可以描述为:描述为:首先将相邻的首先将相邻的An与与An-1进行比较,如果进行比较,如果An的值小于的值小于An-1的值,则交换两者的位置,使较小的上浮,较大的的值,则交换两者的位置,使较小的上浮,较大的下沉;接着比较下沉;接着比较An-1与与An-2,同样使小的上浮,大的下,同样使小的上浮,大的下沉。依此类推,直到比较完沉。依此类推,直到比较完A2和和A1后,后,A1为具有最为具有最小排序码(数值)的元素,称第一趟排序结束。小排序码(数值)的元素,称第一趟排序结束。然后在然后在ana2区间内,进行第二趟排序,使剩余元素中区间内,进行第二趟排序,使剩余元素中排序码最小的元素上浮到排序码
13、最小的元素上浮到A2;重复进行;重复进行n-1趟后,整个排趟后,整个排序过程结束。序过程结束。/*功能:从键盘上任意输入功能:从键盘上任意输入n个整数,用冒泡法按从小到大地个整数,用冒泡法按从小到大地排序,并在屏幕上显示出来。排序,并在屏幕上显示出来。*/ #include stdio.h #define NUM 10/*定义符号常量(数据个数定义符号常量(数据个数N)*/main() int dataNUM;/*定义定义1个一维整型数组个一维整型数组data*/ int i,j,temp;/*定义循环变量和临时变量定义循环变量和临时变量*/ clrscr(); /*库函数库函数clrscr(
14、):清屏:清屏*/ printf(Please input 10 numbers:n); for(i=0; iNUM; i+) scanf(%d, &datai); /*冒泡法排序冒泡法排序*/ for(i=0; ii; j-) /*内循环:进行每趟比较内循环:进行每趟比较*/ if(datajdataj-1) /*如果如果dataj大于大于dataj-1,交换两者的位置交换两者的位置*/ temp=dataj; dataj=dataj-1; dataj-1=temp; /*输出排序后的数据输出排序后的数据*/ printf(nthe result of sort:n); for(i=
15、0; iNUM; i+) printf(%d ,datai); getch();/*等待键盘输入任一字符,目的使程序暂停等待键盘输入任一字符,目的使程序暂停*/例例6.2 从键盘输入从键盘输入20个整数,检查整数个整数,检查整数10是否包含在这些数据是否包含在这些数据中,若是的话,它是第几个被输入的。中,若是的话,它是第几个被输入的。 程序如下:程序如下:# include stdio.hmain() int data20 , i ;for(i=0 ; i20 ; i+) scanf(%d , &datai) ; for(i=0 ; i20 ; i+) if(datai=10) pri
16、ntf(10 is input the postion %d n , i+1) ; break ; 程序运行结果为:程序运行结果为: 输入:输入:20 30 40 50 60 10 70 80 90 100 110 120 130 140 150 160 170 180 190 200 输出:输出:10 is input the position 6例例6.3输出字符串输出字符串“welcome”和字符和字符o。 程序如下:程序如下: main() int i ; char str =w , e , l , c , o , m , e ; for(i=0 ; i7 ; i+) printf(“
17、%c , stri) ; printf(“n%c , str4) 运行结果:运行结果:welcome o 例例6.4 已知某课程的平时、实习、测验和期末成已知某课程的平时、实习、测验和期末成绩,求该课程的总评成绩。其中平时、实习、测验和期绩,求该课程的总评成绩。其中平时、实习、测验和期末分别占末分别占10、20、20、50。/*功能:从键盘上循环输入某课程的平时、实习、测验功能:从键盘上循环输入某课程的平时、实习、测验和期末成绩,按和期末成绩,按10,20,20,50的比例计算的比例计算总评成绩,并在屏幕上显示出来。按空格键继续循环,总评成绩,并在屏幕上显示出来。按空格键继续循环,其他键终止循
18、环。其他键终止循环。*/#include “stdio.h”main() int i=1,j; char con_key=x20;/* x20 空格键的空格键的ASCII码码*/ float score5,ratio4=0.1,0.2,0.2,0.5; /*定义成绩、比例系数数组定义成绩、比例系数数组*/ while(con_key=x20) clrscr(); printf(输入第输入第%2d个学生的成绩个学生的成绩n, i+); printf(平时平时 实习实习 测验测验 期末成绩期末成绩n); score4=0;/* score4:存储总评成绩:存储总评成绩*/ for(j=0; j4;
19、 j+) scanf(%f,&scorej); score4 += scorej * ratioj; printf(总评成绩为总评成绩为:%6.1fn, score4); printf(n按空格键继续按空格键继续,其它键退出其它键退出); con_key=getch(); /*getch()函数等待从键盘上输入一个字符函数等待从键盘上输入一个字符*/ Return 6.2 二维数组二维数组一、二维数组的定义引用、初始化一、二维数组的定义引用、初始化1、定义二维数组的一般格式为:、定义二维数组的一般格式为: 类型说明符类型说明符 数组名数组名 常量表达式常量表达式1常量表达式常量表达式2
20、;2、 二维数组元素的引用二维数组元素的引用 二维数组中各个元素可看作具有相同数据类型的二维数组中各个元素可看作具有相同数据类型的一组变量。因此,对变量的引用及一切操作,同样适用一组变量。因此,对变量的引用及一切操作,同样适用于二维数元素。于二维数元素。 二维数组元素引用的格式为:二维数组元素引用的格式为: 数组名数组名下标下标下标下标3、 二维数组的初始化二维数组的初始化 在定义二维数组的同时,可使用以下几种方法对在定义二维数组的同时,可使用以下几种方法对二维数组初始化。二维数组初始化。(1) 将所有数据写在一个大括号内,以逗号分隔,按数组将所有数据写在一个大括号内,以逗号分隔,按数组元素在
21、内存中的排列顺序对其赋值。元素在内存中的排列顺序对其赋值。 例如:例如:int a23=0 , 1 , 2 , 3 , 4 , 5 ; (2) 分行对数组元素赋值。分行对数组元素赋值。 例如:例如:int a23=0 , 1 , 2 , 4 , 5 , 6 ; (3) 对部分元素赋值。对部分元素赋值。 例如:例如:int a23=1 , 4 ; (4) 若对全部元素赋初值,则定义时第一维长度可缺省。若对全部元素赋初值,则定义时第一维长度可缺省。可由第二维长度,即列的数据的个数自动确定第一维长可由第二维长度,即列的数据的个数自动确定第一维长度(即行的个数)。度(即行的个数)。 例如:例如:int
22、 a 3=0 , 1 , 2 , 3 , 4 , 5 ;二、二维数组的存储二、二维数组的存储1数组元素在内存中的排列顺序为数组元素在内存中的排列顺序为“按行存放按行存放”,即先顺序存,即先顺序存放第一行的元素,再存放第二行,以此类推。放第一行的元素,再存放第二行,以此类推。2. 设有一个设有一个m*n的数组的数组x,则第,则第i行第行第j列的元素列的元素xij在数组中的在数组中的位置为:位置为:i*n+j(注意注意:行号、列号均从:行号、列号均从0开始计数)。开始计数)。 三、二维数组应用三、二维数组应用例例6.5 有一个有一个34矩阵,要求编写程序求出矩阵中所有元素中矩阵,要求编写程序求出矩
23、阵中所有元素中的最大值,并找出其所在的位置,即行号和列号。的最大值,并找出其所在的位置,即行号和列号。 程序如下:程序如下: # include stdio.h main() int i , j , r , c , max ; int a34=1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 ; max=a00 ; for(i=0 ; i3 ; i+) for(j=0 ; jmax) max=aij , r=i+1 , c=j+1 ; /* 用逗号表达式实现对用逗号表达式实现对max , r , c赋值赋值 */ printf(max=%d,r=
24、%d,c=%d,max,r,c); 运行结果为:运行结果为: max = 12 r = 3 c = 4 例例6.6 某班有某班有40个学生考个学生考5门课程,求每个学生门课程,求每个学生的平均成绩并输出。的平均成绩并输出。 程序如下:程序如下: # define M 40 # define N 5 main() int i , j ; float sMN , averM , sum ; for(i=0 ; iM ; i+) for(j=0 ; jN ; j+)scanf(%f , &sij) ; /* 由键盘输入由键盘输入40个学生个学生5门课的成绩门课的成绩 */ for(i=0 ;
25、 iM ; i+) sum=0.0 ; for(j=0 ; jN ; j+) sum+=sij ; averi=sum/N ; for(i=0 ; iM ; i+) printf (aver%d=%fn , i ,averi) ; Return6.3字符数组字符数组 与字符串与字符串 字符数组是用来存放字符的数组,字符数组中的一个元素字符数组是用来存放字符的数组,字符数组中的一个元素存放一个字符。存放一个字符。一、一、 字符数组的定义字符数组的定义 用于存放字符的数组,每个字符为一个元素。用于存放字符的数组,每个字符为一个元素。 例如:例如: char ch1 5;二、二、 字符数组的初始化字
26、符数组的初始化 (1) 可以在定义数组的同时对数组中的各个元素赋初值,可以在定义数组的同时对数组中的各个元素赋初值,例如:例如: char c5=h , e , l , l , o ; (2) 可以在定义数组的同时将字符串赋给一个一维字符型可以在定义数组的同时将字符串赋给一个一维字符型数组。数组。 例如:例如: char c6=hello 三、三、 字符数组的输入输出字符数组的输入输出 可以利用字符数组对单个字符和字符串进行输入输可以利用字符数组对单个字符和字符串进行输入输出操作。出操作。 1. 逐个字符输入输出逐个字符输入输出 用格式符用格式符%c输入或输出一个字符。输入或输出一个字符。 2
27、. 字符串字符串整串输入和输出整串输入和输出 用用“%s”格式符可输入、输出字符串。由于格式符可输入、输出字符串。由于C语言语言中没有专门存放字符串的变量,字符串存放在一个字符中没有专门存放字符串的变量,字符串存放在一个字符型数组中,数组名表示第一个字符的首地址,故在输入型数组中,数组名表示第一个字符的首地址,故在输入或输出字符串时可直接使用数组名。或输出字符串时可直接使用数组名。四、四、 字符串处理函数字符串处理函数1. 字符串输入、输出函数字符串输入、输出函数 输入一个字符串函数输入一个字符串函数gets( ) gets函数一般调用格式为:函数一般调用格式为: gets(str) ; ge
28、ts函数的作用是从终端键盘输入字符串(字函数的作用是从终端键盘输入字符串(字符串可以包括空格),直到遇到回车符为止,回车符符串可以包括空格),直到遇到回车符为止,回车符读入后,不作为字符串的内容,系统将自动用读入后,不作为字符串的内容,系统将自动用0代替,代替,作为字符串的结束标志。作为字符串的结束标志。 输出一个字符串函数输出一个字符串函数puts( ) puts( )函数的一般调用格式为:函数的一般调用格式为: puts(str) ; 该函数的作用是从该函数的作用是从str指定的地址开始,依次输指定的地址开始,依次输出存储单元中的字符,直到遇到字符串结束标志第出存储单元中的字符,直到遇到字
29、符串结束标志第1个个 0 字符为止。字符为止。2. 字符串处理函数字符串处理函数 字符串复制函数字符串复制函数strcpy( )调用格式为:调用格式为: strcpy(str1 , str2);函数函数 功能:把功能:把str2所指向的字符串复制到所指向的字符串复制到str1所指的字符数组中。所指的字符数组中。 字符串连接函数字符串连接函数strcat( )调用格式为:调用格式为: strcat(str1 , str2) 函数功能:将函数功能:将str2所指的字符串连接到所指的字符串连接到str1所所指的字符串的后面,并自动覆盖指的字符串的后面,并自动覆盖str1所指的字所指的字符串的尾部字符
30、符串的尾部字符 0。 字符串比较函数字符串比较函数strcmp( )调用格式为:调用格式为: strcmp(str1 , str2) ; 函数功能:比较函数功能:比较str1和和str2所指向的两个字符串,并产所指向的两个字符串,并产生以下结果:生以下结果: str1与与str2相等时,函数值为相等时,函数值为0。 str1str2时,函数值大于时,函数值大于0。 str1str2时,函数值小于时,函数值小于0。 字符串之间比较的方法是:从第一个字符开始,字符串之间比较的方法是:从第一个字符开始,依次对依次对str1与与str2对应位置上的字符按对应位置上的字符按ASCII码值的大码值的大小进
31、行比较,直到出现第一个不相同的字符时,即由小进行比较,直到出现第一个不相同的字符时,即由这两个字符的大小决定所在串的大小。这两个字符的大小决定所在串的大小。求字符串长度求字符串长度strlen()函数(函数(len是是length的缩写)的缩写)调用方式:调用方式:strlen(字符串字符串);函数功能:求字符串(常量或字符数组)的实际长度函数功能:求字符串(常量或字符数组)的实际长度(不包含结束标志)。(不包含结束标志)。将字符串中大写字母转换成小写将字符串中大写字母转换成小写strlwr()函数函数调用方式:调用方式:strlwr(字符串字符串);函数功能:将字符串中的大写字母转换成小写,
32、其它字函数功能:将字符串中的大写字母转换成小写,其它字符(包括小写字母和非字母字符)不转换。符(包括小写字母和非字母字符)不转换。将字符串中小写字母转换成大写将字符串中小写字母转换成大写strupr()函数函数调用方式:调用方式:strupr(字符串字符串);函数功能:将字符串中小写字母转换成大写,其它字符函数功能:将字符串中小写字母转换成大写,其它字符(包括大写字母和非字母字符)不转换。(包括大写字母和非字母字符)不转换。例例6.7 从终端键盘输入一字符串,并复制到从终端键盘输入一字符串,并复制到另一字符数组后显示出来。另一字符数组后显示出来。 程序如下:程序如下: # include stdio.h m
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 美发培训规划方案范本
- 渔业资源的评估与管理措施考核试卷
- 游艺用品销售渠道的多元化发展考核试卷
- 糕点烘焙店的顾客忠诚计划考核试卷
- 畜牧业粪污处理与乡村振兴战略考卷考核试卷
- 2025年【金属非金属矿山提升机操作】模拟考试题及答案
- 塑料片材生产线的过程控制考核试卷
- 2024年项目管理认证检测试题及答案
- 红心猕猴桃营养管理考核试卷
- 2023年中国能建葛洲坝集团成熟人才招聘【399人】笔试参考题库附带答案详解
- 立绘买断合同协议
- 综合执法改革试题及答案
- 2024年泉州实验中学初一新生入学考试数学试卷
- 人工智能在航班调度中的未来应用探讨
- 内蒙古自治区赤峰第四中学2024-2025学年高一下学期4月月考历史试题(含答案)
- 糖尿病酮症酸中毒护理
- 2025春季学期国开电大本科《人文英语3》一平台在线形考综合测试(形考任务)试题及答案
- 陕西气象部门招聘笔试真题2024
- 学校中层干部选拔任用实施方案
- 电气工程及其自动化毕业论文-基于PLC的高空作业车电控系统设计
- 河南省驻马店市部分学校2024-2025学年高三下学期3月月考地理试题(含答案)
评论
0/150
提交评论