《C程序设计》数组课件_第1页
《C程序设计》数组课件_第2页
《C程序设计》数组课件_第3页
《C程序设计》数组课件_第4页
《C程序设计》数组课件_第5页
已阅读5页,还剩99页未读 继续免费阅读

下载本文档

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

文档简介

1、C程序设计数组PPT课件C程序设计数组PPT课件本章主要内容 1. 数组基本概念 2. 一维数组及应用 3. 二维数组及应用 4. 字符数组和字符串本章主要内容 1. 数组基本概念5.1 数组的概念 C语言中定义普通变量就是按变量的数据类型找到相应大小的存储空间例如: int a1,a2;float a3;char a4a1a2整型变量占两个字节5.1 数组的概念 C语言中定义普通变量就是按变量int a1,a2;float a3;char a4a1a2a3实型变量占四个字节 C语言中定义普通变量就是按变量的数据类型找到相应大小的存储空间例如:5.1 数组的概念int a1,a2;a1a5.1

2、 数组的概念int a1,a2;float a3;char a4a1a2a3a4 C语言中定义普通变量就是按变量的数据类型找到相应大小的存储空间例如:字符型变量占1个字节5.1 数组的概念int 5.1 数组的概念 C语言中定义数组就是按数组数据类型及元素个数找到相应大小的一组连续的存储空间。例如: int a4a0=2a3=5a2=3a定义了0 3共4个元素占8个字节01235.1 数组的概念 C语言中定义数组就是按数组数据5.1 数组的概念int a4a0=2a3=5a2=3a2 C语言中定义数组就是按数组数据类型及元素个数找到相应大小的一组连续的存储空间。例如: 5.1 数组的概念int

3、 5.1 数组的概念int a4a0=2a3=5a2=3a C语言中定义数组就是按数组数据类型及元素个数找到相应大小的一组连续的存储空间。例如: 525.1 数组的概念int 5.1 数组的概念int a4a0=2a3=5a2=3a C语言中定义数组就是按数组数据类型及元素个数找到相应大小的一组连续的存储空间。例如: 5235.1 数组的概念int 5.1 数组的概念1、数组是内存中的一块连续的存储区域,该区域由若干个数据成员组成;2、每一个数据成员称为一个数组元素,有统一的名字(即数组名),用元素在数组中的序号(称为下标)来标识;3、数组可以是一维的,也可以是多维的,不管一维还是多维,各元素

4、在内存中都是连续存放的;4、数组的每一维下标必须用方括号括起来;5.1 数组的概念1、数组是内存中的一块连续的存储区域,该区5.1 数组的概念5、一维数组是指只有一个下标的数组,定义一个数组必须说明数组类型、名称、下标维数及每维下标最多元素个数。例如:int a65.1 数组的概念5、一维数组是指只有一个下标的数组,定义一5.1 数组的概念5、一维数组是指只有一个下标的数组,定义一个数组必须说明数组类型、名称、下标维数及每维下标最多元素个数。例如:int a6 数组的类型,决定数组每个元素所占的存储区域大小5.1 数组的概念5、一维数组是指只有一个下标的数组,定义一5.1 数组的概念5、一维数

5、组是指只有一个下标的数组,定义一个数组必须说明数组类型、名称、下标维数及每维下标最多元素个数。例如:int a6 数组的名称,是程序中引用数组元素的依据之一5.1 数组的概念5、一维数组是指只有一个下标的数组,定义一5.1 数组的概念5、一维数组是指只有一个下标的数组,定义一个数组必须说明数组类型、名称、下标维数及每维下标最多元素个数。例如:int a6 数组的维说明,决定数组由几维组成,本例为一维数组,只有一个下标5.1 数组的概念5、一维数组是指只有一个下标的数组,定义一5、一维数组是指只有一个下标的数组,定义一个数组必须说明数组类型、名称、下标维数及每维下标最多元素个数。例如:int a

6、6 数组的元素个数,本例共定义6个元素,下标从055.1 数组的概念 假设数组元素a3在内存中的地址为3100,那a0的地址?a5呢?5、一维数组是指只有一个下标的数组,定义一个数组必须说明数组6、二维数组是指有两个下标的数组,二维数组在逻辑上表现为二维表格,是若干个一维数组的集合。例如:5.1 数组的概念int a23 定义了一个整型二维数组,逻辑上由两行三列共6个元素组成。元素分别为: a00、a01、a02 a10、a11、a126、二维数组是指有两个下标的数组,二维数组在逻辑上表现为二维6、二维数组是指有两个下标的数组,二维数组在逻辑上表现为二维表格,是若干个一维数组的集合。例如:5.

7、1 数组的概念int a23a00a01a02a10a11a12a0a1 假设定义数组float a56,已知a11在内存中的地址为3100,那a22的地址?a45呢?6、二维数组是指有两个下标的数组,二维数组在逻辑上表现为二维7、字符数组是用于存放字符的数组,每个元素可以存放一个字符,主要用于处理字符串。例如:5.1 数组的概念char a10 定义了一个字符型一维数组,最多可以存放10个字符。char a1010 定义了一个字符型二维数组,最多可以存放100个字符;一般用于存放长度不超过10个字符的字符串。7、字符数组是用于存放字符的数组,每个元素可以存放一个字符,5.2 一维数组及应用5

8、.2.1 一维数组的定义(P133)与初始化(P136)5.2.2 一维数组的引用与遍历 所谓遍历,是指对数组中的所有元素扫描一遍,对于一维数组,通常用单层循环完成。例如: 1. 遍历赋值为每个元素赋值 for(i=0;iN;i+) printf(请输入第%d个元素的值:,i); scanf(%d,&ai); 5.2 一维数组及应用5.2.1 一维数组的定义(P133)5.2 一维数组及应用5.2.2 一维数组的引用与遍历2. 遍历输出输出每个元素的值printf(数组各元素的值为:);for(i=0;iN;i+) printf(%5d,ai);5.2 一维数组及应用5.2.2 一维数组的引用

9、与遍历pri5.2 一维数组及应用5.2.3 一维数组应用举例 利用数组编程的一般步骤为: (1)定义数组; (2)为数组各元素赋值; (3)遍历数组各元素,按要求处理; (4)输出处理结果。5.2 一维数组及应用5.2.3 一维数组应用举例5.2 一维数组及应用5.2.3 一维数组应用举例 1. 从键盘输入10个学生成绩,求平均分并统计高于平均分的人数(1)定义有10个元素的数组,求平均分就需要累加,所以还需要一个累加器,要统计人数还需要一个计数器,要循环遍历数组各元素还需要循环变量;(2)通过遍历为数组各元素赋值(3)累加各数组元素值,需要遍历各数组元素(4)求出平均分后还要统计高于平均分

10、的人数,需要拿每个元素和平均分进行比较,所以还需要遍历各数组元素5.2 一维数组及应用5.2.3 一维数组应用举例(1)定义5.2 一维数组及应用5.2.3 一维数组应用举例 1. 从键盘输入10个学生成绩,求平均分并统计高于平均分的人数(5)输出处理结果。5.2 一维数组及应用5.2.3 一维数组应用举例(5)输出5.2.3 一维数组应用举例 2. 随机产生10个两位整数放入一维数组,再将各数组元素按逆序存放,如a0与a9对换,a1与a8对换; 3. 随机产生10个两位整数放入一维数组,找出其中最大值及其位置;5.2 一维数组及应用5.2.3 一维数组应用举例 3. 随机产生10个两位整数5

11、.2 一维数组及应用main()int a10,max,k,i,j; printf(原数据为:); for(i=0;i10;i+) ai=rand()%90+10; printf(%5d,ai); k=0; for(i=1;i10;i+) if(akai) k=i; printf(n最大值%d,在第%d位!,ak,k);5.2 一维数组及应用main()5.2.3 一维数组应用举例 4. 对8个数按降序排序比较交换法 5.2 一维数组及应用第1趟:假设a0元素最大,将其和后面a1-a7各元素值进行比较,如果有比它更大的数,则交换。代码段如下: for(j=1;i8;j+) if(a0aj) t

12、=a0;a0=aj;aj=t;5.2.3 一维数组应用举例5.2 一维数组及应用第1趟:假5.2 一维数组及应用7192935950277941代码段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a0aj1j5.2 一维数组及应用7192935950277941代码段5.2 一维数组及应用7192935950277941代码段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a01j5.2 一维数组及应用7192935950277941代码段5.2 一维数组及应用7192935950277941代码段如下: for

13、(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a0aj条件成立!交换!1j5.2 一维数组及应用7192935950277941代码段5.2 一维数组及应用9271935950277941代码段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a0aj1j5.2 一维数组及应用9271935950277941代码段5.2 一维数组及应用9271935950277941代码段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a0aj2j5.2 一维数组及应用9271935950277941代码

14、段5.2 一维数组及应用9271935950277941代码段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a0aj2j条件成立!交换!5.2 一维数组及应用9271935950277941代码段5.2 一维数组及应用9371925950277941代码段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a0aj2j5.2 一维数组及应用9371925950277941代码段5.2 一维数组及应用9371925950277941代码段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj

15、=t;a0aj3j5.2 一维数组及应用9371925950277941代码段5.2 一维数组及应用9371925950277941代码段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a0aj3j条件不成立!5.2 一维数组及应用9371925950277941代码段5.2 一维数组及应用9371925950277941代码段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a0aj4j5.2 一维数组及应用9371925950277941代码段5.2 一维数组及应用9371925950277941代码段如下: f

16、or(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a0aj4j条件不成立!5.2 一维数组及应用9371925950277941代码段5.2 一维数组及应用9371925950277941代码段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a0aj5j5.2 一维数组及应用9371925950277941代码段5.2 一维数组及应用9371925950277941代码段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a0aj5j条件不成立!5.2 一维数组及应用937192595027

17、7941代码段5.2 一维数组及应用9371925950277941代码段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a0aj6j5.2 一维数组及应用9371925950277941代码段5.2 一维数组及应用9371925950277941代码段如下: for(j=1;j8;j+) if(a0ai) t=a0;a0=aj;aj=t;a0aj6j条件不成立!5.2 一维数组及应用9371925950277941代码段5.2 一维数组及应用9371925950277941代码段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=a

18、j;aj=t;a0aj7j5.2 一维数组及应用9371925950277941代码段5.2 一维数组及应用9371925950277941代码段如下: for(j=1;j8;j+) if(a0aj) t=a0;a0=aj;aj=t;a0aj7j条件不成立!第一趟比较结束后,最大值被放在了a0位置。5.2 一维数组及应用9371925950277941代码段5.2 一维数组及应用 第2趟是将a0排除在外,设a1是剩下的数中最大的,与后面a2-a7比较。 第3趟是将a0、a1排除在外,设a2是剩下的数中最大的,与后面a3-a7比较。 第7趟是将a0 a5排除在外,设a6是剩下的数中最大的,与后面

19、的a7-a7比较。完成排序。 以此类推,若要对N个数排序,要处理的趟数是N-1。由此增加一个外循环控制趟数: for (i=0;in-1;i+) 完整的比较交换法排序核心程序段为: for (i=0;in-1;i+) for(j=i+1;jn;j+) if(aiaj) 交换两个元素值 5.2 一维数组及应用 第2趟是将a0排除在外,设5.2.3 一维数组应用举例 4. 对8个数按降序排序选择法 与比较交换法类似,只是每次比较后不马上交换,而是只记录极值位置,一趟比较完成后再和假想的极值交换,极大地提高了排序效率。5.2 一维数组及应用main()int a8,i,j,k,t; printf(排

20、序前数据为:); for(i=0;i8;i+) ai=rand()%90+10; printf(%5d,ai); for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; printf(n排序后数据为:); for(i=0;i8;i+) printf(%5d,ai);5.2.3 一维数组应用举例5.2 一维数组及应用main(5.2 一维数组及应用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941i5.2

21、 一维数组及应用for(i=0;i7;i+)7195.2 一维数组及应用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941ki5.2 一维数组及应用for(i=0;i7;i+)7195.2 一维数组及应用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941kij5.2 一维数组及应用for(i=0;i7;i+)7195.2 一维数组及应用for(i=0;i7;i+)

22、k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941ikj5.2 一维数组及应用for(i=0;i7;i+)7195.2 一维数组及应用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941ikj5.2 一维数组及应用for(i=0;i7;i+)7195.2 一维数组及应用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t

23、; 7192935950277941ikj5.2 一维数组及应用for(i=0;i7;i+)7195.2 一维数组及应用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941ikj5.2 一维数组及应用for(i=0;i7;i+)7195.2 一维数组及应用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941ikj因为条件不成立,所以K位置不变5.2 一维数组及应用for

24、(i=0;i7;i+)7195.2 一维数组及应用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941ikj5.2 一维数组及应用for(i=0;i7;i+)7195.2 一维数组及应用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941ikj因为条件不成立,所以K位置不变5.2 一维数组及应用for(i=0;i7;i+)7195.2 一维数组及应用for(i=0;i7

25、;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941ikj5.2 一维数组及应用for(i=0;i7;i+)7195.2 一维数组及应用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941ikj因为条件不成立,所以K位置不变5.2 一维数组及应用for(i=0;i7;i+)7195.2 一维数组及应用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)

26、k=j; t=ai;ai=ak;ak=t; 7192935950277941ikj5.2 一维数组及应用for(i=0;i7;i+)7195.2 一维数组及应用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941ikj因为条件不成立,所以K位置不变5.2 一维数组及应用for(i=0;i7;i+)7195.2 一维数组及应用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277

27、941ikj5.2 一维数组及应用for(i=0;i7;i+)7195.2 一维数组及应用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941ikj因为条件不成立,所以K位置不变5.2 一维数组及应用for(i=0;i7;i+)7195.2 一维数组及应用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 7192935950277941ikj交换ai、ak两元素的值5.2 一维数组及应用for(i=

28、0;i7;i+)7195.2 一维数组及应用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 9392715950277941ikj交换ai、ak两元素的值5.2 一维数组及应用for(i=0;i7;i+)9395.2 一维数组及应用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 9392715950277941ikj第二趟开始,I取值为15.2 一维数组及应用for(i=0;i7;i+)9395.2 一维数组及应用for(i

29、=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 9392715950277941ikj重新定位K,取与I相同值5.2 一维数组及应用for(i=0;i7;i+)9395.2 一维数组及应用for(i=0;i7;i+) k=i; for(j=i+1;j8;j+) if(akaj)k=j; t=ai;ai=ak;ak=t; 9392715950277941ikjJ从I+1重新开始循环5.2 一维数组及应用for(i=0;i7;i+)939int a6=0,i;char c; printf(请输入选票编号:); while(

30、c=getche()!=#) if(c5)c=0; ac-48+; for(i=0;i6;i+) printf(“n%d号:%d票n,i,ai);5.2 一维数组及应用5. 用数组可以优化程序 统计选票:有5个侯选人,选票号分别为15,从键盘键入,“#”号结束。除15以外的其它号以废票计。 本题可以用多分支结构完成,但程序代码长度较长,如果用数组则非常简单。int a6=0,i;char c;5.2 一维数组5.3.1 二维数组的定义(P138)5.3.2 二维数组元素的引用与遍历 与二维数组元素的引用相似,元素由下标来确定位置: 数组名行下标列下标 如果要遍历一个二维数组的所有元素,一般用双

31、循环嵌套完成。5.3 二维数组及应用5.3.1 二维数组的定义(P138)5.3 二维数组及应用5.3 二维数组及应用main() int i,j,a1010; /*定义10*10数组*/ for(i=0;i10;i+) /*遍历行*/ for(j=0;j10;j+) /*遍历列*/ aij=i+j; /*遍历赋值*/ for(i=0;i10;i+) for(j=0;j10;j+) printf(“%5d”,aij); /*遍历输出*/ printf(“n”); /*换行输出*/ 5.3 二维数组及应用main()5.3.3 二维数组的应用 1. 输出10行杨辉三角形(直角三角形) 特点如下图

32、所示:如果将各数据放入一个二维数组的话,那杨辉三角形占据了二维数组的下半部分,且列标为0的元素及行列标相等的元素值为1,其它元素均为其左肩元素和头顶元素之和。5.3 二维数组及应用5.3.3 二维数组的应用5.3 二维数组及应用5.3 二维数组及应用/*核心代码为赋值*/ for(i=0;i10;i+) /*遍历行,共10行*/ for(j=0;j=i;j+) /*遍历列,不需为所有数组元素赋值*/ if(i=j | j=0) /*如果是第0列或主对角线(行列标相等)*/ aij=1; /*这些元素赋值为1*/ else /*否则其它元素等于*/ aij=ai-1j+ai-1j-1; /*头顶

33、元素与左肩元素之和*/5.3 二维数组及应用/*核心代码为赋值*/5.3.3 二维数组的应用 2.输出10行杨辉三角形(等腰三角形) 杨辉三角数据一旦进入二维数组后,以什么样的形式输出就非常简单了,比如还可以以等腰三角形输出。这里需要用到一个定位输出函数gotoxy(列,行)函数。5.3 二维数组及应用5.3.3 二维数组的应用5.3 二维数组及应用5.3 二维数组及应用/*核心代码为输出*/ for(i=0;i10;i+) gotoxy(40-i*3,i+1);/*只需要定位每行的起点,*/ /* 3和1是试出来的,可用别的值试试*/ for(j=0;j=i;j+) printf(“%6d”

34、,aij); /*遍历输出,注意6和前面3的关系*/ /*因为每行的起点由gotoxy函数定位,所以不需要换行语句了*/ 5.3 二维数组及应用/*核心代码为输出*/5.3.3 二维数组的应用 3. 二维数组的转置(如下图所示) (1) 定义两个数组A,B; (2) 为A数组各元素赋值,为方便我们可用随机数; (3) 将Aij元素的值赋给Bji,完成转置; (4) 输出A数组各元素和B数组各元素;5.3 二维数组及应用5.3.3 二维数组的应用5.3 二维数组及应用5.3.3 二维数组的应用 4. 为15个学生5门课成绩求总分,并排序后输出5.3 二维数组及应用 (1) 定义数组A158,多出

35、三列用于放总分和名次、学号; (2) 赋值时,学号用1-15,成绩用随机数生成; (3) 对每个学生计算总分; (4) 对总分列按降序排序,注意交换时整行交换; (5) 填入名次 (6) 输出整个数组5.3.3 二维数组的应用5.3 二维数组及应用 (1#define swap(x,y) t=x;x=y;y=t; /*定义交换两个变量的宏*/main() int i,j,a158,k,p,q,t; for(i=0;i15;i+) ai0=i+1; /*用i+1作为学号*/ for(j=1;j6;j+) aij=rand()%51+50; /*随机产生学生成绩赋值*/ for(i=0;i15;i

36、+) /*求总分,放在第6列*/ ai6=0; for(j=1;j6;j+) ai6+=aij; for(p=0;p14;p+) /*对第6例用比较交换法排序*/ for(q=p+1;q15;q+) if(ap6aq6) for(k=0;k7;k+) swap(apk,aqk);/*注意交换时要换整行数据*/ for(i=0;i15;i+) ai7=i+1; /*用将名次放在第7列,没有考虑总分相同的情况*/ for(i=0;i15;i+) for(j=0;j8;j+) printf(“%5d”,aij); /*输出数组的各元素*/ printf(n); getch(); 5.3 二维数组及应

37、用#define swap(x,y) t=x;x=y;y=t 知识引申:如何将处理结果永久存放呢?这就需要存放到文件中: 将数据写入文件需要有以下几步: 1. 程序中包含头文件:#include 2. 定义一个文件指针:FILE *fp;/*fp是指针名,可任意*/ 3. 在指定文件夹下创建一个文件,格式为: 文件指针=fopen(文件名,”w”); 4. 将数据写入文件中的格式: fprintf(文件指针,”格式符”,变量列表); 5. 文件写完成后,需要关闭打开的文件,格式为: fclose(文件指针);5.3 二维数组及应用 知识引申:如何将处理结果永久存放呢?这就需要存放到文件#def

38、ine swap(x,y) t=x;x=y;y=t; /*定义交换两个变量的宏*/#include /*文件操作必须要包含的头文件*/main() int i,j,a158,k,p,q,t; FILE *fp; /*定义文件指针*/ for(i=0;i15;i+) ai0=i+1; /*用i+1作为学号*/ for(j=1;j6;j+) aij=rand()%51+50; /*随机产生学生成绩赋值*/ for(i=0;i15;i+) /*求总分,放在第6列*/ ai6=0; for(j=1;j6;j+) ai6+=aij; for(p=0;p14;p+) /*对第6例用比较交换法排序*/ fo

39、r(q=p+1;q15;q+) if(ap6aq6) for(k=0;k7;k+) swap(apk,aqk);/*注意交换时要换整行数据*/ for(i=0;i15;i+) ai7=i+1; /*用将名次放在第7列,没有考虑总分相同的情况*/ fp=fopen(c:abc.txt,w); /*在C盘根目录下创建一个新文件*/ for(i=0;i15;i+) for(j=0;j8;j+) fprintf(fp,%5d,aij); /*将数组的各元素值写入文件*/ fprintf(fp,n); /*每写完一行换行*/ fclose(fp); /*关闭数据文件*/ printf(ok!); /*提

40、示信息*/ getch(); #define swap(x,y) t=x;x=y;y=t*5. N阶魔方阵问题,(N为奇数) 魔方阵的条件是: (1) 1在首行的正中间; (2) 下一个数在上一个数的上一行下一列; (3) 如果当前位置为首行,则其上一行为最后一行;如果当前列为最后一列,则其下一列为首列。 (4) 如果发生冲突(即计算出的位置上已经有值),则将下一个值放在当前位置的下一行相同列位置上。5.3 二维数组及应用*5. N阶魔方阵问题,(N为奇数)5.3 二维数组及应用6.3 二维数组及应用main() int a2020=0,n,m,x,y,p,q; /*因为C中不能动态定义数组,

41、所以先定义一个大一点的二维数组*/ do printf(please input n(n is a odd number):); scanf(%d,&n); while(n%2=0);/*精典程序段,保证输入合法数据*/ x=1;y=n/2+1; axy=1;/*将1放在第1行中间*/ for(m=2;m=n*n;m+) p=x;q=y;/*记录当前放置的位置*/ if(x=1) x=n; else x-; /*定位下一个数的行位置*/ if(y=n) y=1; else y+;/*定位下一个数的列位置*/ if(axy!=0) x=p+1,y=q; /*如果已经放过数,则重新定位*/ axy

42、=m; /*放入一个数到指定位置*/ for(x=1;x=n;x+) /*输出放好数的魔方阵*/ for(y=1;y=n;y+) printf(%7d,axy); printf(n); getch(); 6.3 二维数组及应用main()*6.心灵感应 先想一个060之间的数,再依次从六张卡片中回答有还是没有你想的数,最后由计算机输出你想的那个数.原理: (1) 对于一个二进制数来说,将从低位到高位的每一个1按1,2,4,8, 16,32转换,再相加就是对应的十进制数. (2) 060之间的数化为二进制后不超过6位,转换成二进制后,从低位到高位,只要第1位上有1的数都在第1张卡片上,第2位有1

43、的数都在第2张卡片上, (3) 每张卡片上第1个数刚好依次是1,2,4,8,16,32,只回答”有”,就将这张卡片上的第1个数相加,最后就可以得到这个数.5.3 二维数组及应用*6.心灵感应5.3 二维数组及应用6.3 二维数组及应用main()int a630=1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41, 43,45, 47,49,51,53,55,57,59, 2,3,6,7,10,11,14,15,18,19,22,23,26,27,30,31, 34,35,38,39,42,43,46,47,50,51,54,55

44、,58,59,4,5,6,7,12,13,14,15,20,21,22,23,28,29,30,31,36,37,38,39,44,45,46,47,52,53,54,55,60 ,0,8,9,10,11,12,13,14,15,24,25,26,27,28,29,30,31,40,41,42, 43,44,45,46,47,56,57,58,59,60, 0, 16,17,18,19,20,21,22,23,24,25, 26,27,28,29,30,31,48,49,50,51,52,53, 54,55,56,57,58,59,60,0, 32,33,34,35,36,37,38,39,4

45、0,41,42,43,44,45,46,47, 48,49,50,51,52,53,54,55,56,57,58,59,60,0;int x=0, i, j,q;printf(请想一个160之间的数,想好了以后按任意键n);getch();for(i=0;i6;i+) printf(这是第%d张卡片n,i+1); for(j=0;j60) printf(你想的数不在1-60之间!n);/*累加超过60,输出错误信息*/else printf(你想的数字是:%dn,x);6.3 二维数组及应用main()5.4 一维字符数组1. 字符数组用于存放字符的ASCII码值,每个数组元素 存放一个字符,

46、占用一个字节。2. 字符串存放于字符数组中,其中最后一个元素值为0。3. 字符数组与字符串的区别 (1)字符串肯定是存放在字符数组中的,且最后一个元素的值为0(0就是“0”); (2)以“0”结束的字符数组可以当字符串处理。4. 字符数组元素的引用 与前面介绍过的数值引用相同,一个元素占一个字节,-128127(带符号)或0255(无符号)之间,当只用作字符处理时,二者是一致的,没有正负之分。 5.4 一维字符数组1. 字符数组用于存放字符的ASCII5.4 一维字符数组5. 字符串长度函数strlen 求字符串长度函数是从指定地址开始,遇到0结束,求出长度中不包括0那个字节。6. 字符串常量

47、 用双引号引住的内容被称为字符串常量,字符串常量在内存中被保存在一个特殊的区域,字符串常量后会自动加0,以保证字符串能正常结束。7. 从键盘为字符串赋值可用scanf或gets, 后者更方便。8. 字符串输出可以用printf或puts,后者更方便。5.4 一维字符数组5. 字符串长度函数strlen9. 字符数组元素的遍历,先求出字符串长度,再用for循环完成(前提:必须有0做结束标志,否则求不出长度!)#include main() char a=I love this game!; int n=strlen(a),i; for(i=0;in;i+) printf(%c,ai); slee

48、p(1); getch();5.4 一维字符数组9. 字符数组元素的遍历,先求出字符串长度,再用for循环完#include main() char a=I love this game!; int i; for(i=0;ai!=0;i+) printf(%c,ai); sleep(1); getch();10. 字符数组元素的遍历,也可以用0作循环结束条件。5.4 一维字符数组#include 10. 字符数组元素的11. 字符数组的输入 (1)scanf函数并用%c作为格式控制符,一次只能为一个数组元素赋值,数组元素名必须加&,不会自动加0,少用; scanf(%c,&ai);5.4 一维

49、字符数组11. 字符数组的输入 scanf(%c,&ai);11. 字符数组的输入 (2)scanf函数并用%s作为格式控制符,一次可为一个数组所有元素赋值,直接用数组名,不能再加&符,会在最后自动加0,缺点:输入带空格的字符串时只能接收第一个空格前的字符。 scanf(%s,a); scanf(%s,&a);因为数组名本来就是字符串的首地址,所以不能再加“&”符号。5.4 一维字符数组11. 字符数组的输入 scanf(%s,a); sca11. 字符数组的输入 (3)用gets(起始地址)函数赋值,将输入的一行字符依次赋给数组各元素,自动在末尾加0,最常用。gets(a); gets(&a

50、);5.4 一维字符数组11. 字符数组的输入gets(a); gets(&a);512. 字符数组的输出 (1)printf函数并用%c作为格式控制符,一次只能输出一个数组元素; printf(%c, ai);5.4 一维字符数组12. 字符数组的输出 printf(%c, ai)12. 字符数组的输出 (2)printf函数并用%s作为格式控制符,格式为: printf(“%s”,一个地址); 功能:从指定地址的元素开始输出,到遇到的第一个0时结束。 注意:输出时指定的必须是一个地址main() char a=I love this game!; int i; for(i=0;ai!=0;

51、i+) printf(%sn,ai); getch(); printf(%sn,&ai);5.4 一维字符数组12. 字符数组的输出 printf(“%s”,一个地址);12. 字符数组的输出 (3)用puts(字符数组首地址)函数输出,最常用,它是从指定地址开始,输出到遇到第一个0结束。puts(a); puts(&a); puts(&ai);main() char a=I love this game!; int i; for(i=0;ai!=0;i+) puts(&ai); getch(); 5.4 一维字符数组12. 字符数组的输出puts(a); puts(&a); 示例:从键盘上输

52、入一个英文句子,统计其中英文单词 的个数(单词之间用空格隔开)。main()char a100; /*不知道句子有多长,所以定义100个字符*/ int n=0,i; printf(Please intpu a sentence:n); gets(a); for(i=0;ai!=0;i+) if(ai=32)n+; printf(This sentence has %d word(s)n,n+1); getch(); 如果两个单词之间有多个空格呢?5.4 一维字符数组示例:从键盘上输入一个英文句子,统计其中英文单词main() 主要用于存储多个字符串,与二维数值数组相同,只是需要注意每一行行尾

53、需要一个0作本行字符串的结束标志,并要求必须按这些字符串中最长的字符串字符个数定义列数。 示例. 将China,Russin,Japan , America, Canada,NewZealand 等六个国家名存入一个二维数组并输出。5.5 二维字符数组main() char p611=China,Russin,Japan , America,Canada,NewZealand; int i; for(i=0;i6;i+) puts(pi); getch(); 主要用于存储多个字符串,与二维数值数组相同,只是需要示例. 从键盘上输入10个学生姓名并输出。main() char a1020; in

54、t i; for(i=0;i10;i+) printf(请输入第%d个学生姓名:,i+1); gets(ai); for(i=0;i10;i+) printf(第%d个学生姓名是:%sn,i+1,ai); 5.5 二维字符数组示例. 从键盘上输入10个学生姓名并输出。main()5.55.5 字符串处理函数1. 字符串测长度函数strlen 格式:strlen(地址) 功能:从指定地址开始到遇到第一个0为止的字节数,结果为一个整型值。 示例:main() char a=I love this game!; int i; for(i=0;ai!=0;i+) printf(“%dn”,strlen(&ai); getch(); 5.5 字符串处理函数1. 字符串测长度函数strlenma5.5 字符串处理函数2. 字符串连接函数strcat 格式:strcat(地址1,地址2) 功能:将从地址2

温馨提示

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

评论

0/150

提交评论