首页 第四章 简单构造数据类型

第四章 简单构造数据类型

举报
开通vip

第四章 简单构造数据类型null第四章 简单构造数据类型 第四章 简单构造数据类型 第四章 简单构造数据类型第四章 简单构造数据类型4.1 一维数组的引出及使用 4.2 二维数组的引出及使用 4.3 字符数组 4.4 数组与函数 4.5 数组与指针 4.6 字符串与指针 4.7 典型例题4.1 一维数组的引出及使用4.1 一维数组的引出及使用例:某班有30名学生,求该班成绩的平均分#include void main( ) { int i, s, sum=0 ; float ave ; fo...

第四章 简单构造数据类型
null第四章 简单构造数据类型 第四章 简单构造数据类型 第四章 简单构造数据类型第四章 简单构造数据类型4.1 一维数组的引出及使用 4.2 二维数组的引出及使用 4.3 字符数组 4.4 数组与函数 4.5 数组与指针 4.6 字符串与指针 4.7 典型例题4.1 一维数组的引出及使用4.1 一维数组的引出及使用例:某班有30名学生,求该班成绩的平均分#include void main( ) { int i, s, sum=0 ; float ave ; for(i=1; i<=30 ; i++) { scanf(“%d”, &s); sum=sum+s; } ave=sum/30; printf(“ave=%f”, ave); }这里只使用了一个变量s,虽然通过循环我们输入了30个学生的成绩,但循环结束后s中只是第30个学生的成绩,前面29个学生的成绩都没有保存下来如果要求保存这30名学生的成绩,最后再输出,应该怎么办?null思考? S0、S1、S2、……、S29数组:由具有相同类型的固定数量的元素组成的集合 数组元素: 每一个数组元素都是一个变量, 用数组名和下标唯一地确定数组元素。为了与一般的变量相区别,我们称数组元素为下标变量 下标变量在数组中的位置序号称下标。 数组中的每个元素属于同一类型null一维数组的定义 格式:类型标识符 数组名 [ 常量 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 达式 ] ; 例:int a[10]; 说明 数组名要符合合法标识符的命名规则 数组长度指数组中元素的个数,由常量表达式的值确定 数组的类型实际上是指数组元素的取值类型。对于同一个数组,所有元素的数据类型都是相同的 数组的下标从0开始 例: int a[10]中a有10个元素,所以数组长度为10, 数组元素分别是: a[0], a[1] … a[8],a[9]null说明(续) 常量表达式中可包括常量和符号常量,但不能包含变量和实数 int n; scanf("%d",&n); int a[n]; int n=6; int a[n]; int b[8.5]; #define SIZE 8 … int a[2+3]; float b[SIZE];说明(续) 数组名表示了一个存储区的首地址(即第一个数组元素的地址) 例: 一个变量x的地址可以用&x来表示; 一个数组a的地址就用数组名a来表示, a等价于&a[0]对null数组元素的引用 形式:数组名[ 下标 ] 说明 下标可以是整型常量或整型表达式 如: a[1] , a[2*3] C语言规定只能逐个引用数组元素而不能一次引用整个数组 对下标的引用不要超过下标的最大值 例:a[5], 最大只能到a[4]#include void main( ) { int j , sum=0 , s[30] ; float ave ; for(j=0; j<=29 ; j++) { scanf(“%d”, &s[j]); sum=sum+s[j]; } ave=sum/30; printf(“ave=%f”, ave); for(j=0; j<30 ; j++) printf(“%d,”, s[j]); } null一维数组的初始化 概念:在定义一维数组时对各个元素指定初始值称为数组的初始化 例: int a[5] = { 1 , 3 , 5 , 7 , 9 } ; 说明 对数组的全体元素指定初值, 初值用 { } 括起来, 数据之间用逗号分开。这种情况下, 可以不指明数组的长度, 系统会根据{ }内数据的个数确定数组的长度。 例:int a[ ] = { 1 , 3 , 5 , 7 , 9 } ; 对数组中部分元素指定初值 ( 这时不能省略数组长度 )。例:int a[5] = { 1 , 3 , 5 }; 使数组中的全部元素初始值都为 0。 例:int a[5] = { 0, 0, 0, 0, 0 } ; 简写为: int a[5]={ 0 } ;null 找到x后结束循环例4-1: 输入一个数据,在已知数组中查找是否有该数据9a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]#include void main( ) { int i , x ; int a[10]={ 5, 8, 0, 1, 9, 2, 6, 3, 7, 4 }; scanf(“%d”, &x); for ( i=0 ; i<10 ; i++) if ( x= =a[i] ) { printf(“find! a[%d]=x\n”, i); break; } if ( i= =10 ) printf(“no find!\n”); } null例4-2: 用冒泡排序法对6个数进行排序(从小到大)a[0] a[1] a[2] a[3] a[4] a[5]277547145151412冒泡排序方法: 依次比较相邻的两个数,将小数放前面, 大数放后面. n个数排序需要进行n-1轮比较, 从第1轮到 第n-1轮, 各轮的比较次数依次为:n-1次、n-2次 … 1次9999972541初始状态第1轮第2轮第3轮第4轮第5轮7null#include void main( ) { int a[6] , i , j , t; for ( i=0 ; i<6 ; i++) scanf(“%d”, &a[i] ); for ( i=0 ; i<6-1 ; i++) for ( j=0 ; j<6-1-i ; j++) if ( a[j]>a[j+1] ) { t=a[j] ; a[j]=a[j+1] ; a[j+1]=t ; } for ( i=0 ; i<6 ; i++) printf( “%3d”, a[i] ); }输入6个数据用嵌套的for循环实现排序 外层循环控制进行几轮比较 内层循环控制每一轮的比较次数若前面的数大于后面的数,则进行交换输出排序后的6个数据null例4-3: 用选择排序法对6个数进行排序(从小到大)a[0] a[1] a[2] a[3] a[4] a[5]79574524795745729712初始状态第1轮第2轮第3轮第4轮第5轮795779选择排序方法: 第1轮比较时,用a[0]依次与a[1]到a[5] 进行比较,如果a[0]较大则进行交换,第1轮结束后,a[0] 中为最小数. 以后各轮比较过程与第1轮类似.null#include void main( ) { int a[6] , i , j , t; for ( i=0 ; i<6 ; i++) scanf(“%d”, &a[i] ); for ( i=0 ; i<6-1 ; i++) for ( j=i+1 ; j<6 ; j++) if ( a[i]>a[j] ) { t=a[i] ; a[i]=a[j] ; a[j]=t ; } for ( i=0 ; i<6 ; i++) printf( “%3d”, a[i] ); }null冒泡程序的改进a[0] a[1] a[2] a[3] a[4] a[5]第1轮第2轮第3轮第4轮第5轮初始状态从这道例题中我们发现,在进行完第二轮后,数据就排好序了, 在第三轮中数据没有进行一次交换,说明排序已经完成了, 第四、五轮的比较都是多余的,这种情况下应该终止排序过程null为了解决问题,在程序中设置一个变量flag, 用它记录在每一轮比较中是否进行了交换在每轮比较开始前flag=0,如果在此轮比较中进行了交换,则flag=1,在一轮比较结束后,判断flag的值是否为1,如果值为1,则继续进行排序; 如果值为0,说明在此轮比较中没有进行交换(即已经完成排序了), 此时可终止循环(即结束排序)#include void main( ) { int a[6] , i , j , t , flag; for ( i=0; i<6; i++) scanf(“%d”, &a[i] ); i=0 ; do { flag=0; for ( j=0 ; j<5-i ; j++) if ( a[j]>a[j+1] ) { t=a[j] ; a[j]=a[j+1] ; a[j+1]=t ; flag=1; } i++ ; } while ( flag ) ; for ( i=0 ; i<6 ; i++) printf( “%3d”,a[i] ); }null选择排序的改进方法 分析选择排序过程发现,在每一轮的比较中交换次数太多,我们可以尽量减少交换次数,实际上每轮比较只要一次进行交换就能完成排序。 改进方法: 先从要排序的n个数中找出最小的数,把它放在第一个位置 再从剩下的n-1个数中找出最小的数,把它放在第二个位置 这样重复做下去,即可 改进后的选择排序方法数据进行比较的次数并没有 减少,但每一轮只进行一次交换,加快了程序运行速度null#include void main( ) { int a[6] , i , j , k , t; for ( i=0 ; i<6 ; i++) scanf(“%d”, &a[i] ); for ( i=0 ; i<5 ; i++) { k=i ; for ( j=i+1 ; j<6 ; j++) if ( a[k]>a[j] ) k=j ; if ( k!=i ) { t=a[i] ; a[i]=a[k] ; a[k]=t ; } } for ( i=0 ; i<6 ; i++) printf( “%3d”, a[i] ); }a[0] a[1] a[2] a[3] a[4] a[5]0k1219 5!=0 a[0]和a[5]换5k1227 2!=1 a[1]和a[2]换 4!=2 a[2]和a[4]换k23447设置变量k用以存储当前最小数的下标4.2 二维数组的引出及使用4.2 二维数组的引出及使用二维数组的定义 概念:一个一维数组, 它的每一个元素都是类型相同的一维数组, 就形成一个二维数组 形式: 类型标识符 数组名 [常量表达式1] [常量表达式2] 例: int a[3][4] ; a[0] a[1] a[2]null存储形式 : 数组的元素在内存中是连续存放的 例:int a[3][3] ; 数组a的存放形式如下 : a[1][0]a[1][1]a[1][2]a[2][0]a[2][1]a[2][2]a[0][0]a[0][1]a[0][2]a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] a[2][0] a[2][1] a[2][2]1010 1012 1014 1016 1018 1020 1022 1024 1026二维数组的引用 形式:数组名 [下标1] [下标2] 注意: 每个下标都要用 [ ] 括起来 如 a [2] [1] 不能写成 a [2,1] 下标不要超过定义的范围 null二维数组的初始化 分行初始化: int a[3][4]={{ 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 }}; 第1对{ }内的数据赋给第1行数组元素, 以此类推 1 2 3 4 5 6 7 8 9 10 11 12 按数据的排列顺序对数组元素赋初值 例:int a[3][4]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; 将数据依次赋给元素 a[0][0] , a[0][1] …a[2][3] null对数组的部分元素赋初值int a[3][4]={1,2,3,4,5,6}; int a[3][4]={{1, 2},{3},{0, 4}}; 对数组的全部元素赋初值时可以省略第一维的长度,系统会根据数据的个数和第二维的长度自动求出第一维的长度数组a第一维长度为 3 数组b第一维长度为 4 int a[ ][4]={ {1, 2}, { 0, 3, 4 }, { 5 } } ; int b[ ][2]={ 1, 2, 3, 4, 5, 6, 7, 8 } ;null例4-4: 找出矩阵中最大的数,并输出其行号和列号#include void main( ) { int i , j, row=0, col=0, max ; int a[3][4]={{5,2,0,9},{3,7,12,6},{10,4,1,8}}; max=a[0][0]; for ( i=0; i<3; i++ ) for ( j=0; j<4; j++ ) if ( a[i][j]>max ) { max=a[i][j] ; row=i ; col=j ; } printf(“max=%d\n”, max); printf(“max=a[%d][%d]\n”, row , col); }max0row0col59301212输出: max=12 max=a[1][2]null#include void main( ) { int a[3][4], b[4][3] , i , j ; for ( i=0 ; i<3 ; i++ ) for ( j=0 ; j<4 ; j++ ) scanf(“%d”, &a[i][j] ) ;3 7 12 610 4 1 85 2 0 9输入数组a进行矩阵转置a[0][2]b[2][0]a[2][1]b[1][2]输出数组bfor ( i=0 ; i<3 ; i++ ) for (j=0 ; j<4 ; j++) b[j][i]=a[i][j]; for ( i=0 ; i<4 ; i++ ) { for ( j=0 ; j<3 ; j++ ) printf(“%5d”, b[i][j]) ; printf(“\n”); } }例4-5:将一个矩阵进行转置(即原来的行变为列)4.3 字符数组4.3 字符数组字符数组和字符串 字符数组的定义:char 数组名[字符个数] 例: char c[10]; 字符串:由若干个有效字符组成的序列,有效字符包括字母, 数字, 专用字符, 转义字符等 例 : “bfer” “a45-7” “m\tk\n” 字符串的存储:C语言中没有专门的字符串变量, 因此字符串存放在字符数组中, 字符串以“\0”作为结束标志 nullchar c[8] = { “Hello” } ; char c[8] = “Hello” ; char c[8] = { ‘H’,‘e’,‘l’,‘l’,‘o’,‘\0’ } ;char c[ ] = “Hello”;char c[6]=“Hello”; char c[5] = “Hello”;注意: 初始化时数组长度应足够大, 确保可以容纳所有字符和‘\0’字符数组的初始化:为数组中的元素指定初值 例:char c[7] = { ‘H’,‘e’,‘l’,‘l’,‘o’ } ; 如果对数组全部元素指定初值, 则可省略数组的长度 例: char c[ ] = {‘H’ , ‘e’ , ‘l’ , ‘l’ , ‘o’ } ;对字符数组指定字符串初值null字符串的输入 输入单个字符 例: char c[8] ; int i ; for ( i=0 ; i<8 ; i++ ) scanf(“%c” , &c[i] ) ; 输入一个字符串: scanf ( “%s” , c ) ; 字符串输入函数: gets (字符数组) 例 : gets(c) ; 说明 用格式字符 %s 输入字符串时, 字符数组变量c不必加地址符& , 因为数组名本身代表数组的首地址 从键盘输入字符串时不加“ ” 用scanf 输入字符串时, 空格和回车符都会作为字符串的分隔符,即scanf不能用来输入包含有空格的字符串null int i ; char c[8]; ① for ( i=0 ; i<8 ; i++ ) scanf(“%c”,&c[i]) ; ② scanf(“%s” , c ) ; ③ gets ( c ) ; 例: 假设输入为: abc def↙说明: 输入有空格的字符串时应使用函数gets , 它会读入全部字符直到遇到回车符为止null字符串的输出 输出单个字符: char c[8]= “hello”; for ( i=0 ; i<8 ; i++ ) printf( “%c%c” , c[0] , c[1] ) ; printf( “%c” , c[i] ) ; 输出字符串: printf( “%s” , c ) ; 字符串输出函数: puts ( 字符数组 ) 一次输出一个字符串, 输出时将‘\0’自动转换成换行符 注意: 输出时不包括字符‘\0’, 如果一个字符串中有多个‘\0’ , 则输出时遇到第一个‘\0’即认为字符串结束 null例: char s1[5]=“abc”, s2[10]=“defg” ; printf( “%s%s\n” , s1 , s2 ) ; puts( s1 ) ; puts( s2 ) ;输出: abcdefg abc defg int i ; char c[8]; gets ( c ) ; for ( i=0 ; i<8 ; i++ ) printf(“%c”, c[i] ); printf(“\n”) puts ( c ); 例: 假设输入为: abc defgh↙输出: abc defg abc defgh注意: 用gets输入字符串时, 若输入字符数目大于字符数组的长度, 多出的字符则会存放在数组的合法存储空间之外null 错// 赋值与初始化不同 // 对s2,s3的赋值都是非法的 字符串处理函数 (要加#include ) 字符串复制函数 :strcpy( 字符数组变量1 , 字符串2 ) 作用 : 将字符串2中的字符复制到字符数组1中 注意 : 字符数组1 必须足够大 字符串2可以是字符串常量, 或是字符数组变量 拷贝时‘\0’也一起拷贝 例: char s1[5]=“abc” , s2[3] , s3[8] ; s2 = “abc” ; s3 = s1 ; 注意: C语言不允许用赋值表达式对字符数组赋值 如果想让s2或s3中也存放字符串“abc”,则 要用字符串拷贝函数 null例: char s1[5]=“abc” , s2[3] , s3[8] ; strcpy ( s3 , s1 ) ; strcpy ( s2 , s1 ) ;s1s3s2c1c2字符串复制函数的扩展格式 : strncpy( 字符数组1 , 字符串2 , n ) 作用: 将字符串2的前n个字符复制到字符数组1 中 例: char c1[10]=“program” , c2[ ]=“abcdef” ; strncpy( c1 , c2 , 3 ) ;null例: char s1[10]=“abc” , s2[ ]=“def” ; strcat ( s1 , s2 ) ; strcat ( s1 , “gh” ) ; s1s2def\0gh\0字符串连接函数 格式: strcat ( 字符数组变量1 , 字符串2 ) 作用: 将字符串2中的字符连接到字符串1 的后面,产生的新字符串仍存放在字符数组1 中 说明: 连接时将字符串1 末尾的‘\0’将去掉 , 而在连接后的新字符串末尾添加‘\0’ 注意: 字符数组1要足够大nullstr1 = = str2 函数值为0 str1 > str2 函数值为正数 str1 < str2 函数值为负数字符串比较函数 格式 : strcmp ( 字符串1 , 字符串2 ) 作用 : 比较两个字符串的大小 说明 : 两个字符串可能是字符串常量或字符数组变量 两个字符串比较时, 从字符串中的第一个字符开始逐个比较其ASCII码值, 直到出现不同字符或出现‘\0’为止 比较的结果由函数值带回对两个字符串比较,不能以下形式: if(str1==str2) printf(“yes”); 而只能用: if(strcmp(str1,str2)==0) printf(“yes”);null例: char s1[5] , s2[5] ; if(strcmp (“abc”, “def”)<0) printf(“yes”); strcpy( s1 , “dfg” ) ; strcpy( s2 , “you” ) ; if(strcmp ( s1 , “def” )==0) printf(“equal”); if(strcmp ( s1 , s2 )>0) printf(“big”); 字符‘a’与‘d’比较 先‘d’与‘d’比较, 相同, 然后‘f ’与‘e’比较字符‘d’与‘y’比较s1s2null例 : int len1, len2 ; char s[10] ; len1 = strlen( “computer”) ; gets(s) ; len2 = strlen(s) ;测字符串长度函数 格式: strlen (字符串) 作用: 测出字符串中实际字符的个数( 不包括‘\0’ ) 字符串中大、小字母转换 strlwr (字符串) : 将字符串中大写字母换成小写字母 strupr (字符串) : 将字符串中小写字母换成大写字母null10101例4-6:输入一行字符, 统计其中有多少个单词 分析: 用一个字符数组来保存一行字符,因为单词是由空格分开的, 所以统计单词个数关键在于判断某个字符是否为空格 具体方法: 设置一个标志变量word, 如果当前字符是空格, 则word=0; 如果当前字符不是空格, 则word=1null#include void main( ) { char string[81]; int i, num=0, word=0; char c; gets(string); for(i=0; (c=string[i])!= '\0'; i++) if (c==' ') word=0; else if (word==0) { word=1; num++; } printf (“There are %d words.\n”, num); } num用来统计单词个数, word是判别是否为单词的标志, 若word=0表示未出现单词, 如出现单词word就置成1c不是空格, 若c前面的字符是空格, 表明这是一个新单词的开始, 则word=1, num加1; 若c前面的字符不是空格, 则不作任何处理nullxy7\0s2s1目标: 将字符串s2 连接到字符串s1后面例4-7:编程实现两个字符串的连接, 但不能使用strcat函数步骤: 让数组s1 的下标指向字符串的末尾, 即‘\0’的位置 依次将数组s2 的字符赋给s1, 它们的下标都加1 最后数组s1 的末尾赋值为‘\0’null#include void main( ) { char s1[80], s2[40]; int i=0, j=0; printf(“Input string1:”); gets(s1); printf(“Input string2:”); gets(s2); while(s1[i]!='\0') i++; while(s2[j]!='\0') s1[i++]=s2[j++]; s1[i]='\0'; printf(“The new string is: %s”, s1); } i 和j分别是s1 和s2的下标当元素i不是‘\0’ 时, 让i加1,指向下个元素依次将s2的元素j赋给s1的元素is1[i]=s2[j]; i++; j++;S1末尾赋‘\0’4.4 数组与函数4.4 数组与函数数组元素作函数参数 其用法与变量作参数一样, 是单向传递 数组名作函数参数 实参和形参都使用数组名 说明 必须在主调函数和被调函数中分别定义数组 实参数组和形参数组的类型必须一致 数组名作参数就是将实参数组的首地址传给形参数组,即实参数组和形参数组占用同一片内存单元 定义形参数组时可以不指定其大小,当形参数组发生变化时, 实参数组也随之发生变化 null例4-8-1: 求某班成绩的平均分#include float average(int a[40]); void main( ) { int i , s[40] ; float aver ; for(i=0; i<=39 ; i++) scanf(“%d”, &s[i]); aver=average(s); printf(“aver=%f\n”, aver); } float average(int a[40]) { int i ; float sum , ave ; sum=0; for(i=0; i<=39 ; i++) sum=sum+a[i]; ave=sum/40; return(ave); } 数组占用 存储空间 s[0] s[1] s[2] : : : : s[39]mainaveragea[0] a[1] a[2] : : : : a[39] 78 84 90 : : : : 66null例4-8-2:形参数组不指定长度的使用方法#include float average(int a[ ], int n); void main( ) { int i , s[40] ; float aver ; for(i=0; i<=39 ; i++) scanf(“%d”, &s[i]); aver=average(s, 40); printf(“aver=%f\n”, aver); } float average(int a[ ], int n) { int i ; float sum , ave ; sum=0; for(i=0; i void main( ) { int a[5]={1, 3, 5 ,7 ,9 }, *p , i ; for( i=0; i<5; i++) printf(“%3d”, a[i]); printf(“\n”) ; for(i=0; i<5; i++) printf(“%3d”, *(a+i)); printf(“\n”) ; for (p=a; p void main( ) { int a[5] = {1, 3, 5 ,7 ,9 }, int *p , j ; for ( p=a ; p void inv1( int x[ ] , int n ) { int temp, i , j , m=(n-1)/2; for( i=0 ; i<=m; i++) { j=n-1-i ; temp=x[i] ; x[i]=x[j]; x[j]=temp ; } } void main( ) { int i , a[6]={ 1, 3, 4, 6, 7, 9 }; inv1(a , 6 ); for( i=0; i<6; i++ ) printf(“%3d”, a[i] ); printf(“\n”); }a[0] a[1] a[2] a[3] a[4] a[5]x[0] x[1] x[2] x[3] x[4] x[5]maininv19114736423数组名作函数参数: ① 实参和形参都用数组名null#include void inv2(int *x , int n) { int temp, m=(n-1)/2; int *p , *i , *j ; i=x ; j=x+n-1; p=x+m; for( ; i<=p ; i++, j-- ) { temp=*i ; *i=*j ; *j=temp ; } } void main( ) { int i , a[6]={ 1, 3, 4, 6, 7, 9 }; inv2(a , 6 ); for( i=0; i<6; i++ ) printf(“%3d”, a[i] ); printf(“\n”); }a[0] a[1] a[2] a[3] a[4] a[5]inv29173641a+1a+4a+2a+334a+3a+2例4-16 ②实参用数组名, 形参用指针变量null例4-16: ③实参和形参都用指针变量 #include void inv3(int *x , int n); void main( ) { int *p , a[6]={1, 3, 4, 6, 7, 9}; p = a ; inv3( p , 6 ); for( p=a ; p void inv4(int x[ ] , int n); void main( ) { int *p, a[6]={1, 3, 4, 6, 7, 9}; p = a ; inv4( p , 6 ) ; for( p=a ; p int max , min ; void m1(int arr[ ] , int n) { int *p , *end ; end=arr+n ; max=min=*arr ; for(p=arr+1 ; pmax ) max=*p ; else if( *p void main( ) { char a[20], b[20]; int i=0; gets(a); gets(b); while((*(a+i) == *(b+i))&&*(a+i)!= '\0') i++; if(*(a+i)== '\0'&&*(b+i)== '\0') printf(“%s = %s\n”, a, b); else if(*(a+i)>*(b+i)) printf(“%s > %s\n”, a, b); else printf(“%s < %s\n”, a, b); }方法1: 用字符数组实现ab1234例4-18:按字典排列法比较两个单词的大小null#include void main( ) { char a[20], b[20], *sa, *sb; sa=a; sb=b; gets(sa); gets(sb); while((*sa == *sb) && *sa != '\0') { sa++; sb++; } if(*sa == '\0'&&*sb == '\0') printf(“%s = %s\n”, sa, sb); else if(*sa>*sb) printf(“%s > %s\n”, sa, sb); else printf(“%s < %s\n”, sa, sb); }方法2: 用字符指针实现null例4-19-1: 实现字符串复制 void copystr(char from[ ] , char to[ ]) { int i = 0 ; while ( from[i]!=‘\0’ ) { to[i] = from[i] ; i++; } to[i] = ‘\0’; } void mani( ) { char a[ ] = “cat” , b[ ] = “tiger”; puts(a); puts(b); copystr(a , b); puts(a); puts(b); }abcat\0相当于b[i]=a[i]字符串指针作函数参数null例4-19-2: void copystr(char *from , char *to) { for( ; *from!=‘\0’ ; from++ , to++ ) *to = *from ; *to = ‘\0’; } void main( ) { char *a = “cat” , *b = “tiger”; puts(a); puts(b); copystr(a , b); puts(a); puts(b); } abcat\0a+1b+1a+2b+2a+3b+3
本文档为【第四章 简单构造数据类型】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_636997
暂无简介~
格式:ppt
大小:734KB
软件:PowerPoint
页数:0
分类:工学
上传时间:2011-06-17
浏览量:18