C语言_数组的查找、替换、排序、拼接

这篇文章主要是总结c语言的位运算几个实战例子,接着介绍数组的基本定义用法、数组排序、插入、拼接、删除、字符串查找替换等。
1. 颜色转换的例子1.颜色转换的例子: rgb888 rgb565 rgb666…. int data=12345; //rgb888的颜色 要求将data转为rgb565 -去掉高位 示例:/*int data=101010101010101010101010 11184810r:01010g:101010b:010100101010101001010 218341010101000111111*/#include int main(int argc, char * argv[]){ unsigned short rgb565_c; unsigned int data=11184810; //rgb888 unsigned char r=(data>>16)&0xff; unsigned char g=(data>>8)&0xff; unsigned char b=(data>>0)&0xff; printf(rgb88_r=0x%x\n,r); printf(rgb88_g=0x%x\n,g); printf(rgb88_b=0x%x\n,b); r&=0x1f; //5 g&=0x3f; //6 b&=0x1f; //5 rgb565_c=(r<<11)|(g<<5)|(b<<0); printf(rgb565_c=%d\n,rgb565_c); return 0;} 2. 位运算综合练习2.位运算综合练习#include int main(int argc,char **argv){ /*1. 存放数据*/ data|='a'<<24; data|='b'<<16; //f data|='c'<<8; data|='d'<<0; /*2. 修改数据*/ data&=~(0xff<<8*2); //清除指定位 data|='f'24)&0xff); printf(%c\n,(data>>16)&0xff); printf(%c\n,(data>>8)&0xff); printf(%c\n,(data>>0)&0xff); return 0;} 3. 位运算实际的运用3.实际的运用short c1=1234; //r占11~15位 g占2~7位short c2=4567; //b占 11~15位rgb565; 要求: 将以上rgb分量提取出来,存在另一个变量(16位的变量)中—rgb565 。unsigned int data_1; //整型 4个字节 unsigned short data_2; //短整型 2个字节 unsigned long data_3; //长整型 4个字节 unsigned long long data_3; //双长整型 8个字节示例:/*short c1=1234; //r占11~15位 g占2~7位short c2=4567; //b占 11~15位c1=101010101010101010101010 11184810c2=101010101010101010101010 11184810r: 10101g: 101010b: 10101rgb565=1010110101010101 44373*/#include int main(int argc, char * argv[]){ unsigned int c1=11184810; unsigned int c2=11184810; unsigned char r,g,b; unsigned short c3; /*1. 转换为rgb888*/ r=c1>>8; g=c1&0xff; b=c2>>8; /*2. 转换为rgb565*/ r=r>>3; g=g>>2; b=b>>3; /*3. 组合颜色*/ c3=(r<<11)|(g<<5)|(b<<0); printf(c3=%d\n,c3); return 0;} 4. 数组特点介绍内存空间: 都是连续的---线性空间。数组类型定义: 数组的名称[数组的大小]; int buff[100];数组的特性:(1)数组的空间是连续的。 就是同类型变量的集合(2)数组里只能存放相同类型的数据(3)数组的下标是从0开始(4)数组在定义的时候,必须得有一个合法空间。 int buff[]; #include int main(int argc, char * argv[]){ int buff_int[100]; //空间是多大? 400字节 //下标范围: 0~99 char buff_char[100]; //空间是多大?100字节 //下标范围:0~99 return 0;}数组示例:#include int main(int argc, char * argv[]){ int buff1[]={1,2,3,4,5,6,7,8,9,0}; //大小以数据数量为准 int buff2[1]; //空间定义必须大于0 printf(%d\n,buff1[0]); //1 printf(%d\n,buff1[2]); //3 printf(%d\n,buff1[4]); //5 return 0;}数组的数据倒序输出:#include int main(int argc, char * argv[]){ int buff1[]={1,2,3,4,5,6,7,8,9,0}; //大小以数据数量为准 int i; for(i=0;i<10;i++) { printf(%d ,buff1[9-i]); } return 0;}//数组的初始化 /* 1. 数组什么时候可以整体赋值?只有在数组定义的时候 2. 数组的空间必须是常量 (c89) 错误: int data=100; int buff[data]; 3. 数组的下标是从0开始 */数组定义:(1)一维数组 char data[100];(2)二维数组 char data[100][100];(3)三维数组 char data[100][100][100]; ………….题目:#include int main(int argc, char * argv[]){ int i; float buff[5]; //buff的名称是首地址 float sum=0; printf(输入成绩:); for(i=0;i<5;i++) { scanf(%f,&buff[i]); } for(i=0;i<5;i++) { sum+=buff[i]; } printf(sum=%f\n,sum/5); return 0;} 5. *号显示中文6. 显示中文 通过*号打印出自己的名字。#include int main(int argc, char * argv[]){ unsigned char buff[]={0x08,0x08,0x7e,0x4a,0x7e,0x08,0x08,0x08}; int i,j; unsigned char data; for(i=0;i<8;i++) { data=buff[i]; for(j=0;j<8;j++) { if(data&0x80)printf(*); else printf( ); data<<=1; //依次判断高位 } printf(\n); } return 0;}/*8*80000 1000 0x080000 1000 0x080111 1110 0x7e0100 1010 0x4a0111 1110 0x7e0000 1000 0x080000 1000 0x080000 1000 0x08*/汉字显示示例代码:#include int main(int argc, char * argv[]){ unsigned char buff[]= { /*-- 文字: 中 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x3f,0xf8,0x21,0x08,0x21,0x08,0x21,0x08, 0x21,0x08,0x21,0x08,0x3f,0xf8,0x21,0x08,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00, }; int i,j; int cnt=0; unsigned char data; for(i=0;i<32;i++) { data=buff[i]; for(j=0;j<8;j++) { if(data&0x80)printf(*); else printf( ); data<=addr-1;i--) { buff[i+1]=buff[i]; } buff[addr-1]=data; //插入数据 len++; //长度加1 /*2. 打印最终的结果*/ for(i=0;i;i++)> 7. 数组数据的删除2.数组数据的删除 int a[]={1,2,3,4,5,6,7}; 将第2位数据删除掉 最终 int a[]={1,3,4,5,6,7};#include int main(int argc, char * argv[]){ int buff[50]={1,2,3,4,5,6,7,8,9,10}; int addr=2; //删除的位置(以正常数字计数) int len=10; //源数组里的数据长度 int i; /*1. 向前覆盖数据*/ for(i=addr-1;i;i++)> 8. 数组数据排序----冒泡排序3.数组数据排序----冒泡排序 int a[]={1,2,3,4,5,6,7}; 最终 int a[]={7,6,5,4,3,2,1};基本排序#include int main(int argc, char * argv[]){ //将要排序的数组 int buff[10]={12,67,34,89,54,15,90,58,66,88}; int tmp; int i,j; int len=10; //数组的长度 //排序 for(i=0;ibuff[j+1]) { tmp=buff[j]; buff[j]=buff[j+1]; buff[j+1]=tmp; } } } for(i=0;iint main(int argc, char * argv[]){ //将要排序的数组 int buff[10]={1,2,3,4,5,6,7,8,9,10}; int tmp; int i,j; int len=10; //数组的长度 int cnt=0; //排序 for(i=0;i;i++)>;j++)>;i++)>;i++)> 9. 数组拼接4.数组数据的拼接 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}示例:#include int main(int argc, char * argv[]){ int buff1[50]={1,2,3,4,5,6,7,8,9,10}; int buff2[10]={11,12,13,14,15,16,17,18,19,20}; int len1=10; //源数据长度 int len2=10; //插入的数据长度 int i; for(i=0;i;i++)> 10. 字符串查找与替换字符串数组有一个约定: 结尾有’\0’char buff[]={'a','b','c','d'}; //字符数组定义 char buff[]=abcd; //字符串数组定义 char buff[]={'a','b','c','d','\0'}; //字符串数组定义“” //双引号之前默认有’\0’ #include int main(int argc, char * argv[]){ char str[]=嵌入式开发; //字符串数组--文本数据 int i=0; for(i=0;str[i]!='\0';i++){} printf(i=%d\n,i); return 0;}查找与替换#include int main(int argc, char * argv[]){ int buff[]={123,456,123,56,567,123,567}; int cnt=0,i=0; for(i=0;i<7;i++) { if(buff[i]==123) //查找 { buff[i]=888; //替换 cnt++; } } printf(cnt=%d\n,cnt); for(i=0;i;j++)>
广州视频直播微信小程序解决方案
携手共赢 共创未来——翠展微电子和浙江大学信电学院研究生联合培养实践基地签约仪式圆满举行
华为鸿蒙有望下月规模化推送:流畅度非常丝滑
GRST研发出全球第一枚真正绿色环保锂电池“ebatte”
OPPO多设备无线充电技术专利解读
C语言_数组的查找、替换、排序、拼接
PCB电路板基板材料概述
智荟出海|积木易搭X亚马逊云科技:用3D数字化技术赋能企业出海线上营销
绿色农田建设项目实施方案内容的详细介绍
深度分析差分线的长度匹配问题(以HDMI为例)
看 AI 如何守护儿童快乐成长!(互动有礼)
UDE 2021国际显示博览会“五大看点”定义未来行业风向标
摄像头模组厂停产,博立信亏损原因深究
SAW滤波器datasheet数据介绍
ds1302初始化程序,十分详细的初始化程序奉上
全球最薄动态随机存储器(DRAM)
单模光纤和多模光纤的区别 单模光模块和多模光模块的区别
媒体聚焦 | 扩大规模同时把握机遇,整合优势不忘技术创新(21ic专访)
基辛格:英特尔应该比台积电、三星获更多芯片法案补贴
比特币能否成为拜占庭将军问题的最佳解决方案