数组的概念
1.数组是一组有序数据的集合。数组中各数据的排列是有一定规律的,下标代表数据在数组中的序号。
2.数组中的每一个元素都属于同一个数据类型。不能把不同类型的数据放在同一组数据中。
3.用一个数组名和下标来唯一确定数组中的元素。
一维数组
1.一维数组的定义格式为:
类型说明符 数组名 [常量表达式】;
2类型说明符:数组的类型
数组命名规则和变量名相同,遵守标识符命名规则。
常量表达式可以包括常量和符号常量,但不能包含变量。
常量表达式指明数组中元素的个数,必须大于0.
数组名后是用方括号而不是圆括号。
3.实型数组: float score[数字]
字符数组:char str[数字]
其中score str 为数组名
方括号内的数值为数组长度
下标个数为数组维数
数组成员称为数组元素
4.在数组定义时为数组元素赋初值称为数组初始化。
1)在定义数组时对数组元素赋以初值。
方法:将数组元素的初值依次放在一对花括号内。
2)可以只给一部分元素赋值,其他按零来处理。
5.对全部数组元素赋初值时,可以不指定数组长度。
6.一维数组赋初值的个数不能超过数组总元素的个数。
7.c语言规定,只能引用单个数组元素,不能一次引用整个数组
数组元素的引用形式: 数组名[下标]
说明:1)下标是指在数组中第几个元素
2)下标可以是整型变量,整型常量和整型表达式。
3)下标的值是数组元素的序号
4)注意区分数组定义和数组元素引用
一维数组程序的举例
1.用数组来求斐波那切数列
#include<stdio.h>
void main()
{ int i;
int f[20]={1,1};
for(i=2;i<=20;i++)
f[i]=f[i-2]+f[i-1];
for(i=0;i<=20;i++)
{
if(i%5==0)printf("\n");
printf("%12d",f[1]);
}
printf("\n");
}
2.由小到大排列数的大小
#define N 10
void main()
{ int a[N],i,j,t;
printf("input%D numbers:\n",N);
for(i=0;i<N;i++)
scanf("%d",&a[i]);
printf("\n");
for(j=0;j<N-1;i++)
for(i=0;i<N-1;i++)
if(a[i]>a[i+1])
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
printf("the sorted numbers:\n");
for(i=0;i<N;i++)
printf("%d",a[i]);
printf("\n");
}
二维数组
1.定义二维数组的一般形式为
类型说明符 数组名[常量表达式1] [常量表达式2];
其中:表达式1为行数;表达式2为列数
注意:一对方括号内不能写两个下标。
数组元素个数必须是常量表达式,不能使用变量。
2.二维数组的初始化
(1)分行给二维数组赋初值。(最直观)
(2)可以将所有数据写在一个花括号内,按数组元素在内存中的排列顺序对各元素赋初值。
(3)可以对部分元素赋初值
(4)如果对全部元素都赋初值,则定义数组时对第一堆的长度可以不指定,但第二维的长度不能省,在定义时也可以只对部分元素赋初值而省略第一维的长度,但应该分行赋初值。
3.二维数组的输入输出
采用双重循环方式进行 :
数组的输入
#include<stdio.h>
int main()
{ int a[2][3],i,j;
for(i=0;i<=2;i++)
for(j=0;j<=3;j++)
scanf("%d",&a[i][j]);
return 0;
}
数组的输出
#include<stdio.h>
int main()
{ int a[2][3],i,j;
for(i=0;i<=2;i++)
for(j=0;j<=3;j++)
scanf("%d",&a[i][j]);
return 0;
}
字符数组
1.字符数组的定义:
用来存放字符数据的数组是字符数组 。c语言用字符数组存放字符串,字符数组中的个元素依次存放字符串的各字符。
2.定义的格式: char数组名[常量表达式];
注意:c数组可以存放的字符串小于或等于c数组的元素。
3.字符串的存储
由于字符串的末尾有结束标志\0,所以字符串实际占有单元的数量等于字符串长度+1。定义时注意考虑元素总个数应比实际长度多1。
4.字符串的初始化
(1)用单个字符对字符数组进行初始化
说明:1)如果在定义字符数组时不进行初始化,则数组中各元素的值是不可预料的。
2)如果花括号中提供的初值个数(即字符个数)大于数组长度,则出现语法错误。
3)如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组的长度,系统会自动根据初值的个数确定数组的长度。
4)如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(即\0).
(2)用字符串常量对字符数组初始化
说明:1)将字符串存储到字符数组中,字符串和第一个\0构成有效字符串。对字符串的操作,就是对字符数组的操作。
2)普通数组中的元素是确定的,一般用下标控制循环;而字符串使用结束符\0来控制循环。
5.字符数组的输入输出
(1)单个字符输入输出(用格式符%c或字符输入函数)
#include<stdio.h>
int main()
{
char c[5];
int i;
for(i=0;i<5;i++)
scanf("%c",c[i]);
for(i=0;i<5;i++)
printf("%c",c[i]);
printf("\n");
return 0;
}
2.字符串整体或部分输入输出(用格式符%s)
说明:(1)输入输出项必须是以字符串的地址形式出现;
(2)也可以是字符串常量
(3)只能输入不包括空格,\t,\n的字符串;
(4)若要输入空格,用gets函数;
(5)数组名前不加&符号。
c函数库中提供一些用来处理字符串的函数
1.puts 输出字符串
一般形式:puts(字符数组)
其作用是将一个字符串(以\0结束的字符序列)输出到终端并执行换行
2.gets 输入字符串
(以上两点使用时注意程序前边加#include<stdio.h>)
3.strcat 字符串连接
4·strcpy 字符串复制
5.strcmp 字符串比较
6·strlen 字符串长度
7·strlwr 其作用是将字符串中大写字母换成小写字母
8·strupr 其作用是将字符串中小写字母换成大写字母
(以上使用时注意程序前边加:#include<string.h>)