为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

数组

2010-12-23 50页 ppt 434KB 19阅读

用户头像

is_050708

暂无简介

举报
数组null第七章 数组第七章 数组教学目的要求: 1、掌握一维、二维数组的定义、存储与初始化 2、熟练掌握一维、二维数组元素的引用 3、理解并熟练掌握数组的应用(选择法及折半查找算法) 4 、掌握字符数组与字符串 5、掌握字符串处理函数 6、灵活掌握数组作为函数的参数的应用 7、理解并熟练掌握冒泡法及杨辉三角 重点·难点: 1、一维、二维数组的引用与存储 ...
数组
null第七章 数组第七章 数组教学目的要求: 1、掌握一维、二维数组的定义、存储与初始化 2、熟练掌握一维、二维数组元素的引用 3、理解并熟练掌握数组的应用(选择法及折半查找算法) 4 、掌握字符数组与字符串 5、掌握字符串处理函数 6、灵活掌握数组作为函数的参数的应用 7、理解并熟练掌握冒泡法及杨辉三角 重点·难点: 1、一维、二维数组的引用与存储 2、数组的应用(选择法及折半查找算法进行排序) 3、字符数组与字符串处理函数 4、数组作为函数的参数 5、冒泡法及杨辉三角 概述概述除基本类型之外,C语言还提供了构造类型的数据,它们有: 数组类型、结构体类型、共用体类型。构造类型数据是由基本 类型数据按一定规则组成的,因此也可以称之为“导出类型”。数组是有序数据的集合。 (a)数组中的每一个元素都属于同一个数据类型。 (b)用一个统一的数组名和下标,唯一的确定数组中的元素。一维数组的定义一维数组的定义一、定义方式: 类型说明符 数组名 [ 常量达式 ] ;二、说明: (1) 数组名定名规则和变量名相同,遵循标识符定名规则。例如: int a [ 10 ]; 表示数组名为a , 且有10个元素,每个元素为整型数据.(2)数组名后是用方括弧括起来的常量表达式,不能用圆括弧。下面的用法是错误的: int a(10);(3)常量表达式表示元素的个数,即数组长度。 例如: 在a[10]中,10表示a数组中有10个元素,下标从0开 始,这10个元素是:a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9]注意:不能使用数组元素a[10];一维数组的定义(4)常量表达式可以包括常量和符号常量,不能包含变量。C不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。 例如:下面这样定义数组是不行的: int n; scanf(“%d”,&n); int a[n];更准确的说法是 整型常量表达式一维数组的定义null例 int i=15; int data[i]; (不能用变量定义数组维数)合法标识符表示元素个数 下标从0开始编译时分配连续内存 内存字节数=数组维数* sizeof(元素数据类型)数组名表示内存首地址, 是地址常量int a[10];数组在内存的存放形式一维数组元素的引用 一、规则: (1)数组必须先定义,后使用。一维数组元素的引用(2)数组元素的使用形式为: 数组名 [ 下标 ] 下标可以是整型常量或整型表达式, 例如: a[0]=a[5]+a[7]-a[2*3];注意: C语言规定只能逐个引用数组元素,不能一次引用整个数组. main() { int i ,a[10]; for( i =0; i<=9; i ++) a[ i ]= i ; for(i=0;i<=9;i++) printf(“%d,”,a[i]) ; }程序使a[0]到a[9]的值为0-9, 然后按顺序输出如果按逆序输出运行结果: 0, 1, 2, 3, 4, 5, 6,7,8,9,for(i=9;i>=0;i--) printf(“%d”,a[i]);运行结果: 9,8,7,6,5,4,3,2,1,0,一维数组的初始化1、在定义数组时对数组元素赋以初值。一维数组的初始化例如:int a[10]={ 0,1,2,3,4,5,6,7,8,9 };初始化之后:a[0]=0,a[1]=1,……a[8]=8,a[9]=9。2、可以只给一部分元素赋值.例如:int a[10]={0,1,2,3,4}; 只给前五个元素赋值,后五个元素为0。 初始化之后:a[0]=0,a[1]=1,a[2]=2,a[3]=3,a[4]=4, a[5]=0,……,a[8]=0,a[9]=0。3、如果想使一个数组中全部元素值为0,可以写成 int a[10]={0,0,0,0,0,0,0,0,0,0};不能写成 int a[10]={0*10};一维数组的初始化4、对全部数组元素赋初值时,可以不指定数组长度。一维数组的初始化例如:int a[]={1,2,3,4,5};上面的写法中,{ }中只有五个数,系统会据此自动定义数组的长度为5。 初始化之后:a[0]=1,a[1]=2,a[2]=3,a[4]=4,a[5]=5。如果被定义的数组长度与提供初值的个数不同,则数组长度不能省略。例如:想定义数组长度为10,就不能省略数组长度的定义。而必须写成 int a[10]={ 1,2,3,4,5}; 只初始化前面5个元素,后5个元素为0。不能写成 int a[ ]={1,2,3,4,5};注意:对部分元素赋初值时,长度不能省。一维数组的程序举例一维数组的程序举例例: 用数组来处理Fibonacci数列问题。程序如下:/*行号1*/ main( ) /*行号2*/ { int i; /*行号3*/ int f[20]={1,1}; /*行号4*/ for(i=2,i<=20;i++) /*行号5*/ f [ i ]=f [ i -1]+f [ i -2]; /*行号6*/ for(i=0,i<20;i++) /*行号7*/ { /*行号8*/ if( i %5= =0) printf(“\n”); /*控制换行,每行输出五个数*/ /*行号9*/ printf(“%12d”,f [ i ]); /*行号10*/ }}F(n)= F(n-1)+ F(n-2)运行结果: 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 例: 输入10个数并从中找出最大者.main( ) { int a[10] ,i , j , max ; printf( “ input 10 numbers: \n ” ) ; for( i = 0 ; i < 10 ; i + + ) scanf( “ %d ” , & a [ i ] ) ; printf( “ \n ” ) ; max = a [ 0 ] ; i = 1 ; for( ; i < 10 ; ) { if ( max < a [ i ] ) max = a [ i ] ; i + + ; } printf(“\nmax=%d”,max); } 例: 输入10个数并从中找出最大者.一维数组的程序举例一维数组的程序举例例 : 用起泡法对n个数排序(由小到大)。起泡法的思路是:将相邻两个数比较,将小的调到前头。例如:对一个这样的序列排序:9,8,5,4,2,0(一共有6个数)(1) 9 8 5 4 2 0 /*9>8,交换*/(2) 8 9 5 4 2 0 /*9>5,交换*/(3) 8 5 9 4 2 0 /*9>4,交换*/(4) 8 5 4 9 2 0 /*9>2,交换*/(5) 8 5 4 2 9 0 /*9>0,交换*/第一轮结束 8 5 4 2 0 9那么第一轮进行了 n-1=6-1=5 次比较即循环了5次一维数组的程序举例一维数组的程序举例第二轮交换:(1) 8 5 4 2 0 9 /*8>5,交换*/(2) 5 8 4 2 0 9 /*8>4,交换*/(3) 5 4 8 2 0 9 /*8>2交换*/(4) 5 4 2 8 0 9 /*8>0,交换*/第二轮结束 5 4 2 0 8 9那么第二轮进行了 n-2=6-2=4 次比较即循环了4次总结:第 i 轮进行了 n- i 比较即循环了n- i 次.一共要n-1轮比较即外围循环n-1次一维数组的程序举例一维数组的程序举例算法的N-S结构流程图如下: a[ i]>a[ i+1]for i =0 to n-j-1for j=1 to n-1输入n个数给a[0]到a[n-1] 真假t=a[i]; a[ i]=a[i+1]; a[i+1]=t;输出a[0]到a[n-1]源程序如下: main() {int a[10], i,j,t; for(i=0;i<10;i++) scanf(“%d”,&a[i]);for(j=0;j<10;j++) for(i=0;i<=10-j-1;j++) if(a[i]>a[i+1]) {t=a[i]; a[i]=a[i+1]; a[i+1]=t;} for(i=0;i<10;i++) printf(“%d”,a[i]); }null求2-100以内的素数 题目:首先定义一个int型数组b[100],将b当作一个筛子,并规定当b[i]的值为非0时,表示整数i在筛中。2为素数,将2输出,然后将筛中2的倍数筛去,即将下标为2的倍数的元素清零。此时,筛中下一个非零元素为b[3],说明3为素数将其输出,然后再将下标为3的倍数的元素清零(筛去3的倍数)。这样,在下一个元素为b[5],将5输出并筛去5的倍数,……,直到筛中无非零元素为止。源程序: main() {int b[100],i,j; b[0]=b[1]=0; for(i=2;i<100;i++) b[i]=i; for(i=2;i<100;i++) if(b[i]!=0) {printf(“%4d”,i); for(j=i;j<100;j+=i) b[j]=0;}}二维数组的定义二维数组的定义1、一般形式: 类型说明符 数组名[常量表达式][常量表达式]例如:int a[3][4];包含:a[0][0],a[0][1],a[0][2],a[0][3] a[1][0],a[1][1],a[1][2],a[1][3] a[2][0],a[2][1],a[2][2],a[2][3] 定义了一个3*4(3行4列)的数组.注意: 不能写成 int a[3,4];二维数组的定义二维数组的定义可以把二维数组看作是 一种特殊的一维数组:它的元素又是一个一维数组.例如: int a[3][4]; /*定义了一个3*4(3行4列)的数组. */我们可以将a看成一个一维数组:a[0]、 a[1]、 a[2], 每个元素又是包含4个元素的一维数组。 a[0]----- a[1]-----a[2]-----a[0][0] a[0][1] a[0][2] a[0][3]a[1][0] a[1][1] a[1][2] a[1][3]a[2][0] a[2][1] a[2][2] a[2][3] a二维数组的存放二维数组的存放 2、存放顺序: 按行存放,即在内存中先顺序存放第一行的元素,再存放 第二行的元素。int a[3][4];a[0][0] a[0][1] a[0][2] a[0][3]a[1][0] a[1][1] a[1][2] a[1][3]a[2][0] a[2][1] a[2][2] a[2][3]二维数组的引用1、数组元素的表示形式: 数组名[下标][下标] 二维数组的引用例如:a[3][4] 区分在定义数组时用的a[3][4]和引用元素a[3][4]下标可以是整型表达式 例如:a[2-1][2*2-1]数组元素可以出现在表达式中,也可以被赋值。 例如:b[1][2]=a[2][3]/2;2、注意:使用数组元素时,下标值应该在定义的数组大小的范围内。不要出现这样的错误: 例如:int a[3][4]; a[3][4]=3;二维数组的初始化1、分行给二维数组赋初值。二维数组的初始化例如:int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};2、可以将所有数据写在一个花括弧内,按数组排列的顺 序对各元素赋初值。例如:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};二维数组的初始化二维数组的初始化3、可以对部分数据赋初值。例如: int a[3][4]={{1},{5},{9}};例如: int a[3][4]={{1},{0,6},{0,0,11}};例如: int a[3][4]={{1},{5,6}};例如: int a[3][4]={{1},{},{0,0,11}};二维数组的初始化二维数组的初始化4、如果对全部元素赋初值(即提供全部初始数据),则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。例如:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 等价于:int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};如果定义时也可以只对部分元素赋初值而省略第一维的长度,但应该分行赋初值:例如:int a[][4]={{0,0,3},{},{0,10}};null例 7.4 有一个3*4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号. a[i][j]>maxfor j =0 to 3for i=0 to 2max=a[0][0] 真max=a[ i][j]; row=i; colum=j;假输出:max,row,colummain() { int i,j,row=0,colum=0,max; int a[3][4]={{1,2,3,4},{9,8,7,6}, {-10,10,-5,2}}; max=a[0][0]; for(i=0;i<=2;i++) for(j=0;j<=2;j++) if(a[i][j]>max) {max=a[i][j];row=i;colum=j;} printf(“%d,%d,%d”,max,row,colum); }null06.4-16以下数组定义中错误的是 A) int x[][3]={0}; B) int x[2][3]={{l,2},{3,4},{5,6}}; C) int x[][3]={{l,2,3},{4,5,6}}; D) int x[2][3]={l,2,3,4,5,6}; 06.4-8以下程序的输出结果是 。 main() { int a[3][3]={{1,2,9},{3,4,8},{5,6,7}},i,s=0; for(i=0;i<3;i++) s+=a[i][i]+a[i][3-i-1]; printf(“%d\n”,s); } 等 考 实 例(B)3006.4-34有以下程序 main() { int i,t[][3]={9,8,7,6,5,4,3,2,1}; for(i=0;i<3;i++) printf(“%d”,t[2-i][i]); } 程序执行后的输出结果是 A)7 5 3 B)3 5 7 C)3 6 9 D)7 5 1(B)字符数组定义字符数组定义用来存放字符数据的是字符数组. 字符数组中的一个元素存放一个字符.1、定义方式:字符数组的定义与前面介绍的数值数 组相同。例如: (1)char c[5]={‘c’,’h’,’i’,’n’,’a'}; c[0]=‘c’;c[1]=‘h‘;c[2]=‘i’;c[3]=‘n’;c[4]=‘a’;当数组中的元素全部初始化,定义时数组的长度可以省略, 注意不同的初始化方式会导致数组长度的不同c[](2)char c[6]={“china”}; 或 char c[6]=“china” c[0]=‘c’;c[1]=‘h‘;c[2]=‘i’;c[3]=‘n’;c[4]=‘a’;c[5]=‘\0’;c[]c[]字符数组定义字符数组定义2.说明: (1)由于字符型和整型通用,也可以定义为int c[10]。 但这时每个数组元素占2个字节的内存单元。 char c[10];占1个字节int c[10];占两个字节字符数组定义字符数组定义(2)字符数组也可以是二维或多维数组。char a[3][4]={{‘I’,’a’},{‘ ’,’d’}};例如:char c[5][10];即为二维字符数组。 char a[3][4]={“Ia”,” d”};当数组中各个串的内容被初始化, 定义时可以省略数组的第一维大小字符数组的初始化 1、字符数组允许在类型说明时作初始化赋值,逐个对数组 元素进行初始化。例如: char c[10]={‘I’,’ ‘,’a’,’m’,’ ’,’h’,’a’,’p’,’p’,’y’};字符数组的初始化(1)初值个数等于数组元素长度时,依次赋值。(2)初值个数大于数组元素长度时,做语法错误处理。例如: char c[10]={‘I’,’ ’,’a’,’m’,’ ’,’h’,’a’,’p’,’p’,’y’,’!’};字符数组的初始化字符数组的初始化例如:static char c[10]={`w`,` h `,`o`,` `,’a’,m`, ‘’,`I`}; 赋值后各元素的值为:(3)初值个数小于数组元素长度时,则后面的元素自动置 为空字符(也就是‘\0’)。其中c[8] 、c[9]未赋值,由系统自动赋予\0值。(4)当对全体元素赋初值时也可以省去长度说明。例如:static char c[ ]={`c`,` `,`p`,`r`,`o`,`g`,`r`,`a`,`m`}; 这时C数组的长度自动定为9。字符数组的引用输出结果: BASIC dBASE字符数组的引用1、输出一个字符串例: 写出下面程序的运行结果。 main( ) { int i,j; char a[][5]={{'B','A','S','I','C',},{'d','B','A','S','E'}}; for(i=0;i<=1;i++) { for(j=0;j<=4;j++) printf("%c",a[i][j]); printf("\n"); } }字符数组的引用(2)字符数组的引用(2)2、输出一个钻石图形例: 写出下面程序的运行结果。 main( ) { int i,j; char diamond[][5]={{‘ ’,’ ‘,’*’}, {’ ’,’*’,’ ‘,’*’}, {‘*’,’ ’,’ ’,’*’}, {‘ ’,’*’,’ ’,’*’}, {‘ ’,’ ’,’*’}}; for(i=0;i<5;i++) { for(j=0;j<5;j++) printf("%c",diamond[i][j]); printf("\n"); } } * * * * * * * *字符串和字符串结束标志 1.总领: (1)在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。字符串和字符串结束标志字符串总是以‘\0’作为串的结束符。因此当把一个字符串存入一个数组时, 也把结束符'\0'存入数组,并以此作为该字符串是否结束的标志。有了'\0'标志后,就不必再用字符数组的长度来判断字符串的长度了。(2)`\0`代表ASCII码为0的字符,从ASCII码表中可以查到,ASCII码为0的字符不是一个可以显示的字符,而是一个“空操作符”,即它什么也不干。用它来作为字符串结束标志不会产生附加的操作或增加有效字符,只起一个供辨别的标志。字符数组的输入输出(1)字符数组的输入输出方法: (1)逐个字符输入输出。用格式符“%c”输入或输出一个字符。字符数组的输入输出(1)(2)将整个字符串一次输入或输出。用“%s”格式符,意思是 输出字符串(String)。例如:static char c[10]={`w`,` h `,`o`,` `,’a’,m`, ‘’,`I`,’!’};printf(“%s”,c);字符数组的输入输出(3)字符数组的输入输出(3)注意: 1、输出字符不包括结束符`\0`。4、如果一个字符数组中包含一个以上`\0`,则遇第一个 `\0`时输出就结束。2、用“%s”格式符输出字符串时,printf函数中的输出 项是字符数组名,而不是数组元素名。3、如果数组长度大于字符串实际长度,也只输出到遇 `\0`结束。例如:printf(”%s”,c[0]);如果利用一个scanf函数对数组输入一个字符串 scanf(“%s”,c); scanf函数中的输入项是字符数组名,而不是数组元素名null例: 写出下面程序的输出结果: main( ) { static char c[]="BASIC\ndBASE"; printf("%s\n",c); }输出结果: BASIC dBASE例: 写出下面程序的输出结果: main( ) { static char c[]="BASIC\0dBASE"; printf("%s\n",c); }输出结果: BASICnull 例: 写出下列程序的功能: main( ) { char st[15]; printf("input string:\n"); scanf("%s",st); printf("%s\n",st); } 注意:当用scanf函数输入字符串时,字符串中不能含有空格,否 则将以空格作为串的结束符。 例如:当输入的字符串中含有空格时,运行情况如下。 input string: this is a book this从输出结果可以看出空格以后的字符都未能输出。 为了避免这种情况,可多设几个字符数组分段存放含空格的串。 main( ) { char st1[6],st2[6],st3[6],st4[6]; printf("input string:\n"); scanf("%s%s%s%s",st1,st2,st3,st4); printf("%s %s %s %s\n",st1,st2,st3,st4); }null 5.在前面介绍过,scanf的各输入项必须以地址方式出现,如 &a,&b等。但在上例中却是以数组名方式出现的,这是为什么呢?这是由于在C语言中规定,数组名就代表了该数组的首地址。 整个数组是以首地址开头的一块连续的内存单元。如有字符数组char c[10],在内存中设数组c的首地址为2000,也就是说c[0]单元地址为2000。则数组名c就代表这个首地址。因此在字符数组c前面不能再加地址运算符&。如写作scanf("%s",&c);则是错误的。在执行函数printf("%s",c) 时,按数组名c找到首地址,然后逐个输出数组中各个字符直到遇到字符串终止标志'\0'为止。 null字符串处理函数: 1.  字符输出函数puts (1)格式:puts(字符数组名) (2)作用:将一个字符串(以`\0`结束的字符序列)输出到终端。 例: #include"stdio.h" main() { static char c[]="BASIC\ndBASE"; puts(c); } 从程序中可以看出puts函数中可以使用转义字符, 因此输出结果成为两行。puts函数完全可以由printf函数取代。当需要按一定格式输出时,通常使用printf函数。 null 2.gets(字符数组) (1)格式:gets(字符数组名) (2)作用:从终端输入一个字符串到字符数组,并且得到一 个函数值。该函数值是字符数组的首地址。 例: #include"stdio.h" main( ) { char st[15]; printf("input string:\n"); gets(st); puts(st); } 可以看出当输入的字符串中含有空格时,输出仍为全部字符串。说明gets函数并不以空格作为字符串输入结束的标志, 而只以回车作为输入结束。 注意:puts和 gets函数只能输入或输出一个字符串。null3.字符串连接函数strcat (1)格式:strcat(字符数组名1,字符数组名2) (2)作用:连接两个字符数组中的字符串,把字符串2接到字符 串1 的后面,结果放在字符数组1中,函数调用后得 到一个函数值——字符数组1的地址。 例: #include"string.h" main( ) { static char st1[30]="My name is "; int st2[10]; printf("input your name:\n"); gets(st2); strcat(st1,st2); puts(st1); } 本程序把初始化赋值的字符数组与动态赋值的字符串连接起来。 说明:1.字符数组1必须足够大,以便容纳连接后的新字符串。 2.连接前两个字符串的后面都有一个`\0`,连接时将字符串1 后面的`\0`取消,只在新串最后保留一个`\0`。null4.字符串复制函数strcpy (1)格式:strcpy(字符数组名1,字符数组名2) (2)作用:将字符串2复制到字符串1中。字符数名2也可以是一个字符串常量,相当于把一个字符串赋予一个字符数组。 例: #include"string.h" main( ) { static char st1[15],st2[]="C Language"; strcpy(st1,st2); puts(st1); printf("\n"); } 说明: 1.字符数组1必须定义的足够大,以便容纳被复制的字符串。字符数组1的长度不应小于字符串2的长度。 2.“字符数组1”必须写成数组名形式(如str1),“字符串2” 可以是字符数组名,也可以是一个字符串常量。 3.复制时连同字符串后面的`\0`一起复制到字符数组1中。 4.不能用赋值语句将一字符串常量或字符数组直接给一字符数组。null5.字符串比较函数strcmp (1)格式:strcmp(字符数组名1,字符数组名2) (2)作用:比较字符串1和字符串2。 (3)规则: A:对两个字符串自左至右逐个字符相比(按照ASCII码值大小比较),直到出现不同的字符或遇到`\0`为止。如全部字符相同,则认为相等;若出现不相同的字符,则以第一个不相同的字符的比较结果为准。并由函数返回值返回比较结果。 B.比较的结果由函数值带回。 (I)如果字符串1==字符串2,函数值为0; (II)如果字符串1>字符串2,函数值为一正整数; (III)如果字符串1<字符串2,函数值为一负整数。 注意:对两个字符串比较时的书写格式。 例如:if (str1=str2) printf("yes"); 是不行的; 而应该使用 if (strcmp(str1,str2)==0) printf("yes"); null例: #include"string.h" main( ) { int k; static char st1[15],st2[]="C Language"; printf("input a string:\n"); gets(st1); k=strcmp(st1,st2); if(k==0) printf("st1=st2\n"); if(k>0) printf("st1>st2\n"); if(k<0) printf("st1st2”。null 6.测试字符串长度函数strlen (1)格式:strlen(字符数组名) (2)作用:测试字符串的长度。函数的值为字符串中的实际长 度,不包括`\0`在内。 例: #include"string.h" main() { int k; static char st[]="C language"; k=strlen(st); printf("The lenth of the string is %d\n",k); } null05.9-41有以下程序  #include   main()  { char p[]={’a’, ’b’, ’c’}, q[10]={’a’, ’b’, ’c’};  printf(“%d %d\n”, strlen(p), strlen(q));  } 以下叙述中正确的是  A)在给p和q数组置初值时,系统会自动添加字符串结束符,故输出的长度都为3  B)由于p数组中没有字符串结束符,长度不能确定;但q数组中字符串长度为3  C)由于q数组中没有字符串结束符,长度不能确定;但p数组中字符串长度为3  D)由于p和q数组中没有字符串结束符,故长度都不能确定 05.9-32有以下程序  main()  { char p[]={’a’, ’b’, ’c’}, q[]="abc";  printf("%d %d\n", sizeof(p),sizeof(q));  }; 程序运行后的输出结果是  A)4 4  B)3 3  C)3 4  D)4 3 (C)等 考 实 例(A)null06.4-15以下能正确定义字符串的语句是 A)char str[]={′\064′}; B)char str=“kx43”; C)char str=“; D)char str[]=”\0“; 06.4-9运行以下程序,输入abcd,程序的输出结果是: 。 insert(char str[]) { int i; i=strlen(str); /*printf("i=%d",i);*/ while(i>0) { str[2*i]=str[i];str[2*i-1]='*';i--;} printf("%s\n",str); } main() { char str[40]; scanf("%s",str);insert(str); }等 考 实 例(D)a*b*c*d*数 组 作 为 函 数 参 数(1)数 组 作 为 函 数 参 数(1)1、数组元素作函数实参 与用变量作用一样,是单向传递,即“值传送”方式。例10 有两个数组a、b,各人10个元素,将它们对应地逐个 相比(即a[0]与b[0]比,a[1]与b[1]比……)。如果a数组中的 元素大于b数组中的相应元素的数目多于b数组中相应的元素的 数目(例如,a[i]>b[i]6次,b[i]>a[i]3次,其中i每次为不同 的值),则认为a数组大于b数组,并分别统计出两个数组相应元 素大于、等于、小于的次数。 数 组 作 为 函 数 参 数(1)数 组 作 为 函 数 参 数(1)int large(int x,int y) { int flag; if(x>y) flag=1; else if(xk)printf(“a>b”); else if(n设计
中可以有意识地利用这一特点改变实参数组元素的值 (如排序)null下面以5个数为例说明选择法的步骤。 a[0]a[1]a[2]a[3]a[4]3 6 1 9 4未排序时的情况1 6 3 9 4将5个数中最小的数1与a[0]对换1 3 6 9 4将余下的4个数中最小的数3与a[1]对换1 3 4 9 6将余下的3个数中最小的数4与a[2]对换1 3 4 6 9将余下的2个数中最小的数6与a[3]对换,至此完成排序用选择法对数组中10个整数按由小到大排序。 选择法 : 先将10个数中最小的数与a[0]对换;再将a[1]到a[9]中最小的数与a[1]对换…… 每比较一轮,找出一个未经排序的数中最小的一个。共比较9轮。数 组 作 为 函 数 参 数数 组 作 为 函 数 参 数3、用多维数组名作函数参数 可以用多维数组名作为实参和形参,在被调用函数中对形参数组定义时可以省略第一维的大小说明。 如 int array[3][10]; 或 array[][10]; 从实参传送来的是数组起始地址,在内存中各元素是一行接一行地顺序存放的,而并不区分行和列,如果在形参中不说明列数,则系统无法决定应为多少行多少列。不能只指定第一维而省略第二维,下面写法是错误的: int array[3][];null 总结 1.数组是程序设计中最常用的数据结构。数组可分为数值数组(整数组,实数组),字符数组以及后面将要介绍的指针数组,结构数组等。 2.数组可以是一维的,二维的或多维的。 3.数组类型说明由类型说明符、数组名、数组长度 (数组元素个数) 三部分组成。数组元素又称为下标变量。 数组的类型是指下标变 量取值的类型。 4.对数组的赋值可以用数组初始化赋值, 输入函数动态赋值和赋值 语句赋值三种方法实现。 对数值数组不能用赋值语句整体赋值、 输入或输出,而必须用循环语句逐个对数组元素进行操作。null05.9-15以下程序运行后的输出结果是   。  int f(int a[], int n)  { if (n >= 1) return f(a, n-1)+a[n-1];  else return 0;   }  main()  { int aa[5]={1,2,3,4,5}, s;  s=f(aa, 5); printf("%d\n", s);  } 05.9-18以下函数rotate的功能是:将a所指N行N列的二维数组中的 最后一行放到b所指二维数组的第0列中,把a所指二维数组中 的第0行放到b所指二维数组的最后一列中,b所指二维数组中 其他数据不变。  # define N 4  void rotate(int a[][N], int b[][N])    { int i, j;   for (i=0; i
/
本文档为【数组】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索