IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言初阶之数组讲解(2) -> 正文阅读

[C++知识库]C语言初阶之数组讲解(2)

目录

插入排序讲解

二维数组

二维数组的初始化

二维数组的访问

n维数组

字符数组

字符数组和字符串

字符数组的输入输出

字符形式输入输出

字符串输入输出

字符串函数的简单使用

综合使用字符串函数


期末考试结束,继续博客的发布。紧跟上一节,不知道小伙伴们有没有尝试设计过上一篇博客留下的往有序数组里插入一个数的程序呢,下来我们不卖关子了,直接开始今天的讲解

插入排序讲解

#include<stdio.h>
int main() {
	int arr[8] = { 1,2,3,4,6,7,10 };
	int i = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);
	int n = 0;
	scanf("%d", &n);
	for (i = 0; i < sz - 1; i++)
		if (n < arr[i])       //找到插入位置
			break;
	for (int j = sz - 1; j > i; j--)
		arr[j ] = arr[j-1];   //每个位置向后移一位
	arr[i] = n;       //将n插入到数组中
	for (int j = 0; j < sz; j++)
		printf("%d ", arr[j]);  //打印结果
	return 0;
 }

上面这个程序可以实现往有序数组插入数的功能,而插入排序就相当于往有序的数组中不断的插入新的数,以上述的程序为基础,即可实现插入排序功能

#include<stdio.h>
int main() {
	int arr[8] = { 4,55,66,8,4,1,3,2};
	int i = 0;
	int j;
	int sz = sizeof(arr) / sizeof(arr[0]);
	for (i = 1; i < sz; i++) {      //循环插入数据
			int num = arr[i];     
		for (j = 0; j < i; j++)   //前i项顺序不正确道破循环
			if (arr[i]< arr[j])
				break;
		for (int x=i; x > j; x--) //全部右移
			arr[x] = arr[x- 1];
		arr[j] =num;     //插入数据
	}
	for (i = 0; i< sz; i++)
		printf("%d ", arr[i]); 
	return 0;
 }

每一次循环都是一次插入,同样有这两层循环的特点。

二维数组

二维数组是一维数组的延伸和发展,二维数组是一维数组的嵌套,类似两层for循环,通俗来说二维数组就是一维数组的数组,二维数组的每个元素都是一个一维数组

int arr[5][5];
//二维数组

我们之前在九九乘法表提到的行列思想,在这里可以用上了,第一个5代表这个二维数组有五行,第二个5代表二维数组每行有五列,接下来用简单的图画来解释

?我们学习二维数组的时候,以第一种形式了解即可,但要是想深究,那么就得了解第二种形式

二维数组的初始化

在学习一维数组的时候我们可以省略数组长度,由编译器自行补充
那么二维数组可以吗?
答案是可以,二维数组的行可以省略,但是列不可以,因为个数确定,列数确定,行数也可以确定
如
int arr[][4]={1,2,3,4,5,6,7,8};
int arr[][4]={{1,2,3},{},{4,5}};
第一种方法大家应该可以理解
第二种方法就是利用了二维数组的性质,每一行都可以看成是一个一维数组
{}里的元素就是这一行的元素

二维数组的访问

二维数组和一维数组一样,数组下标都是从零开始的,下面简单的教大家打印一个二维数组

#include<stdio.h>
int main(){
int arr[4][4] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 };
	for (int i = 0; i < 4; i++) {
		int j = 0;
		for (j = 0; j < 4; j++)
			printf("%2d ", arr[i][j]);
		printf("\n");
	}
return 0;
}

是不是和打印九九乘法表的程序很类似呢,同样的,二维数组也离不开两层循环,由此可见两层循环的重要性,至于二维数组的深一层使用,等我们讲解扫雷和三子棋的时候就会有所了解

n维数组

n维数组实际上是对n-1维数组的拓展和延伸,按照研究二维数组的思维就可以一步一步的研究了

字符数组

接下来便是我们今天的主菜,字符数组

字符数组和字符串

C语言标准中并没有字符串类型,这也使得与字符串有关的操作总是需要字符串函数来进行,字符数组大多数情况下就是用来储存字符串的,但字符数组有时候并不能看做字符串。

字符串是以\0为结束标志
char a[5]={'a','b','c','d','e'};
这里的字符数组a里并没有\0,强行以字符串形式打印会出错

?当我们没有对字符数组初始化,并且以字符形式输入的时候,忽略了\0,也会出现这种状况,当然大多数情况下我们还是可以把字符数组当成字符串来用的

字符数组的输入输出

字符数组的输入方式大致分为两种字符形式输入和字符串形式输入

字符形式输入输出

//实现输入输出之前我们需要用字符数组作为容器
#include<stdio.h>
int main() {
	char arr[5] = { 0 };
	for (int i = 0; i < 5; i++)
		scanf("%c", &arr[i]);
	for (int i = 0; i < 5; i++)
		printf("%c", arr[i]);
	return 0;
}

之前提到了getchar和putchar两个库函数,接下来使用这两个专门用来字符输入输出的函数来进行

#include<stdio.h>
int main() {
	char arr[5] = { 0 };
	for (int i = 0; i < 5; i++)
		arr[i] = getchar();
	for (int i = 0; i < 5; i++)
		putchar(arr[i]);
	return 0;
}

字符串输入输出

#include<stdio.h>
int main() {
	char arr[40] = { 0 };
	scanf("%s", arr);
	printf("%s\n", arr);
	return 0;
}

接下来使用puts,gets两个库函数

#include<stdio.h>
int main() {
	char arr[40] = { 0};
	gets(arr);
	puts(arr);
	return 0;
}
//顺带一提,puts在打印完字符串之后会自动换行

字符串函数的简单使用

之前也提到了字符串的操作往往需要使用字符串函数,除了上述函数之外我们之前函数篇介绍的字符串函数我来简单教大家使用一下

#include<stdio.h>
#include<string.h>
int main() {
	char arr[10] = { 0 };
	strcpy(arr, "abc");//字符串拷贝,将abc拷贝到arr中
	strcat(arr, "def");//字符串追加,将def追加到arr的\0之后
	int len = strlen(arr);//求字符串长度,不包括\0
	int cmp = strcmp(arr, "abcdef");//字符串比较,第一个大于第二个字符串返回大于零的数,
                                    //等于返回0,小于返回小于零的数
	printf("%d %d", len, cmp);
	printf("%s\n", _strupr(arr));//将字符串全部大写
	printf("%s\n", _strlwr(arr));//将字符串全部小写
	return 0;
}

?根据注释就可以推算结果,当然我这里的打印字符串也使用了利用函数返回值的特点

综合使用字符串函数

将下来把我们的所学知识全部串起来,完成下面的字符串排序

#include<stdio.h>
include<string.h>
int main() {
char arr[5][20] = { "tiger","pander","eleplant","rabbit","lion" };//声明并初始化二维字符数 
                                                                  //组arr
	int i, j,flag;                               //i,j循环变量,flag为判断二维数组是否有序 
                                                 //的变量
	char t[20] = { '\0' };
	for (i = 0; i < 5; i++)                   //打印二维字符数组,以字符串形式
		puts(arr[i]);
	printf("以上为未排序的二维字符数组\n");   //   给程序打印结果进行解释
	for (i = 0; i < 4; i++) {
			flag = 1;
		for (j = 0; j < 4; j++) { 
			if (strcmp(arr[j], arr[j + 1]) > 0) {            //若前一个字符串的ascll值大于 
                                                       //后一个字符串,则进行字符串位置交换
 			    strcpy(t, arr[j]); 
				strcpy(arr[j], arr[j+1]);
				strcpy(arr[j + 1], t);
				flag = 0;
			}			
		}
		if (flag)                                        //若一轮循环下来flag仍然等于1,则 
                                    //未进行位置互换,此时打破循环,减少没必要的操作
			break;
	}
	for (i = 0; i < 5; i++)                   //打印气泡法排序后的二维字符数组,以字符串形式
		puts(arr[i]);
	return 0;
}

好了,今天的分享就到此结束了

下一次我将会给大家分享字符串库函数的简单功能实现。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-01-01 13:42:06  更:2022-01-01 13:44:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:52:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码