一维数组,二维数组,字符数组,二维字符数组

目录

  • 一维数组
  • 二维数组
  • 字符数组
  • 二维字符数组

一维数组

【知识点:定义并初始化】
【1】 数组定义并初始化的写法!

#include
int main() {
	int a[40] = { 1, 1}, i;//定义并初始化
	//定义这个长度为40的整形数组,并初始化为2个1
	//按照顺序依次给a[0]和a[1]

	for (i = 2; i <= 39; i++) {
		a[i] = a[i - 2] + a[i - 1];
	}

	for (i = 0; i <= 39; i++) {
		printf("%d\n", a[i]);
	}
	return 0;
}

【2】 注意,一维数组定义并初始化的时候,哪怕只有一个数值初始化也必须加{}
【3】 注意,初始化的值是按照顺序依次给数组元素
【4】 特征:代码验证一下
一维数组,二维数组,字符数组,二维字符数组_第1张图片
一维数组定义并初始化后,系统默认给其他数组元素赋值为0。
【5】 对比,定义和初始化分开呢?

#include
int main() {
	int a[40], i;
	//定义一个长度为40的整型数组
	a[0] = 1;
	a[1] = 1;
	//分开单独初始化写法
	for (i = 0; i <= 39; i++) {
		printf("%d\n", a[i]);
	}
	return 0;
}

系统给其他数组元素随机给值
【给的未知的值:系统给其他38个数值是啥不知道】
总结一下:
【1】 一维数组:目的取代多个自变量提出的。
【2】 必须先定义再使用!
【3】 定义形式:数据类型名 数组名[长度]
【4】 数组元素:数组名[下标] 下标:位置:第几?,记得是从0开始编号处理
【5】 例如:int a[40]
特征1:一个一维数组中所有的数组元素的数据类型必须是一样的!
【换句话讲:一个一维数组中绝对不可以出现不同类型的数据!】
特征2:每个数组元素的存储空间都是一样大!
特征3:c语言一共有3个标准【C89 C99 C11】规定一维数组定义的时候表示数组[长度]
必须是整型常量!int a[40] 黄色部分绝对不可以是自变量!int a[n];
int n=10;
int a[n];
特征4:一维数组中所有数组元素在内存中是连续存储的!

一维数组,二维数组,字符数组,二维字符数组_第2张图片
特征5:任何一维数组都满足:一维数组的数组名 等价 该数组首元素的地址

#include
int main() {
	int a[40], i;
	//分开单独初始化
	printf("%d\n", &a[0]);
	//输出a[0]的首地址
	printf("%d\n", a);
	return 0;
}

运行结果为:
在这里插入图片描述

二维数组

1、 应用:坐标,excel中的工作表,数独,
经典老游戏的界面也是典型二维数组:俄罗斯方块,贪吃蛇,超级玛丽,推箱子,魂斗罗,坦克大战等
2、 必须满足先定义再使用!
格式:数据类型名 数组名[行数][列数]
例如:输入一个寝室6个人本学期7门科目的成绩,计算出每个人的总分和平均分,最后全部输出
3、 数组元素如下
一维数组,二维数组,字符数组,二维字符数组_第3张图片
一维数组,二维数组,字符数组,二维字符数组_第4张图片

#define _CRT_SECURE_NO_WARNINGS
#include
int main() {
	double cj[6][10];//6个人7个科目
	int i, j;
	for (i = 0; i <= 5; i++) {
		printf("输入学号:");
		scanf("%lf", &cj[i][0]);
		printf("输入程序设计技术:");
		scanf("%lf", &cj[i][1]);
		printf("输入高数:");
		scanf("%lf", &cj[i][2]);
		printf("输入离散数学:");
		scanf("%lf", &cj[i][3]);
		printf("输入英语:");
		scanf("%lf", &cj[i][4]);
		printf("输入体育:");
		scanf("%lf", &cj[i][5]);
		printf("输入计算机导论:");
		scanf("%lf", &cj[i][6]);
		printf("输入思政:");
		scanf("%lf", &cj[i][7]);


		//求总分
		cj[i][8] = 0;
		for (j = 1; j <= 7; j++)
			cj[i][8] = cj[i][8] + cj[i][j];
		//平均分
		cj[i][9] = cj[i][8] / 7;
	}
	//输出全部成绩
	printf("%-13s", "学号");
	printf("%-13s", "程序设计与技术");
	printf("%-13s", "离散数学");
	printf("%-13s", "高数");
	printf("%-13s", "英语");
	printf("%-13s", "体育");
	printf("%-13s", "计算机导论");
	printf("%-13s", "思政");
	printf("%-13s", "总分");
	printf("%-13s", "平均分");
	printf("\n");
	for (i = 0; i <= 5; i++) {
		printf("%-13.01lf", cj[i][0]);
		printf("%-13.01lf", cj[i][1]);
		printf("%-13.01lf", cj[i][2]);
		printf("%-13.01lf", cj[i][3]);
		printf("%-13.01lf", cj[i][4]);
		printf("%-13.01lf", cj[i][5]);
		printf("%-13.01lf", cj[i][6]);
		printf("%-13.01lf", cj[i][7]);
		printf("%-13.01lf", cj[i][8]);
		printf("%-13.01lf", cj[i][9]);
		printf("\n");

	}
	return 0;
}

一维数组,二维数组,字符数组,二维字符数组_第5张图片
参考一维数组的定义和数组元素
int b[4];
数组元素
b[0] b[1] b[2] b[3]
左边黄色是不变的一维数组名,右边是变化的下标

二维数组第0行:
a[0][0] a[0][1] a[0][2] a[0][3]
左边是a[0],不变,可以当做是首行四个元素所构成的一维数组的数组名a[0]

二维数组第1行:
a[1][0] a[1][1] a[1][2] a[1][3]
左边是a[1],不变,可以当做是首行四个元素所构成的一维数组的数组名a[1]

二维数组第2行:
a[2][0] a[2][1] a[2][2] a[2][3]
左边是a[2],不变,可以当做是首行四个元素所构成的一维数组的数组名a[2]

所以:二维数组是由多个一维数组组成!【1行就是一个一维数组】

#include
int main() {
	//二维数组定义并初始化
	int a[3][3] = { {10,20,30},{40,50,60},{70,80,90} };
	int i, j;
	for (i = 0; i <= 2; i++) {
		for (j = 0; j <= 2; j++) {
			printf("%4d", a[i][j]);
		}
		printf("\n");
	}
	return 0;
}

所以:二维数组本质上是一维数组!
【本质体现在:内存中,计算机内存是一个线型的存储结构,一字排开】
【二维数组:只是逻辑上,输出上是二维的】
【换个角度说:二维数组在内存中是按行依次存储的!】

字符数组

一、 char开头
例如定义一个一维字符数组
char a[100];
例如定义一个二维字符数组
char b[3][100];
二、 字符数组可以用来存储多个字符的对象
多个字符所组成的对象称之为字符串。
字符串书写的时候必须加一对””

#include
int main() {
	printf("%s","xxxxx");
	return 0;
}

三、 字符串的应用
例如 用户名 [email protected]
密码
验证码
程序中菜单功能名字
身份证号码
家庭住址等
四、 一维字符数组:只能用来存放一串字符
二维字符数组:可以用来存放多个字符串

#include
int main() {
	char nation[10] = { 'C','H','I','N','A' };
	int i;
	for (i = 0; i <= 4; i++) {
		printf("%c", nation[i]);
	}
}

换个写法

#include
int main() {
	char nation[10];
	nation[0] = 'C';
	nation[1] = 'H';
	nation[2] = 'I';
	nation[3] = 'N';
	nation[4] = 'A';
	int i;
	for (i = 0; i <= 9; i++) {
		printf("%c", nation[i]);
	}
}

后面5个输出不是全0,未知的值来理解!

#include
int main() {
	char nation[10] = { "China"};
	int i;
	for (i = 0; i <= 4; i++) {
		printf("%c", nation[i]);
	}
}

六、 自己输入

#define _CRT_SECURE_NO_WARNINGS
#include
int main() {
	char nation[10];
	int i;
	printf("输出");
	for (i = 0; i <= 9; i++) {
		scanf("%c", &nation[i]);
	}
	printf("输出");
	for (i = 0; i <= 9; i++) {
		printf("%c", nation[i]);
	}
}

一维数组,二维数组,字符数组,二维字符数组_第6张图片

输入回车不是输入的结束的意思
你输入最后5个回车键全部作为字符依次存储到
nation[5]到nation[9]中
能否做到像平时使用的软件一样,输入回车键就结束!
可以的 注意回车键 在C语言中的表示 \n

#define _CRT_SECURE_NO_WARNINGS
#include
int main() {
	char nation[10];
	int i;
	printf("输出");
	for (i = 0; i <= 9; i++) {
		scanf("%c", &nation[i]);
		if (nation[i] == '\n')
		break;
	}
	printf("输出");
	for (i = 0; i <= 9; i++) {
		if (nation[i] != '\n') {
		printf("%c", nation[i]);
	}
		else {
		break;
			}
	}
}

在这里插入图片描述
缺点:

#define _CRT_SECURE_NO_WARNINGS
#include
int main() {
	char nation[10];
	printf("输入:");
	scanf("%s", nation);//nation等价于&nation[0]

	printf("输出:");
	printf("%s", nation);
}

在这里插入图片描述
说明:scanf(“%s”,nation);
%s做输入字符串之后的时候只要遇见了 空格 或者 TAB 或者 回车键就直接表示一个字符串输入结束!
例如 输入China
要注意nation数组中如何存储上述字符串
nation[0]=’C’
nation[1]=’h’
nation[2]=’i’
nation[3]=’n’
nation[4]=’a’
nation[5]=’\0’ \0 表示一个字符串的结束标志
nation[6]=’\0’ \0 表示一个字符串的结束标志
nation[7]=’\0’ \0 表示一个字符串的结束标志
nation[8]=’\0’ \0 表示一个字符串的结束标志
nation[9]=’\0’ \0 表示一个字符串的结束标志
如果想代码短,想空格等不影响输入字符串
C语言的解决方案:使用字符串专用的输入与输出函数
gets 字符串输入函数
puts 字符串输出函数

#define _CRT_SECURE_NO_WARNINGS
#include

int main() {
	char nation[10];
	printf("输入:");
	gets_s(nation);

	printf("输出:");
	puts(nation);
}

在这里插入图片描述
对比输出 puts明显多了一行。
China最后依次存储的是\0
puts函数的一个规定:
puts函数做输出的时候把字符串末尾的\0拿出来,再变成\n做输出
存储空间中China的末尾还是存储的是\0

二维字符数组

#define _CRT_SECURE_NO_WARNINGS
#include

int main() {
	char nation[3][10] = { {"中国"},{"韩国"},{"新加坡"} };

	printf("%s\n", nation[0]);
	printf("%s\n", nation[1]);
	printf("%s\n", nation[2]);

}
#define _CRT_SECURE_NO_WARNINGS
#include

int main() {
	char nation[3][10] = { {"中国"},{"韩国"},{"新加坡"} };
	int i;

	for (i = 0; i <= 2; i++) {
		printf("%s\n", nation[i]);//一维数组名
	}

}

上述操作全部是多个字符串的输出
关于多个字符串的输入

#define _CRT_SECURE_NO_WARNINGS
#include

int main() {
	char nation[3][20];
	int i;

	printf("输入3个国家的名字:\n");
	for (i = 0; i <= 2; i++) {
		gets_s(nation[i]);
	}
	printf("输出3个国家的名字:\n");
	puts(nation[i]);

}

你可能感兴趣的:(c++)