【自用】C语言初级入门6(上)

数组是一组相同类型的有序数据的集合,用一个数组名标识。

一维数组用于存储一行一列数据

定义一维数组的一般形式如下:

类型说明符 数组名[数组长度]

其中,数组的长度表示数组元素的总个数

例如:

int a[5];

表示定义一个名为a的数组,数组是一维的,共有5个元素,每个元素都是int类型。

5个元素为a[0]~a[4],方括号中的数字为下标,表示元素在数组中的序号。

系统在内存中为数组分配的是连续的存储空间数组元素在内存中连续存放

一维数组在内存中的存储方式为整个数组占用一段连续的内存单元,各元素按顺序依次存放

数组名表示数组所占用的内存空间的开始处的地址,该地址称为数组的首地址或起始地址。

数组的初始化是指在定义数组的同时为数组元素赋初值,下面列举几种不同的赋初值情况:

int a[5]={1,2,3,4,5}; //给数组的全部元素赋初值

int a[5]={1,2}; //给数组的部分元素赋初值

int a[4]={1,2,3,4,5}; //这是错误的,初值个数不能超过数组长度

int a[]={1,2,3,4,5}; //在给数组的全部元素赋初值时允许省略数组长度的说明

/*自动局部数组*/
int a[5]; //a数组未做初始化,它的5各元素都是系统给的随机数
a[0]=1; a[1]=2; //将a[0]和a[1]分别赋值1和2,后面3各元素未变仍是随机数

数组分为全局数组局部数组,局部数组又分为自动数组静态数组

全局数组静态局部数组如果在定义时未赋初值,对于数值型数组,系统将所有元素初始化为

自动局部数组如果在定义时未赋初值,系统将所有元素初始化为随机数

下面写一个简单的冒泡法升序排序算法。

#include <stdio.h>

int main() {
	int n, N, i;
	printf("输入需要排序的元素总个数:");
	scanf("%d", &N);
	int a[N], t;
	for (n = 0; n < N; n++) {
		printf("输入第%d个元素的值:", n + 1);
		scanf("%d", &a[n]);
	}
	for (n = 0; n < N - 1; n++) {
		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("按升序排序:");
	for (n = 0; n < N; n++) {
		if (n < N - 1)
			printf("%d,", a[n]);
		else
			printf("%d", a[n]);
	}
	return 0;
}

输出结果。


二维数组用于存储逻辑上按行、列组织在一起的数据。

定义二维数组的一般形式如下:

类型说明符 数组名[常量表达式1][常量表达式2] 

 例如:

int a[3][2]

a数组的各个元素分别为:

a[0][0] a[0][1]

a[1][0] a[1][1]

a[2][0] a[2][1]

第1个下标表示元素所在,称为行下标第2个下标表示元素所在,称为列下标

二维数组可以看作是一种特殊的一维数组。

由于内存本身是一种线性结构,因此二维数组在内存中的存储空间是连续的线性空间。

在内存中,二维数组按行存放,先存放第1行的元素,再存放第2行的元素,以此类推。

例如:

a[0][0]

a[0][1]

a[1][0]

a[1][1]

a[2][0]

a[2][1]

无论是一维数组还是二维数组,数组名都表示其存储空间的首地址


字符型数组的定义方法与数值型数组类似,只是类型为char。

例如:

char a[5] = {'h', 'e', 'l', 'l', 'o'}; //用字符初始化

/*用字符串初始化*/

char a[6] = {"hello"};

char a[6] = "hello";

char a[6] = {'h', 'e', 'l', 'l', 'o', '\0'};

字符串是用双引号引起来的一串字符。

在字符串末尾系统会自动添加一个字符串结束标志'\0',表示字符串在此位结束。

'\0'是ASCII码值是0的字符,称为空字符,它不作为字符串的有效字符,只起辨识的标志作用,但它要占用1字节的内存空间。

初始化时如果只提供了部分元素的值,未提供初值的元素自动取值为'\0'

下面写一个简单程序,对比在使用scanf或printf函数时,”%c“和“%s”的差异。

使用"%c"时,例如:

#include <stdio.h>

int main() {
	char a[30];
	int i = -1;
	do {
		i++;
		scanf("%c", &a[i]);
	} while (a[i] != '\n');
	a[i] = '\0';
	for (i = 0; a[i] != '\0'; i++) {
		printf("%c", a[i]);
	}
	printf("\n");
	return 0;
}

输入与输出的结果。

使用“%s”时,例如:

#include <stdio.h>

int main() {
	char a[30];
	scanf("%s", a); //注意数组名a,前无‘&’,后无‘[]’
	printf("%s", a);
	return 0;
}

输入与输出的结果。

 在使用“%s”格式说明符输入字符串时,系统会在接收进来的字符串末尾自动添加一个‘/0’,将字符串连同添加的'/0'一并存入数组。

在使用“%s”格式说明符输入字符串时,遇到空格回车就认为该字符串输入结束。


字符串输入函数gets,该函数的调用形式如下:

gets(字符数组名)

其功能是将从键盘输入的一个字符串存到指定数组中。字符串可以包含空格,输入时以回车结束,将字符串存入数组时连同字符串结束标志'\0'一同存入。

字符串输出函数puts,该函数的调用形式如下:

puts(字符数组名或字符串常量)

其功能是输入一个字符串,遇到'\0'时结束输出,输出后自动换行

写一个简单的程序,例如:

#include <stdio.h>

int main() {
	char a[30];
	printf("输入");
	gets(a);
	puts("这是输入的字符串:");
	puts(a);
	printf("\n");
	puts("ABC\nDE\0FGHIJKL");
	return 0;
}

输入和输出的结果。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值