文章目录
第一章 认识数组
第二章 一维数组常规操作
第三章 字符数组和字符串
第四章 字符串处理函数
前言
在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。
一、数组是什么?
数组(Array)是有序的元素序列。 若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下表变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。这些有序排列的同类数据元素的集合称为数组。
数组是用于储存多个相同类型数据的集合。
1.如何创建一个数组
代码如下:
//No.1 数组定义语法
//类型 数组名[数组长度]
int num[3];
float fNum[3];
double dNum[3];
char cNum[3];
//类型: 学过的数据类型
//数组名: 随便起的
//数组长度:根据需求决定数组长度
2.数组初始化
代码如下:
//No.1 创建数组的时候赋值,数组长度和元素个数相同
int array[3]={1,2,3}; //{}不能省略,arary[0]=1 array[1]=2 array[2]=3
//No.2 元素个数和长度不同,默认初始化为0
int array2[3]={1}; //arary2[0]=1 array2[1]=0 array2[2]=0
//No.3 当初始化的元素完整,数组长度可以省略
int array3[]={1,2,3}; //自动推断数组长度为3
//No.4 不存在数组长度为0的数组
//int array4[]; 错误
//No.5 不能先创建数组在使用{}方式初始化
//int array[4];
//array[4]={1,2,3,4}; 错误的写法
3.数组的访问
- 数组名[下标]
- 一般操作数组都是用循环操作(输入还是打印)
二.数组常规操作
1.插入-----有序插入
#include <stdio.h>
int main()
{
int array[100]; //数组能存储的最大元素个数是100个
int curSize = 0; //当前元素是0
int data = 0;
while (1)
{
printf("input data:");
scanf_s("%d", &data);
array[curSize++] = data; //array[0]=1 curSize=1
//做调整
//在数组里面做下标-1操作或者+1操作,需要考虑下标合理性
for (int pos = curSize - 1; pos > 0; pos--)
{
if (array[pos] < array[pos - 1])
{
int temp = array[pos];
array[pos] = array[pos - 1]; //0-1: -1
array[pos - 1] = temp;
}
else
{
break;
}
}
int user = 0;
while (getchar() != '\n');
user = getchar();
if (user == 'n' || user == 'N') //输入n和N退出 输入状态
break;
}
for (int i = 0; i < curSize; i++)
{
printf("%d\t", array[i]);
}
printf("\n");
return 0;
}
2.查找+删除(移位)
#include <stdio.h>
int main()
{
//查找和删除
int array[10] = { 10,20,30,40,50,60,70,80,90,100 };
int curSize = 10;
//数组的删除叫做伪删除
int data = 60; //要找的数据
//数组的查找
int pos = -1; //查找下标一般用-1 ,数组下标会是0
for (int i = 0; i < curSize; i++)
{
if (array[i] == data)
{
pos = i; //记录找到元素下标
break;
}
}
if (pos == -1)
{
printf("没有找到相关元素,无法删除!");
}
else
{
//在数组里面做下标-1操作或者+1操作,需要考虑下标合理性
for (int k = pos; k < curSize-1; k++) //k=9
{
array[k] = array[k + 1]; //array[10]
}
curSize--; //数组真正的删除
}
for (int i = 0; i < curSize; i++)
{
printf("%d\t", array[i]);
}
printf("\n");
return 0;
}
3.查找+修改
#include <stdio.h>
int main()
{
//查找和修改
int array[10] = { 10,20,30,40,50,60,70,80,90,100 };
int curSize = 10; //记录当前数组中元素个数
int data = 60;
int pos = -1;
for (int i = 0; i < curSize; i++)
{
if (array[i] == data)
{
pos = i;
break;
}
}
if (pos == -1)
{
printf("没有找到无法修改!\n");
}
else
{
printf("请输入新的值:");
scanf_s("%d", &array[pos]);
}
for (int i = 0; i < curSize; i++)
{
printf("%d\t", array[i]);
}
return 0;
}
4.排序--->冒泡排序
#include <stdio.h>
int main()
{
//冒泡排序
int array[10] = { 60,70,80,90,100,10,20,30,40,50 };
int curSize = 10;
//排序
//int count = 0;
for (int i = 0; i < curSize; i++) //每个元素都需要一个机会冒泡
{
for (int j = 0; j < curSize-1-i; j++) //描述每个元素冒泡过程
{
//从小到大排序
if (array[j] > array[j + 1]) //不满足规则交换
{
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
//count++;
}
}
}
for (int i = 0; i < curSize; i++)
{
printf("%d\t", array[i]);
}
return 0;
}
三.字符数组和字符串
- 字符数组和数字类数字处理方案相同的
- 字符串: 存在一个不可见字符\0
- 字符串的打印: %s去做打印
- %s的工作原理: 从首地址打印到\0 所以%s对应的是地址
//No.1 字符数组
char array[] = { 'A','B','C' }; //自动推断长度3
for (int i = 0; i < 3; i++)
{
putchar(array[i]);
}
putchar('\n');
//No.2 字符数组操作字符串
//字符串有一个不可见字符\0
char str[] = "ILoveyou"; //自动长度是:9
char inputstr[] = { 'A','B','C','D','\0','A','B','C' };
//%s对应的是地址
printf("%s\n", &inputstr[0]); //ABCD &inputstr[0]到\0
printf("%s\n", &inputstr[2]); //CD &inputstr[2]到\0
printf("%s\n", &array[0]); //ABC烫烫烫烫烫烫烫烫烫烫烫烫烫烫?
// 0 1 2 3 4 5 6 7
//{ 'A','B','C','D','\0','A','B','C' }
// 数组名代表第一个元素的地址
char output[] = "ILoveyou";
printf("%s\n", output); //&output[0]
int key = 0;
scanf_s("%d", &key);
while (getchar() != '\n'); //字符串做输入前做了输入,可以清除缓冲区
char username[10];
printf("请输入用户名:");
//scanf不需要加长度,增强版要加长度
//scanf输入不接受带空格的输入
scanf_s("%s", username,10);
printf("name:%s\n", username);
//字符串输入函数: gets:输入+puts:打印
char passw[20];
//所有字符串处理用的数组
printf("输入密码:");
while (getchar() != '\n');
gets_s(passw, 20); //20一般用的是passw的长度
puts(passw); //自带换行
printf("-----\n");
四.字符串处理函数
- strcat:连接
- strcpy:拷贝
- strcmp:比较
- strlen:统计可见长度
总结
以上就是今天要讲的内容,本文仅仅简单介绍了一维数组的使用,如有疑问或者好的建议可以与我联系。
QQ:1809311702
QQ邮箱:1809311702@qq.com