目录
(1)逐个字符输入输出。用格式符“%c”输入或输出一个字符;
一、数组
(1)数组是一组有序数据的集合。数组中个数据的排列是有一定规律的,下标代表数据在数组中的序号
(2)用一个数组名(如s)和下标(如15)来唯一确定数组中的元素
(3)数组中的每一个元素都属于同一个数据类型。不能把不同类型的数据放在同一个数组中
二、一维数组
1、一般形式
类型符 数组名 [常量表达式]
(1)数组名的命名规则和变量名相同,遵循标识符命名规则。
(2)在定义数组时,需要指定数组中元素的个数,方括号中的常量表达式用来表示元素的个数,即数组长度。例如,指定a[10],表示a数组有10个元素。注意,下标是从0开始的,这10个元素是:a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]。
(3)常量表达式中可以包括常量和符号常量,如“int a[3+5];”是合法的。不能包含变量,如“int a[n];”是不合法的。也就是说,C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。
2、引用
(1)表示形式
数组名[下标]
①a[0]就是数组a中序号为0的元素,他和一个简单变量的地位和作用相似
②下标可以是整型常量或整型表达式,如:a[o]=a[5]+a[7]-a[2 * 3] (每一个数组元素都代表一个整数值)
(2)引用区别(形式与含义)
(3)一维数组初始化
①定义
为了使程序简洁,常在定义数组的同时,给各数组元素赋值,这称为数组的初始化。
②方法——初始化列表
a、在定义数组时对全部数组元素赋予初值
int a[10]={0,1,2,3,4,5,6,7,8,9};
🐖:将数组中各元素的初值顺序放在一对花括号内,数据间用逗号分隔。花括号内的数据就称为“初始化列表”。
b、可以只给数组中的一部分元素赋值
int a[10]={0,1,2,3,4} ;
🐖:花括号内只提供5个初值,这表示只给前面5个元素赋初值,系统自动给后5个元素赋初值为0
c、如果想使一个数组中全部元素值为0,可以写成
int a[10]={0,0,0,0,0,0,0,0,0,0};
或
int a[10]={0} ;
d、在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度
int a[5]={1,2,3,4,5} ;
可以写成
int a[]一{1,2,3,4,5};
🐖:若数组长度与提供初值的个数不相同,则方括号中的数组长度不能省略
三、二维数组/矩阵
1、一般形式
类型说明符 数组名[常量表达式][常量表达式]
①例如,float a[3][4],b[5][10]; 定义a为3行4列的数组,b为5行10列的数组
②二维数组可以看作是一种特殊的一维数组,他的元素又是一个一维数组
③二维数组元素排列顺序时按行存放,即在内存中先顺序存放第一行的元素,接着再存放第2行的元素。
2、引用
二维数组元素的表示形式
数组名 [下标][下标]
① a[2][3] 表示a数组中序号为2的行中序号为3大的列的元素。下标应为整型表达式
②数组元素可以出现在表达式中,也可以被赋值,如 b[1][2]= a[2][3]/2
③在引用数组元素时,下标值应在已定义的数值大小范围内
数组a可用“行下标”的范围为0~2,“列下标”的范围为0~3.
3、二维数组的初始化——初始化列表
(1)分行给二维数组赋初值
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
🐖:这种赋初值方法比较直观,把第1个花括号内的数据给第1行的元素,第⒉个花括号内的数据赋给第2行的元素……即按行赋初值。
(2)可以将所有数据写在一个花括号内,按数组元素在内存中的排列顺序对各元素赋初值。
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
🐖:效果与前相同。但以第(1)种方法为好,一行对一行,界限清楚。用第(2)种方法如果数据多,则会写成一大片,容易遗漏,也不易检查。
(3)可以对部分元素赋初值。
①对各行第一列的元素赋初值
int a[3][4]={{1},{5},{9}};
🐖:它的作用是只对各行第1列(即序号为0的列)的元素赋初值,其余元素值自动为0。
赋初值后数组各元素为:
②对各行中的某一元素赋初值——适用于非0元素比较少的情况
int a[3][4]={{1},{0,6},{0,0,11}};
赋初值后数组各元素为:
③只对某几行元素赋初值
int a[3][4]={{1},{5,6}};
赋初值后数组各元素为:
④只对部分元素赋初值而省略第1维的长度
int a[][4]一{{o,0,3},{ },{0,10}};
这样的写法,能通知编译系统;数组共有3行。数组各元素为
🐖:要分行赋初值。
(4)对全部元素都赋初值
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
等价于:
int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};
🐖:定义数组时对第1维的长度可以不指定,但第2维的长度不能省。
系统会根据数据总个数和第⒉维的长度算出第1维的长度。数组一共有12个元素,每行4列,显然可以确定行数为3。
四、字符数组
1、定义
用来存放字符数据的数组是字符数组。字符数组中的一个元素存放一个字符。
定义字符数组的方法与定义数值型数组的方法类似。例如:
char c[10];
c[0]='I'; c[1]=' '; c[2]='a'; c[3]='m'; c[4]=' ';c[5]='h'; c[6]='a'; c[7]='p'; c[8]='p';c[9]='y';
以上定义了c为字符数组,包含10个元素。赋值以后数组的状态如下图所示:
由于字符型数据是以整数形式(ASCII代码)存放的,因此也可以用整型数组它存放字符数据。
2、字符数组的初始化
(1)初始化列表
char c[10]={'I','’ ,'a' ,' m',' ','W','a','p','p,'y'};
把10个字符依次分别赋给c[0]~c[9]这10个元素。
①如果在定义字符数组时不进行初始化,则数组中各元素的值是不可预料的。
②如果花括号中提供的初值个数(即字符个数)大于数组长度﹐则出现语法错误。
③如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(即\0')。
(2)用字符常量来使字符数组初始化
char c[]={"I am happy"};
或
char c[]="I am happy";
等价于
char c[]={‘I’,‘ ’,‘a’,‘m’,‘ ’,‘h’,‘a’,‘p’,‘p’,‘y’,‘.’,‘\0’};
字符串结束标志:在向内存中存储时,系统自动在最后一个字符'\n'的后面加了一个 '\0' 作为字符串结束标志。在执行printf函数时,每输出一个字符检查一次,看下一个字符是否'\0',遇'\0'就停止输出。
字符数组并不要求它的最后一个字符为‘\0’,甚至可以不包含‘\0’。是否需要加'\0',完全根据需要决定。由于系统在处理字符串常量存储时会自动加一个‘\0',因此,为了使处理方法一致,便于测定字符串的实际长度,以及在程序中作相应的处理,在字符数组中也常常人为地加上一个'\0'。例如:
3、引用字符数组中的元素
#include <stdio.h>
int main()
{
char c[15]={'I',' ','a','m',' ','a',' ','s','t','u','d','e','n','t','.'};
int i;
for(i=0;i<15;i十十)
printf("%c" ,c[i);
printf("\n");
return 0;
}
4、字符数组的输入输出
(1)逐个字符输入输出。用格式符“%c”输入或输出一个字符;
例如:
![](https://img-blog.csdnimg.cn/a88aa033b4994377be33b79c2f2242f0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5bCP576K5ZKp5ZmX,size_20,color_FFFFFF,t_70,g_se,x_16)
(2)将整个字符串一次输入或输出。
例如:
🐖:①用“%s"格式符,意思是对字符串(string)的输入输出。
②输出的字符串中不包括结束符'\0'
(3)用printf函数输出字符串
printf(“%s\n”,c);
执行方式:按字符数组名c找到其数组起始地址,然后逐个输出其中的字符,直到遇'\0'为止。
①printf函数中的输出项是字符数组名,而不是数组元素名。
②如果数组长度大于字符串的实际长度,也只输出到遇'\0'结束
③如果一个字符数组中包含一个以上'\0',则遇第一个'lO'时输出就结束。
(4)用scanf函数输入字符串。
scanf("%s",c)
🐖:scanf函数中的输入项如果是字符数组名,就不需要加地址符&,因为在C中,数组名代表该数组的起始地址。
5、使用字符串处理函数
⭐在使用字符串处理函数时,应当在程序开头用 #include<string.h>⭐
(1)puts函数——输出字符串的函数
(2)gets函数——输入字符串的函数
(3)strcat函数——字符串连接函数
(4)strcpy函数——字符串复制函数
(5)strncpy函数——字符串复制函数
(6)strcmp函数——字符串比较函数
🐖说明:字符串比较的规则是:将两个字符串自左至右逐个字符相比(按 ASCII码值大小比较),直到出现不同的字符或遇到'\0'为止。
(1)如全部字符相同,则认为两个字符串相等;
(2)若出现不相同的字符,则以第1对不相同的字符的比较结果为准。
例如:
"A”<"B", "a">"A" , " computer">" compare" , " these">" that" ,
"1A">" $ 20" , "CHINA">"CANADA", "DOG"<"cat", "Tsinghua">"TSINGHUA"
如果参加比较的两个字符串都由英文字母组成,则有一个简单的规律:在英文字典中位置在后面的为“大”。例如computer在字典中的位置在compare之后,所以" computer">"compare”。但应注意小写字母比大写字母“大”,所以"DOG"<"cat"。
比较的结果由函数值带回。
(1)如果字符串1=字符串2,则函数值为0。
(2〉如果字符串1>字符串2,则函数值为一个正整数。
(3)如果字符串1<字符串2,则函数值为一个负整数。