定义二维数组
类型标识符数组名[常量表达式][常量表达式]例:floata[3][4],b[5][10];数组元素,以a数组为例数组a共有3行,4列元素,均存储float型数据行下标:0-2,共3行列下标:0-3,共4行二维数组元素的引用
例:二维数组行和列元素互换后存到另一个二维数组中
#include<stdio.h>int main(){ int a[2][3]={ {1,2,3},{4,5,6}};int b[3][2],i,j;printf("arraya:\n");for(i=0;i<=1;i++){ for(j=0;j<=2;j++){ printf("%d",a[i][j]);}printf("\n");}for(i=0;i<=1;i++){ for(j=0;j<=2;j++){ b[j][i]=a[i][j];}}printf("array b:\n");for(i=0;i<=2;i++){ for(j=0;j<=1;j++)printf("%d",b[i][j]);printf("\n");}return0;}多维数组作函数参数
例:写函数,求3×4矩阵中所有元素中的最大值
用多维数组名作函数参数行数作为形参
#include<stdio.h>
int max_value(intarray[][4],int);int main(){ int a[3][4]={ {11,32,45,67},{22,44,66,88},{15,72,43,37}};printf("maxvalueis%d\n",max_value(a,3));return 0;}int max_value(intarray[][4],intn){ int i,j,max;max=array[0][0];for(i=0;i<n;i++)for(j=0;j<4;j++)if(array[i][j]>max)max=array[i][j];return max;}总结
用二维数组名函数参数,形参数组的第二维(即列)的大小必须指定,并保证实参的列数与其相同。 形参第一维的大小可以指定,也可以不指定,即使指定,也对实参无约束 void f(int array[3][10]);//形参数组两维都指定 void f(int array[][10]);//第一维大小省略 在第二维大小相同的前提下,实参数组的行数可以与形参数组的不同,系统不检查第一维的大小。如 实参数组定义为:int score[5][10]; 形参数组可以声明为:int array[3][10]; 对三维或更多维的数组,处理方法是类似的 由于数组名代表地址,形参指向实参对面应的空间,函数中对形参的改变, 会造成对实参的影响。
字符串处理实例
字符串有多长
#include<stdio.h>
int main(){ char str[50];printf("输入字符串:");gets(str);int n=0;while(str[n]!='\0'){ n++;}printf("这一句中有%d个字符.\n",n);return0;}
统计数字字符个数
#include<stdio.h>
int main(){ char str[50];int i=0,n=0;printf("输入字符串:");gets(str);while(str[i]!='\0'){ if(str[i]>='0'&&str[i]<='9')n++;i++;}printf("其中的数字字符个数是:%d\n",n);return 0;}
每一个小写字母出现的次数
#include<stdio.h>int main(){ charstr[50];int n[26]={0};int i=0;printf("输入字符串:");gets(str);while(str[i]!='\0'){ if(str[i]>='a'&&str[i]<='z') n[str[i]-'a']++;i++;}for(i=0;i<26;i++)if(n[i]!=0)printf("%c:%d\n",i+'a',n[i]);return0;}
复制字符串(除空格字符外)
#include<stdio.h> int main() { char str1[50]="Iamahappyboy\'sdaddy.",str2[50]; inti=0,j=0; while(str1[i]!='\0') { if(str1[i]!='') { str2[j]=str1[i]; j++; } i++; } str2[j]='\0';//切记!! printf("复制出了一个不带空格的拷贝:%s\n",str2); return0; }
字符函数和字符串函数
语言中进行文字处理的方法:自编代码完成 利用库函数
字符函数库include<ctype.h>串处理函数include<string.h>编制自己的字符串函数
字符串复制
#include<stdio.h>char*scopy(char*str1,constchar*str2);int main(){ char s1[50];scopy(s1,"I am happy.");printf("%s\n",s1);return 0;}char *scopy(char*str1,const char*str2){ char *p1=str1;const char*p2=str2;while(*p2!='\0'){ *p1=*p2;p1++;p2++;}*p1='\0';return p1;}
比较字符串(忽略大小写)
#include<stdio.h>
int scomp(const char*str1,const char*str2);int main(){ printf("%d\n",scomp("PFXa","pfXA"));printf("%d\n",scomp("PF12","pF34"));printf("%d\n",scomp("Bxb3","bdeF"));return0;}int scomp(const char*str1,const char*str2)
{ inti=0;char c1,c2;do{ c1=(str1[i]>='A'&&str1[i]<='Z')?str1[i]+32:str1[i];c2=(str2[i]>='A'&&str2[i]<='Z')?str2[i]+32:str2[i];i++;}while(c1==c2&&c1!='\0'&&c2!='\0');if(c1>c2)return 1;elseif(c1<c2)return -1;elsereturn 0;} 统计单词个数 #include<stdio.h> int wordnum(const char*str); int main() { chars[81]; gets(s); printf("\"%s\"have%dwords.\n",s,wordnum(s)); return 0; } int wordnum(constchar*str) { int i,num=0,word=0; for(i=0;(*(str+i)!='\0');i++) { if(*(str+i)=='') word=0; else if(word==0) { word=1; num++; } } return num; } 关键:word代表一种状态 word==0时,之前读到了空格 现读到空格,word保持0 现读到了非空格,单词数增1,word置为1 word==1时,之前读到的是非空格 现读到空格,word重置为0 现读到了非空格,继续读 根据读到的符号处理 if(现读到空格) word保持0或重置为0 elseif(之前并不在形成单词中) 单词数增1,word置为1 (无论如何,循环上去继续读)