文档库 最新最全的文档下载
当前位置:文档库 › 清华大学C语言程序设计 L6_数组

清华大学C语言程序设计 L6_数组

计算机程序设计基础

第6讲数组

沈瑜(010-********)

shenyu@https://www.wendangku.net/doc/903919271.html,

清华大学电机系

2015.10.28

主要内容

?数组C 程序设计举例?一维数组

–一维数组的定义与初始化–一维数组的引用与基本操作

?字符数组与字符串

–字符数组的定义与初始化–字符数组的输入输出–常用字符串函数

<2>

《C 程序设计(第四版)》参考教材第6章《C 语言程序设计: 现代方法(第2版)》第8章

l 例1:幸运字母程序(采用数组实现)

<3>

7.1数组C 程序设计举例

需要用到字符串函数

l 例2:成绩分级程序(采用数组实现)

<4>

长度为4整数数组长度为5

的字符数组

l 例3:统计阶乘(采用数组实现)

<5>

长度为11的整数数组

思考:

若不检查输入数据,当输入-1时会怎样?当输入100时又会怎样?

要点:数组下标一定不能越界!

l例4:翻译月份(采用数组实现)

<6>

6.2 一维数组

p数组的定义

按序排列的同类数据元素的集合称为数组array

p数组的分类

?按数组的类型分,有数值数组、字符数组等

?按数组的维数分,有一维数组、二维数组等

只有一个下标变量的数组,称为一维数组

<7>

1.一维数组定义

一般形式为:

类型符数组名[常量表达式],……;

?类型符可为任意基本数据类型

?数组名是用户定义的数组标识符

?常量表达式表示数据元素的个数,也称数组长度

例如:

int a[10];//定义整型数组a,有10个元素

float b[10],c[20];//定义实型数组b和c

char c[20];//定义字符数组c

<8>

说明:

(1)对同一个数组,其所有元素的数据类型相同(2)数组名不能与同一函数中其它变量同名

例如:

int a;

float a[10];//是错误的

(3)C语言中规定数组的下标从0开始

例如:

int a[5];//5个元素分别为a[0],a[1],a[2],a[3],a[4]

<9>

(4)不能在方括号中用变量来表示元素的个数,但

是可以是符号常数或常量表达式。

合法的定义方式:

#define N5

int a[3+2],b[N+7];

错误的定义方式:

int n=5;

int a[n];

(5)数组中各元素在内存中按下标顺序连续存储

<10>

思考:

?数组定义与变量定义有何区别?

?形式上

?数组定义除指明变量类型和变量名外,还需指明长度

?int var;

?int a[10];

?作用上

?变量定义:为单个数据分配空间

?数组定义:为多个数据分配空间

<11>

2.一维数组的初始化

(1)数组的初始化是指在数组定义时给数组元素赋初值(2)数组初始化的一般形式为:

类型符数组名[常量表达式]={值,值……值};

其中:在{}中的各数据值即为各元素的初值,各值之间用逗号间隔。

例如:

int a[10]={0,1,2,3,4,5,6,7,8,9};

相当于

a[0]=0; a[1]=1;... a[9]=9;

<12>

C语言对数组初始化的几点规定:

(1)可以只给部分元素赋初值。当{}中值的个数少于元素个数时,只给前面部分元素赋值。

例如:int a[10]={0,1,2,3,4};

//表示给前5个元素赋值,后5个元素自动赋0值

(2)只能给元素逐个赋值,不能给数组整体赋值。

例如:将数组的10个元素全部赋值为1

int a[10]={1,1,1,1,1,1,1,1,1,1};//正确

int a[10]=1;//错误

<13>

(3)若给全部元素赋值,则可不写明数组长度例如:

int a[5]={1,2,3,4,5};也可写为:

int a[]={1,2,3,4,5};不写明长度则必须初始化:

int a[];

(4){}中值的个数不可多于元素个数

例如:

int a[5]={1,2,3,4,5,1 };

×

<14>

×

3.数组元素的引用

数组元素一般引用形式为:数组名[下标]

其中的下标只能为整型常量或整型表达式

例如:

int a[5],b[5];

int i=2,int j=3;

下标为整型常量或整型表达式:

a[i]=b[j]; //将数组b的第4个元素赋值给a的第3个元素

a[i+1]=b[j]; /将数组b的第4元素赋值给数组b的第4元素

<15>

注意:

(1)数组的定义和数组元素中下标的差异

?数组定义中的下标表示数组长度,即元素个数;

?数组元素中的下标表示该元素在数组中的索引

?前者只能是常量,后者可以是常量,变量或表达式例如:

int a[3];//定义一个长度为3的数组

a[2]=1;//将数组a的第3个元素赋值为1

a[3]=1;//越界错误,数组a最后一个元素为a[2]

<16>

(2)只能通过下标变量引用数组元素,而不能一次引用整个数组

例如:将数组b的各元素值依次赋给数组a的对应元素可以用for循环逐一赋值

int a[10],b[10];

for(i=0;i<10;i++)

a[i]=b[i];

不能写成如下形式:

a=b×

<17>

6.3字符数组与字符串

1.字符数组的定义和初始化

p字符数组的定义:与数值数组相似,只是类型不同例如:char c[10]; //定义有10个字符元素的数组

p字符数组的初始化:与数值数组相似,但当初始化数据少于数组长度时,其余的元素为“空”('\0')

例如:char c[10]={‘C’,‘’,‘P’,‘r’,‘o’,‘g’,‘R’,‘a’,‘m’};

c[9],由系统自动初始化为空字符’\0’

<18>

说明:

(1)字符数组可以用字符串来初始化

例如:

char c[]={'C','',‘P','r','o','g',‘r','a','m','\0'};

可写为:

char c[]={"C Program"};

或去掉{}写为:

char c[]="C Program";

<19>

(2)字符串在存储时,系统自动在其后加上结束标志‘\0’(占1字节),但字符数组最后一个元素不一定是'\0’

例如:#include"stdio.h"

int main()

{

char c1[5]={'G','o','o','d','!'};

char c2[]={"Good!"};

printf("%s\n",c1);

printf("%s\n",c2);

Good!烫烫烫烫

return0;

}

c1与c2并不等价,字符数组c1不能当字符串使用,因为其最后一个元素不是结束标志'\0’。

<20>

相关文档
相关文档 最新文档