




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章数组在C语言中,数组是一种构造类型,即它是由基本类型数据按照一定规则组成的新类型.数组中每个值的类型必须与数组的类型相同,使用数组名和下标来唯一确定数组中的元素。5.1一维数组的定义和使用5.1.1一维数组的定义类型说明符数组名[常量表达式];例如: inta[10];
//数组名为a,有10个int类型元素*/ doublescores[50*2];
//数组名为scores,有100个double元素*/定义数组时需要注意以下几个问题:数组名命名规则和变量名相同,应遵循标识符命名规则;常量表达式表示数组元素的个数(即数组的长度),在定义数组时必须指定该值。引用元素时下标从0开始。常量表达式中可以包括常量和符号常量,但不能包含变量。数组元素在内存中是连续存放的,数组名本身表示内存的首地址。5.1.2一维数组元素的引用C语言规定只能逐个引用数组元素而不能一次引用整个数组。数组元素的表示形式为:数组名[下标];例如:inta[10];a数组的10个元素分别是:a[0]、a[1]、a[2]、a[3]、a[4]、a[5]、a[6]、a[7]、a[8]、a[9]。 例6-1输入10个学生的成绩并求总分。
main() { inti; floatscores[10],sum=0; for(i=0;i<10;i++) { scanf("%f",&scores[i]); sum+=scores[i]; } printf("sum=%.2f",sum); getch(); }运行结果如下:56678446819032556392sum=66.605.1.3一维数组的初始化1.对全部元素赋值。例如:
inta[10]={1,2,3,4,5,6,7,8,9,10};2.只对部分元素赋值。例如:
inta[10]={1,2,3,4,5};3.如果在{}中指定了所有元素的值,则数组的长度可省略不写。例如: inta[10]={1,2,3,4,5,6,7,8,9,10}; 可改写为: inta[]={1,2,3,4,5,6,7,8,9,10}; 例6-2输出Fibonacci序列的前10个数。main(){ inti;inta[10]={1,1};//序列的第1,2个数值为1
for(i=2;i<10;i++)//从第3个数开始,按规律求值
a[i]=a[i-1]+a[i-2];for(i=0;i<10;i++) printf("%4d",a[i]);getch();}运行结果如下: 112358132134555.2.1二维数组的定义及引用二维数组的定义方式为:
数组名[行标
][列标
]注意:数组下标从0开始,因此行标范围是0~M
-1,列标范围是0~N
-1。例如:
#defineM3
#defineN5
intc[M][N];
定义了二维数组c,它是一个具有M行N列的二维数组,共有M×N个元素。C采用行优先的方式来存储二维数组,即先在内存中顺序存储第一行(行标为0)的元素,再存放第二行的元素,依此类推。5.2.2二维数组的定义及引用1.分行全部赋值。例如:
inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};2.分行部分赋值。例如:
inta[3][4]={{1,2},{5},{9,10,11}};3.按一维数组形式赋值。例如:
inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};4。如果对全部元素赋值(无论是一维形式还是分行形式),则定义数组时可省略第一维长度,但第二维长度不能省略。例如:
inta[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};例6-3输入一个3*4矩阵,找出矩阵中负数的个数并输出。main(){inta[3][4]; inti,j,count=0; printf("inputmatrix:\n");for(i=0;i<3;i++) for(j=0;j<4;j++) {scanf("%d",&a[i][j]); if(a[i][j]<0)count++; } printf("thenumberofnegativeis%d",count); getch();} 5.3字符数组的定义和使用5.3.1字符数组的定义及元素引用 字符数组的定义类似于前面所介绍的数组定义,例如: chars[10];5.3.2字符数组的初始化 chars1[10]={'f','a','s','h','i','o','n'};该定义只对前8个元素赋值,后2个元素为零值(即ASCII码为0的字符)。它在内存中的表示如图5-4所示。fashion\0\0由于采用字符串常量的方式对字符数组初始化时,系统会系统增加一个‘\0’,因此对于语句: chars2[]=
"fashion";系统将认为数组s的长度是7,占8个字节。该数组在内存中的表示如:上述语句等价于:chars2[8]={'f','a','s','h','i','o','n'};fashion\05.3.3字符数组的输入输出同其他类型的数组一样,字符输出的输入与输出可以逐个元素进行处理。例如: chars[10]; for(i=0;i<10;i++) scanf(“%c”,&s[i]); for(i=0;i<10;i++) printf(“%c”,s[i]);由于字符数组可以按照字符串形式处理,因此在输入输出时可以使用格式符“%s”整体进行。例如: chars[10]=“hello!”; printf(“%s”,s);输出时,系统检测到结束标志‘\0’即停止输出,因此输出结果为: hello!以“%s”输出时需要注意,该格式表示输出字符串,因此在输出项中应该写数组名,而不能使用数组元素的形式,即语句: printf(“%s”,s[0]); 这种形式是不对的。输入时,系统遇到第一个‘\0’即停止输出,即使该字符后仍有其他字符。例如: chars[10]=“hello!\0ab”; printf(“%s”,s);输出结果为:hello!使用scanf进行字符串输入时,系统以空格或回车作为一个字符串的输入结束标志。使用gets函数或puts函数对字符数组进行整体输入与输出。
在使用gets函数或puts函数之前,应包含头文件“stdio.h”。使用gets函数对字符数组进行整体输入格式:gets(字符数组名
)作用:从键盘上输入一个字符串赋给该数组。例如:chars[20];gets(s);若从键盘上输入:thankyou此时字符数组s的值为字符串“thankyou”。使用puts函数对字符数组进行整体输出格式:puts(字符数组名)
或:puts(字符串常量)作用:将一个字符数组或字符串输出。例如:charstr[20]={"OneTwo\0Three"};printf("%s",str); puts(str);puts("thankyou!\0abc");5.3.4字符串处理函数C语言的函数库中提供了许多字符串的处理函数(头文件为string.h),使用户能够方便地处理字符串。这里介绍一些常用的函数如下:求串长函数strlen(s)、串复制函数strcpy(s1,s2)、串连接函数strcat(s1,s2)、串比较函数strcpy(s1,s2)。说明:其中的参数是符合指定要求的字符串数据。
1.strlen(字符数组)作用:计算字符串s的长度,即首次出现'\0'之前的字符个数。参数要求:字符串s既可以是字符串常量,也可以是字符数组。例如:chars1[]={"perfect"}; //strlen(s1)等于7chars2[20]={"One\0Two\0Three"}; //strlen(s2)等于3chars3[]="thank&you!\0abc"; //strlen(s3)等于10strlen("abc\t1234\n")等于9;strlen("abc\t1234\123\n")等于10。其中,’\t’、’\n’和’\123’均为转义字符,按一个字符计算。2.串复制函数strcpy(s1,s2)作用:将字符串s2的内容复制到字符串s1中。参数要求:s1必须是容量足够大的字符数组;s2既可以是字符串常量,也可以是字符数组。不允许象其他变量一样对字符数组整体赋值,例如下面语句是错误的: chars1[10],s2[]=“hello!”; s1=s2;因为数组名s1是地址常量,不能进行赋值运算,必须采用strcpy函数进行复制。例如:chars1[10]="thankyou!",chars2[]=“hello!”;strcpy(s1,s2);执行后,s1的状态如图5-8所示。hello!\04.串比较函数strcpy(s1,s2)作用:比较字符串s1和字符串s2内容的大小。参数要求:s1和s2既可以是字符串常量,也可以是字符数组。字符串比较并不是比较它们的长度,而是依据这样的规则:对两个字符串从左至右依次比较对应的字符(按照字符的ASCII码值进行比较),直到遇到不同字符为止。若全部字符相同,则认为两字符串相等,否则以遇到的第一个不同字符的大小来决定两个字符串的大小。例如:“abc”大于“ABC” (因为
'a'>'A')“abCdef”小于“abcd” (因为
'C'<'c')“ABC”等于“ABC”“COM”小于“COMPUTER”调用函数strcmp(s1,s2)的结果:若s1小于s2,则函数值
<0;若s1等于s2,则函数值
==0;若s1大于s2,则函数值
>0。该函数的返回值返回比较的结果: 字符数组1=字符数组2,函数值=0; 字符数组1>字符数组2,函数值>0; 字符数组1<字符数组2,函数值<0;例如: chars1[]=“thank”,s2[]=“you”; if(strcmp(s1,s2)>0)printf(“bigger\n”); 5.4数组的应用举例 例6-4:找出10个学生中成绩低于其平均成绩的人数并输出。分析:可以定义一个长度为10的实型数组scores存储10个学生成绩。先计算出平均成绩,然后统计成绩低于平均成绩的人数。
程序如下:main(){inti,count=0;//count存储人数,初始化为0
floatscores[10],ave;//ave存储平均成绩
for(i=0;i<10;i++){scanf("%f",&scores[i]);ave+=scores[i];
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 接手转让店铺合同协议书
- 施工合同书和协议书范本
- 房产合作招商合同协议书
- 2025企业期满终止合作合同协议
- 提前终止物业合同协议书
- 保险行业数字化理赔服务创新模式探索报告2025
- 土地转包协议书合同
- 牙及牙槽外科试题及答案
- dhl单证文员面试题目及答案
- 2024年合肥老年开放大学教师招聘笔试真题
- 格力年终总结报告
- 中心城区供热更新改造项目风险分析与管理
- 宁夏新希望贺兰山牧业有限公司良种奶牛繁育基地建设项目环境影响报告书
- 养殖场安全教育培训
- 心源性猝死的预防和急救
- 教师交通安全法规
- 2025-2030年中国蛭石市场发展前景及投资策略分析报告
- 江苏省淮安市(2024年-2025年小学六年级语文)统编版期末考试(下学期)试卷及答案
- 文创产品设计课件
- 土地平整工程施工方案与技术措施
- 2015-2019高考全国卷历史小论文真题(附答案)资料
评论
0/150
提交评论