配色: 字号:
《C语言程序设计教程》第六章数组
2023-05-23 | 阅:  转:  |  分享 
  
第6章 数 组 6.1 数组和数组单元的基本概念6.2 一维数组6.3 二维数组6.4 字符数组第六章 数组关键字: 数组
下标变量 某班有60名同学,需要统计每位同学的平均成绩,用简单数据类型就需要分别定义60个变量,分别存放每个同学的平均成绩,显
然这种处理方法十分麻烦。 为了解决这种问题,c语言提供了数组类型。即把具有相同类型的若干变量按有序的形式组织起来,用统一的名字
来表示,这些按序排列的相同类型的数据元素的集合称为数组。或者说,数组是用一个名字代表顺序排列的一组数。简单变量是没有序的,无所谓谁
先谁后,数组中的单元是有排列顺序的。6.1 一维数组的定义与引用 用一个统一的标识符,即数组名来标识一组变量(也称元素),用下
标来指示数组中元素的序号。当数组中每个元素只带有一个下标时,此数组称为一维数组。 6.1.1 一维数组的定义、引用、初始化
1. 一维数组的定义 定义一维数组的格式为: 类型标识符 数
组名[常量表达式] , … ; 2. 一维数组的引用 使用数组必须先定义,后引用。 引用时只能对数组元
素引用,如a[0],a[i],a[i+1]等,而不能引用整个数组。 在引用时应注意以下几点:
(1) 由于数组元素本身等价于同一类型的一个变量,因此,对变量的任何操作都适用于数组元素。 (2)
在引用数组元素时,下标可以是整型常数或表达式,表达式内允许变量存在。在定义数组时下标不能使用变量。 (3)
引用数组元素时下标最大值不能出界。 【程序文本6.1 】 随机输入10个数并输出。main() { int a[10]
, i ; printf("input 10 numbers:\n"); for(i=0;i<10;i++) sc
anf("%d",&a[i]); printf("\n"); for(i=0;i<10;i++) printf("
%d",a[i]);} 输入:0 2 4 6 8 10 12 14 16 1结果是:0 2 4 6 8
10 12 14 16 18 3. 一维数组的初始化 前已述及,可利用赋值语句或输入语句给数组元素赋值。C语言还允
许在定义数组时对各数组元素指定初始值——称为数组初始化。 (1) 数组初始化形式1 例如:将括号内整型数据0,1,
2,3,4分别赋给整型数组元素a[0],a[1],a[2],a[3],a[4]。可以写为下面的形式: int
a[5]={0, 1, 2, 3, 4} ; 2) 数组初始化形式2 例如:对a数
组中所有元素赋初值0。可以写作下面的形式: int a [10]={0} ;
3) 通过赋初值定义数组大小 例如: int a[ ]={1, 2, 3, 4, 5} ;
等价于:int a[5]={1, 2, 3, 4, 5} ;4 一维数组程序示例 ?【程序文本6.2】
从键盘输入10个数,求其中的最小值并显示出来。 程序如下:#include "stdio.h"main(){ int
i ,min ,a[10]; printf("please input 10 number:\n"); for (i=0;i<10
;i++) scanf("%d",&a[i]); min=a[0]; for(i=0;i<10;i++) if (min>
a[i]) min=a[i];printf("min value is %d\n",min);}输入:3 4 5 0 7
8 1 9 6 2结果是: min value is 16.2 二维数组 6.2.1 二维数组的
定义、引用、初始化 1. 二维数组的定义 定义二维数组的一般格式为: 类型说明
符 数组名 [常量表达式1][常量表达式2] 2. 二维数组元素的引用 二维数组中各
个元素可看作具有相同数据类型的一组变量。因此,对变量的引用及一切操作,同样适用于二维数元素。 二维数组元素引
用的格式为: 数组名[下标][下标]【程序文本6.5 】通过键盘输入数据,给具有二行三列的二
维数组赋初值。#include "stdio.h"main(){int i ,j a[2][3];for(i=0;i<2;i++
)for(j=0;j<3;j++)scanf("%d",&a[i][j]);for(i=0;i<2;i++)for(j=0;j<3
;j++)printf("\na[%;d][%d]=%d",i ,j ,a[i][j]);}输入:1 2 3 4 5 6
结果为:a[0][0]=1a[0][1]=2a[0][2]=3a[1][0]=4a[1][1]=5a[1][2]=6
3. 二维数组的初始化 在定义二维数组的同时,可使用以下几种方法对二维数组初始化。
(1) 将所有数据写在一个大括号内,以逗号分隔,按数组元素在内存中的排列顺序对其赋值。 例如:in
t a[2][3]={0 , 1 , 2 , 3 , 4 , 5 } ; (2) 分行对数组元
素赋值。 例如:int a[2][3]={{0 , 1 , 2} , {4 , 5 , 6}} ;
(3) 对部分元素赋值。 例如:int a[2][3]={{1} , {4}} ;
(4) 若对全部元素赋初值,则定义时第一维长度可缺省。可由第二维长度,即列的数据的个数自动确定第一维长度(即行
的个数)。 例如:int a[ ][3]={0 , 1 , 2 , 3 , 4 , 5} ; 4. 二维数
组应用示例 【程序文本6.6 】有一个3×4的矩阵,求出所有元素最大值以及它所在的行和列。 main(){int
i ,j ,r=0,c=0,max;int a[3][4]={{1,3,7,9},{2,4,6,8},{-1,10,-5,-9}
};max=a[0][0];for(i=0,i<=2,i++)for(j=0,j<=3;j++)if(a[i][j]>max)
{ max=a[i][j]; r=i ;c=j; }printf("max=%d,r=%d,c=%d\n",ma
x,r,c);}结果为: max=10,r=2,c=16.3 字符数组 字符数组是用来存放字符的数组,字符
数组中的一个元素存放一个字符。6.3.1 字符数组的定义 一维字符数组的定义格式:
char 数组名[常量表达式]; 例如:char a[5]; 二维字符数组的定义格式:
char 数组名[常量表达式1][常量表达式2]; 例如:char a[2][3];
6.3.2 字符数组的初始化字符数组初始化有下面两种情况:(1)可以对数组元素逐个初始化。如:char a[10]={ˊiˊ,
ˊˊ,ˊaˊ, ˊmˊ, ˊ ˊ, ˊhˊ, ˊaˊ, ˊpˊ, ˊpˊ, ˊyˊ};初值个数可以少于数组长度,多余元素自动为ˊ\
0ˊ(ˊ\0ˊ是二进制的0)。char a[]={ˊcˊ,ˊˊ,ˊpˊ,ˊrˊ,ˊoˊ,ˊgˊ,ˊrˊ,ˊaˊ,ˊmˊ};A[9]
= ˊ\0ˊ,即a[9]=0。指定初值时,若未指定数组长度,则长度等于初值个数。例如:char a[]={ˊiˊ, ˊˊ,ˊaˊ,
ˊmˊ, ˊ ˊ, ˊhˊ, ˊaˊ, ˊpˊ, ˊpˊ, ˊyˊ};等价于char a[10]={ˊiˊ, ˊˊ,ˊaˊ, ˊ
mˊ, ˊ ˊ, ˊhˊ, ˊaˊ, ˊpˊ, ˊpˊ, ˊyˊ};(2)用字符串常量对数组初始化。例如: char
a[]={"i am happy"};字符串在存储时,系统自动在其后加上结束标志ˊ\0ˊ。6.3.3 字符数组元素的引用
用数组的下标指定要引用的数组元素。 一维字符数组的引用格式: 数组名[下标]; 二维字符
数组的引用格式: 数组名[行下标][列下标];【程序文本6.8 】输出一个字符串。main(){ char
c[10]={ˊiˊ, ˊˊ,ˊaˊ, ˊmˊ, ˊ ˊ, ˊhˊ, ˊaˊ, ˊpˊ, ˊpˊ, ˊyˊ}; int i ;
for(i=0;i<10;i++) printf("%c",c[i]); printf("\n");}结果为:
i am happy6.3.4 字符串和字符串结束标志在c语言中,字符串常量是用双引号括起来的一串字符,并用’\0’
(Ascii码值为0)作为字符串的结束标志,它占一个字节的内存空间,但不计入串的长度。在c语言中,没有专门的字符串变量,通常用一个
字符数组来存放一个字符串。并自动在字符串末尾添加''\0''作为该字符串是否结束的标志,不必再用字符数组的长度来判断字符串的长度了。c
har a[]={ˊiˊ, ˊˊ,ˊaˊ, ˊmˊ, ˊ ˊ, ˊhˊ, ˊaˊ, ˊpˊ, ˊpˊ, ˊyˊ};可写为:char
a[]={"i am happy"};说明:(1)用字符串赋值时,无须指定长度,系统自行处理。(2)以字符串形式对字符数组初始化
,系统会自动在该字符串最后加字符串结束符标志''\0''。6.3.5 字符数组的输入输出 可以利用字符数组对
单个字符和字符串进行输入输出操作。 1. 逐个字符输入输出 用格式符"%c"输入或输出
一个字符。 2. 字符串—整串输入和输出 用"%s"格式符可输入、输出字符串。由于C语
言中没有专门存放字符串的变量,字符串存放在一个字符型数组中,数组名表示第一个字符的首地址,故在输入或输出字符串时可直接使用数组名。
6.3.6 字符串处理函数 1. 字符串输入、输出函数 1) 输入一个字符串函数gets(
) gets函数一般调用格式为: gets(str) ;
gets函数的作用是从终端键盘输入字符串(字符串可以包括空格),直到遇到回车符为止,回车符读入后,不作为字符串
的内容,系统将自动用''\0''代替,作为字符串的结束标志。 2) 输出一个字符串函数puts( )
puts( )函数的一般调用格式为: puts(str) ;
该函数的作用是从str指定的地址开始,依次输出存储单元中的字符,直到遇到字符串结束标志第1个 ''\0'' 字符为止。
2. 字符串处理函数 1) 字符串复制函数strcpy( ) strcp
y( )函数一般调用格式为: strcpy(str1 , str2)
功能:把str2所指向的字符串复制到str1所指的字符数组中。 2) 字符串连接函数strcat(
) strcat( )函数一般调用格式为: strcat(str1 ,
str2) ; 功能:将str2所指的字符串连接到str1所指的字符串的后面,并自动覆盖str1所指的字符串的尾部字符 "\0"
。 3) 求字符串长度函数strlen( ) strlen( )函数一般
调用格式为: strlen(str) ; 功能:计算
str为起始地址的字符串的长度(不包含字符串结束标志''\0''),并作为函数值返回。 4) 字符串比较函数st
rcmp( ) strcmp( )函数一般调用格式为: st
rcmp(str1 , str2) ; 功能:比较str1和str2所指向的两个字符串,并产生以下结果:
str1与str2相等时,函数值为0。 str1>str2时,函数值大于0。
str1<str2时,函数值小于0。 字符串之间比较的方法是:从第一个字符开始,依次对str
1与str2对应位置上的字符按ASCII码值的大小进行比较,直到出现第一个不相同的字符时,即由这两个字符的大小决定所在串的大小。6
.3.7 字符串数组应用举例 【程序文本6.17 】从终端键盘输入一字符串,并复制到另一字符数组后显示出来。
程序如下: # include "stdio.h"
main(?) { ch
ar str1[30] , str2[30] ; int i ;
printf("input a string:") ;
scanf("%s" , str1) ; i=0 ;
while(str1[i]!=''\0'') { str2
[i]=str1[i] ; i++ ; }
str2[i]=''\0'' ; printf("%s" , str2) ;
} 运行结果: input a string : ABC AB
C 【程序文本6.18 】由终端键盘输入一字符串,要求从该串中删去一字符。 main(?) {
char str1[50] , str2[50] ; char ch ; int i=0 , k=0
; gets(str1) ; printf(" \n delete?") ; scanf("%c"
, &ch) ; for(i=0 ; str1[i] !=''\0'' ; i++) {
if(str1[i]!=ch) str2[i-k]=str1[i] ; else k=k+1 ; } str2[i-k]=''\0'' ; printf("\n%s\n" , str2) ;} 该程序运行后,从键盘输入字符串: I am a boy 〈回车〉 屏幕显示:delete? 输入:a 输出为:I m boy 本章小结1.数组是程序设计中最常用的数据结构。数组可分为数值数组(整数组,实数组),字符数组以及后面将要介绍的指针数组,结构数组等。2.数组可以是一维的,二维的或多维的。3.数组类型说明由类型说明符、数组名、数组长度(数组元素个数)三部分组成。数组元素又称为下标变量。 数组的类型是指下标变量取值的类型。4.对数组的赋值可以用数组初始化赋值,输入函数动态赋值和赋值语句赋值三种方法实现。 对数值数组不能用赋值语句整体赋值、输入或输出,而必须用循环语句逐个对数组元素进行操作。
献花(0)
+1
(本文系昵称1689447...首藏)