本文主要是介绍第六章 利用数组处理批量数据(字符串的使用和折半查找),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
例子
逆序打印数组
#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;}
这篇关于第六章 利用数组处理批量数据(字符串的使用和折半查找)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!