第五部分、数组
程序员文章站
2022-03-21 16:26:02
2020年1月21日C语言数组学习 一、数组 1.数组的定义 数组是一个变量,由 数据类型相同 的的一组元素组成 | 变量 | 内存中的一块空间 | | | | | 数组 | 内存中一串连续的空间 | 2.数据的结构和基本要素 | 标识符 | 数组的名称,用于区分不同的数组 | | | | | 数组 ......
2020年1月21日c语言数组学习
一、数组
1.数组的定义
数组是一个变量,由数据类型相同的的一组元素组成
变量 | 内存中的一块空间 |
---|---|
数组 | 内存中一串连续的空间 |
2.数据的结构和基本要素
标识符 | 数组的名称,用于区分不同的数组 |
---|---|
数组元素 | 向数组中存放的数据 |
元素下标 | 对数组元素进行编号 |
元素类型 | 数组元素的数据类型 |
数组中只有一个名称,即标识符(用来表示数组的变量名)
元素下标标明了元素在数组中的位置,从0开始
数组中的每个元素都可以通过下标来访问
数组长度固定不变,避免数组越界
二、一维数组
语法:datatype arrayname[size]
1.初始化一维数组
(1)//正确:后面的元素个数与声明一致
int years[3]={2012,2013,2014}
(2)//正确:后面一个元素未初始化,默认值为0
int years[3]={2012,2013}
(3)//正确:元素个数为2
int years[]={2012,2013,2014}
(4)//错误:未知元素个数
int years[]={}
2.一维数组的动态赋值
#include <stdio.h> #define n 5//宏定义,在程序中n只能等于5 void main() { //动态录入 double score[n]; int i;//循环变量 for (i = 0; i < n; i++) { printf("请输入第%d位同学的成绩:",i+1);//i从0开始 scanf("%lf",&score[i]); } //打印数组元素 for (i = 0; i < n; i++) { printf("第%d位同学的成绩是:%.2lf\n",i+1,score[i]); } }
3.一个数列:8,4,2,1,23,344,12
(1)循环输出队列的值
(2)求数列中所有数值的和及平均值
(3)猜数游戏:从键盘中任意输入一个数据,判断数列中是否包含次数
#include <stdio.h> void main() { int i;//循环变量 int sum;//定义和 double avg;//定义均值 int search;//定义需要查找的数字 //一个数列:8,4,2,1,23,344,12 int nums[7]={8,4,2,1,23,344,12}; //循环输出队列的值 printf("该数列的值为:\n"); for(i = 0; i < 7; i++){ printf("%d\t",nums[i]); } //求数列中所有数值的和及平均值 for(i = 0; i < 7; i++){ sum += nums[i]; } avg = sum / 7.0; printf("\n该数列的和为:%d,均值为:%.2lf",sum,avg); //猜数游戏:从键盘中任意输入一个数据,判断数列中是否包含次数 printf("\n请输入要查找的数字:"); scanf("%d",&search); for (i = 0; i < 7; i++) { if(search ==nums [i]) { printf("找到了相同的元素!"); break; } } if(i == 7){ printf("没有这个数哦!"); } }
4.循环输入5个整型数字,进行降序排列后输出结果(冒泡排序)(重点)
冒泡排序的基础原理:遍历和交换
(1)需要比较多轮(数组长度 - 1)轮
(2)每一轮比较的次数比上一轮 - 1次;第一轮比较(数组长度 - 1)次
#include <stdio.h> #define n 5 void main() { int i, j;//定义循环变量 int temp; //用于交换的临时变量 int nums[n] = {16, 25, 9, 90, 23}; //外层循环控制轮数 for (i = 0; i < n - 1; i++) { //内层循环控制每轮的比较次数 for (j = 0; j < n - 1; j++) { if(nums[j] < nums[j + 1]) { temp = nums[j]; nums[j] = nums[j + 1]; nums[j + 1] = temp; } } } printf("排序之后的顺序为:\n"); for (i = 0; i < n ; i++) { printf("%d\t",nums[i]); } }
拓展:初始无序,逆序输出
第一个元素与最后一个元素交换;第二个元素与倒数第二个元素交换......
for (i = 0; i < n ; i++) { temp = nums[j]; nums[j] = nums[n - i - 1]; nums[n - i - 1] = temp; }
5.数组元素的删除和插入
删除的逻辑:
- 查找要删除数字的下标
- 从下标开始,后面一个覆盖前面一个数字
- 数组的总长度-1
#include <stdio.h> #define n 5 //常量的值不能改变,因此采用变量方式count void main() { int count = 5;//表示数组元素的个数 double powers[] = {42322, 45771, 40907, 41234, 40767}; double deletepower;//用户要删除的战力值 int deleteindex = -1;//要删除战力值的下标,给一个不可能的初值,为了判断是否找到 double insertpower;//插入的战力值 int i;//循环变量 printf("请输入要删除的战力值:"); scanf("%lf",&deletepower); for(i = 0; i < count; i++) { if(deletepower == powers[i]) { deleteindex = i;//记录下当前的下标 break;//找到了要删除的战力值,直接跳出循环 } } //根据判断是否找到,执行后续的操作 if(-1 == deleteindex) { printf("很遗憾,没有找到该战力值!\n"); } else{ for(i = deleteindex; i < count - 1; i++) { powers[i] = powers[i + 1]; } count--;//数组总长度-1 } printf("删除后的结果为:\n"); for(i = 0; i < count; i++) { printf("%0.lf\t",powers[i]); } //删除之后进行插入 printf("请输入要插入的值:\n"); scanf("%lf",&insertpower); powers[count] = insertpower; //插入操作完毕后数组总长度要+1 count++; printf("插入后的结果为:\n"); for(i = 0; i < count; i++) { printf("%0.lf\t",powers[i]); } //想让战力值有序操作可以进行冒泡排序 }
三、二维数组
上一篇: python2为什么变成3
下一篇: 老生常谈C语言链表小结
推荐阅读
-
将string数组转化为sql的in条件用sql查询
-
php实现向javascript传递数组的方法
-
[PHP] 算法-统计一个数字在排序数组中出现的次数的PHP实现
-
[PHP] 算法-数组归并排序并计算逆序对的个数的PHP实现
-
javascript实现的字符串转换成数组操作示例
-
javascript数组常见操作方法实例总结【连接、添加、删除、去重、排序等】
-
iOS bounds学习笔记以及仿写UIScrollView部分功能详解
-
对numpy和pandas中数组的合并和拆分详解
-
JSON用法之将PHP数组转JS数组,JS如何接收PHP数组
-
JavaScript比较两个数组的内容是否相同(推荐)