C语言程序设计第十一讲课件.ppt

上传人:scccc 文档编号:11902042 上传时间:2021-10-22 格式:PPT 页数:30 大小:904.50KB
返回 下载 相关 举报
C语言程序设计第十一讲课件.ppt_第1页
第1页 / 共30页
C语言程序设计第十一讲课件.ppt_第2页
第2页 / 共30页
C语言程序设计第十一讲课件.ppt_第3页
第3页 / 共30页
C语言程序设计第十一讲课件.ppt_第4页
第4页 / 共30页
C语言程序设计第十一讲课件.ppt_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《C语言程序设计第十一讲课件.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计第十一讲课件.ppt(30页珍藏版)》请在三一文库上搜索。

1、周一上课,1、从任意n个数中找出最大数和最小数,并将它们相互交换后输出。 2、将一个数组中的数循环左移。 3、输入若干学生的成绩,计算平均分,并输出低于平均分的学生成绩。 4、从任意n个数(允许有重复)中删除某一个数k。 5、输入整数n,将其各位数字取出后,重新组合成一个新的最大的整数。 6、将一个数组中的数逆序重新存放后输出。,作 业,例5:输入若干个正整数,以0或负数结束,将其中个位不为0的数输出,并统计满足条件的数据个数。,输入x,n=0,count+,for i=0 to n-1,ai%10!=0,T,输出ai,F,x0,an=x,count=0,n+,输入x,#include voi

2、d main() int a100, x, n, i, count; n=0; count=0; cinx; while(x0) an=x; n+; cinx; for(i=0; in; i+) if(ai%10!=0) coutai ; count+; cout个数是:count; ,输出count,例6:输入任意n个数,将其中能被5整除的数组成一个新的数组。,举 例,a,b,0,1,2,3,4,5,6,10,5,25,15,m,m,m,m,m,#include iostream.h void main( ) int a100, b100, n, m, i; cinn; for(i=0; i

3、ai; m=0; for(i=0; in; i+) if(ai%5=0) bm=ai; m+; for(i=0; im; i+) coutbi ; ,输入n,m=0,m+,for i=0 to n-1,ai%5=0,T,bm=ai,F,for i=0 to n-1,输入ai,for i=0 to m-1,输出bi,基本思想:假设数组a已经按由小到大的顺序排好序,设三个变量low, high和mid分别代表首元素,最后一个元素以及中间元素的下标,初值分别为:low=0、high=n-1、mid=(low+high)/2。从中间元素开始查找,用x和amid比较,此时有三种情况:,1) 若x = a

4、mid ,则查找成功;,2) 若x amid ,则令high=mid-1,3) 若x amid ,则令low=mid+1,折半查找法,例:数组元素为:5, 13, 19, 21, 37, 56, 64, 75, 80, 88, 92,1.查找x=21 的情况,(1) low=0; high=10; mid=(0+10) / 2=5,因为amidx,所以向左找,令high=mid-1=4,(2) low=0; high=4; mid=(0+4) / 2=2,因为amidx,所以向右找,令low=mid+1=3,(3) low=3; high=4; mid=(3+4) / 2=3,因为amid=x

5、,查找成功,所查元素的下标为mid,0,1,2,3,4,5,6,7,8,9,10,0,1,2,3,4,5,6,7,8,9,10,0,1,2,3,4,5,6,7,8,9,10,(1) low=0; high=10; mid=(0+10) / 2=5,因为amidx,所以向右找,令low=mid+1=6,(2) low=6; high=10; mid=(6+10) / 2=8,因为amidx,所以向右找,令low=mid+1=9,(3) low=9; high=10; mid=(9+10) / 2=9,因为amidx,所以向左找,令high=mid-1=8,2.查找x=85 的情况,此时lowhi

6、gh,查找失败,0,1,2,3,4,5,6,7,8,9,10,0,1,2,3,4,5,6,7,8,9,10,0,1,2,3,4,5,6,7,8,9,10,#include void main() int a100, i, n, x, low, high, mid; cinn; for(i=0; iai; cinx; low=0;high=n-1; while(low=high) mid=(low+high)/2; if(x=amid)break; else if(xamid)high=mid-1; elselow=mid+1; if(x=amid) coutYES:mid; else cout

7、NO; ,#include void main( ) int i, j, temp, n, a100; cinn; for(i=0; iai; for(i=0; iaj) temp=ai; ai=aj; aj=temp; for(i=0; in; i+) coutai ; ,例:将任意n个数由小到大排序。,排 序,#include void main( ) int i, j, n, temp, di, a100; cinn; for(i=0; iai; for(i=0; iaj) di=j; if(i!=di) temp=ai; ai=adi; adi=temp; for(i=0; in; i

8、+) coutai ; ,选择排序法,例:用冒泡法对n个数进行排序(从小到大),排序过程: (1)比较第一个数与第二个数,若为逆序a0a1,则交换;然后比较第二个数与第三个数;依次类推,直至第n-1个数和第n个数比较为止第一趟冒泡排序,结果最大的数被安置在最后一个元素位置上; (2)对前n-1个数进行第二趟冒泡排序,结果使次大的数被安置在第n-1个元素位置; (3)重复上述过程,共经过n-1趟冒泡排序后,排序结束。,相邻两数比较,大数 小数,11,C语言程序设计第十一讲,38421,38421,38421,34821,34281,34218,第一趟,34218,34218,32418,3214

9、8,第二趟,32148,23148,21348,第三趟,21348,12348,第四趟,a1 a2 a3 a4 a5,j=1 to 4,j=1 to 3,j=1 to 2,j=1 to 1,由小到大排序,#include void main( ) int a100, n, i, j, temp; scanf(%d, ,1349 8523 5246 7621,a0,a1,a2,a3,0123,a00a01a02a03 a10a11a12a13 a20a21a22a23 a30a31a32a33,a,二维数组的基本概念,类型名 数组名常量1 常量2;,例如:,int a34;,整型二维数组,名字为

10、a,3行,a0,a0,存储结构,逻辑结构,a00,数组a,定义,4列,共12个元素,a0,a0,a10,a11,a12,a13,a20,a21,a22,a23,是一个矩阵或一张表格,第0行,第1行,第2行,第0列,第1列,第2列,第3列,a01,a02,a03,a10,a11,a12,a13,a20,a21,a22,a23,按行存储,a0,a1,a2,0,1,2,3,一维数组个数,一维数组中元素的个数,分行初始化,例 int a23=1,2,4;,例 int a 3=1,2,4;,部分初始化,行长度可以省略,例 int a23=1,2,3,4,5,6;,1,2,3,4,5,6,全部初始化,1,

11、2,0,4,0,0,按存储顺序初始化,例 int a23=1,2,4;,例 int a23=1,2,3,4,5,6;,全部初始化,部分初始化,例 int a 3=1,2,3,4,5;,行长度可以省略,1,2,3,4,5,6,1,2,4,0,0,0,1,2,3,4,5,0,1 2 3 4,5 6 7 8,9 10 11 12,二维数组的输入和输出,例1:将一个34矩阵输入到数组中并按行输出。,#include stdio.h void main( ) int a34, i, j; for( i=0; i3; i+) for( j=0; j4; j+) scanf(%d, ,0 1 2 3,0 1

12、 2,举 例,例2:写结果。,#include void main( ) int i, x33=6,5, 4,3, 2,1; for(i=0; i3; i+) printf(%d, xi2-i); ,6 5 0 4 3 0 2 1 0,0 1 2,0 1 2,032,例3: 程序功能是求二维数组每列元素的平均值,修改程序中的错误。,#include iostream.h #define M 3; void main( ) int aMM=1,2,3,4,5,6,7 int i, j; for(i=0; iM; i+) for(j=0; jM; j+) avei=avei+aij; avei=a

13、vei/M; for(j=0; jM; j+) cout avej; ,#include iostream.h #define M 3 void main( ) int aMM=1,2,3,4,5,6,7; int i, j; float aveM ; for(i=0; iM; i+) for(j=0; jM; j+) avei=avei+aji; avei=avei/M; for(j=0; jM; j+) cout avej; ,=0,#include void main( ) int a5050, m, n, i, j, row, column, max; cinmn; for(i=0;

14、im; i+) for(j=0; jn;j+) scanf(%d, ,例4: 求二维数组中最大元素值及其行列号,row=0; column=0;,例5:将二维数组行列元素互换,存到另一个数组中,举 例,#include #include void main( ) int a5050, b5050; int m, n, i, j; cinmn; for(i=0; iaij;,for(i=0; in; i+) for(j=0; jm; j+) bij=aji; for(i=0; in; i+) for(j=0; jm; j+) coutsetw(3)bij; coutendl; ,沿主对角线将矩阵

15、a翻转所得到的矩阵就是a的转置矩阵,矩阵的和运算,1 2 3 4 5 6 7 8 9,+,1 1 1 6 5 4 9 8 7,=,2 3 4 10 10 10 16 16 16,矩阵的积运算,1 2 3 4 5 6 7 8 9,3 2 1 6 5 4 9 8 7,=,? ? ? ? ? ? ? ? ?,1*3+ 2*6+3*9,i行上的元素分别与j列上的元素相乘后的累加和作为结果矩阵的ij,矩阵的运算,矩阵的差运算,1 2 3 4 5 6 7 8 9,+,1 1 1 6 5 4 9 8 7,=,0 1 2 -2 0 2 -2 0 2,例6:打印杨辉三角形。,(a+b)n,1,1 1,1 2 1

16、,1 3 3 1,1 4 6 4 1,#include #define M 30 void main( ) int aMM=0, i, j, n; scanf(%d, ,举 例,0 1 2 3 4,0 1 2 3 4,作 业,看实验指导书P140,程序调试运行错误的判断与调试,1、编写程序,从矩阵中找“鞍点”。如果某个元素是“鞍点”,那么该元素在所处的行中最大,列上最小,也可能没有鞍点。要求:如果有鞍点,输出鞍点的值,以及其所处的行和列下标,否则输出NO。输入分m+1行:第一行为m和n的值,以下m行代表二维数组,其中每一行包括n个数。 样例输入: 3 4 1 2 4 3 5 6 7 8 6 8

17、 9 4 样例输出:4 0 2,作 业,二维数组(需要上交),样例输入: 3 4 1 2 3 4 5 6 7 0 8 7 6 5 样例输出:NO,2、编写程序,计算两个矩阵(均为2行2列)之积。输入分2*2行:前两行为第一个矩阵,后两行为第二个矩阵。 样例输入: 1 2 4 5 3 5 1 7 3、编写程序,输出矩阵(3行3列)的左上三角。 样例输入: 1 2 3 4 5 6 7 8 9,作 业,样例输出: 5 19 17 55,样例输出: 1 2 3 4 5 7,4、编写程序,输出n层正方形图案。正方形图案最外层是第一层,每层用的数字和层数相同。 样例输入:3 5、编写程序,计算二维数组中各行之和、各列之和以及所有元素之和。 样例输入: 2 3 1 2 3 4 5 6,作 业,样例输出: 1 1 1 1 11 2 2 2 11 2 3 2 11 2 2 2 11 1 1 1 1,样例输出: 6 15 5 7 9 21,6、编写程序,找出m行n列的二维数组中每行元素的最大值以及每列元素的最小值。输入分m+1行:第一行为m和n的值,以下m行代表二维数组,其中每一行包括n个数。输出分两行:第一行为每行元素的最大值,第二行为每列元素的最小值。 样例输入: 3 31 2 -1-3 4 27 9 8 样例输出: 2 4 9-3 2 -1,作 业,周一上课,

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

当前位置:首页 > 社会民生


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