第六章 利用数组处理批量数据(字符串的使用和折半查找)

2024-09-01 09:20

本文主要是介绍第六章 利用数组处理批量数据(字符串的使用和折半查找),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

例子
逆序打印数组
#include<stdio.h>
int main(){int i=0;int arr[10];for(i=0;i<10;i++) {arr[i]=i; }for(i=9;i>=0;i--){printf("%d ",arr[i]);}
} 
冒泡排序
#include<stdio.h>
int main(){int i=0;int arr[10]={34,67,90,43,124,87,65,99,132,26};printf("排序前:\n");for(i=0;i<10;i++){printf("%d ",arr[i]);}printf("\n");for(i=0;i<9;i++){int j=0;for(j=0;j<9-i;j++){if(arr[j]>arr[j+1]){int temp=arr[j];;arr[j]=arr[j+1];arr[j+1]=temp; }}}printf("排序后:\n");for(i=0;i<10;i++){printf("%d ",arr[i]);}
} 
有多少个单词 
#include<stdio.h>
#include<string.h> 
int main(){char str[1000]={0};gets(str);int i=0;int word=0;for(i=0;str[i]!='\0';i++){if(str[i]!=' '&&(str[i+1]==' '||str[i+1]=='\0'))word++;} printf("%d\n",word);return 0;} 
#include<stdio.h>
#include<string.h> 
int main(){char str[1000]={0};gets(str);int i=0;int word=0,num=0;for(i=0;str[i]!='\0';i++){if(str[i]==' ')word=0;else if(word==0){ //根据字符 判断   第一个单词直接进入 后续遇空格后第一个字符num++ word=1;num++;}}printf("%d\n",num);return 0;} 

函数

#include<string.h>

        puts函数 输出字符串的函数
        gets函数 输入字符串的函数
#include<stdio.h>
#include<string.h> 
int main(){char str[10]={0};gets(str);puts(str);return 0;} 
        strcat函数 字符串连接函数
#include<stdio.h>
#include<string.h> 
int main(){char str[30]="cc";char str1[10]="acccj";strcat(str,str1);printf("%s\n",str);return 0;} 
        strcpy和strncpy 字符串复制函数
#include<stdio.h>
#include<string.h> 
int main(){char str[10]="ccbbaabbc";char str1[6]="acccj";strcpy(str,str1);printf("%s\n",str);//acccj printf("%c\n",str[8]); //c char str2[10]="ccbbaabbc";char str3[6]="acccj";strncpy(str2,str3,5);//acccjabbcprintf("%s\n",str2);return 0;} 
        strcmp 字符串比较函数
#include<stdio.h>
#include<string.h> 
int main(){char str[10]="ccbbaabbc";char str1[6]="acccj";if(strcmp(str,str1)>0){printf(">\n");} else if(strcmp(str,str1)==0){printf("=\n");}else{printf("<\n");}strcpy(str,str1);if(strcmp(str,str1)>0){printf(">\n");} else if(strcmp(str,str1)==0){printf("=\n");}else{printf("<\n");}return 0;} 
        strlen  测字符串长度的函数
#include<stdio.h>
#include<string.h> 
int main(){char str[10]="ccbbaabbc\0";char str1[6]="accc";printf("%d\n",strlen(str));printf("%d\n",strlen(str1));return 0;} 
        strlwr 转换为小写的函数
        strupr 转换为大写的函数

        

#include<stdio.h>
#include<string.h> 
int main(){char str[10]="abc";printf("%s\n",strupr(str)); //ABCprintf("%s\n",str); //ABCprintf("%s\n",strlwr(str)); //abc return 0;} 
课后习题
用筛选法求100以内的素数
#include<stdio.h>
#include<math.h> 
int main(){int arr[101]={0};int i=1;for(i=1;i<=100;i++){arr[i]=i; }arr[1]=0;for(i=2;i<sqrt(100);i++){int j=0;for(j=i+1;j<=100;j++){if(arr[i]!=0&&arr[j]!=0){if(arr[j]%arr[i]==0){//能被素数整除arr[j]=0; }}} }for(i=2;i<=100;i++){if(arr[i]!=0){printf("%d ",arr[i]);}}return 0;} 
用选择法对10个整数排序
#include<stdio.h>
int main(){int arr[10]={0};int i=0;for(i=0;i<10;i++){scanf("%d",&arr[i]);printf("arr[%d]=%d\n",i,arr[i]);} printf("排序前\n"); for(i=0;i<10;i++){printf("%d ",arr[i]); }//先找到最小的数的索引 让它和当前i位置的数交换 int min=0;for(i=0;i<10;i++){min=i;//重置当前位置 int j=0;for(j=i+1;j<10;j++){if(arr[min]>arr[j]){min=j;}}int temp=arr[i];arr[i]=arr[min];arr[min]=temp;}printf("\n");printf("排序后\n");for(i=0;i<10;i++){printf("%d ",arr[i]); }return 0;} 
求对角线元素之和
#include<stdio.h>
int main(){int arr[3][3]={1,2,3,4,5,6,7,8,9};int sum=0;int sum1=0;int i=0,j=0;for(i=0;i<3;i++){for(j=0;j<3;j++){if(i==j){sum+=arr[i][j];}}}for(i=0;i<3;i++){for(j=0;j<3;j++){if(i+j==2)sum1+=arr[i][j];}}printf("%d\n",sum);printf("%d\n",sum1);  return 0;} 
插入元素进数组
#include<stdio.h>
int main(){int arr[11]={0,1,2,3,4,5,6,7,8,9};
//	int arr[11]={0,0,0,0,0,0,0,0,0,0};
//	int arr[11]={9,8,7,6,5,4,3,2,1,0};int i=0;int num=0;scanf("%d",&num); if(arr[0]>arr[9]){//逆序  987654321 for(i=9;i>=0;i--){if(num>arr[i]){arr[i+1]=arr[i];}else{arr[i+1]=num;break;}if(i==0){arr[i]=num;//比完也没跳出循环 } }}else{//顺序 或者 00000 for(i=9;i>=0;i--){if(num<arr[i]){arr[i+1]=arr[i];}else{arr[i+1]=num;break;}if(i==0){arr[i]=num;//比完也没跳出循环 } }} for(i=0;i<11;i++){printf("%d ",arr[i]);}return 0;} 
逆序重新存放
#include<stdio.h>
int main(){
//	int arr[10]={0,1,2,3,4,5,6,7,8,9};int arr[5]={8,6,5,4,1}; int len=sizeof(arr)/sizeof(arr[0]);int i=0;for(i=0;i<len/2;i++){int temp=arr[i];arr[i]=arr[len-1-i];arr[len-1-i]=temp;} for(i=0;i<len;i++){printf("%d ",arr[i]);}return 0;} 
打印杨辉三角
#include<stdio.h>
int main(){int arr[11][11];int i=0;int j=0;//找规律 对角线都为1 第一行都为1 for(i=1;i<=10;i++){for(j=1;j<=10;j++){if(j==1)arr[i][j]=1;else if(i==j)arr[i][j]=1;else arr[i][j]=arr[i-1][j]+arr[i-1][j-1];}}for(i=1;i<=10;i++){for(j=1;j<=i;j++){printf("%2d ",arr[i][j]);}printf("\n");} return 0;} 
魔方阵
#include<stdio.h>
int main(){int n=0;scanf("%d",&n);  int arr[10][10]={0};int i=0;int j=0;int row=0;int col=0; for(i=1;i<=n;i++){for(j=1;j<=n;j++)arr[i][j]=0;} //第一行的中间放1arr[1][n/2+1]=i;row=1;col=n/2+1;for(i=2;i<=n*n;i++){row-=1;col+=1;if(row<1)//防止row溢出 row+=n;if(col>n)//防止col溢出 col%=n;if(arr[row][col]==0){arr[row][col]=i;} else{row+=2;//row可能溢出 col-=1;//col可能溢出 if(col<1)col+=n;if(row>n)row%=n; arr[row][col]=i;}}for(i=1;i<=n;i++){for(j=1;j<=n;j++){printf("%d ",arr[i][j]); } printf("\n");}return 0;
} 
#include<stdio.h>
int main(){
int a[15][15],i,j,k,p,n;
p=1;
while(p==1){printf("1~15");scanf("%d",&n);if((n!=0)&&(n<=15)&&(n%2!=0)){p=0;}for(i=1;i<=n;i++){for(j=1;j<=n;j++){a[i][j]=0;}}//建立魔方阵
j=n/2+1;
a[1][j]=1;
for(k=2;k<=n*n;k++){i=i-1;j=j+1;if((i<1)&&(j>n)){i+=2;j-=1;}else{if(i<1)i=n;if(j>n)j=1;}if(a[i][j]==0)a[i][j]=k;else{i+=2;j-=1;a[i][j]=k; } 
} 
} 
for(i=1;i<=n;i++){for(j=1;j<=n;j++){printf("%d ",a[i][j]); } printf("\n");}return 0;
} 
鞍点
#include<stdio.h>
int main(){//测试数据 
//	1 2 3 4 5
//	2 4 6 8 10
//	3 6 9 12 15
//	4 8 12 16 20//	1 2 3 4 11
//	2 4 6 8 12
//	3 6 9 10 15
//	4 8 12 16 7int arr[4][5]={0};int i=0;int j=0;int n=0;printf("请输入数组数据\n");for(i=0;i<4;i++){for(j=0;j<5;j++){scanf("%d",&arr[i][j]);}}int flag=1; //为1说明有一个鞍点int ii=0; int jj=0;//标记最大的一行j在哪 for(i=0;i<4;i++){int max=arr[i][0];//标记一个最大值for(j=1;j<5;j++){if(arr[i][j]>max){ii=i;jj=j;max=arr[i][j];}}for(n=0;n<4;n++){if(arr[n][jj]<max)flag=0;}if(flag==1)break;}if(flag)printf("arr[%d][%d]=%d\n",ii,jj,arr[ii][jj]); elseprintf("没找到\n");return 0;
} 
二分查找
#include<stdio.h>
int main(){
//	int arr[15]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};int arr[15]={15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};int left=0;int right=sizeof(arr)/sizeof(arr[0]);int mid,flag=0;int num;//需要查找的那个数scanf("%d",&num); while(left<=right){mid=(left+right)/2;if(num==arr[mid]){flag=1;//成功找到该元素 退出循环break; }else{//该数组从大到小排序 if(num>arr[mid]){right=mid-1;}else{left=mid+1;} }}if(flag==1)printf("found! 循环为%d\n",mid+1);elseprintf("No found!\n"); return 0;
} 
判断字符数量
#include<stdio.h>
#include<string.h>
int main(){char text[3][80];int i=0,j=0;int upstring=0;//大写字符int lowstring=0;//小写字符int dig=0;//数字int space=0;//空格字符int other=0;//其它字符 for(i=0;i<3;i++){printf("please input line %d:\n",i+1);gets(text[i]);for(j=0;j<80&&text[i][j]!='\0';j++){if(text[i][j]>='A'&&text[i][j]<='Z'){upstring++;}else if(text[i][j]>='a'&&text[i][j]<='z'){lowstring++;}else if(text[i][j]>='0'&&text[i][j]<='9'){dig++;}else if(text[i][j]==' '){space++;}else{other++;}}}printf("大写字母个数:%d\n",upstring);printf("小写字母个数:%d\n",lowstring);printf("数字个数:%d\n",dig);printf("空格个数:%d\n",space);printf("其它字符个数:%d\n",other);return 0;
} 
打印图案 
#include<stdio.h>
//* * * * *
//  * * * * *
//    * * * * *
//      * * * * *
//        * * * * *int main(){int i=0;int j=0;for(i=0;i<5;i++){for(j=0;j<5+i;j++){if(j<i){printf("  ");}else{printf("* ");}}printf("\n");}return 0;
} 
转译密文
#include<stdio.h>
#include<string.h>
//26-(a-'A')+'A'+1 ---->25-a+'A'+'A'
//R droo erhrg Xsrmz mvcg dvvp.int main(){char text[80],trans[80];gets(text);int i=0;for(i=0;i<80;i++){if((text[i]>='a')&&(text[i]<='z')){trans[i]=(char)(25-text[i]+'a'+'a');}else if((text[i]>='A')&&(text[i]<='Z')){trans[i]=(char)(25-text[i]+'A'+'A');}else{trans[i]=text[i];}}printf("%s\n",trans);return 0;
} 
模拟strcat
#include<stdio.h>int main(){char s1[80],s2[40];int i=0,j=0;printf("input string1:\n");scanf("%s",s1);printf("input string2:\n");scanf("%s",s2);while(s1[i]!='\0')i++;while(s2[j]!='\0'){s1[i++]=s2[j++];}s1[i]='\0';printf("new String is -> %s\n",s1);return 0;}
模拟strcmp
#include<stdio.h>int main(){char s1[40],s2[40];int num=0;gets(s1);gets(s2);int i=0;while(s1[i]==s2[i]&&s1[i]!='\0')i++;if(s1[i]=='\0'&&s2[i]=='\0')	num=0;elsenum=s1[i]-s2[i];printf("result:%d\n",num);return 0;}
模拟strcpy
#include<stdio.h>
#include<string.h> int main(){char s1[40]="sd",s2[40];printf("原来的s1->:%s\n",s1);scanf("%s",s2);int i=0;//=strlen是为了把\0也拷过去 for(i=0;i<=strlen(s2);i++)s1[i]=s2[i];printf("%s\n",s1);return 0;}

这篇关于第六章 利用数组处理批量数据(字符串的使用和折半查找)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1126538

相关文章

Python数据验证神器Pydantic库的使用和实践中的避坑指南

《Python数据验证神器Pydantic库的使用和实践中的避坑指南》Pydantic是一个用于数据验证和设置的库,可以显著简化API接口开发,文章通过一个实际案例,展示了Pydantic如何在生产环... 目录1️⃣ 崩溃时刻:当你的API接口又双叒崩了!2️⃣ 神兵天降:3行代码解决验证难题3️⃣ 深度

Linux内核定时器使用及说明

《Linux内核定时器使用及说明》文章详细介绍了Linux内核定时器的特性、核心数据结构、时间相关转换函数以及操作API,通过示例展示了如何编写和使用定时器,包括按键消抖的应用... 目录1.linux内核定时器特征2.Linux内核定时器核心数据结构3.Linux内核时间相关转换函数4.Linux内核定时

Python+FFmpeg实现视频自动化处理的完整指南

《Python+FFmpeg实现视频自动化处理的完整指南》本文总结了一套在Python中使用subprocess.run调用FFmpeg进行视频自动化处理的解决方案,涵盖了跨平台硬件加速、中间素材处理... 目录一、 跨平台硬件加速:统一接口设计1. 核心映射逻辑2. python 实现代码二、 中间素材处

MySQL字符串转数值的方法全解析

《MySQL字符串转数值的方法全解析》在MySQL开发中,字符串与数值的转换是高频操作,本文从隐式转换原理、显式转换方法、典型场景案例、风险防控四个维度系统梳理,助您精准掌握这一核心技能,需要的朋友可... 目录一、隐式转换:自动但需警惕的&ld编程quo;双刃剑”二、显式转换:三大核心方法详解三、典型场景

python中的flask_sqlalchemy的使用及示例详解

《python中的flask_sqlalchemy的使用及示例详解》文章主要介绍了在使用SQLAlchemy创建模型实例时,通过元类动态创建实例的方式,并说明了如何在实例化时执行__init__方法,... 目录@orm.reconstructorSQLAlchemy的回滚关联其他模型数据库基本操作将数据添

Spring配置扩展之JavaConfig的使用小结

《Spring配置扩展之JavaConfig的使用小结》JavaConfig是Spring框架中基于纯Java代码的配置方式,用于替代传统的XML配置,通过注解(如@Bean)定义Spring容器的组... 目录JavaConfig 的概念什么是JavaConfig?为什么使用 JavaConfig?Jav

Java数组动态扩容的实现示例

《Java数组动态扩容的实现示例》本文主要介绍了Java数组动态扩容的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1 问题2 方法3 结语1 问题实现动态的给数组添加元素效果,实现对数组扩容,原始数组使用静态分配

MySQL快速复制一张表的四种核心方法(包括表结构和数据)

《MySQL快速复制一张表的四种核心方法(包括表结构和数据)》本文详细介绍了四种复制MySQL表(结构+数据)的方法,并对每种方法进行了对比分析,适用于不同场景和数据量的复制需求,特别是针对超大表(1... 目录一、mysql 复制表(结构+数据)的 4 种核心方法(面试结构化回答)方法 1:CREATE

Go异常处理、泛型和文件操作实例代码

《Go异常处理、泛型和文件操作实例代码》Go语言的异常处理机制与传统的面向对象语言(如Java、C#)所使用的try-catch结构有所不同,它采用了自己独特的设计理念和方法,:本文主要介绍Go异... 目录一:异常处理常见的异常处理向上抛中断程序恢复程序二:泛型泛型函数泛型结构体泛型切片泛型 map三:文

详解C++ 存储二进制数据容器的几种方法

《详解C++存储二进制数据容器的几种方法》本文主要介绍了详解C++存储二进制数据容器,包括std::vector、std::array、std::string、std::bitset和std::ve... 目录1.std::vector<uint8_t>(最常用)特点:适用场景:示例:2.std::arra