c语言数组的练习题:涉及到数组插入、数组删除、数组下标数据的左移右移、数组排序、数组排序优化、数组的数据拼接等等。
(1)函数基本使用: 函数基本定义、封装、传参、调用、局部变量、全局变量、只读变量、静态变量
(2)数组基本使用: 数组基本定义、使用赋值、字符串。
1. 数组基本知识1. 概念: 同一个类型的集合。2. 定义: int data[100]; //数组data里可以存放100个int类型 100必须是常量(c89)。定义数组时,如果没有赋初始值[]一定要填大小。 int data[]={1};3.数组赋值: 只有在定义的使用才可以整体赋值。int data[10]={12,34,56,7,89};4.数组下标[]访问从0开始。 比如: buff[100]; 下标范围: 0~995.数组的名称就是首地址。int buff[100];1.2 字符串数组1. 字符串录入: scanf(“%s”); gets() fgets2. 头文件: string.h3. 从键盘录入字符串的方法 scanf(%s,str); //从键盘上录入字符串,字符串结尾: '\0'gets(str); //从键盘上录入字符串fgets(str,100,stdin); //从键盘上录入字符串 (标准输入)#include int main(int argc,char **argv){ int int_data[100]={12,34,56,78}; //整型数组 char char_data[]={'a','b','c'}; //字符数组 char str1_data[]={'a','b','c','\0'}; //字符串数组 char str2_data[]=abc;//字符串数组 printf(char_data=%d\n,sizeof(char_data)); //3 printf(str1_data=%d\n,sizeof(str1_data)); //4 printf(str2_data=%d\n,sizeof(str2_data)); //4 return 0;}字符串数组特性: 结尾有’\0’ 2. 数组相关的题目(分析) 2.1 数组的数据插入 int a[]={1,2,3,4,5,6,7}; 在第2位数据后插入一个888 结果: 1,2,888,3,4,5,6,7#include int main(int argc,char **argv){ int data[10]={1,2,3,4,5,6,7,8,9}; //1,2,3,4,4,5,6,7,8,9 int addr; int i; printf(输入插入的位置:); scanf(%d,&addr); /*1. 向后移动数据,空出位置*/ for(i=8;i>=addr;i--) { data[i+1]=data[i]; } /*2. 查看移动之后的效果*/ for(i=0;i<10;i++)printf(%d ,data[i]); printf(\n); data[addr]=888; //插入的数据 /*3. 最终效果*/ for(i=0;i<10;i++)printf(%d ,data[i]); printf(\n); return 0;} 2.2 数组数据的删除 int a[]={1,2,3,4,2,6,7}; 将第2位数据删除掉结果: 1,3,4,5,6,7示例:#include int main(int argc,char **argv){ int data[10]={1,2,3,4,5,6,7,8,9,10}; //1,2,4,5,6,7,8,9,10,10 int addr; int i; printf(输入删除的位置:); scanf(%d,&addr); //2 /*1. 向前移动,将数据覆盖掉*/ for(i=addr-1;i<10-1;i++) { data[i]=data[i+1]; } /*2. 查看移动之后的效果*/ for(i=0;i 2.4 数组冒泡排序#include int main(int argc,char **argv){ int data[10]; int tmp; //存放临时数据 int i,j; int cnt=0; //排序比较的总次数 /*1. 录入数据*/ printf(请输入10个数:); for(i=0;i<10;i++)scanf(%d,&data[i]); /*2. 打印源数据:*/ printf(源数据:); for(i=0;i<10;i++)printf(%d ,data[i]); printf(\n); /*3. 冒泡排序*/ for(i=0;i<10-1;i++) //比较轮数 { for(j=0;jdata[j+1]) //从小到大 { tmp=data[j]; data[j]=data[j+1]; data[j+1]=tmp; } cnt++; } } /*4. 打印结果数据:*/ printf(排序之后的数据:); for(i=0;i<10;i++)printf(%d ,data[i]); printf(\n); printf(排序的总次数:%d\n,cnt); return 0;} 分析:
/*data[]={1,2,3}第一轮: [0]和[1] [1]和[2] 2 3 1 每一轮保证最小的数在最后第二轮: [0]和[1] 3 2 1*/排序: 从大到小1 2 3 4 5 第一轮:(1) 2 1 3 4 5(2) 2 3 1 4 5(3) 2 3 4 1 5(4) 2 3 4 5 1 第二轮:(1) 3 2 4 5 1(2) 3 4 2 5 1(3) 3 4 5 2 1(4) 3 4 5 2 1第三轮:(1) 4 3 5 2 1(2) 4 5 3 2 1(3) 4 5 3 2 1(4) 4 5 3 2 1第四轮:(1) 5 4 3 2 1(2) 5 4 3 2 1(3) 5 4 3 2 1(4) 5 4 3 2 1 2.5 冒泡排序优化#include int main(int argc,char **argv){ int data[10]; int tmp; //存放临时数据 int i,j; int cnt=0; //排序比较的总次数 45: int flag=0; //标志位置 /*1. 录入数据*/ printf(请输入10个数:); for(i=0;i<10;i++)scanf(%d,&data[i]); /*2. 打印源数据:*/ printf(源数据:); for(i=0;i<10;i++)printf(%d ,data[i]); printf(\n); /*3. 冒泡排序*/ for(i=0;i<10-1;i++) //比较轮数 { for(j=0;jdata[j+1]) //从小到大 { tmp=data[j]; data[j]=data[j+1]; data[j+1]=tmp; flag=1; } cnt++; } if(flag==0) //不需要继续排序 { break; //跳出最外层循环 } flag=0; //清除标志位,方便第2次判断 } /*4. 打印结果数据:*/ printf(排序之后的数据:); for(i=0;i<10;i++)printf(%d ,data[i]); printf(\n); printf(排序的总次数:%d\n,cnt); return 0;} 分析:
data[]={1,2,3}第一轮: [0]和[1] [1]和[2] 2 3 1 每一轮保证最小的数在最后第二轮: [0]和[1] 3 2 1 2.6 数组数据的拼接(整数) int a[]={1,3,4,5,6,7}; int b[]={11,13,14,15,16,17};将a和b拼接到c数组里。 最终int c[]={1,3,4,5,6,7, 11,13,14,15,16,17} 必须保证c数组空间足够大。 示例代码:
IBM分析2021年远程办公与上云对数据泄露的影响
浅谈锂电池新版强制标准GB31241:2014技术要求
马云无人超市最新消息汇总:马云无人超市正式开业,未来时代发展高科技能取代人工吗?
航空电子推出“ES6系列”连接器,适用于LED灯泡和LED照明设备
中国从2017至2020年间计划新建的晶圆厂数量居全球之冠
C语言总结_数组全方位练习
如何避免区块链资金盘的骗局
电子灌封胶的使用需要注意什么
PCB全自动字符两机连印生产线
谷歌新专利曝光 可用手势控制汽车
物联网高速发展到达新高度,网络安全需引起重视
3D打印技术将为汽车制造提供更多的零件设备
2018首届中国“AI+”佛山落幕_多个行业领域创意比拼
通过控制硒化铟晶体的硫化实现对功能性突触的沉默激活
探讨一下关于贴片机在使用过程中会遇到的问题
蓄电池充电的数控恒流源的设计方案
技术干货:基于大数据的英特尔端到端安防解决方案
在开关模式电源印刷电路板上放置电感器的指南
基于EP1C6Q240C8的FPGA芯片实现对实际振动台的模拟设计
常见V开头的符号你懂么