C语言课件第7章数组(2).ppt_第1页
C语言课件第7章数组(2).ppt_第2页
C语言课件第7章数组(2).ppt_第3页
C语言课件第7章数组(2).ppt_第4页
C语言课件第7章数组(2).ppt_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

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

文档简介

第7章 数组 第 7 章 数 组 1 第7章 数组 主要内容 一、数组的基本概念 二、一维数组 三、二维数组 四、字符数组 五、数组作为函数的参数 2 第7章 数组 我报20个学生的成绩,请同学们告诉我最大值? 小游戏1: scanf (“%d“, /* 读入第一个成绩 */ max = mark; /* 假设第一个成绩是最高分 */ for (i = 1; i =0; i-) printf(“%2d”,ai); 9 8 7 6 5 4 3 2 1 0 3. 引用数组时,下标不要越界。 int a10; /不能引用a10 12 第7章 数组 一维数组元素的应用 通过对一维数组编程实例的研究,掌握一维数组的输入、处理、 输出等操作,掌握对数组的编程规律(通常使用for语句)。 例7.1将数组倒置。如: 5432112345 分析:(1)前后相应元素互换即可,如图所示; (2)不论n为奇数还是偶数,交换的次数都是n/2次。 13 第7章 数组 #define N 10 #include “stdio.h“ int main( ) int i,temp,aN; printf(“请输入N个整数:n“); for(i=0;iavg) printf(“%5d“,scorei); printf(“n“); return 0; 运行结果: 请输入学生人数: 5 请输入5个学生成绩: 100 34 56 98 78 平均分:73.20 高于平均分的学生成绩是: 100 98 78 15 第7章 数组 补充 例题 输入10个整数,求最大值、最小值和平均值。(自学) 分析: (1) 先设第一个元素为最大值和最小值。 (2)遍历所有的元素,对每个元素,如果大于最大值,则把该元素作 为最大值;如果小于最小值,则把该元素设为最小值。 (3)遍历的同时,求和。 (4)最后用和值除以10,即得平均值。 16 第7章 数组 include “stdio.h” int main() int i,max,min; float sum=0; int a10; for(i=0;imax) max=ai; if(ai int main ( ) int i=0, j, base, n, num20; scanf(“%d“, scanf (“%d“, do numi=n%base; n=n/base; i+; while(n!=0); j=i-1; for (; j=0; j-) printf(“ %d“, numj); printf(“n“); return 0; 输入: 8 2 输出: 1 0 0 0 程序执行结果: 18 第7章 数组 将十进制整数n转换成base进制的数。 例7.3 问题分析: 十进制n转化为base 进制数的方法是: n除以base取余 ,直到商为0止 。 最后得到的余数 为最高位,最开 始得到的余数为 最低位。 #include int main ( ) int i=0,base, n, num20; printf (“Enter data that will be converted n“); scanf(“%d“, printf(“Enter basen“); scanf (“%d“, /*要转换的进制*/ do numi=n%base; /*将分离出来的数码存入数组num中*/ n=n/base; /*为分离出下一数码更新n的值*/ i+; while(n!=0); printf(“The data %d has been converted into %d-base data :n“,n,base); for (i-;i=0;i-) printf(“ %d“,numi); printf(“n“); return 0; Enter data that will be converted 8 Enter base 2 The data 0 has been converted into 2-base data : 1 0 0 0 运行结果: 19 第7章 数组 例7.4 用数组来处理求Fibonacci数列的前20个数,每行输出4个 数。 #include “stdio.h” int main() int i,f20=1,1; for(i=2;iai+1,则互换此两个元素 的值,直到所有元素比较完; 至此,数组中值最大的元素移 到了数组的最后位置。 #include “stdio.h” int main() int a10, i,j,t; printf(“input 5 numbers:n“); for (i=0;iai+1) t=ai;ai=ai+1;ai+1=t; printf(“the result:n“); for (i=0;iai+1 ? YN ai和 ai+1交换 输出排序后的a0a9 #include #define n 10 void main() int an, i,j,t; printf(“input %d numbers:n”,n); for (i=0;iai+1) t=ai;ai=ai+1;ai+1=t; printf(“the sorted numbers:n”); for (i=0;i void main() printf(“%d“,min); int i,a10,min; for(i=0; i a0 24 第7章 数组 3528 1 (1) 1 5 2 8 3 5个数(a0a4)中找最小数,与a0交换 (2) 2 5 8 3 4个数(a1a4)中找最小数,与a1交换 (3) 3 8 5 3个数(a2a4)中找最小数,与a2交换 (4) 5 8 2个数(a3a4)中找最小数,与a3交换 n个数: aian-1中找最小数,与ai交换 ( i : 0n-2 ) 补充 例题 用选择法对10个整数进行排序(由小到大)。 25 第7章 数组第七章 数组 #include void main() int a10; int i, j, t, index; printf(“input 10 numbers:n”); for (i=0;iaj) index=j; t=ai;ai=aindex;aindex=t ; printf(“the sorted numbers:n”); for (i=0;iaj? YN index=j 输出排序后的a0a9 for j=i+1 to 9 aindex与ai交换 思想:先将10个数中最小的数 与a0对换;再将a1到a9 中最小的数与a1对换 共比较9轮。 补充 例题 用选择法对10个整数进行排序(由小到大)。 26 第7章 数组 有一份排列好的5位学生的C语言成绩为:50,69,75,87, 90,现要向此成绩单中补加一位学生的成绩77,要求该成绩 被插入后,仍保持成绩单的有序性。 寻找插入位置: 要插入的数据与数组中的从前向后的每一个元素比较,找 到第一个比它大的数据后,就可以停止比较,而比它大的那个 元素的位置就是此成绩值应插入的位置。 例7.7 问题分析: 实现插入过程: 将插入点位置的元素以及其后的所有元素依次后移一个位置,移动 元素应从最后一个元素开始移动,然后将要插入的成绩值赋给插入点位 置的元素。 50 69 75 87 9077 50 69 75 87 90 908777 27 第7章 数组 #include int main() int i,pos,inst,score6=50,69,75,87,90; printf(“请输入要插入的数:“); scanf(“%d“, if (instscore4) score5=inst; else for(i=0;iinst) pos=i;break; for(i=5;ipos;i-) scorei=scorei-1; /将插入位置及其后的元素依次后移 scorepos=inst; /向插入位置存放要插入的成绩值 for(i=0;i void main() int i,j,max,row=0,colum=0; int a34=1,2,3,4,9,8,7,6,-10,10,-5,2; max=a00; for (i=0;imax) max=aij; row=i; colum=j; printf(“max=%d,row=%d,colum=%dn”, max, row, colum); aijmax? Y N max=a00 for i=0 to 2 for j=0 to 3 max=aij row=i colum=j 输出max,row,colum 程序运行结果 :max=10,row=2,colum=1 思考: 找出含有十个元素的整型数组中的最大元素,以及其所在的下标。 34 第7章 数组 注意:在思考一个 题目时,首先要搞清楚 问题的已知条件, 以及所求结果。 从结果数据入手, 考虑问题。 第七章 数组 补充 例题 将一个二维数组元素的行和列元素互换,存在另一个二维数组中。 并将这两个二维数组分别输出。(自学) a= 1 2 3 4 5 6 b= 1 4 2 5 3 6 已知所求 #include Void main() int a23=1,2,3,4,5,6; int b32,i,j; printf(“array a:n”); for (i=0;i void main() char c5=h,a,p,p,y; int i; for (i=0;i #include void main() char a10=“hello “,b10=“china“; printf(“%s“,a); printf(“%s“,b); puts(a); puts(b); 举例 hello chinahello china 使用puts输出 字符串时,末 位的 0自动转 换成n输出! 41 第7章 数组 输入一个字符串,然后将其通过循环语句实现按逐个元素赋给另一 个字符串。即实现串复制。 字符数组应用举例 例7.11 #include void main() char string120, string220; int i=0; gets(string1); while(string1i!=0) string2i=string1i; i+; string2i=0; puts(string2); 使用系统提供的字 符串处理函数能够 实现对字符串的整 体操作,如串复制 、串比较等。 42 第7章 数组 输入一行含有数字、字母、字符的字符串,统计字符串中字母的个数。 例7.12 (自学) #include “stdio.h“ int main( ) char s100; int i=0,num=0; printf(“请输入一个字符串:n“); gets(s); while(si!=0) if(si=A int n; printf(“Please input the suffix :“); scanf(“%d“, printf(“The old string is:“); puts(string); do stringn=stringn+1; n+; while (stringn!=0); printf(“The new string is:%sn“,string); The old string is: abcdefghijklmn The new string is: abcefghijklmn Please input the suffix :3 44 第7章 数组 字符串处理函数 #include strcat(字符数组1,字符数组2); char str130 = “Good “; char str2 = “china“; printf(“%s“,strcat(str1,str2); (1) 字符数组1必须足够大,以便容纳连接后的新字符串。 (2) 连接前两个字符串的最后一个都是0元素,连接时将字 符串1后的0去掉,只在新串后保留一个0。 1.字符串连接函数 将字符串2连接到字符串1之后,结果放在字符数组1中。 功能 举例 说明 Good china 45 第7章 数组 strcpy(字符数组1,字符串2); (1) 字符数组必须足够大,以便容纳被复制的字符串。 (2) “字符数组1“必须写成数组名的形式。 “字符串2“ 可以是数组名,也可以是字符串常量。 如: strcpy(str1,“china“); (3)不能用赋值语句将一个字符串常量或字符数组直接赋给 字符数组,而只能用strcpy函数处理。 (4) 可以只复制第二个字符串的一部分。即: strncpy(str1, str2, 2); 将str2的前两个字符复制到str1中,不自动添加0。 2.字符串复制函数 char str110,str2 = “china“; strcpy(str1,str2); 举例 说明 功能将字符串2复制到字符串1中。 46 第7章 数组 strcmp(字符串1,字符串2); 3.字符串比较函数 比较两个字符串的大小。规则如下: 逐个比较每个字符(按ASCII码值比较),直到出现不同的 字符或遇到0 为止。 比较结果有函数值带回。 (1) 若字符串1=字符串2,函数值为0; (2) 若字符串1字符串2,函数值为一个正整数; (3) 若字符串1 #include main() char string20; char str520; int i; for (i=0;istrlen(string) strcpy(string,stri); printf( “ The largest string is :%sn“,string); The largest string is:America 程序输出结果为: 程序运行时输入为 : 49 第7章 数组第七章 数组 补充例题 输入4名学生的姓名及三门课成绩,打印学生成绩表。(姓名、三门课成 绩、平均分)要求数组的下标从1开始。(自学) #include void main() int i,j; char str510; float score54,ave5,sum; for (i=1;i float aver(float a ,int n); /*函数声明*/ void main() float score5,average; int i; printf(“input 5 scores:n“); for(i=0;isj+1) temp=sj; sj=sj+1; sj+1=temp; printf(“n5个整数由小到大顺序为:n“); for(i=0;iarrayj+1) temp=arrayj; arrayj=arrayj+1; arrayj+1=temp; 62 第7章 数组 将对数组元素的输入定义一个input( )函数,对数组元素的输出定义 一个output( )函数,程序如下: void output(int array ,int n) int i; printf(“排序结果为:“); for(i=0;in;i+) printf(“%5d“,arrayi); void input(int array ,int n) int i; printf(“请输入%d个正整数:“,n); for(i=0;in;i+) scanf(“%d“, 在main( )函数中,只需定义一个数组 ,调用input( )函数完成数组元素的输入 ,调用sort( )函数完成排序,调用output( )函数输出。程序如下: int main(

温馨提示

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

评论

0/150

提交评论