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

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

相关文章

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没