字符串与二维数组.pptx
字符串的初始化C语言允许字符数组两种方式的初始化:char name9=“Liang Ye”;char name9=L,i,a,n,g,Y,e,0;当把字符串赋值给字符数组时,会自动在字符串末尾加上空字符0(gets函数)数组大小必须大于或等于字符串长度+1可以大于:char name20=“Liang Ye”;不可以小于:char name5=“Liang Ye”;注:当以元素列举的方式初始化字符数组时,必须显式地加上空字符(getchar函数)第1页/共25页字符串的初始化不可以先声明后初始化错误1:char name9;name9=“Liang Ye”;/*不能把初始化从声明中分隔开来*/错误2:char name19=“Liang Ye”;char name29;name2=name1;/*字符串之间不能赋值操作*/错误3:char name19=“Liang Ye”;char name29=name1;/*不能直接将一个字符串赋给另一个字符串*/第2页/共25页字符串的输入输出scanf函数在工作过程中,一旦遇到空格、制表符、回车符、换行符等,就停止读入工作。如:Liang Yen,仅读取Liang就停止了。在使用scanf函数读取字符串时,请注意格式的不同:scanf(”%d”,&no);scanf(”%s”,name);scanf在读取”Liang-Yen”时,数组name的大小应该保证大于或等于9,以便保存0。第3页/共25页字符串的输入输出例:使用scanf函数读取一系列字符串main()char word140,word240,word340,word440;scanf(“%s%s”,word1,word2);scanf(“%s”,word3);scanf(“%s”,word4);printf(“%sn”,word1);printf(“%sn”,word2);printf(“%sn”,word3);printf(“%sn”,word4);第4页/共25页getchar函数的使用getchar函数用于从键盘读取一个字符,不受空格的影响,可以读取一段文本。格式:getchar();注:getchar函数没有参数例:main()char word100,character;int c=0;docharacter=getchar();wordc=character;c+;while(character!=n);wordc=0;printf(%sn,word);第5页/共25页第6页/共25页gets函数的使用gets函数可以读取以回车换行符结尾的一行文本格式:gets(str);gets函数不会受空格的影响,最后的回车换行符不保存,但是会自动在末尾加上一个0。例:main()char word100;gets(word);printf(%sn,word);第7页/共25页屏幕输出函数printf函数用于在屏幕上输出一个字符串,用来显示以0结尾的字符数组格式:printf(“%s”,name);putchar函数用于在屏幕上输出一个字符格式 :putchar(ch);等价于:printf(“%c”,ch);puts函数用于在屏幕上输出一个字符串,并将光标移至下一行行首格式 :puts(name);等价于:printf(“%sn”,name);第8页/共25页字符的算术运算C语言允许像数字一样对字符进行操作。当某个字符常量和字符变量在表达式中出现时,系统自动地将其转换为整数值。C函数库中有一个函数atoi(),可以将数字字符串转换为相应的整数值。第9页/共25页字符的算术运算第10页/共25页字符串的复制C语言没有直接作用于字符串上的运算符,因此char name9;name=“Liang Ye”;是错误的。不能直接将一个字符串赋给另一个字符串 char name19=“Liang Ye”;char name29=name1也是错误的那么,如果想对字符串复制,怎么办?第11页/共25页字符串的组合在C语言中,字符串不能通过算术加结合到一起,string3=string2+string1;string2=string1+“Hello”;都是不合法的。在C语言中,字符串不能直接进行比较,if(string2=string1)if(string1=“Hello”)都是不合法的。第12页/共25页字符串处理函数C语言函数库支持大量的字符串处理函数,来完成字符串操作,包含在头文件中以下是一些最常用的字符串处理函数第13页/共25页二维数组的定义 二维数组:数组中每个元素带有两个下标。定义形式为:类型说明符 数组名第一维大小 第二维大小;逻辑上,可把二维数组看成是一个矩阵,第一维大小表示矩阵有几行,第二维大小表示矩阵有几列。二维数组 a00a01a02a10a11a12a20a21a22第14页/共25页引用二维数组元素时必须带有两个下标,形式如下:数组名下标1下标2二维数组在内存中占据一系列连续的存储单元,数组元素按行顺序存放,先放行下标是0的元素,再放行下标是1的元素,.a00a01a02a10a11a12a20 a21a22第15页/共25页二维数组初始化:二维数组定义时也可以用花括号对全部或前面一部分数组元素进行初始化。数组的初始化是逐行进行的例:int a23=1,2,3,4,5,6;int a23=1,2,3,4,5,6 ;如果数组的所有元素都显示地进行了初始化,那么就不必指定第一个维数的大小,但第二维大小不能省略。例:int a3=1,2,3,4,5,6;二维数组 第16页/共25页二维数组判断对错:int a23=1,2;nt a34=1,2,3,4,5,6;int a34=1,2,3;int a23=1,2,3,4,5,6,7,8;int a3=1,2,3,4,5,6;初值个数不能多于数组元素的个数给数组的部分元素赋初值时,数组的长度声明不能省略第17页/共25页多维数组C语言支持多维数组,其一般形式为:类型说明符 数组名第一维大小 第二维大小第n维大小一维数组表示一个一维的空间二维数组表示一个二维的空间三维数组表示一个三维的空间n维数组表示一个n维的空间因此,一般很少用到超过3维的数组。举例:int survey 3512float table 5 4 5 3第18页/共25页数组的应用二维数组程序举例将一个二维数组行和列元素互换,存到另一个二维数组中。例如:A=1 2 3 B=1 4 4 5 6 2 5 3 6第19页/共25页数组的应用main()int a23=1,2,3,4,5,6;int b32,i,j;printf(“Array a:n);for(i=0;i=1;i+)for(j=0;j=2;j+)printf(%5d,aij);bji=aij;printf(n);printf(“Array b:n);for(i=0;i=2;i+)for(j=0;j=1;j+)printf(%5d,bij);printf(n);第20页/共25页数组的应用第21页/共25页数组的应用有一个34的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。第22页/共25页数组的应用main()int i,max,number;int a12=1,2,3,4,9,8,7,6,-10,10,-5,2;max=a0;for(i=0;imax)max=ai;number=i;printf(max=%d,row=%d,colum=%dn,max,number/4,number%4);第23页/共25页解法二:定义为二维数组main()int i,j,row,colum,max;int a34=1,2,3,4,9,8,7,6,-10,10,-5,2;max=a00;for(i=0;i=2;i+)for(j=0;jmax)max=aij;row=i;colum=j;printf(max=%d,row=%d,colum=%dn,max,row,colum);第24页/共25页感谢您的观看。第25页/共25页