一、一维数组
一、一维数组
1.数组的定义
为了存放鞋子,假设你把衣柜下面的一层分成了10个连续的格子,此时,让他人帮你拿鞋子就会很方便。例如你直接告诉他拿衣柜最下面一层三个格子中的鞋子,同样假设现在我们有10个整数存储在内存中,为方便存取,我们可以借助c语言提供的数组,通过一个符号来访问多个元素。
某班学生的学习成绩,一行文字,一个矩阵等数据的特点如下:
(1)具有相同的数据类型
(2)使用过程中需要保留原始数据
c语言为了方便操作这些数据,提供了一种构造数据类型-----数组,所谓数组,是指一组具有相同数据类型的数据的有序集合。
一维数组的定义格式:
类型说明符 数组名 [常量表达式]
例如:int a[10];
定义一个整型数组,数组名为a,他有10个元素。
声明数组时要遵循以下规则:
(1)数组名的命名规则和变量名的相同,即遵循标识符命名规则
(2)在定义数组时,需要指定数组中元素的个数,[]中的常量表达式用来表示元素的个数,即数组长度
(3)常量表达式中可以包含常量和符号常量,但不能包含变量,也就是说,c语言不允许对数组的大小做动态定义,即数组的大小不依赖于程序运行过程中变量的值。
2.一维数组在内存中的存储
语句int mark[100]中的每个元素都是整型元素,占用4字节,数组元素的引用方式是''数组名[下标]'',所以访问数组mark中的元素的方式是mark[0],mark[1],mark[2],....mark[99],
ps:没有元素mark[100],因为数组元素是从0开始编号的。
初始化方法
(1)在定义数组时对数组元素赋初值
int a[10]={1,2,3,4,5,6,7,8,9};
(2)可以只给一部分元素赋值
int a[10]={1,2,3,4,5};
(3)如果要使一个数组中的全部元素的值都为0
int a[10]={0,0,0,0,0,0,0,0,0};
二、二维数组
1.二维数组的定义
前面介绍的数组只有一个下标,称为一维数组,其数组元素也称为单下标变量,在实际生活中,有很多量是二维或者多维的,因此c语言允许构造多维数组,多维数组有多个下标,以标识他在数组中的位置。
二维数组定义的一般形式:
类型说明符 数组名[常量表达式1][常量表达式2]
int a[3][4]; 这样的数组代表有三行四列
2.二维数组的初始化
(1)按行赋值
int a[5][3]={{80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85}};
(2)按列赋值
int a[5][3]={80,75,92,61,65,71,59,63,70,85,87,90,76,77,85};
ps:如果对全部元素赋初值,则第一维的长度可以不给出
三、字符数组与scanf读取字符串
1.字符数组初始化及传递
定义:char c [10];
初始化:(1)可以单独赋值
c [10]='1';c[1]='2';c [2]='3';c[3]='4';c [4]='5';c[5]='6';c [6]='7';c[8]='9';c [9]='1';
(2)可以整个初始化:
c[10]=c [10]={'1','2','3','4','5','6','7','1','2','4'};
但工作中一般不采用以上两种初始化方法,因为字符数组一般用来存取字符串,通常采用的初始化方法是char c[10]=“hello”,因为c语言规定字符串的结束标志为'\0',而系统会对字符串常量自动加一个'\0',为了保证处理方法一致,一般会人为的在字符串数组中添加'\0',所以字符数组存储的字符串长度必须比字符数组少一字节。
2.scanf读取字符串
#include<stdio.h>
int main(){
char c[10];
char d[10];
scanf("%s",c);//scanf读取字符串时使用%s
printf("%s\n",c);
scanf("%s%s",c,d);
printf("c=%s,d=%s\n",c,d);
return 0;
}
四、gets函数与puts函数
1.gets函数与puts函数
(1)gets函数
类似于scanf函数,用于读取标准输入,前面我们已经知道scanf函数在读取字符串时遇到空格就认为读取结束,所以当输入的字符串存在空格时,我们需要用到gets函数进行读取。
gets函数的格式如下:
char *gets(char *str);
(2)puts函数
类似于printf函数,用于输出标准输出
puts函数的格式如下:
int puts(char *str);
#include<stdio.h>
int main(){
char c[20];
gets(c);
puts(c);
return 0;
}
运行:
2.str系列字符串操作函数
str包括strlen、strcpy、strcmp、strcat等函数
#include<stdio.h>
#include<string.h>
int mystrlen(char c[]){
int i = 0;
while(c[i++]);
return i-1;
}
int main(){
int len;
char c[20];
char d[100]="world";
gets(c);
puts(c);
len=strlen(c);
printf("mystrlen len =%d\n",len);
strcat(c,d);
strcpy(d,c);
puts(d);
printf("c?d %d\n",strcmp(c,d));
puts(c);
return 0;
}
函数详解:
通过strlen函数计算地字符串长度为3,
strcpy函数用来将字符串中的字符逐个地赋值给目标字符数组,
strcat函数用来将一个字符串接到另外一个字符串上的末尾
strcmp函数用来比较两个字符串的大小,由于字符数组c中的字符串与d相等,所以这里的返回值为0。