山西省住房和城乡建设厅网站首页泰州网
2026/4/12 2:36:53 网站建设 项目流程
山西省住房和城乡建设厅网站首页,泰州网,个人网站设计与制作设计思路,网站域名注销第五章#xff1a;数组 文章目录第五章#xff1a;数组1. 一维数组1.1 一维数组的创建和初始化1.2 数组的类型1.3 一维数组的输入与输出2. 二维数组2.1 二维数组初始化2.2 二维数组输入与输出3. 数组练习3.1 多个字符从两端移动#xff0c;向中间汇聚3.2 二分查找声明数组是…第五章数组文章目录第五章数组1. 一维数组1.1 一维数组的创建和初始化1.2 数组的类型1.3 一维数组的输入与输出2. 二维数组2.1 二维数组初始化2.2 二维数组输入与输出3. 数组练习3.1 多个字符从两端移动向中间汇聚3.2 二分查找声明数组是一组相同类型元素的集合数组中存放的是1个或者多个数据但是数组元素个数不能为0数组中存放的多个数据类型是相同的1. 一维数组1.1 一维数组的创建和初始化数组类型 数组名[数组大小]#define_CRT_SECURE_NO_WARNINGS#includestdio.h//第五章数组//数组创建和初始化intmain(){//创建数组intarr1[5];//不初始化存储的是随机值//初始化数组intarr2[5]{1,2,3,4,5};//完全初始化数组的元素个数和数组长度一致intarr3[10]{1,2,3,4,5};//不完全初始化数组的元素个数少于数组长度则剩余的元素将会初始化为 0intarr4[]{1,2,3,4,5};//当不指定数组长度时会根据初始化内容来确定数组长度//字符数组初始化//当字符数组不完全初始化时剩余的元素初始化为 \0//字符数组可以直接使用字符串初始化charstr1[10]hello;//也可以通过字符初始化charstr2[10]{h,e,l,l,o};//当字符数组不指定长度时charstr3[]hello;//此时会自动在末尾添加 \0所以 str4 的长度是 6charstr4[]{h,e,l,l,o};//不会带\0长度是5return0;}数组在初始化时如果是不完全初始化剩余元素会根据数组类型进行初始化1.2 数组的类型在数组中去掉变量名就是数组类型。#define_CRT_SECURE_NO_WARNINGS#includestdio.h//数组类型//在数组中去掉变量名就是数组类型 例如 int arr[10];数组类型是 int [10]intmain(){intarr[10];//前文学习过 sizeof()计算在内存中的字节长度。参数支持变量表达式和类型printf(%zd\n,sizeof(arr));//此时输出的是 40因为 int arr[10]存放十个元素每个元素都是四个字节printf(%zd\n,sizeof(int[10]));//所以我们可以利用 sizeof 来计算数组的长度intszsizeof(arr)/sizeof(arr[0]);//数组总共的长度 / 一个元素的长度printf(%d,sz);return;}1.3 一维数组的输入与输出数组在内存中是连续存放的。数组的下标从 0 开始最后一个元素的下标是 n-1下标相当于数组元素的编号。通过下标引用操作符[]来访问数组的元素。#define_CRT_SECURE_NO_WARNINGS#includestdio.h//一维数组的使用intmain(){//数组输入和输出charstr1[11];//字符数组可以直接输入不用通过下标。//在底层输入的字符串不能有空白字符会被读取根据顺序存放到对应的下标中//在此处也不需要元素地址值 str[i]scanf(%10s,str1);//字符数组可以直接打印printf 函数根据变量自动找到相对应的地址//字符数组在底层中直接存储的就是完整的字符串//而其他数组存储的是列表所以需要 for 循环打印printf(%s\n,str1);//字符数组输入第二种写法测试charstr2[10];//输入数据for(inti0;i9;i)// 此时需要 9只输入 9 个元素最后一个留给 \0{scanf(%s,str2[i]);}//输出数据printf(%s,str2);intarr[3];//输入数据for(inti0;i3;i){//将输入的元素放在 arr[i] 中数组本身就是地址//但是在此处不是数组 arr[i] 是元素所以需要 arr[i] 取元素的地址scanf(%d,arr[i]);}for(inti0;i3;i){printf(%d ,arr[i]);}return0;}2. 二维数组数据类型 数组名[一维数组个数][一维数组大小]将一维数组做为元素的数组称为二维数组。二维数组中的每个元素在内存中也是连续存放的。2.1 二维数组初始化#define_CRT_SECURE_NO_WARNINGS#includestdio.h//二维数组初始化intmain(){//定义数组两行三列//建议 arr1[2][3] 理解为此时二维数组存放两个一维数组每个一维数组存放三个元素//因为在内存中二维数组也是连续存放的靠指针进行读取intarr1[2][3]{1,2};//不完全初始化intarr2[2][3]{1,2,3,2,3,4};//完全初始化intarr3[2][3]{{1},{2,3}};//按行初始化第一行读取1第二行读取2和3//初始化可以省略行不能省略列根据元素个数来推断几行intarr4[][3]{1,2};//3列可以存储两个元素所以只会有一行intarr5[][3]{1,2,3,4,5};//两行intarr6[][3]{{1},{2,3},{4,5}};//三行此时将不会根据元素个数来推断行return0;}2.2 二维数组输入与输出#define_CRT_SECURE_NO_WARNINGS#includestdio.h//二维数组输入输出intmain(){intarr[2][3];//定义数组//输入//第一层循环是遍历行//行数 二维数组的总大小 / 一行元素的大小for(inti0;isizeof(arr)/sizeof(arr[0]);i)// arr[0]代表一行的元素{//第二层循环是遍历列//列数 二维数组的总大小 / (一列元素的大小 (行数 * 二维数组的一个元素) )for(intj0;jsizeof(arr)/((sizeof(arr)/sizeof(arr[0])*sizeof(arr[0][0])));j){scanf(%d,arr[i][j]);//此时 arr[i][j]是元素本身不是地址需要取地址}}//输出//第一层循环是遍历行for(inti0;isizeof(arr)/sizeof(arr[0]);i)//{//第二层循环是遍历列for(intj0;jsizeof(arr)/((sizeof(arr)/sizeof(arr[0])*sizeof(arr[0][0])));j){printf(%d ,arr[i][j]);}printf(\n);//一行输出结束换行}return0;}3. 数组练习3.1 多个字符从两端移动向中间汇聚#define_CRT_SECURE_NO_WARNINGS#includestdio.h#includestring.h#includewindows.h//数组练习//多个字符从两端移动向中间汇聚intmain(){//定义字符数组chararr1[]welcome to bit!!!!!!;chararr2[]********************;intleft0;//左指针//计算元素个数:sizeof(arr) / sizeof(arr[0])但是字符数组末尾还有一个 \0//所以字符数组元素个数sizeof(arr) / sizeof(arr[0]) -1//或者 strlen 统计字符串长度忽略 \0intrightstrlen(arr1)-1;//右指针while(leftright){//当两个指针指向的下标相等赋值一个即可if(leftright){arr2[left]arr1[left];}//利用左指针替换arr2的内容arr2[left]arr1[left];//利用右指针替换arr2的内容arr2[right]arr1[right];left;//移动左指针right--;//移动右指针system(cls);//清理屏幕Sleep(500);//打印完睡眠观察效果单位一千毫秒printf(%s\n,arr2);}return0;}3.2 二分查找#define_CRT_SECURE_NO_WARNINGS#includestdio.h#includestdbool.h//二分查找折半查找每次处理一半的数据提高效率//前提条件有序intmain(){//定义数组intarr[10]{1,2,3,4,5,6,7,8,9,10};//定义变量接受用户输入的值intnum0;printf(请输入数字);scanf(%d,num);intleft0;//左指针intrightsizeof(arr)/sizeof(arr[0])-1;//右指针intmid0;//中间变量下标用于移动左指针或右指针bool flagfalse;//定义变量用于判断是否找到while(leftright){//移动中间变量mid(leftright)/2;if(numarr[mid]){printf(数字下标为%d,mid);flagtrue;break;}elseif(numarr[mid]){leftmid1;//左指针移动到中间变量后一位}else{rightmid-1;//右指针移动到中间变量前一位}}if(!flag)//如果 flag 为假则没找到{printf(输入的数字不在数组内);}return0;}第六章函数声明本文是在鹏哥 C 语言集训营学习过程中所记录的学习笔记梳理了核心知识点同时也记录了本人实操验证的代码案例供后续学习复盘使用。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询