1、数组,C 语言程序设计 Lecture 6,2,数组(array)是多个同类型数据对象的组合。构造数据类型之一一个数组汇集了多个数据数组元素。可从数组出发处理各元素,或以统一方式处理一批元素(所有元素)。,数据对象的组合:数组,3,数组元素,在C语言中可以有单下标数组元素 、双下标数组元素和多下标数组元素 。 下标要用方括号括起来,下标可以是常量、变量和表达式,计算机自动取整。如:a5、b23、abc1157等。,元素:属同一数据类型,用数组名和下标确定,4,一维数组,字符数组,二维数组,程序举例,5,一、一维数组的定义,只有一个下标的数组。类型标识符 数组名元素个数;例 int a6;,编译
2、时分配连续内存 内存字节数 =数组维数* sizeof(元素数据类型),数组名表示内存首地址,是地址常量,6,说明:,1、类型标识符:数组元素的类型 2、数组名的命名规则与标识符的命名规则要同。 3、数组“元素个数”即数组长度,只能是一个整型常量或整型符号常量。 4、下标是数组元素在数组中的顺序号,从0开始。 5、下标是常量和常量表达式。 6、每个元素都可作为一个变量来使用;如:a0=5;a1=4;,例:试判断下列数组定义是否合法:#define STU 35float no_studentSTU;int score_studentSTU*3;int person(10);int n=10,a
3、n;,7,数组必须先定义,后使用只能逐个引用数组元素,不能一次引用整个数组引用方法:数组名下标其中:下标可以是常量或整型表达式如: a0=a5+a7-a2*3 /*常量和表达式做下标*/ ai=ai+1; /*变量做下标*/ aa0 =a1 /*数组元素做下标*/,二、一维数组的引用,例 int a10;printf(“%d”,a); () 必须 for(j=0;j10;j+)printf(“%dt”,aj); (),8,main() int i,a15;for(i=0;i=0;i-) printf(“%4d”,ai);注意:1、循环控制变量的初值、终值及控制条件。2、不能整体输出数组,例 从
4、键盘输15个整数,然后反序输出。,输入:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 输出:15 14 13 12 11 10 9 8 7 6 5 4 3 2 1,例:printf(“%d”,a);是错误的。,程序举例,9,例 int a5;,a0 a1 a2 a3 a4,0,1,2,3,4,初始化,a0 a1 a2 a3 a4,内 存,a相当于5个变量,a0 a4可看作变量名。,三、一维数组的存储结构,数组变量 在内存中分配一片连续的存储单元,数组元素按数组下标从小到大连续存放。,10,只给部分数组元素赋初值,当全部数组元素赋初值时,可不指定数组长度,static
5、int a5; 等价于:a0=0; a1=0; a2=0; a3=0; a4=0;,如 int a5=6,2,3; 等价于: a0=6; a1=2;a2=3; a3=0; a4=0; 如 int a3=6,2,3,5,1; (),四、一维数组的初始化,初始化方式在定义数组时,为数组元素赋初值(在编译阶段使之得到初值),int a5=1,2,3,4,5; 等价于:a0=1; a1=2; a2=3; a3=4; a4=5;,说明:数组不初始化,其元素值为随机数对static数组元素不赋初值,系统会自动赋以0值,int a =1,2,3,4,5,6; 编译系统根据初值个数确定数组维数,11,例 #i
6、nclude main() int i,a5=3,4,5,b5;printf(“narray a is:”);for(i=0;i5;i+) printf(“%6d”,ai);printf(“narray b is:”);for(i=0;i5;i+) printf(“%6d,”,bi); ,运行结果: array a is:3 4 5 0 0 array b is:-32,1398,40,1170,454, /*随机数*/,程序举例,12,Tip:,操作数组的多个或全部元素常用for语句和一个循环变量。令变量遍历数组全部下标: for (n = 0; n 数组长度; n+) . ? 问题:假设程
7、序里写:int a30 ; for(n = 2; n = 30; n+) 循环中试图访问a30,实际无此元素。 用超数组范围下标值访问元素:越界访问。是数组使用中最常见的语义错误。,13,例 给数组赋值。main() int i, a10;for (i=0;i=9;i+) scanf(“%d”, ,程序举例,14,例,main() int arr10,i,k=0;for(i=0;i10;i+)arri=i;for(i=0;i4;i+)k+=arri+i;printf(“%dn”,k); ,程序举例,15,例,main() int a =2,3,4,5,6,7,8,9;int i,r=1,n=3
8、;for(i=0;i=n;i+)r=r*ai;printf(“%dn”,r); ,程序举例,16,例 定义长度为10的整型类型一维数组, 从键盘输入10个整数,分别存放在10个数组元素中,然后将数组中的元素按逆序存放后输出其值。,程序举例,分析: 1. a0 与a9交换, a1 交换 a8,依此类推。 错误的写法 a0=a9;a9=a0; 2. 如何控制循环, 只需循环到一半 k=(n-1)/2; for (i=0,j=n-1;i=k;i+,j-) t=ai;ai=aj;aj=t 还可以写成 for (i=0,j=n-1;ij;i+,j-),17,main ( ) int i,j,t,a10;
9、for (i=0;i10;i+) scanf(“%d“, ,程序举例,18,例 读10个整数存入数组,输出其中最大值和最小值,步骤: 1. 输入:for循环输入10个整数 2. 处理: (a) 先令max=min=a0 (b) 依次用ai和max,min比较(循环)若maxai,令min=ai 3. 输出:max和min,#include main() int a10,i,max,min;printf(“Enter 10 integers:n“);for(i=0;iai) min=ai;printf(“Maximum value is %dn“,max);printf(“Minimum val
10、ue is %dn“,min); ,程序举例,19,程序举例,例,main( ) int y=18,i=0,j,a8; do ai=y%2;i+; y=y/2; while(y=1); for(j=i-1;j=0;j-) printf(“%d“,aj); printf(“n“) ,20,程序举例,例,#define N 10 #define M 5 main( ) int pa,pb, value;int aM=3,5,7,1,6;int bN=9,12,7,2,0,12,5,6,7,11;for(pa=0;paM;pa+) value=apa;for(pb=0;pbN;pb+)if(bpb=
11、value) printf(“%4d“,value); ,21,程序举例,例,main ( ) int a,x20;x0=x1=1;for(a=2;a20;a+)xa=xa-2+xa-1;for(a=0;a20;a+) if(a%5=0) printf(“n“);printf(“%-8d“,xa); ,22,例 将数组中数值最小的元素排在第一位,main ( ) int i, t,a10;for (i=0;i10;i+)scanf(“%d“,ai);printf(“n“);for (i=1;i10;i+)if(aia0)t=a0;a0=ai;ai=t;for (i=0;i10;i+) prin
12、tf(“%4d“,ai);printf(“n “); ,程序举例,23,例 从键盘上输入10个整数,用选择法将其按由小到大的顺序排列并输出。基本思想: (1)从第个位置到第个位置中选择出最小的一个与第个位置的数交换。 (2)从第个位置到第个位置中选择出最小的一个与第个位置的数交换。 (9)从第个位置到第个位置中选择出最小的一个与第个位置的数交换。例:5 13 3 9 32 22 8 1 23 21 排序过程如下:,程序举例,24,5 13 3 9 32 22 8 1 23 21 1 13 3 9 32 22 8 5 23 21 1 3 13 9 32 22 8 5 23 21 1 3 5 9
13、32 22 8 13 23 21 1 3 5 8 32 22 9 13 23 21 1 3 5 8 9 22 32 13 23 21 1 3 5 8 9 13 32 22 23 21 1 3 5 8 9 13 21 22 23 32 1 3 5 8 9 13 21 22 23 32 1 3 5 8 9 13 21 22 23 32,程序举例,25,#include main() int i,j,t,a10;for(i=0;iaj) t=ai;ai=aj;aj=t; for(i=0;i10;i+) printf(“%6d”,ai); ,程序举例,26,分析:从程序可知: 1、程序使用两重循环来实
14、现排序。 2、其中,外循环控制排序趟数。若数组有N个元素,则共进行N-1趟排序。第一趟,i =;第二趟,i =, 3、其中,内循环完成在 i ,的区间内选择最小数。比较次数随趟数增大而减少。 4、在每一趟选择中,当后面元素较小时,马上进行交换。而这种交换是不必要的。事实上,只要记住较小元素的位置,即下标,在内循结束后做一次交换即可,这样可大大节省程序运行时间。,程序举例,27,#include main() int i,j,k,a10;for(i=0;iaj) k=j;if(k!=i) t=ai; ai=ak; ak=t;for(i=0;i10;i+)printf(“%6d”,ai);,程序举
15、例,28,小经验:,当处理的数据很多,又希望用循环来控制时,使用数组 当运算的中间结果需要保存时,使用数组 一维数组典型用法 排序 查找 插入 删除 分类统计,29,类型标识符 数组名行数列数; 二维数组可看作一个二维表格,由行、列组成。例: int a32;float b53;数组元素的存放顺序原因:内存是一维的二维数组:按行序优先多维数组:最右下标变化最快,一、二维数组的定义,30,二维数组理解,二维数组a是由3个元素组成,31,for(i=0;i4;i+)for(j=0;j4;j+)scanf(“%d”,输出,输入,输入输出:二层循环,32,for(i=0;i4;i+)for(j=0;j
16、4;j+)if(i=j) aij=1+j-i;else aij=10;,矩阵的赋值操作,程序举例,33,例 从键盘上输入9个整数,保存在二维数组中,按数组原来位置输出第一行和第一列的所有元素。 , ,分析: 1、输入数组。 2、输出数组要考虑不是所有数据都输出。,思考:应该输出的数据在位置关系上有何特点?(关键!),程序举例,34,main() int i,j,a33;for(i= 0;i3;i+)for(j=0;j3;j+)scanf(“%d”, ,程序举例,35,三、二维数组的初始化,分行初始化:,按元素排列顺序初始化,36,例,main() int I,j,max,a24=1,3,5,7
17、,9,2,4,6;max=a00;for(i=0;imax) max=aij;printf(“%dn”,max); ,程序举例,37,例,main() int b33=0,1,2,0,1,2,0,1,2,i,j,t=1;for(i=0;i3;i+)for(j=i;j=i;j+) t=t+bibjj;printf(“%dn“,t); ,程序举例,38,例,main() int a33= 1,2,3,4,5,6 ,i,j,s=0; for(i=1;i3;i+) for(j=0;j=i;j+)s+=aij; printf(“%dn“,s); ,程序举例,39,main() int i, j a111
18、1;for (i=1;i11;i+) aii=1; ai1=1;for(i=3;i11;i+)for(j=2;j=i-1;j+)aij=ai-1j+ai-1j-1;for(i=1;i11;i+) for(j=1;j=i;j+)printf(“%d”,aij);printf(“n”); ,程序举例,例 打印杨辉三角的前10行。,1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 .,40,分析: 设一个变量存放最大值max; 设两个变量存放最大值在数组中的行列数; 遍历数组中的每一个元素 。,例 求二维数组a34 中最大元素值及其行列号。,#include m
19、ain() int a34=1,2,3,4,9,8,7,6,-10,10,-5,2;int i,j,row=0,colum=0,max;max=a00;for(i=0;imax) max=aij;row=i;colum=j;printf(“max=%d,row=%d, colum=%dn“,max,row,colum); ,程序举例,41,分析 定义score45的二维数组存放输入的分数 定义stu4存放每个学生的总分 按行求累加和,例 已知4个学生、5门功课的成绩,求每个学生的总分。,程序举例,42,例 读入下表中值到数组,分别求各行、各列及表中所有数之和。,#include main()
20、int x54,i,j;for(i=0;i4;i+)for(j=0;j3;j+)scanf(“%d“,for(i=0;i5;i+) for(j=0;j4;j+)printf(“%5dt“,xij);printf(“n“); ,程序举例,43,例 求矩阵的转置矩阵。1 2 3 1 4 74 5 6 2 5 87 8 9 3 6 9什么是转置矩阵:从上可知,方法1:转置矩阵是将原矩阵元素按行列互换形成的。1 2 3 1 4 74 5 6 2 5 87 8 9 3 6 9方法2:沿主对角线将对称位置互换元素即可。这时可将转置矩阵放在原数组中。,主对角线 i=j,程序举例,44,方法1之 程序: #i
21、nclude main() int i,j;int a33=1,2,3,4,5,6,7,8,9,b33;for (i=0;i3;i+)for(j=0;j3;j+) bij=aji;for(i=0;i3;i+) for(j=0;j3;j+)printf(“%6d”,bij);printf(“n”);,程序举例,45,#include main() int i,j;int a33=1,2,3,4,5,6,7,8,9;for (i=0;i3;i+)for(j=i;j3;j+) temp=aij; aij=aji; aji = temp;for(i=0;i3;i+) for(j=0;j3;j+)pri
22、ntf(“%6d”,bij);printf(“n”); ,方法2之程序:,程序举例,46,字符数组:元素类型为字符类型的数组。字符串和字符串结束标志:在C语言中将字符串作为字符数组来处理。有效长度以0为结束标志。以字符串形式给数组赋值时,末尾自动加0.系统在对字符数组操作时,自动判断0.,一、基本概念,47,二、字符数组的初始化,48,逐个输入输出:用格式符“%c”输入或输出一个字符。整串输入输出:用格式符“%s”。,例 用%c main() char str5;int i; for(i=0;i5;i+)scanf(“%c”, ,例 用%s main() char str5;scanf(“%s
23、”, str);printf(“%s”, str); ,用字符数组名,不要加& 输入串长度数组维数 遇空格或回车结束 自动加0,用字符数组名, 遇0结束,三、字符串的输入输出,49,例 main( ) char a5=H, e, l, l, o;printf(“%s”,a);,例 main( ) char a =“Hello”;printf(“%s”,a);,结果:Hello#-=*,结果:Hello,用“%s”输出 时,遇0结束,50,main() char a=h,e,l,0,l,o,0;printf(“%s“,a); ,例,输出:hel,数组中有多个0时,遇第一个结束,51,main()
24、 int i;char a5;scanf(“%s“,a);for(i=0;i5;i+)printf(“%c,“,ai); ,运行情况: (1)若输入 hel , 正常 (2)若输入 hell , 正常 (3)若输入 hello , 用%s 输出时,可能会出现问题,输入字符串长度数组维数,52,#include main() char a15,b5,c5;scanf(“%s%s%s“,a,b,c); printf(“a=%snb=%snc=%sn“,a,b,c);scanf(“%s“,a);printf(“a=%sn“,a); ,运行情况: 输入:How are you? 输出:a=Howb=a
25、rec=you? 输入:How are you? 输出:a=How,scanf中%s输入时,遇空格或回车结束,53,main() char b =“Hello,you“; b5=0; printf(“%sn“,b ); ,main() char ch7=“6a5b21“;int i,s=0; for(i=0;chi=0 ,程序举例,54,例,#include “stdio.h“ main ( ) char x =“morming“,t;int a,b=0;for(a=1;a7;a+)if(xbxa)b=a;t=xb; xb=x7; x7=t;printf(“x=%sn“,x);printf(“
26、%dn“,x7); ,程序举例,55,四、字符串处理函数,库函数原型在string.h中,(1)字符串输出函数puts格式:puts(字符数组)功能:向显示器输出字符串(输出完,换行)说明:字符数组必须以0结束(2)字符串输入函数gets格式:gets(字符数组)功能:从键盘输入一以回车结束的字符串放入字符数组中,并自动加0说明:输入串长度应小于字符数组维数,例 #include main( ) char string80;printf(“Input a string:”);gets(string);puts(string); 输入: How are you? 输出: How are you
27、?,56,(3)字符串拷贝函数:strcpy() 调用格式:strcpy(str1,str2); 功能:将字符串str2复制到字符数组str1中。 返回值:返回字符数组1的首地址 说明: str1的长度应不小于str2的长度。 str1必须写成数组名形式。 str2可是字符串常量或字符数组名形式。例:char s110,s28=“student”;strcpy(s1,s2); 或 strcpy(s1, “student” ); 不能使用赋值语句为一个字符数组赋值 例:s1=s2;s1=“student”,都是错误的,57,例,#include main ( ) char c7=“abcdef“
28、,s4=“ABC“;strcpy(c,s);printf(“%sn“,c);printf(“%cn“,c5); ,程序举例,58,#include main ( ) char c30=“How do you do“;strcpy(c+6,“es she“);printf(“%sn“,c); ,例,程序举例,59,(4)字符串连接函数strcat()调用格式:strcat(str1,str2);功能:将str2连同0连接到str1的最后一个字符(非0字符)后面。结果放在str1中。返回值:返回字符数组1的首地址例:char s114=“I am a ”;char s25=“boy.”;strca
29、t(s1,s2);连接前:s1:s2:连接后:s1,60,#include “stdio.h“ #include “string.h“ main() char ss10=“1,2,3,4,5“; gets(ss); strcat(ss,“6789“); printf(“%sn“,ss); 运行时输入:ABC,例,程序举例,61,#include #include main() char x80=“AB“, y80=“LMNP“;int n=0;strcat(x,y);while (xn+!=0)yn=xn;puts(y);getch(); ,例,程序举例,62,(5)字符串比较函数strcmp
30、() 调用格式:strcmp(str1,str2); 功能:若str1=str2,则函数返回值为0; 若str1str2,则函数返回值为正整数;若str1str2,则函数值返回为负整数。 比较规则: 两个字符串自左至右逐个字符比较,直到出现不同字符或遇到0为止。 字符全部相同,则两个字符相等; 若如出现不同字符,则遇到的第一对不同字符的ASC大者为大。例:if (strcmp(str1,str2)= =0);而 if(str1= =str2);是错误的。,63,#include main ( ) char c7=“abcdef“,s4=“abc“;int a;a=strcmp(c,s);pri
31、ntf(“%dn“,a); ,例,程序举例,64,#include main ( ) char c7=“abcdef“,s4=“acb“;int a;a=strcmp(c,s);printf(“%dn“,a); ,例,程序举例,65,(6)字符长度函数strlen()调用格式:strlen(字符串);功能:求字符串的实际长度即所含字符个数(不包括0)。返回值:返回字符串实际长度,不包括0在内 例: char str10=“student”;int length;length=strlen(str); strlen(“very0good”); char s =“tv0willn”;char s
32、=“x69082n”;,(=7),(=4),(=1),(=3),66,(7)strupr(字符串),功能:将字符串中的小写字母转 换成大写字母,(8)strlwr(字符串),功能:将字符串中的大写字母转换成小写字母,67,#include #include main() char str1 =“Hello!“, str2 =“How are you?“,str20;int len1,len2,len3;len1=strlen(str1); len2=strlen(str2);if(strcmp(str1, str2)0) strcpy(str,str1); strcat(str,str2);
33、else if (strcmp(str1, str2)0) strcpy(str,str2); strcat(str,str1); else strcpy(str,str1);len3=strlen(str);puts(str);printf(“Len1=%d,Len2=%d,Len3=%dn“,len1,len2,len3); ,程序举例,68,# include “string.h” main( ) char t, a20;int i,s;scanf(“%s”, a);s=strlen(a);printf(“%s”,a);t=a0;for(i=1; iai ? t: ai;printf(“
34、n%c”, t); 运行时输入:Wonderful!,程序举例,例,69,例 有三个字符串,找出其中最大者,#include #include main() char string20,str320;int i;for(i=0;i0) strcpy(string,str0);else strcpy(string,str1);if(strcmp(str2,string)0) strcpy(string,str2);printf(“nThe largest string is:n%sn“,string); ,程序举例,70,分析 先试着分析一行字符中,统计每行字母、数字和其他字符的个数。 3行字符
35、就是3个字符串,用二维字符数组存放。,例 任意输入3行字符,统计每行字母、数字和其他字符的个数。,程序举例,71,例 输入一行字符,统计其中有多少个单词。,#include main() char string81;int i,num=0,word=0;char c;gets(string);for(i=0;(c=stringi)!=0;i+)if(c= ) word=0;else if(word=0) word=1; num+; printf(“There are %d words in the linen“,num); ,程序举例,72,本章重点,处理好循环与数组下标的关系,就掌握了数组的
36、核心技术。 数组的赋值方法。 一些典型算法:排序,查找,插入的过程 字符数组和字符串的根本区别在于程序在处理字符串时是以0作为结束标志的。 字符串不能用赋值语句。,73,未出现新单词,使word=0,num不累加,前一字符为空格(word=0), 新单词出现,word=1,num+,前一字符非空格(word=1), 未出现新单词,num不变,程序举例,74,#include main() char str_array10080;int i, j;for(i=0; i100; i+) printf(“%d: “, i);gets(str_arrayi);if(str_arrayi0=0) bre
37、ak; for(j=0; ji; j+)printf(“str_array%d=%sn“, j, str_arrayj); ,例1 将若干姓名由键盘输入给字符型数组str_arra;当输入0时,结束输入,然后输出数组的内容。,程序举例,75,分析: 需要50个变量用于统计 int count51。 如果用if 语句,需要判断多少次?if (n=1) count1+; if (n=2) count2+; 用switch(n)case 1:count1+;case 2:count2+;.,程序举例,例2 输入100个150的整数,统计每个数出现的次数。,76,读入的数字就是累加变量的下标索引cou
38、ntn+; 读一个字符,在相应的变量上加1,0,n0,n1,n50,.,.,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,程序举例,77,main() int count51;int i,n;for (i=1; i=50; i+) counti=0;for (i=1; i=100; i+) scanf(“%d”, ,程序举
39、例,计算相应数字个数 的计数元素值加1,78,按60, 6069,7079,8089,9099,100分段统计全班50名学生在各分数段的人数。 思路: 将分数段编成数组下标索引 k=num/10 60以下的分数为一个档次 if (k6) k=5 将下标与数组对应 k=k-5 相应的数组值加1,例3 分类问题,程序举例,79,#include “stdio.h“ main() static int a6 ;int i,k,num;printf(”输入50个学生的成绩n“);for (i=0;i50;i+) scanf(“%d“, ,程序举例,80,例4 求Fibnacci数列 1,1,2,3,5
40、,8,13,21,.,程序举例,初值:f0=1,f1=1 循环体:fi=fi-2+fi-1 循环控制:for(i=2;i20;i+) 源程序:,main() int f20=1,1;for(i=2;i20;i+)fi=fi-2+fi-1;for(i=0;i20;i+)if (i%5=0) printf(“n“);printf(“%12d“,fi); ,81,例5 用起泡法对10个数排序,第1次, a0和a1比较,9 8 5 4 2 0 6 1 3 7,8 9 5 4 2 0 6 1 3 7,8 5 9 4 2 0 6 1 3 7,8 5 4 9 2 0 6 1 3 7,8 5 4 2 9 0
41、6 1 3 7,8 5 4 2 0 9 6 1 3 7,8 5 4 2 0 6 9 1 3 7,8 5 4 2 0 6 1 9 3 7,8 5 4 2 0 6 1 3 9 7,8 5 4 2 0 6 1 3 7 9,第2次, a1和a2比较,第i次, ai和ai+1比较,9 8,9 5,9 4,9 2,9 7,for (j=0;jaj+1) temp=aj;aj=aj+1;aj+1=temp;,程序举例,82,从第一个元素开始,两两比较,较大的一个放在后面 for (j=0;jaj+1)temp=aj,aj=aj+1;aj+1=temp; 第一次循环后,最大的在最后. 8 5 4 2 0 6
42、1 3 7 9 第二次循环 for (j=0;jaj+1)temp=aj,aj=aj+1;aj+1=temp;,程序举例,83,如果有n个元素,一共要比较n-1次(外循环次数) 在第i次比较是时,需要从0比较到n-i #include “stdio.h” main() int a10=9,8,5,4,2,0,6,1,3,7,i,n=10;for (i=0;iaj+1) temp=aj,aj=aj+1;aj+1=temp;for (i=0;i10;i+) printf(“%3d”,ai); ,程序举例,84,第一中情况:在无序数组中查找给定值首次出现的位置,如:从第0个元素到最后一个元素依次与被
43、找元素比较,相等则停止查找。循环结束条件:,程序举例,例6 查找,(要在数组中找4的位置),(已经找到)| 所有的数组都已经找遍,85,main() int a10,i,num;for (i=0;i10;i+)scanf(“%d”, ,程序举例,86,第二种情况,在有序数组中插入一个数,如何确定该元素所在的位置。,从第0个元素开始比较,当6小于或等于某个数时停止,该数的位置即为所求k= 0;while (k=num) break;else k=k+1;如果没找到,k的值为8,程序举例,87,数组的右移一位 从最后一个元素右移 for (i=7;i=k;i-)ai+1=ai;,程序举例,88,五
44、个步骤: 建立数组 排序 找出被插入值所在的位置。 从该位置起到最后的所有元素右移一位。 将被插入数值放入空出的位置,程序举例,例7 将给定的一数插入到有序的数组中。,89,#include “stdio.h“ main() int a21; int i,p,k,num,found; char c;printf(“输入20个整数n“);for (i=0;iaj+1 t=aj;aj=aj+1;aj+1=t; /*排序*/for (i=0;i20;i+)printf(“%3d”,ai); /*输出排序结果*/printf(“输入要被插入的数n”);scanf(“%d“,程序举例,90,p=0;while (p=num) break;else p+; /*查找*/for (k=19;k=p;k-) /*右移一位*/ak+1=ak;ap=num; /*插入*/for (i=0;i21;i+)printf(“%3d”,ai); /*输出结果*/ ,