C语言一维数组

文章目录

第一章  认识数组

第二章  一维数组常规操作

第三章  字符数组和字符串

第四章  字符串处理函数


前言

在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. 数组名[下标]
  2. 一般操作数组都是用循环操作(输入还是打印) 

二.数组常规操作

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去做打印
  1. %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

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兴趣使然的Qsiri

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值