复旦课件第4章数组_第1页
复旦课件第4章数组_第2页
复旦课件第4章数组_第3页
复旦课件第4章数组_第4页
复旦课件第4章数组_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、要求:1)掌握一维、二维及多维数组的定义、 初始化与引用;2)掌握字符串数组与字符串操作;第4章 数组 数组是一些同名同类型变量的有序集合,它们存储在内存的一个连续的存储区内。 软件设计中,应用最多的是一维数组、二维数组和三维数组,其中尤其是一维数组和二维数组应用最广。4.1 数组的基本概念 C语言中的数据类型分为基本数据和构造型数据。基本类型数据包括:int,short,long,char,float,double 等构造型数据包括:数组,指针,结构,联合,位域,枚举(非本课程主要内容) 构造型数据是由若干基本类型或复杂类型的数据按一定的规则构造而成。什么是数组数组是一种由若干个同类元素组成

2、的构造型数据。数组的定义 数组的定义是在数组名的后面加成对的方括号,方括号内是一个正整型的常量表达式,用以说明数组中有多少个成员。 数组元素的个数是一个确定的正整数,而且在程序中不能改变。如,数组a的元素个数为4例如:short a4;表示定义了一个数组 a,由4 个短整型的数组元素组成。4.2 一维数组一维数组的定义:数组变量也要遵循“先定义后引用”的原则。 一维数组定义语句的一般形式为: type nameelement;可以是整型常量或整型常量表达式其最小值默认为0. 表示定义了一个名为name,由element个数据类型为type的成员组成的数组。其中,name是用标识符命名的数组名,

3、方括号内的element是一个正整型的常量表达式,是一个确定的正整数,用以说明数组中有多少个成员(数组元素,元素),type是任何一种数据类型,表示数组中的所有成员都属于这种数据类型,占有同样的存储单元。int a5;数组类型数组名数组长度数组名a是标识符;数组长度为5,可以是常量、常量表达式或符号常量,不可是变量或变量表达式(即不能定义可变数组)。#define N 5int aN;int n, an;scanf(“%d”,&n);int an;数组元素的个数(数组长度)一经定义,不允许再改变。例如:int a5; /* 如果由于某种原因 */int a10; /* 希望改变数组长度 */

4、再次定义数组a的长度是错误的,因为数组a由4个整型的数组元素组成,在程序中数组元素的个数是固定的,不能改变。一维数组的总字节数可按下式计算: 总字节数=sizeof ( 类型) *数组长度int a5;/5个元素,总字节数为20 在C语言中,与变量的定义一样,数组也遵循“先定义后使用”的原则。当定义数组时,它传递给编译器两方面的信息: 数组共有多少个元素? 每个元素占多少个字节? 数组的性质 数组的每一个元素都可看作一个独立的变量。各元素按下标存取(引用),下标是方括号内的整型表达式,n个元素的下标取值为0到n-1。例如,数组a的3个元素分别记为a0, a1,和a2 每个数组有确定的数据类型。

5、例如,数组a为短整型,则a中所有的元素a0, a1, a2均为短整型,各占2个字节。 数组名是常量,数组名的数值等于数组中第一个元素(首个元素)的地址,也称为数组的首地址。例如,a的数值等于a0的地址。 数组元素的存储单元是按顺序连续存储的,因此数组元素的地址也是连续的。例如,如果a0的地址为FF10,则从第一个元素a0到元素a2的地址分别为:FF10,FF12,FF14。数组元素a0a1a2数组元素的地址FF10FF12FF14数组的维数 数组元素的下标个数由数组的维数决定,数组有一维数组、二维数组或多维数组之分。例如,可以定义二维数组a和三维数组x如下:int a46,x432;一维数组的

6、存储结构数组在内存中连续存放;每个元素所占内存大小和数组类型相同;数组名指向第一个元素(类似于指针)。int a5;a0a1a454 bytesa&a0用printf可以查看数组地址情况运行结果&a0=12ff58&a1=12ff5c&a2=12ff60&a3=12ff64&a4=12ff68#include void main( ) int a5,i; for(i=0;i5;i+) printf(&a%d=%xn,i,&ai); 用数组优点:表述简洁,可读性高便于使用循环结构数组定义示例例如,以下各个数组的定义是正确的:#define M 20int a10; /* 由10个整型数组成的一维

7、数组a */char b70+4; /* 字符数组s,一行宽度为74个字符 */double cM*2; /* 由40个双精度实数组成的向量数组c */int matrix610; /*6行10列整数矩阵数组matrix */6行10列而以下各个数组的定义是错误的:int n;int d1n, d2n+3; /* n 是变量 */char e-4; /* 数组元素个数不能是负数 */double f2.5; /数组元素个数不能是小数float k,m5;/只能为方括号 一维数组元素的引用 C语言规定数组不能以整体形式参与各种运算。参与各种运算的只能是数组元素,即在程序中不能引用整个数组而只能逐

8、个引用数组元素。 一维数组元素的引用形式为: 数组名下标 其中下标可以是整型常量,整型变量或整型表达式。数组元素引用举例int a5; /* 定义1 0个整型数的数组*/ 数组a中的5个元素可分别用a0、a1、a2、a3、a4来引用它们,如a4 = a0 + a1 + a2 + a3;a0 = ai+z; /* 通常要求 0=i+z=4 */ C语言并不检验数组边界,因此,数组的两端都有可能越界而使其它变量的数组甚至程序代码被破坏。在需要的时候,数组的边界检验便是程序员的职责。void main()/p65_1int d0,d1,d2,d3,d4,d5,d6,d7,d8,d9,x;d0=d1=

9、d2=d3=d4=d5=d6=d7=d8=d9=0;scanf(%d,&x);do if(x%10=0)d0+;else if(x%10=1)d1+;else if(x%10=2)d2+;else if(x%10=3)d3+;else if(x%10=4)d4+;else if(x%10=5)d5+;else if(x%10=6)d6+;else if(x%10=7)d7+;else if(x%10=8)d8+;else if(x%10=9)d9+;while(x/=10);printf(d0=%d,d1=%d,d2=%d,d3=%d,d4=%d,d5=%d,d6=%d,d7=%d,d8=%d

10、,d9=%dn,d0,d1,d2,d3,d4,d5,d6,d7,d8,d9);void main()int d0,d1,d2,d3,d4,d5,d6,d7,d8,d9,x;d0=d1=d2=d3=d4=d5=d6=d7=d8=d9=0;scanf(%d,&x);do switch( x%10 )case 0:d0+;break;case 1:d1+;break;case 2:d2+;break;case 3:d3+;break;case 4:d4+;break;case 5:d5+;break;case 6:d6+;break;case 7:d7+;break;case 8:d8+;break

11、;case 9:d9+;break;while(x/=10);printf(d0=%d,d1=%d,d2=%d,d3=%d,d4=%d,d5=%d,d6=%d,d7=%d,d8=%d,d9=%dn,d0,d1,d2,d3,d4,d5,d6,d7,d8,d9);void main()/p65_1int d10=0,i,x;scanf(%d,&x);do dx%10+;while(x/=10); for(i=0;i=k;i-) ai+1=ai;/*自an-1开始逆序至ak逐一后移*/ ak=x; /*x插入到k位置*/ n+; /*数组的元素增加了一个*/kn-1n【例4.4】 将数组的某个下标位

12、置(k)的元素删除 for(i = k+1; im) ,则后部分没有获得初值的元素则置相应类型的默认值(如int型置整数0, char型置字符0,float型置实0.000000等)。例如定义:intx5=1,2,3;则有:x0=1; x1=2; x2=3; x3=0; x4=0。 注意:初值个数不允许超过数组元素的总数例如以下的定义是错误的: int j5 = 0, 1, 2, 3, 4, 5; 初值个数(=6)超过了定义的数组长度(=5)。除了初始化,不能对整个数组直接赋值, 只能逐个赋值: a =0,1,2,3,4;no! for(i=0;i5;i+)ai=i; yes!如果需要赋初值的

13、m个元素不连续的话,则必须指定数组元素例如:int h3 = h0=0, h1, h2=1;注意:由于h1没有赋初值,因此和没有赋赋初值普通变量一样,是一个很小的负数。而以下的定义是错误的:int h3 = 0, , 1;一维数组编程示例一维查找【例4.5】在数a的前n个元素中找值等于变量key值元素的下标。在数组的前n个元素中找值为key的元素,有多种解法。(1)数据的顺序查找(方案一) 从首元素开始,顺序查找到数组的末尾,如果存在该元素,则结束(break);按此想法编写的程序代码如下: for(i=0; in; i+)if(ai = key)break; /* 找到ai,终止循环 */

14、if(in) /* 若in,表示查找成功 */ printf( %dn , i); /* 输出ai的下标 */ else /* 否则,表示查找失败 */ printf( search failedn ); /* 输出失败信息 */(方案二)不用 break 语句的程序代码:for(i=0;in&key!=ai;i+) ; /* 无论是否找到,都将结束循环 */ if(in) /* 若in,表示查找成功 */ printf( %dn , i); /* 输出ai的下标 */else /*否则 i=n,表示查找失败 */printf(search failedn); /* 输出失败信息 */假定每个

15、元素的查找机会均等,则采用上述查找方法,查找的平均次数v为: v = (1 + 2 + 3 + + n)/n = (n+1)/2 当n足够大时,(n+1)/2n,因此称:在数组中查找的最多次数为n次。(2)数据的顺序查找(方案三:设置哨兵)。首先将key复制到第n+1元素(an)的位置,称为设置了一个哨兵,然后从第一个元素开始顺序寻找,这能简化判断条件,节省运行时间; an = key; /* 设置哨兵 */ for(i = 0; key != ai; i+);/* 无论是否找到,都将结束循环 */ if(in) /* 若in,表示查找成功 */ printf(%dn, i); /* 输出ai

16、的下标 */ else /* 否则,表示查找失败 */ printf(search failedn); /* 输出失败信息 */这种写法,数组需多用一个元素,但程序比前一种更简单。 假定数组a的元素已按它们的值从小到大的顺序存放(有序)。则二分法是很好的查找方法。 其算法基本思想是:对任意ai到aj(i am;下一轮的查找区间为 m+1,j。如果: key am;下一轮的查找区间为 i,m-1。当 ji 时,区间i,j变为一个空区间,即表示在数组a中没有值为key的元素。由于每轮查找后,使查找区间减半, 因此称此查找方法为二分法查找。显然,初始查找的区间为i=0,j=n-1。(3)数据的顺序查

17、找(方案四:二分查找法)。二分法查找可用C代码描述如下: i = 0 ; j = n-1 ; /* 设定初始查找区间 */ while(i am) i = m+1; /* 改变区间,继续查找 */ else j = m-1; /* 改变区间,继续查找 */ /* 找到时,i j */for(i=0, j=n-1; i am) i = m + 1; /* 改变区间,继续查找 */ elsej = m - 1; /* 改变区间,继续查找 */二分法算法演示a0a1a2a3a4a5a6a7a8a9a10a11a12a13a14247112736384042495052616872例 1:已知n=15

18、, key=360) i=0, j=14;1) m=(0+14)/2=7, a7=40key, j=m-1=6;12) m=(0+6)/2=3, a3=11key, i=m+1=4;23) m=(4+6)/2=5, a5=36=key, 找到,退出。3ia0a1a2a3a4a5a6a7a8a9a10a11a12a13a14247112736373842495051525672例 2: 已知n=15, key=450) i=0, j=14;1) m=(0+14)/2=7, a7=38key, j=m-1=10;3) m=(8+10)/2=9, a9=49key, j=m-1=9;4) m=(8+

19、9)/2=8, a8=42j,查找失败,返回n=15,结束。【例4.6】按递增顺序生成集合M 的前n 个元素。 (自学)集合 M 定义如下:(1)整数1 属于M;(2)如果整数X 属于M,则整数2*X+1 和3*X+1 也属于M;(3)再没有别的整数属于M。根据集合 M 的定义,它的前几个元素的枚举过程为M = 1,= M = 1,3, 2 * 1 + 1 = 3= M = 1,3,4, 3 * 1 + 1 = 4= M = 1,3,4,7, 2 * 3 + 1 = 7= M = 1,3,4,7,9, 2 * 4 + 1 = 9 首先,为存储M 的元素设计一个足够大的整数组m,用j 表示集合M

20、 中已生成的元素个数。按题意,首先将1放入集合M 中,然后按递增顺序用M 中的现有元素枚举出M 的新元素。【算法分析和设计】 设定义数组 mN来存储M集合(N足够大)。由于每个元素都可能施行两种枚举操作,因此需要两个指针e2 和e3,用以分别指向即将执行2*me2+1 和3*me3+1枚举操作整数的位置(元素下标)。另外,由于M 是按递增顺序排列的,所以需要对它们即将执行枚举产生的整数进行比较大小,小的先枚举产生M 的新元素。而每枚举一次,e2 或者e3 需要加1。因此,算法描述如下:初始,令 m0为1,e2 和e3 均为0,当前M中元素的个数j为1,集合的容量为n。如果 j =n,结束循环。

21、m0 = 1, e2 =e3 =0,j=1 结束输出集合j=me2*2+1NYmj=me3*3+1Y mj=me3*3+1取2*me2+1排除两者相等取3*me3+1j+【生成集合M 的程序】#include #define N 100void main() short mN=1, n, e2=0, e3=0, j=1; scanf(%d, &n); /生成n个元素 while(j=me2*2+1) /对me2执行2*x+1枚举操作 mj=me2+*2+1; if(me3*3+1=mj) e3+;/当两个元素枚举值相同时,同时枚举else mj=me3+*3+1; /对me2执行2*x+1枚举

22、操作 j+; for(j=0; jn; j+) printf(%dt, mj); printf(n);【生成集合 M 的改进程序】#include #define N 1000void main()short mN, n, e2, e3, j, m2, m3;scanf(%d, &n); /生成n个元素for(m0=j=1, e2=e3=0; jn; j+) m2 = 2 * me2 + 1; /计算m2 和m3 m3 = 3 * me3 + 1; mj = m2 m3 ? m2 : m3; /从m2 和m3 中选择小的送mj e2 += m2 = m3; /m2 = m3; /m3 = m2

23、,更新e3 for(j=0; jn; j+) printf(%dt,mj); printf(n);【例4.7】从含n个整数的数组中,找出其中出现次数最多且是最先出现的整数。 【解题思路】 设数组为a,为了找出a中出现次数最多且最早出现的元素,令变量pos存储数组中出现次数最多的元素的下标,c是该元素在数组中出现的次数(初值为0)。程序用循环顺序考察数组的每个元素,对当前正在考察的元素ai,用循环统计出数组中与ai等值的元素个数tc。统计结束后,让tc与c比较,如果tc的值大于c,就用tc更新c,并用i更新pos;否则,不更新。for(c = i = 0; i n-1; i+) /c:记录最多次

24、数 for(tc=1,j=i+1;j c) /* 找到出现次数更多的整数 */ c = tc; pos = i; /保留最大数和它的位置 printf(出现最多的值是%d 出现的次数是 %dn, apos,c);【例4.8】对数组作整理, 使其中小于0的元素移到前面,等于0的元素留在中间, 而大于0的元素移到后面。例如:5, -4, 0, -2, 7, 0, 8 将整理为: -4, -2, 0, 0, 7, 8, 5【算法分析和设计】在整理过程中,把数组分为三段左段 0 k-1 (a0ak-1)中存放负数元素,中段k j-1(ak aj-1) 存放0元素,右段h+1 n-1 (ah+1an-1

25、)中存放正数元素。引入变量k(负数的个数)、h(大于0的个数)0 k-1 h+1 n-1左段:负数 中段:0元素 还没考察 右段:正数k j-1 j h (1)aj0:交换 aj 和 ah;令h-,大于0的元素多了一个。由于交换前的ah是还未考察过的元素,所以j不能增1。 根据元素aj小于0、等于0和大于0这3种情况,分别有3种处理办法: 初始时,令 j = 0, k = 0 , h = n-1 ,然后令j从0 开始向右搜索,直至jh 为止:0 k-1 h+1 n-1左段:负数 中段:0元素 还没考察 右段:正数k j-1 j h 5, -4, 0, -2, 7, 0, 8 将整理为 -4,

26、-2, 0, 0, 7, 8, 5【算法演示】 -4 -2 0 0 7 8 5 k j,h -4 0 0 -2 7 8 5 k j h -4 0 0 -2 7 8 5 k, j h -4 0 0 -2 7 8 5 k j, h 0 -4 0 -2 7 8 5 k j h 0 -4 0 -2 7 8 5 j,k 8 -4 0 -2 7 0 5 j,k h 5 -4 0 -2 7 0 8 h 0 1 2 3 4 5 6 aj=0,j+;j=1,aj=-40,ajah,h-,h=5aj0,ajah,h-,h=4k+,k=1,j+,j=2aj=0,j+;j=3,aj=-20akaj,k+,k=2,j+

27、,j=4#include #define MAXN 1000void main() int j, n, k, temp, h,aMAXN; printf(Enter nn); scanf(%d, &n); / 输入数组中实际数据 printf(Enter a0 -a%dn, n-1); for(j=0; jn;j+)scanf(%d, &aj);【例4.8】数组整理程序: j = k = 0; h = n-1; while (j = h) if (aj0) temp=aj; aj=ak; ak=temp; j+; k+; else if (aj = 0) j+; else temp=aj; a

28、j=ah; ah=temp;h-; for(j=0;j n; j+)printf(“%4d”,aj);/*输出*/ printf(nnn);【例4.9】输入一个含n个元素的数组,要求数组中的元素互不相等。数组生成后,按每行10个整数的格式输出。【解题思路】 设数组为a,并引入已输入的不同整数的计数器i,i的初值为0。用循环逐一输入整数,将当前输入的整数存于ai中,并检查该整数是否与早先已输入并存储于a0至ai-1的某个整数相等。如果发现当前输入的整数与早先输入并存储的某个整数相等,则忽略该元素,继续输入下一个整数。如果当前输入的整数与早先输入的整数都不相等,说明ai是未曾输入过的,则让i增1。

29、在输入不同整数个数i等于n时,结束循环。i = 0;while (i n) printf(Enter a%d , i); scanf(%d, &ai); for(k=0;ak!=ai; k+); /* 检查是否有重复 */ if(k i) /* ai与a0至ai-1的某个ak相等 */ printf(这是一个早先曾输入过的整数!n); else i+ ; /* 当前输入的ai是一个不重复的整数 */ for(i = 0; i n; i+) if(i % 10 = 0) /每输出5个整数后,输出一个换行 printf(n); printf(%4d, ai); 排序算法 排序算法是计算机算法中最常

30、用的算法之一。 排序是指对一个数据序列进行处理,使得该序列中的数据按照一定规律按次序排列。最简单的排序是整数的升序或者降序排列。例如,序列8, 4, 3, 6, 9, 2, 7的升序排序为2, 3, 4, 6, 7, 8, 9。 排序有许多种算法,例如插入法、选择法、冒泡法、二分法、杂凑法、等等。本教材使用的是冒泡法。【例4.10】输入n个整数,对它们用冒泡法从小到大排序,然后输出。 冒泡排序:一种类似于轻者上浮、重物下沉的排序算法,将相邻元素进行比较,小者置前,大者放后,不断依次比较,直至最终结果。 冒泡排序算法的基本思想是对数据序列进行 n-1 次循环。 具体做法是:对数组作多次比较调整遍

31、历,在每次循环中,认为数据序列中的 n 个数据是未排序的。依次对相邻两个数据进行比较,如果较大数在前,则将两数交换(设从小到大排序)。在一次循环结束后,最前面一个数据必然是最小的。e.g: 将序列 49,38,65,97,76,13,27,49,100,3用起泡排序的方法进行排序。冒泡排序/* 冒泡排序算法描述 */for(i = 0;i i;j-) /* 需要比较 n-1-i 次 */ if(ajaj-1) /* aj与aj-1交换 */ temp = aj; aj = aj-1; aj-1 = temp; 结论:对于N个元素的数组:遍历次数:N-1;第i轮遍历的比较次数:N-1-i;总比较

32、次数:N*(N-1)/2方案二:冒泡法存在的问题观察对数据序列1, 7, 8, 4, 5进行冒泡排序的过程第2 次遍历:第3 次遍历:第4 次遍历:1 7 8 4 5 1 7 8 4 51 7 4 8 51 4 7 8 51 4 7 8 51 4 7 8 51 4 7 5 81 4 5 7 81 4 5 7 81 4 5 7 81 4 5 7 81 4 5 7 81 4 5 7 81 4 5 7 8第1 次遍历: 在第二次循环后,实际上已经完成排序,后两轮可以不做了。但由于冒泡法中外循环的次数是固定的,对数据序列1,4,5,7,8进行冒泡排序时,虽然该数据序列已排序,冒泡法还是要作n-1次循环

33、。从例中得出,对于一个数据序列,如果存在某些子序列是已排序的话,应该可以节省循环的次数的。改进1:如果某次遍历未发生任何交换,说明数组已经排好序。设立flg标志。 每次遍历前,预置该变量的值为0。当发生交换时,置该变量的值为1,一次遍历结束时,就检查该变量的值,若其值为1,说明发生过交换,继续下一次遍历;如该变量的值为0,说明未发生过交换,则立即结束排序循环。相应的排序代码改为:for(i=0;ii;j-)/* 比较 n-1-i 次 */ if(aj aj-1) temp = aj; aj = aj-1; aj-1 = temp; flg = 1;/有元素交换的情况 if (flg = 0)

34、break; 冒泡法排序优化片断改进2:如果某次遍历在某个位置发生过最后一次交换,则说明以后的元素都是排好序的。设立up标志例如,数列a=1,2,3,6,4,7,5,第一次遍历,j在6处发生元素交换,j在4处发生交换,j在3,2,1处都未发生元素交换。最后交换处是j为4。这次遍历使序列变成:a = 1,2,3,4,6,5,70 1 2 3 4 5 6a = 1,2,3,4,6,5,7 下一次遍历的范围的上界可立即缩短至上一次遍历的最后交换处之前,即位置5。 利用该性质,引入变量up,k. k:记录每次遍历的最后元素交换位置。 考虑到可能某次遍历时一次也不发生元素交换的情况,因此在每次遍历前,预

35、置变量k=n。一次遍历结束后,赋k给up,作为下一次遍历的上界。up=n结束,up的初值为0。 up = 0; /* 一次遍历至up之前,初始时,遍历至首元素之前 */ while (up up; j-) /*比较至up*/ if(ajaj-1) /*aj与aj-1交换*/ temp = aj; aj = aj-1; aj-1 = temp; k = j; /*记录发生交换的位置*/ up = k; 常用的选择排序的算法描述其算法思想是: 首先从下标为0的元素开始,在数组内找最小元素,并将这最小元素与下标为0的元素交换;接着从下标为1的元素开始,在数组内找最小元素,并将这最小元素与下标为1的元

36、素交换;依次类推,直至从下标为n-2的元素开始,在数组内找最小元素,并将这最小元素与下标为n-2的元素交换。到此,数组排序完毕。void main()int i,n,k,x,min,min_k,a100;scanf(%d,&n); /* */for (i=0;in;i+)scanf(%d,&ai);/*输入10个整数*/for (k=0;kn-1;k+) /*控制排序n-1步 */ min=ak; /* 假设第k数是最小值,用min记录*/ min_k=k; /* 用min_k 记录当前最小值的下标*/ for (i=k+1;in;i+)/*在ak到an-1寻找最小数*/ if (aimin)

37、 /*成立,记录新的最小数和它的下标*/ min=ai; min_k=i; x=amin_k;amin_k=ak;ak=x; /*交换最小数和第k个数*/ for (i=0;i=n-1;i+) /*输出排序后的n个数*/ printf(%5d,ai); printf(n); 【例4.11】设有顺序编号为1至n的n(100)个人按顺时针顺序站成一个圆圈。首先从第1个人开始,按顺时针顺序从1开始报数,报到第m(n)个人,令其出列。然后再从出列的下一个人开始,按顺时针顺序从1开始报数,报到第m个人,再令其出列, 。如此下去,直到圆圈不再有人为止。求这n个人出列的顺序。例如:有10人,报数为3的出局,

38、则有下面的排列原排列: 1 2 3 4 5 6 7 8 9 10现排列: 3 6 9 2 7 1 8 5 10 4#include /p77#define N 100int main() int i, j, k, aN, n, m; printf(输入n & mn);scanf(%d%d, &n, &m); for(i = 0; i n; i+)ai = i+1; for(j = 0, i = 0; i n; i+) /从第1人开始报数(j = 0),共有n论报数 for(k = 0; ;j = (j+1)%n) /寻找出局者 if(aj &+k = m) break;/找到出局者,退出 printf(%4d, aj); /打印出局者 aj = 0; /将出局者置0 printf(n程序结束n);return 0;#include

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论