C语言初阶之数组详细介绍

 更新时间:2021年12月30日 10:51:04   作者:build小春宝  
大家好,本篇文章主要讲的是C语言初阶之数组详细介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览

插入排序讲解

#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语言数组内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 关于C++11的统一初始化语法示例详解

    关于C++11的统一初始化语法示例详解

    C++之前的初始化语法很乱,有四种初始化方式,而且每种之前甚至不能相互转换,但从C++11出现后就好了,所以这篇文章主要给大家介绍了关于C++11的统一初始化语法的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。
    2017-10-10
  • C语言关键字auto与register及static专项详解

    C语言关键字auto与register及static专项详解

    这篇文章主要解释了c语言中什么是数据类型,什么是变量,他们的真正含义是什么。分析了属性关键字auto,register和static的用法
    2022-07-07
  • Qt实现抽奖小游戏的三种方式

    Qt实现抽奖小游戏的三种方式

    本文主要介绍了Qt实现抽奖小游戏的三种方式,主要包括while循环,定时器,线程这三种方法,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • 浅析C++模板类型中的原样转发和可变参数的实现

    浅析C++模板类型中的原样转发和可变参数的实现

    可变参数模板(variadic templates)是C++11新增的强大的特性之一,它对模板参数进行了高度泛化,能表示0到任意个数、任意类型的参数,这篇文章主要介绍了C++可变参数模板的展开方式,需要的朋友可以参考下
    2022-08-08
  • C语言 奇偶排序算法详解及实例代码

    C语言 奇偶排序算法详解及实例代码

    这篇文章主要介绍了C语言 奇偶排序算法详解及实例代码的相关资料,需要的朋友可以参考下
    2016-11-11
  • C语言中经socket接收数据的相关函数详解

    C语言中经socket接收数据的相关函数详解

    这篇文章主要介绍了C语言中经socket接收数据的相关函数详解,分别为recv()函数和recvfrom()函数以及recvmsg()函数的使用,需要的朋友可以参考下
    2015-09-09
  • 如何用C写一个web服务器之I/O多路复用

    如何用C写一个web服务器之I/O多路复用

    本文主要介绍了如何用C写一个web服务器之I/O多路复用,本次选择了 I/O 模型的优化,因为它是服务器的基础,这个先完成的话,后面的优化就可以选择各个模块来进行,不必进行全局化的改动了。
    2021-05-05
  • 图解C++的STL之stack和queue,轻松理解数据结构

    图解C++的STL之stack和queue,轻松理解数据结构

    聚焦 C++ 的 STL 中的 stack 和 queue,让数据结构变得简单有趣! 通过图解的方式,我们将轻松理解这两个重要的数据结构,准备好开启 STL 学习之旅了吗?让我们一起探索 stack 和 queue 的奥秘吧!
    2024-03-03
  • C++设计模式之享元模式

    C++设计模式之享元模式

    这篇文章主要介绍了C++设计模式之享元模式,本文讲解了什么是享元模式、享元模式代码实例、享元模式的优点等内容,需要的朋友可以参考下
    2014-10-10
  • C语言规避野指针的方法流程

    C语言规避野指针的方法流程

    野指针就是指针指向的不是一个有效(合法)的地址,在程序中,如果访问野指针,可能会造成程序的崩溃,这篇文章主要介绍了C语言如何规避野指针,需要的朋友可以参考下
    2024-03-03

最新评论