第4讲数组、指针与字符串.ppt

上传人:本田雅阁 文档编号:3430383 上传时间:2019-08-24 格式:PPT 页数:73 大小:441.04KB
返回 下载 相关 举报
第4讲数组、指针与字符串.ppt_第1页
第1页 / 共73页
第4讲数组、指针与字符串.ppt_第2页
第2页 / 共73页
第4讲数组、指针与字符串.ppt_第3页
第3页 / 共73页
第4讲数组、指针与字符串.ppt_第4页
第4页 / 共73页
第4讲数组、指针与字符串.ppt_第5页
第5页 / 共73页
点击查看更多>>
资源描述

《第4讲数组、指针与字符串.ppt》由会员分享,可在线阅读,更多相关《第4讲数组、指针与字符串.ppt(73页珍藏版)》请在三一文库上搜索。

1、基本要求:,(1)熟练掌握一维和二维数组的定义和初始化,数 组元素的引用。 (2)掌握一维字符数组和字符串,二维字符数组和字符串数组。 (3)熟练掌握指针和地址的概念 (4)熟练掌握指针变量的定义和初始化 (5)熟练掌握通过指针引用指向实体 (6)掌握通过指针变量引用数组元素及处理字符串,第4讲 数组、指针、字符串,数 组,C语言中,数组是一个构造数组类型。数组是一组相同类型(基本类型或结构类型)的变量的集合,数组中的每个数据称为数组的元素,元素在数组中按线性顺序排列。用数组名代表逻辑上相关的一批数据,每个元素用下标变量来区分,下标变量代表元素在数组中的位置。 C语言中的数组的分类: 按元素的

2、数据类型可分为:整型数组、字符数组、实型数组、结构体数组、共用体数组、指针数组等。 按数组的维数可分为:一维数组、二维数组、多维数组。 数组在内存中占用一片连续的存储单元,最低地址对应于数组的第一个元素,最高地址对应于最后一个元素。,数组定义: 一维数组: 类型说明符 数组名 常量表达式; 二组数组: 类型说明符 数组名 常量表达式1常量表达式2; 例如: int a10,x34; 注意点: 1、数组的下标从0开始, 数组名不能与其它变量名相同 2、常量表达式可以包含符号常量,但是不能是变量, C语言不允许对数组的大小作动态定义,数 组,初始化 定义同时赋初值 例如: int a10=1,2,

3、3,4,5,6 int x=3,5,7,9,11 使用赋值语句逐个赋值 1. 可以只给前面部分元素赋初值,其余元素自动赋0。 2. 只能给元素逐个赋值,不能给数组整体赋值。 3. 二维数组可按行分段赋值,也可按行连续赋值,未赋值的自动取零。,数 组,初始化 定义同时赋初值 例如: int a10=1,2,3,4,5,6; int x=3,5,7,9,11; 使用赋值语句逐个赋值 二维数组可按行分段赋值,也可按行连续赋值。 1. 按行分段赋值可写为 int 33=80,75,92,61,65,71,59,63,70; 2. 按行连续赋值可写为 int a53= 80,75,92,61,65,71

4、,59,63, 70; 这两种赋初值的结果是完全相同的。,数 组,数组引用: 数组名下标 数组名下标1下标2 指针法引用: 一维数组a, *(a+i) 等价:ai 二维数组a * (*(a+i)+j) 等价:aij 注意: 1、只能通过下标变量逐个引用数组元素,而不能 一次引用整个数组的全部元素。 2、数组说明的方括号中给出的是某一维的长度;而数组引 用中的下 标是该元素在数组中的位置标识。前者只能是 常量, 后者可以是常量,变量或表达式。,数 组,1、地址:内存单元的编号,通常一个字节(1B)一个编号。 2、指针:内存单元的地址。,3、内存数据的访问方式: (1)直接访问按变量名存取变量 (

5、2)间接访问将变量的地址存放在另一个变量(指针变量),通过指针变量来访问。,在语言中, 允许用一个变量来存放指针,这种变量称为指针变量。一个指针变量的值就是某个内存单元的地址或称为某内存单元的指针。,指针的概念,30,50,60,变量i,变量j,变量k,2000,2004,2002,2000,指针变量 ip,地址,注意:严格地说,一个指针是一个地址, 是一个常量。而一个指针变量却可以被赋予不同的指针值,是变量。但经常把指针变量简称为指针。为了避免混淆,我们中约定:“指针”是指地址, 是常量,“指针变量”是指取值为地址的变量。 定义指针的目的是为了通过指针去访问内存单元。,指针的概念,指针变量,

6、变量的指针变量的地址 例:&a 为变量a在内存单的存放地址,也称变量a的指针 指针变量存放地址的变量 指向变量的指针变量一个指针变量存放变量a的地址,则称 该指针变量为指向变量a的指针变量。,例: int a=10; int *pa; pa=,10,a,&a,pa,一、指针变量的定义: 其一般形式为: 类型说明符 *变量名; 其中,*表示这是一个指针变量,变量名即为定义的指针变量名,类型说明符表示本指针变量所指向的变量的数据类型。 例如: int *p1; 表示p1是一个指针变量,它的值是某个整型变量的地址。 或者说p1指向一个整型变量。至于p1究竟指向哪一个整型变量, 应由向p1赋予的地址来

7、决定。,指针变量,再如: static int *p2; /*p2是指向静态整型变量的指针变量*/ float *p3; /*p3是指向浮点变量的指针变量*/ char *p4; /*p4是指向字符变量的指针变量*/ 应该注意的是,一个指针变量只能指向同类型的变量,如P3只能指向浮点变量,不能时而指向一个浮点变量,时而又指向一个字符变量。,指针变量,二、指针变量的赋值 指针变量同普通变量一样,使用之前不仅要定义说明,而且必须赋予具体的值。未经赋值的指针变量不能使用, 否则将造成系统混乱,甚至死机。 语言中提供了地址运算符,指针变量,三、指针变量的运算(引用) 1.指针运算符 (1) 取地址运算

8、符 *pa a 即为变量a 的值。,指针变量,注意:指针运算符*和指针变量说明中的指针说明符* 不是一回事。在指针变量说明中,“*”是类型说明符,表示其后的变量是指针类型。而表达式中出现的“*”则是一个运算符用以表示指针变量所指的变量。 main() int a=5,*p= 表示指针变量p取得了整型变量a的地址。 本语句表示输出变量a 的值。,等价于: printf(“%d“,a);,指针变量,说明: 若有定义: int a, *p= 上面两个语句的含意是什么?,指针变量,2 赋值运算 指针变量的赋值运算有以下几种形式: 指针变量初始化赋值,前面已作介绍。 把一个变量的地址赋予指向相同数据类型

9、的指针变量。 例如: int a,*pa; pa= 把a的地址赋予指针变量pb, 由于pa,pb均为指向整型变量的指针变量, 因此可以相互赋值,指针变量,例:int a10, *p=a; p,a,&a0均指向同一单元,它们是数组a的首地址,也是0号元素a0的首地址。,1,a0,a1,a2,a3,a9,5,3,7,9,19,p,a,&a0,ai,p+i,a+i,&ai,p+1,a+1,&a1,p+1,a+1,&a1均指向1号元素a1。,类推可知p+i,a+i,&ai指向i号元素ai。,一、指向数组元素的指针,数组的指针,C语言规定:数组名就是这块连续内存单元的首地址(称为数组的指针)。,二、通过

10、指针引用数组元素 引入指针变量后,就可以用两种方法来访问数组元素了。 第一种方法为下标法,即用ai形式访问数组元素。 第二种方法为指针法,即采用*(a+i)形式,用间接访问的方法来访问数组元素。,main() int a5,i,*pa=a; for(i=0;i5;i+) scanf(“%d“,pa); pa+; pa=a; for(i=0;i5;i+) printf(“a%d=%dn“,i,*pa); pa+; ,main() int a5,i; for(i=0;i5;i+) scanf(“%d“, ,数组的指针,使用指针变量要注意的几个问题: 1、指针变量可实现本身值的改变 例如: int

11、a10,*p=a p+ 指向a1元素 可以使用下面语句来输入数组元素。 for(p=a;pa+10;p+) scanf(“%d“,p); 因使用指针变量引用数组元素时要注意指针变量当前的指向,否将出错。 2、数组名表示数组的首地址,是个地址常量,不出现如下运算:,a+; a=,数组的指针,三、二维数组的指针变量 1、指向数组元素的指针变量,设有定义: int a34,i,j; int *p; p= p为指向数组元素的指针变量,引用二维数组元素的方法: p+1则表示指向当前元素的下一个元素。 元素aij的地址表示为: p+4*i+j aij的值表示为: *(p+4*i+j) 如果一个n*m的二维

12、数组的第i 行j列元素相对于首地址的增量为: i*m+j,数组的指针,例,用指向数组元素的指针变量访问二维数组 main() int a34=0,1,2,3,4,5,6,7,8,9,10,11; int i,j,*p; p= ,数组的指针,2、指向由m个元素组成的一维数组的指针变量(行指针变量) 因为nm的二维数组a 可分解为一维数组a0,a1, .an-1,而它们分别又是具有m个元素的一维数组。 因此可定义一个指向由m个元素组成的一维数组的指针变量来处理二维数组。把这个指针变量称为:行指针变量 行指针变量说明的一般形式为: 类型说明符 (*指针变量名)长度 例:int (*p)4 它表示p是

13、一个指针变量,它指向由4个元素组成的一维数组,或说p可指向一个有4列的二维数组。,数组的指针,2. 指向由m个整数组成的一维数组的指针变量,定义一个数组指针变量 p , 指向包含 4 个元素的一维数组。,定义方法: int (*p)4;,若定义: int a34; p= /*p指向 a0*/ 则p+1 不是指向a01,而是a1,p的增值以一维数组的长度为单位。故aij可表示为:*(*(p+i)+j)。,例: 使用指针输出二维数组任一行任一列元素的值。,main( ) int a34=1,3,5,7,9,11,13,15,17,19,21,23 ; int (*p)4 , i , j ; p=a

14、 ; scanf(“%d,%d“ , ,运行结果: 输入: 1, 2 输出: a12=13,说明: aij 的地址可以表示为: *(p+i) + j 。 注意*(p+i) + j 不能写成 p+ i+j。 对于行指针变量p, p=a; 则p 指向二维数组 a 的第一行首地址 。 对于指针变量 p,p=a0;则 p 指向二维数组 a 的第一行第一列元素首地址, 而 p=a ; 是不合法 的。,字符数组,定义与初始化 注意: 若只给前面部分元素赋初值,其余元素自动赋0。 例如 char 10=c, ,p,r,o,g,r,a,m; 其中c9未赋值,由系统自动赋予为空字符0 值。,用来存放字符量的数组

15、称为字符数组。 字符数组的定义 字符数组类型说明的形式与前面介绍的数值数组相同。 例如: char c10; 定义有10个元素的数组 例如: char ch510; 即为5*10 的二维字符数组。,字符串和字符串结束标志,在语言中通常用一个字符数组来存放一个字符串。 当把一个字符串存入一个数组时, 也把结束符0存入数组,并以此作为该字符串是否结束的标志。 注意: 1、占内存单元不一 char c=C, ,p,r,o,g,r,a,m; char d=“C program“; 2、当用scanf函数输入字符串时,字符串中不能含有空格,否则将以空格作为串的结束符。,字符数组,C语言中没有字符串类型数

16、据,处理字符串通常使用字符数组和字符指针变量。 字符串的指针是字符串首字符的地址 如: char c,*p= ,字符串的指针,例:输出字符串中n个字符后的所有字符。 main() char *ps=“this is a book“; int n=10; ps=ps+n; printf(“%sn“,ps); 运行结果为:,book,例:字符串的复制 main() char a=“this is a book“,b16; int n; for(n=0;an!=0;n+) *(b+n)=*(a+n); *(b+n)=0; printf(“%s“,b); ,字符串的指针,T,i,h,s,p1,p1,i

17、,s,a,b,o,k,0,o,T,i,h,s,p2,p2,i,s,a,b,o,k,0,o,a,b,例:字符串的复制 main() char a=“this is a book“; char b16,*p1,*p2; p1=a;p2=b; while(*p1!=0) *p2+=*p1+; *p2=0; p2=b; printf(“%s“,p2); ,问能否将程序写成如下形式? main() char *p1=“this is a book“, char *p2; while(*p1!=0) . . . /* 以下与上面相同*/ ,输入输出字符串函数 ,应包含头文件“stdio.h“ 使用其它字符

18、串函数则应包含头文件“string.h“,1.字符串输出函数 puts 格式: puts (str) ; 其中str可以字符数组名或指向字符串指针变量, 它等价于: printf(“%sn“,str);,字符串处理函数,#include #include void main() char line=“123456789“; int i, k=strlen(line); for(i=0; i4; i+) linek-i=0; puts(line+i); ,字符串处理函数,2.字符串输入函数gets 功能:从标准输入设备键盘上输入格式: gets (str); 一个字符串。本函数得到一个函数值,即

19、为该字符数组的首地址。 说明:gets函数并不以空格作为字符串输入结束的标志,而只以回车作为输入结束。这与scanf(“%s”,)函数不同的。,字符串处理函数,3.字符串连接函数strcat 格式: strcat (str1,str2),功能:把字符数组str2中的字符串连接到字符数组str1 中字符串的后面,并删去字符串1后的串标志“0”。本函数返回值是字符数组1的首地址。 (1)字符数组1必须足够大,以便容纳连接后的新字符串。 (2)连接时将字符数组1后面的0取消,在新串后保留一个0,字符串处理函数,例: 字符串连接 #include“string.h“ void main() char

20、st130=“My name is “, st210; printf(“Input your name:n“); gets(st2); strcat(st1,st2); puts(st1); ,字符串处理函数,4.字符串拷贝函数strcpy 格式: strcpy (str1,str2),(1)复制时串结束标 志“0”也一同拷贝。 (2)不能用一个赋值语句将一个字符串常量或字符数组直接给一个字符数组。不允许 str1=“hello”; 或 str1=str2; (3)可以用strncpy函数将字符串2中前面的若干字符复制到字符数组1中。 strncpy(str1,str2,4); (4)字符数组

21、1必须写成数组名形式,字符数名2可以是一个字符串常量。相当于把一个字符串赋予一个字符数组。 strcpy(str1,”hello”);,字符串处理函数,例:字符复制 #include“string.h“ main() char st115; char st2=“C Language“; char st310=0; strcpy(st1,st2); strncpy(st3,st1,5); puts(st1); puts(st2); puts(st3); getch(); ,字符串处理函数,下面程序段的运行结果是 #include #include main() char a7=“abcdef“;

22、 char b4=“ABC“; strcpy(a,b); printf(“%cn“,a5); puts(a); ,字符串处理函数,f ABC,5.字符串比较函数strcmp 格式: strcmp(str1,str2),比较规则:对两个字符串自左向右逐个比较,直到出现不相同的字符或遇到n。如果全部字符相同,则认为相同,若出现不相同的字符,则以第一个不相同的字符比较结果为准,返回是不相同字符ASCII码之差(str1-str2)。,功能:按照ASCII码顺序比较两个数组中的字符串, 并由函数返 回值返回比较结果。,字符串处理函数,注意:对两个字符串比较,不能用以下形式: if(str1=str2)

23、 printf(“same”); 应该是:if(strcmp(str1,str2)=0) printf(“same”);,比较结果: str1str2, 返回值0; str1str2, 返回值0; str1str2, 返回值0。,表达式“strcmp(“Windows98“, “Windows95“)”的值为 A、0 B、3 C、1 D、-3,字符串处理函数,例: strcmp(“ABCDE ”, “ABEA“) 结果为 -2,6.测字符串长度函数strlen 格式: strlen(str) 功能:测字符串的实际长度(不含字符串结束标志0). 例如: char st=“C language”;

24、 则strlen(st)的返回值为 10 char st=“C lang65u0age“ 则strlen(st)的返回值为 8。 注意:strlen函数返回的是从第一个字符开始的碰到的第一个结束标志“0”字符串中的转义字符(如n,65)都按一个字符计算。,7. 字符大小转换函数strlwr、strupr 格式: strlwr(str) /*大写转小写*/ strupr(str) /*小写转大写*/,字符串处理函数,下面程序的运行结果是 #include”stdio.h” #include”string.h” void main() char a10=“AB”,b10=“LMNP”; int i

25、=0; strcat(a,b); while(ai+!=0) bi=ai; puts(b); (a) LB (b ) ABLMNP ( c) AB (d) LBLMNP,字符串处理函数,写出运算结果 #include #include void main() char c,*a=“Office“; int i; for (i=0;istrlen(a)/2;i+) c=*a; strcpy(a,a+1); astrlen(a)=c; puts(a); getch(); ,字符串处理函数,fficeO ficeOf iceOff,函数f 的功能是将n 个字符串按由大到小的顺序进行排序 #inclu

26、de “string.h“ void f(char p10, int n) char t20; int i,j; for(i=0;in-1;i+) for(j=i+1;jn;j+) if(strcmp(pi,pj) 0) strcpy(t,pi) ; strcpy(pi,pj); strcpy(pj,t); void main() char p10=“abc“,“aabdfg“,“abbd“,“dcdbe“,“cd“; int i; f(p,5); for(i=0;i5;i+) puts(pi); ,字符串处理函数,常用算法二,排序问题,排序是数据处理中最常见问题,它是将一组数据按递增或递减的

27、次序排列。例如对一个班的学生考试成绩排序,多个商场的日均销售额排序等。排序的算法有很多种,常用的有选择法、冒泡法、插入法等。不同算法执行的效率不同,由于排序要使用数组,需要消耗较多的内存空间。下面介绍选择法、冒泡法排序。,数据的排序就是将一批数据由小大到(升序)或由大到小(降序)进行排列。常用的有选择法、冒泡法。 1选择法排序,算法 (升序 ) ( 设有n个数,存放在数组A(0)A(n-1)中) 1)第1遍:从中选出最小的数,与第 0个数交换位置; (演示),常用算法数据排序,2)第2遍:除第0个数外,其余n-1个数中选最小的数,与第1个数交换位置; (演示),3)依次类推,选择了n-1次后,

28、这个数列已按升序排列。,常用算法数据排序,选择法排序算法的流程图:,常用算法数据排序,for(i=0;iaj) p=j; if(i!=p) s=ai; ai=ap; ap=s; /交换两个元素 printf(“%d“,ai); ,选择法排序(升序)的C程序:,思考:如果按降序排,程序如何修改?,常用算法数据排序,例: 输入10个数据,排升序打印输出 main() int i,j,p,s,a10; printf(“n Input 10 numbers:n“); for(i=0;i10;i+) scanf(“%d“, ,常用算法数据排序,2冒泡法排序(升序) 算法 :(将相邻两个数比较,大数交换到

29、后面) 1)第 1 趟:将每相邻两个数比较,大数交换到后面,经n-1次两两相邻比较后,最大的数已交换到最后一个位置。,演示,2)第 2 趟:将前n-1个数(最大的数已在最后)按上法比较,经n-2次两两相邻比较后得次大的数; 3)依次类推,n个数共进行n-1趟比较, 在第j趟中要进行n-j次两两比较。,常用算法数据排序,冒泡法排序算法的流程图:,常用算法数据排序,main() int a11; /* 用a1a10, a0不用 */ int i,j,t; /* i,j作循环变量,t作两两比较的临时变量*/ printf(“input 10 numbers:n“); for(i=1;i ai+1)

30、/* 交换大小 */ t = ai; ai = ai+1; ai+1 = t; printf(“the sorted numbers:n“); for(i=1;i11;i+) printf(“%d “,ai); ,常用算法数据排序,常用算法数据查找,1顺序查找法(在一列数中查找某数x),算法分析:顺序查找法的算法比较简单,设有n个数据放在a0-an-1中,待查找的数据值为x,把x与a数组中的元素从头到尾一一进行比较查找,若相同,查找成功,若找不到,则查找失败。,例 在n个数据中,查找某个给的数据x,如果有返回该数据位置。,#define N 10 /* N代表数据的个数 */ void mai

31、n() int aN=12,34,1,3,67,89,28,61,9,87; int index,x,i; /* index代表查找数据的位置 */ printf(“Please input the number you want find:n“); scanf(“%d“, 思考:如果一批数据中有多个要查找的数据,要求将所有数据都查找出来,上面的程序应作如何修改?,常用算法数据查找,2折半查找法(只能对有序数列进行查找) 例:使用折半查找法,在一批有序数据数列中查找给定的数x. 算法分析:设n个有序数(从小到大)存放在数组a0-an-1中,要查找的数为x。用变量bot、top、mid 分别表示

32、查找数据范围的底部(数组下界)、顶部(数组的上界)和中间,mid=(top+bot)/2,折半查找的算法如下: (1)x=amid,则已找到退出循环,否则进行下面的判断; (2)xamid,x必定落在mid+1和top的范围之内,即bot=mid+1; (4)在确定了新的查找范围后,重复进行以上比较,直到找到或者bottop。,常用算法二,#define N 10 /* N代表数据的个数 */ void main() int aN=1,4,7,13,16,19,28,36,49,60; int mid,bot,top,x,i,find; printf(“Please input the num

33、ber you want find:n“); scanf(“%d“, ,常用算法- 数据插入与删出,例:把一个给定的数据x按大小顺序插入已排好序的数组中,插入后数组元素仍然有序。 分析:设n个有序数据(从小到大)存放在数组a0an-1中,要插入的数x。首先确定x插在数组中的位置p。 (1)首先确定x插在数组中的位置p,实现的语句如下。 for(p=0; pp; i-) ai=ai-1, ap=x;,1、数据插入,#define N 10 /* N代表数据的个数 */ void main() int x,p,i, aN+1=1,4,7,13,16,19,28,36,49,60; printf(“

34、Befor inserted:n“); for(i=0;iap ,常用算法- 数据插入与删出,2. 数据删除,分析:设n个有序数据存放在数组a0an-1中,要删去其中某个元数ap。 将ap+1an-1元素向前顺移一个位置,即用后一个元数赋值给前一个元数,实现的语句如下。 for (i=p; in-1; i-) ai=ai+1;,常用算法数据删除,#include void f(int *a,int *m) int i,j; for(i=0;i*m;i+) if(ai0) for(j=i-;j*m-1;j+) aj=aj+1; _1_; ,void main() int i,n=7,x7=1,-

35、2,3,4,-5,6,-7; _2_; for(i=0;in;i+) printf(“%5d“,xi); printf(“n“); ,程序功能:函数f去除数组中的负数,输出结果为:1 3 4 6,*m=*m-1,f(x,&n),复习指导:P83,11,常用算法 字符串的处理,1简单加密和解密,例 输出一串字符,将其中的英文字母加密/解密,非英文字母不变。 加密的思想是: 将每个字母C加(或减)一序数K,即用它后的第K个字母代替,变换式公式: c=c+k 例如序数k为3,这时 AD, ad,BE, be . 当加序数后的字母超过Z或z则 c=c+k26 例如: You are good!经上述方

36、法加密后的字符为:Brx duh jrrg!,1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1,# include void main() int a1010=0, i, j, n; while(scanf(“%d“, ,例1: 输出如下形式的二项式系数的杨辉三角形。要求表的行数运行时输入,若小于1或者大于10则重新输入。,典形例题分析,例2:打印如下图形 A B B B C C C C C D D D D D D D E E E E E E E E E F F F F F F F F F F F E E E E E E E E E D D D D D D

37、 D C C C C C B B B A,main() int i,j; char ch=A; for(i=1;i=6;i+) for(j=1;j=6-i;j+) printf (“ “); for(j=1;j=2*i-1;j+) printf(“%c “,ch+i-1); printf(“n“); for(i=1;i=5;i+) for(j=1;j=i;j+) printf(“ “); for(j=1;j=11-2*i;j+) printf(“%c “,ch+5-i); printf(“n“); ,例3:写出下面程序运行后输出的结果: #include void main() int m=1

38、, 2, 3, 4, 5, 6, 7, 8, 9, i, j, k; for(i=0; i4; i+) k=mi; mi=m8-i; m8-i=k; for(j=0; j9; j+) printf(“%d“, mj); putchar(n); ,考点3,数组元素排序 选择法 冒泡法 插入一数据到一有序的数组中 注意:升序与降序对条件的影响,下程序是起泡法对十个数按升序排序程序 void main() int a10=12,23,14,5,6,1,0,10,9,7; int i,j,t; for(j=0;jai+1) t=ai;ai=ai+1;ai+1=t; for(i=0;i10;i+) pr

39、intf(“%d “,ai); ,main() int i,j,p,s,a10; printf(“n input 10 mbers:n“); for(i=0;i10;i+) scanf(“%d“, ,选择法排序,数组a中的元素按由小到大排列。以下程序的功能是将输入的一个数插入数组a中,插入后数组a 中的元素仍然由小到大排列。 main() int a10=0,-1,12,96,188,249,800; /*a0为工作单元,从a1开始存放数据*/ int x,i,j=6; /*j为元素个数*/ printf(“Enter a number:“); scanf(“%d“,while (aix) a

40、i+1=ai; i-; a+i=x; j+; for(i=1;i=j;i+) printf(“%8d“,ai); printf(“n“); ,A0,A7,第 1 遍 i=0 p=0,排序前,apaj?,p=5,j=1,j=2,j=3,j=4,j=5,交换,p=1,p=2,j=6,j=7,实现这一过程的程序:,成立,成立,成立,按升序排序,i=0; p=i; for(j=i+1; j8 ; j+) if(apaj) p=j; if(i!=p) s=ai; ai=ap; ap=s; /交换两个元素,n-1;,A0,A7,ApAj,j=2,j=3,j=4,j=5,交换,p=2,j=6,j=7,i=1; p=i; for( j = i+1;j aj then p=j; next j t = ai ; ai = ap ; ap = t;,实现这一过程的程序如下:,第 2 遍 i=1 p=1,第 1 遍结束后的数据,A0,A7,第 1 遍,排序前,按升序排序,6,9,最大数已到最后,for(j = 0; j aj+1) t=aj;aj=aj+1;aj+1=t; ,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1