c语言基础(第六期:一维数组与字符数组)

一维数组

1.数组的定义

2.一维数组在内存中的定义

二、二维数组

1.二维数组的定义

2.二维数组的初始化

三、gets函数与puts函数

1.gets函数与puts函数

2.str系列字符串操作函数


一、一维数组

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。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文艺小青年111

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值