上犹建设局网站,响应式网站开发支持ie6解决,wordpress注册充值,域名注册服务网站数组及常用算法1.数组基本概念2.一维数组2.1数组的定义2.2数组初始化2.3一维数组动态赋初值2.4一维数组应用实例2.5一维数组的排序算法2.6 一维数组元素的删除和插入array3.二维数组3.1数组定义3.2二维数组的动态赋值《老九学堂C课程》《C primer》学习笔记。《老九学堂C课程》…
数组及常用算法1.数组基本概念2.一维数组2.1数组的定义2.2数组初始化2.3一维数组动态赋初值2.4一维数组应用实例2.5一维数组的排序算法2.6 一维数组元素的删除和插入array3.二维数组3.1数组定义3.2二维数组的动态赋值《老九学堂C课程》《C primer》学习笔记。《老九学堂C课程》详情请到B站搜索《老九零基础学编程C入门》 -------------简单的事情重复做重复的事情用心做用心的事情坚持做(老九君)--------------- 1.数组基本概念
什么是数组数组是一个变量由数据类型相同的一组元素组成在内存占一串连续的内存空间。
数组是一个类型比如int 型的数组类型就是int [] C中数组元素必须拥有相同的数据类型加粗样式
数组基本要素 1.表示符数组的名称用于区分不同的数组用来表示数组的变量名 2.数组元素向数组中存放的数据 3.元素下标对数组元素进行编号表明元素在数组中的位置。从0开始可以通过下标来访问数组 4.元素类型数组中元素的数据类型 数组长度固定 避免数组越界
使用数组的优点 方便管理需要相同操作的数据
demo1:可以构成数组的一组元素 在C/C中可以构成一个数组在java中不行 198, 98, ‘c’, 230 // 字符在C中是整形存的 1, 0, true, false, 38, -1 // c中布尔类型实际是整形 2.一维数组
可以存成数组的情况学生单门学科的成绩某类商品的单价某人N个月的工资
2.1数组的定义
定义语法 datatype arrayName[size]; demo: int nums[25]; char array_of_name[30]; double curr_salary[35]; const int N 5; int nums[N]; nums[0] 9527; const int N 5; int nums[N]; nums[0] 9527; 注意C中数组的大小可以定义变量C中不可以可以定义成变量
2.2数组初始化
用大括号初始化元素内容 int years[6] {2012,2013,2014,2015,2016,2017}; //可以少给元素但是不能多给 int months[12] {1, 3, 5, 7}; // 未初始化的元素默认值未0 int days[] {1,15}; // 不设定数组大小编译器自动计算数组大小 int array[] {} // ❌未知元素个数是不可以的 c 11中新的改动 a.初始化是可以不用等于号 b.大括号可以为空默认为所有元素执行置0操作 int days[] {}; float m[100] {}; 2.3一维数组动态赋初值
动态从键盘录入信息赋值给数组
int main(){int N 5;double scores[N];//for(int i 0; i N; i){for(int i 0; i sizeof(scores) / sizeof(double); i){cout 请输入第 i 1 课程的成绩: ;cin scores[i];}for(int i 0; i N; i){cout scores[i] endl;}return 0;
}注意C中数组没有.len()的属性没法直接获得数组的长度。
2.4一维数组应用实例
demo1:一维数组求和求平均
int main(){
int main(){int nums[7] {8, 4, 2, 1, 23, 344, 12};int nums_len sizeof(nums) / sizeof(nums[0]);int sum 0;double average 0;for(int i 0; i nums_len; i){cout nums[i] ;sum nums[i];}average sum / nums_len;cout 和为 sum , 均值为 average endl;return 0;
}demo2: 找出数组的最大值最小值 // 求数组的最大值最小值int min_val nums[0], max_val nums[0]; //假设第一个元素为最小值/最大值其后的元素依次和最大最小比然后更新最大值/最小值int min_index 0, max_index 0;for(int i 1; i nums_len; i ){if(nums[i] min_val){min_val nums[i];min_index i;}if(nums[i] max_val){max_val nums[i];max_index i;}}cout 最小值为 min_val , 对应的下标为 min_index endl;cout 最大值为 max_val , 对应的下标为 max_index endl;demo3:定义一个整形数组找出奇数/偶数元素的个数 // 定义一个整形数组找出奇数/偶数元素的个数int odd_count 0, even_count 0;for(int i 0; i nums_len; i){if(nums[i] % 2 0){even_count 1;}else{odd_count 1;}}cout 偶数有 even_count 个, 奇数有 odd_count 个 endl;demo4:查找数组中是否存在某个元素如果存在返回元素在数组中的下标不存在返回-1 //查找数组中是否存在某个元素如果存在返回元素在数组中的下标不存在返回-1int searchNum;int searchIndex -1; //初值值是一个不可能达到的值如果最后他还是这个不可能达到的值那么就没找到cout 请输出要查找的数字 endl;cin searchNum;for(int i 0; i nums_len; i){if (nums[i] searchNum){searchIndex i;break;}}if(searchIndex -1){cout 没有查到要找的数字 endl;}else{cout 要查找的数字在数组中的下标为 searchIndex endl;}2.5一维数组的排序算法
1.冒泡排序 每次相邻的元素比较将较大或者较小的元素放着后面依次比较较小/较大的数字就会冒到最后面 。
int main(){// 循环输入5个整形数字进行降序排列后输出结果int n 5;int nums[5] {};for(int i 0; i n; i){cout 请输入数字 endl;cin nums[i];}// 选择排序法// 每次找剩下元素的最大值/最小和老师讲的有点不一样但实质是一样的for(int i 0; i n; i){for(int j i1; j n; j){if(nums[i] nums[j]){int tmp nums[i];nums[i] nums[j];nums[j] tmp;}}}for(int i 0; i n; i){cout nums[i] endl;}
2.选择排序
int main(){// 循环输入5个整形数字进行降序排列后输出结果int n 5;int nums[5] {};for(int i 0; i n; i){cout 请输入数字 endl;cin nums[i];}// 选择排序法// 每次找剩下元素的最大值/最小和老师讲的有点不一样但实质是一样的for(int i 0; i n; i){for(int j i1; j n; j){if(nums[i] nums[j]){int tmp nums[i];nums[i] nums[j];nums[j] tmp;}}}for(int i 0; i n; i){cout nums[i] endl;}return 0;
}2.6 一维数组元素的删除和插入
数组的大小一旦确定了就无法改变。
int main(){// 有序数组的插入和删除//数组的删除和插入数组一旦定义大小不能改变所以本例子说的是数组的长度远大于有效存储元素的个数double power[99];int powerCount 0; // 当前数组中元素的个数power[powerCount] 45760;power[powerCount] 45770;power[powerCount] 45772;power[powerCount] 45773;double tmp;for(int i 0; i powerCount; i){for(int j 1; j powerCount - i; j ){if(power[j] power[j-1]){tmp power[j];power[j] power[j-1];power[j-1] tmp;}}}cout 排序后的数组为 endl;for(int i 0; i powerCount; i){cout power[i] \t;}cout endl;}//插入数字插入新数字之后数组依旧有序cout 请输入要插入的数字 endl;double insert_power;cin insert_power; // 1. 放在末尾再排序// 2. 找到第一个比插入数大的元素位置其后的元素一次往后移动一位int insert_index powerCount;for(int i 0; i powerCount; i){if(power[i] insert_power){cout power[i] insert_power;insert_index i;break;}}for(int i powerCount-1; i insert_index; i--){power[i1] power[i];}power[insert_index] insert_power;powerCount1;cout 插入元素后的数组为 endl;for(int i 0; i powerCount; i){cout power[i] \t;}// 删除元素找到要删除的元素位置将其后的元素往前移动一位// 没有判断相同元素double delete_power;int delete_index -1;cout 请输出要删除的元素 endl;cin delete_power;for(int i 0; i powerCount; i){if(power[i] delete_power){delete_index i;break;}}if(delete_index -1){cout 没有找到要删除的元素 endl;}else{for(int i delete_index; i powerCount; i){power[i] power[i1];}powerCount-1;cout 删除元素后的数组为 endl;for(int i 0; i powerCount; i){cout power[i] \t;}}return 0;
//}array
用array定义数组与原来的方式定义数组效果是一样的
#include array
int value1[5];
arrayint 5 value2; //至少是c11才支持3.二维数组
3.1数组定义 datatype name[rowSize][colSize]; double score[5][3] int prices[4][4] 3.2二维数组的动态赋值
demo:输入学生各门课程的成绩
在这里插入代码片int main(){string stu_names[] {刘备,关羽, 张飞};string course_names[] {数学, 语文, 英语};const int ROW 3; // sizeof(stu_names) / sizeof(stu_names[0]) 双字名字下可以这么写其他情况下不行const int COL 3;double scores[ROW][COL];for(int i 0; i ROW; i){for(int j 0; j COL; j){cout stu_names[i] 的 course_names[j] 成绩为;cin scores[i][j];}}cout \t;for(int i 0; i COL; i){cout course_names[i] \t;}cout endl;for(int i 0; i ROW; i){cout stu_names[i] \t;for(int j 0; j COL; j){cout scores[i][j] \t;}cout endl;}return 0;
}数学 语文 英语
刘备 1 2 3
关羽 4 5 6
张飞 7 8 9