C语言程序设计课件:数组_第1页
C语言程序设计课件:数组_第2页
C语言程序设计课件:数组_第3页
C语言程序设计课件:数组_第4页
C语言程序设计课件:数组_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言程序设计

数组 7.1一维数组

7.1.1一维数组的定义

7.1.2一维数组元素的引用

7.1.3一维数组的初始化

7.1.4一维数组的应用举例

7.2二维数组

7.2.1二维数组定义

7.2.2二维数组的引用

7.2.3二维数组的初始化

7.2.4二维数组的应用举例

7.3字符数组和字符串

7.3.1字符数组的定义和引用

7.3.2字符数组的初始化

7.3.3字符数组的输入/输出

7.3.4字符串处理函数

7.4数组应用举例

7.1一维数组7.1.1一维数组的定义

数据类型名数组名[常量表达式];定义一个一维数组inta[5]a是数组名,有五个分量,每一个分量都是整型。编译时,要为变量分配内存,同样也要为数组分配内存。对于数组,要分配一片连续内存空间。因此,要为数组a分配5个int内存单元,其大小为10字节7.1.1一维数组的定义数组类型说明应注意以下几点:(1)数组的类型实际上是指数组元素的取值类型。对于同一个数组,其中所有元素的数据类型都是相同的。(2)数组名的命名规则和变量名相同,遵循标志符命名规则。

(3)数组名不能与其它变量名相同,例如:

voidmain(){inta;floata[10];……}是错误的7.1.1一维数组的定义数组类型说明应注意以下几点:(4)方括号中常量表达式表示数组元素的个数,如a[5]表示数组a有5个元素。但是其下标从0开始计算。因此5个元素分别为a[0]、a[1]、a[2]、a[3]、a[4]。(5)不能在方括号中用变量来表示元素的个数,但是可以是符号常数或常量表达式。例如:

#defineFD5

voidmain()

{inta[3+2],b[7+FD];

……

}(6)允许在同一个类型说明中,说明多个数组和多个变量。例如:inta,b,c,d,k1[10],k2[20];voidmain(){intn=5;inta[n];……}合法错误7.1.1一维数组的定义数组类型说明应注意以下几点:(4)方括号中常量表达式表示数组元素的个数,如a[5]表示数组a有5个元素。但是其下标从0开始计算。因此5个元素分别为a[0]、a[1]、a[2]、a[3]、a[4]。(5)不能在方括号中用变量来表示元素的个数,但是可以是符号常数或常量表达式。例如:

#defineFD5

voidmain()

{inta[3+2],b[7+FD];

……

}(6)允许在同一个类型说明中,说明多个数组和多个变量。例如:inta,b,c,d,k1[10],k2[20];voidmain(){intn=5;inta[n];……}合法错误数组元素的表示格式:数组名[下标]例如:a[5]/*表示引用数组a中第6个元素*/a[i+j]/*表示引用数组a中第i+j+1个元素*/a[i++]/*表示引用数组a中第i+1个元素*/C语言规定只能逐个引用数组元素而不能一次引用整个数组。例如:输出有10个元素的数组必须使用循环语句逐个输出各数组元素for(i=0;i<10;i++)printf(“%d”,a[i]);而不能用一个语句输出整个数组。7.1.2一维数组元素的引用

7.1.3一维数组的初始化

(1)在定义数组时对数组元素赋予初值。

例如:inta[10]={0,1,2,3,4,5,6,7,8,9};将数组元素值的初值一次放在一对花括号内。

经过上面的定义和初始化之后a[0]=0,a[1]=1,a[2]=2,a[3]=3,a[4]=4,a[5]=5,a[6]=6,a[7]=7,a[8]=8,a[9]=9(2)可以只给部分元素赋初值。

当{}中值的个数少于元素个数时,只给前面部分元素赋值

例如:inta[10]={0,1,2,3,4};表示只给a[0]~a[4]5个元素赋值,而后5个元素自动赋0值。(3)只能给元素逐个赋值,不能数组整体赋值。例如给10个元素全部赋1值,只能写为:inta[10]={1,1,1,1,1,1,1,1,1,1}而不能写为:inta[10]=1;(4)如给全部元素赋值,由于数据的个数已经确定,则在数组说明中,可以不给出数组元素的个数。例如:inta[5]={1,2,3,4,5};可写为:inta[]={1,2,3,4,5}在第二种写法中,花括号有5个数,系统就会据此自动定义a数组的长度为5。但数组长度与提供初值的个数不相同,则数组长度不能省略。例7-1数组a[6]的初始化。#include<stdio.h>voidmain(){ inta[6]={1,2,3,4,5,6};printf("数组首地址:%x\n",a); printf("数组占用的内存空间:%d字节\n",sizeof(a)); printf("数组a[5]各元素的地址和值:\n"); for(inti=0;i<5;i++) printf("a[%d]:%x(地址)%d(值)\n",i,&a[i],a[i]);}7.1.4一维数组的应用举例

例7-3从键盘上任意输入10个整数,要求按从小到大的顺序在屏幕上显示出来。排序的方法有很多,本例采用选择法。#include<stdio.h>#defineN6 voidmain(){inta[N]; inti,j,t,k;printf("PleaseinputNnumbers:\n");for(i=0;i<N;i++)scanf("%d",&a[i]);for(i=0;i<N-1;i++) {for(j=i+1;j<N;j++){if(a[j]<a[i]){t=a[i];a[i]=data[j];a[j]=t;}}for(k=0;k<N;k++){printf(“%4d”,a[k]);}printf(“\n”);}}7.2二维数组7.2.1二维数组的定义类型说明符数组名[下标][下标]

其中下标应为整型常量或整型表达式例如:inta[3][4]表示该数组类型为实型,数组名为a,它是一个3行4列的二维数组,共有12个(3*4)个元素,即

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[1][1]a[1][2]a[2][3]

7.2.2二维数组的引用

二维数组的引用形式为:

数组名[下标][下标]其中下标应为整型常量或整型表达式。同一维数组一样,两个下标均从0开始。例如:a[2][3]表示a数组2行3列的元素。7.2.3二维数组的初始化

二维数组可按行分段赋值,也可按行连续赋值。例如,对数组a[5][3]来说:按行分段赋值可写为:

inta[5][3]={{34,78,76},{76,87,43},{12,32,43},{45,64,24},{87,54,36}};按行连续赋值可写为:

inta[5][3]={34,78,76,76,87,43,12,32,43,45,64,24,87,54,36};这两种赋初值的结果是完全相同的。7.2.3二维数组的初始化

说明:

(1)可以只对部分元素赋初值,未赋初值的元素自动取0值。例如:inta[3][3]={{1},{2},{3}};是对每一行的第一列元素赋值,末赋值的元素取0值。赋值后各元素的值为:

100

200

300(2)如对全部元素赋初值,则第一维的长度可以不给出。例如:inta[3][3]={1,2,3,4,5,6,7,8,9};可以写为

inta[][3]={1,2,3,4,5,6,7,8,9};

说明:(3)数组是一种构造类型的数据。二维数组可以看作是由一维数组的嵌套而构成的。设一维数组的每个元素又都是一个数组,就组成了二维数组。当然,前提是各元素类型必须相同。根据这样的分析,一个二维数组也可以分解为多个一维数组。C语言允许这种分解。如二维数组a[3][4],可分解为三个一维数组,其数组名分别为:

a[0]

a[1]

a[2]这三个—维数组都有4个元素,例如:一维数组a[0]的元素为a[0][0]、a[0][1]、a[0][2]、a[0][3]。必须强调的是,a[0]、a[1]、a[2]不能当作数组元素使用,它们是数组名,不是一个单纯的数组元素。

7.2.4二维数组的应用举例

例7-5已知inta[2][3]={{1,2,3},{4,5,6}};现要将a的行和列的元素值互换后存到另一个二维数组b中。#include<stdio.h>voidmain(){inta[2][3]={{1,2,3},{4,5,6}},b[3][2];inti,j; for(i=0;i<2;i++)for(j=0;j<3;j++){b[j][i]=a[i][j];}printf("\n");for(i=0;i<3;i++){for(j=0;j<2;j++)printf("%d\t",b[i][j]);printf("\n");}}7.3字符数组和字符串

7.3.1字符数组的定义1.字符数组的定义定义字符数组的形式一:char数组名[数组长度]例如:charc[10];含义:定义一个名为c的长度为10的一维字符数组,c的每个元素可存储一个字符,整个字符数组可存储一个字符个数小于10的字符串。定义字符数组的形式二:char数组名[行长度][列长度]例如:charstr[3][10];含义:定义一个名为str的3行10列的二维字符数组,每行可存储一个字符个数小于10的字符串,共可存储3个字符串。7.3.2字符数组的初始化

1.字符数组的引用字符数组可以与数值型数组一样,按元素引用和赋值,此时的下标形式、取值范围也与数值数组相同。例如:charc[10],str[3][10];c[0]=’H’;/*赋一个字符常量*/c[1]=c[0]+32;/*一个元素经运算后将结果赋给另一个元素*/if(c[i]==’*’)printf(“%c”,c[i]);/*用在比较表达式和输出函数中*/inti,j;i=2,j=0;str[i][j]=65;/*给二维字符数组元素赋以整型常量*/c[8]=str[i][j]+32;/*二维字符数组元素参与运算后将结果赋给一维字符数组元素*/与数值数组不同的是,字符数组可以用数组名进行输入/输出,即对字符数组进行整体引用。例如:charc[10];scanf(“%s”,c);/*输入字符串到字符数组c*/printf(“%s”,c);/*输出字符数组c*/

注意:对字符数组进行整体输入/输出时,格式符为“%s”,而且输入项不加&,这是因为数组名本身就代表该数组存放的起始地址。

2.字符数组的初始化

字符数组也允许在类型说明时作初始化赋值。例如:staticcharc[10]={'B','A','S','I','C','d','B','A','S'};赋值后各元素的值为:数组c[0]、c[1]、c[2]、c[3]、c[4]、c[5]、c[6]、c[7]、c[8]、c[9]其中c[9]未赋值,由系统自动赋予0值。当对全体元素赋初值时也可以省去长度说明。例如:staticcharc[]={'B','A','S','I','C','d','B','A','S'};这时C数组的长度自动定为9。说明:①初值可以是自符常量、0~255之间的整常数或字符例如:chars[7]={“Hello!”};或chars[7]=”Hello!”;所赋的初值为字符串时,系统会自动地在空余的单元内赋\0,即ASCII码为0字符,作为字符串的结束标志。注意,这是一个不可显示的字符,是与空格’’不同的字符,空格’’的ASCII码为32,而且输出效果可见。

②系统自动将静态存储类别的数组中各元素赋初值\0。例如:staticcharc[5];/*各元素自动地赋为\0*/③初值个数可小于数组长度,若大于数组长度在编译时会出错。例如:chars[10]=”Hello!”;④省略长度时,系统自动取初值个数为长度。例如:charc[]=”Howdoyoudo.”;字符串的有效长度为14,c数组长度自动取值为15,末尾一个单元为\0。

1.用%c格式输入/输出

例7-7输出一个字符串。#include<stdio.h>voidmain(){inti;charc[15]={'I','','a','m','','a','','s','t','u','d','e','n','t','.'};for(i=0;i<=15;i++)printf("%c",c[i]);printf("\n");}7.3.3字符数组的输入/输出

7.3.3字符数组的输入输出2.用%s格式输入/输出

例7-8字符串输入、输出。#include<stdio.h>voidmain(){charc[16];printf("inputstring:\n");scanf("%s",c);printf("%s\n",c);}1.字符串输出函数puts格式:puts(字符数组名);功能:把字符数组中的字符串输出到显示器。即在屏幕上显示该字符串。例7-9字符串输出函数。

#include"stdio.h"voidmain(){staticcharc[]="BASIC\ndBASE";puts(c);}7.3.4字符串处理函数

2.字符串输入函数gets格式:gets(s);功能:从标准输入设备即键盘上输入一个字符串。本函数得到一个函数值,即该字符数组的首地址。

例7-10从键盘输入一行字符,统计其中有多少个单词,单词之间用空格分隔。#include<stdio.h> #include<string.h>voidmain(){chars[80],c1,c2=’‘;inti=0,num=0;gets(s);while(s[i]!=’\0’)

{c1=s[i];if(i==0)c2==’‘;elsec2=s[i-1];if(c1!=''&&c2=='')num++;i++;}printf(“Thereare%dwords.\n”,num);}3.字符串连接函数strcat格式:strcat(字符数组名1,字符数组名2);功能:把字符数组2中的字符串连接到字符数组1中字符串的后面,并删去字符串1后的串标志'\0'。本函数返回值是字符数组1的首地址。例7-11字符串连接函数。#include"string.h"voidmain(){staticcharst1[30]="Mynameis";intst2[10];printf("inputyourname:\n");gets(st2);strcat(st1,st2);puts(st1);}4.字符串拷贝函数strcpy格式:strcpy(字符数组名1,字符数组名2);功能:把字符数组2中的字符串拷贝到字符数组1中。串结束标志'\0'也一同拷贝。字符数名2,也可以是一个字符串常量。这时相当于把一个字符串赋予一个字符数组。例7-12字符串拷贝函数。#include"string.h"voidmain(){staticcharst1[15],st2[]="CLanguage";strcpy(st1,st2);puts(st1);printf("\n");}5.字符串比较函数strcmp格式:strcmp(字符数组名1,字符数组名2);功能:按照ASCII码顺序比较两个数组中的字符串,并由函数返回值返回比较结果。

字符串1=字符串2,返回值=0;字符串2﹥字符串2,返回值﹥0;字符串1﹤字符串2,返回值﹤0。例7-13在三个字符串中找出最小的。#include<string.h>#include<stdio.h>voidmain(){chars[20],str[3][20];inti;for(i=0;i<3;i++)gets(str[i]);strcpy(s,(strcmp(str[0],str[1])<0?str[0]:str[1]));if(strcmp(str[2],s)<0)strcpy(s,str[2]);printf("%s\n",s);}6.测字符串长度函数strlen格式:strlen(字符数组名);功能:测字符串的实际长度(不含字符串结束标志'\0'),并作为函数返回值。例7-14测字符串长度函数。#include"string.h"voidmain(){intk;staticcharst[]="Clanguage";k=strlen(st);printf("Thelenthofthestringis%d\n",k);}例7-15从键盘输入若干整数(整数个数应少于50),其值在0至4的范围内,用-

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论