C-语言程序设计-06ppt课件_第1页
C-语言程序设计-06ppt课件_第2页
C-语言程序设计-06ppt课件_第3页
C-语言程序设计-06ppt课件_第4页
C-语言程序设计-06ppt课件_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

.,1,C语言程序设计,第6章利用数组处理批量数据,.,2,第5章内容回顾,1.循环结构是用来处理需要重复处理的操作的;2.要构成一个有效的循环,应指定两个条件:(1)需要重复执行的操作,即循环体;(2)循环结束的条件3.在c语言中可以用来实现循环结构的有三种语句:while语句;do-while语句;for语句。4.如果循环体有多于一个的语句,应当用大括号把循环体中的多个语句括起来,形成复合语句,否则系统认为循环体只有一个简单的语句。,.,3,第5章内容回顾,5.break语句和continue语句用来改变循环状态的。6.循环可以嵌套7.有关循环的算法很丰富,学习了混还之后,可以写出复杂的和有趣的程序,大大拓宽编程的题材,提高编程的水平。,.,4,第5章内容回顾,.,5,第六章利用数组处理批量数据,.,6,主要内容、重点、难点,数组:有序数据的集合;数组、数组元素;二维数组的排列次序为“按行排列”;字符数组;数组名数组首元素的地址;排序算法等算法设计问题。,主要内容,难点:一维数组、二维数组的定义和数组元素的引用;字符串数组、字符数组的定义和数组元素的引用。,.,7,为什么要用数组?,基本数据类型:int,float/double,char数据的处理:根据问题需求,先作几个简单变量的定义,然后对这些变量赋值并作相应的运算即得结果;各变量独立存储,之间没有任何关系,不需要也不可能保留变量的历史值。,例如:输入10个实数,求其平均值。#includeintmain()inti;floatnum,sum=0;printf(input10numbers:n);for(i=1;i=10;i+)scanf(%f,.,8,为什么要用数组?,问题:给一组数排序,这组数该如何存放呢,?这些数据如何存放才便于排序,1,8,8,8,8,8,8,8,8,8,8,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,8,8,8,8,8,8,8,8,8,8,数组就是一组具有相同数据类型的数据的有序集合。,.,9,怎样定义和引用一维数组,6.2.1怎样定义一维数组,数组是具有相同类型的数据的顺序集合数组可以在内存中连续存储多个元素,0123,下标标明了元素在数组中的位置,从0开始,数组元素,下标,Rate0Rate1Rate2Rate3,.,10,怎样定义和引用一维数组,6.2.1怎样定义一维数组,例:inta10;,数组说明中其他常见的错误:floata0;/*数组大小为0没有意义*/intb(2)(3);/*不能使用圆括号*/intk,ak;/*不能用变量说明数组大小*/,定义一个整形数组,数组名为a。a0-a9,共10个元素,此数组有10个元素,.,11,怎样定义和引用一维数组,6.2.1怎样定义一维数组,高地址,低地址,数组下标从0开始数组元素在内存中按顺序连续存放数组名代表数组的首地址,即score的值与score0的地址值相同,intscore5;,.,12,6.2.2引用一维数组元素,怎样定义和引用一维数组,注意:定义数组时用到的“数组名常量表达式”和引用数组元素时用到的“数组名下标”是有区别的。,例如:a0=a5+a7-a2*3*下标可以是整型常量或整型表达式*。,例inta10;t=a6;,数组名下标表达式;,.,13,怎样定义和引用一维数组,例6.1引用数组元素。1.问题提出:逆序输出2.解题思路:循环赋值,数组逆序输出3.编写程序:4.运行结果:50505.程序分析:数组大小用宏定义;6.程序改进:,#include#defineN10voidmain()inti,aN;for(i=0;i=0;i-)printf(%d”,ai);printf(n);,运行结果如下:9876543210,.,14,怎样定义和引用一维数组,1.在定义数组时对数组元素赋以初值。例如:inta10=0,1,2,3,4,5,6,7,8,9;,6.2.3一维数组元素的初始化,2.可以只给一部分元素赋值。例如:inta10=0,1,2,3,4;,3.如果想使一个数组中全部元素值为0,可以写成:inta10=0,0,0,0,0,0,0,0,0,0;或inta10=0;,.,15,怎样定义和引用一维数组,4.在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度。例如:inta5=1,2,3,4,5;也可以写成inta=1,2,3,4,5;inta10=1,2,3,4,5;只初始化前5个元素,后5个元素为0。,6.2.3一维数组元素的初始化,.,16,怎样定义和引用一维数组,例6.2Fibonacci数列1.问题提出:a1=a2=1an=an-1+an-22.解题思路:3.编写程序:4.运行结果:5.程序分析:if:每行输出5个数6.程序改进:,#includevoidmain()inti;intf20=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)/*For循环结束*/*程序结束*/,运行结果如下:11235813213455891442333776109871597258441816765,.,17,怎样定义和引用一维数组,例6.3按年龄排列1.问题提出:n个人,由小到大2.解题思路:3.编写程序:4.运行结果:5.程序分析:if:每行输出5个数6.程序改进:,.,18,怎样定义和引用一维数组,例6.3按年龄排列1.问题提出:n个人,由小到大2.解题思路:3.编写程序:4.运行结果:5.程序分析:6.程序改进:,#includevoidmain()inta10;inti,j,t;printf(input10numbers:n);for(i=0;i10;i+)scanf(%d,,for(j=0;jai+1)t=ai;ai=ai+1;ai+1=t;printf(thesortednumbers:n);for(i=0;i10;i+)printf(%d,ai);printf(n);/*程序结束*/,程序运行结果如下:input10numbers:10481265-76100-45123thesortednumbers:-76-4501481265100123,.,19,怎样定义和引用二维数组,6.3.1怎样定义二维数组,intnum42;,4X2=8,数据类型数组名常量表达式1常量表达式2;,错误的定义:inta3,4,b(3,4);intc,d(3)(4);,.,20,怎样定义和引用二维数组,注意:我们可以把二维数组看作是一种特殊的一维数组:它的元素又是一个一维数组。例如:可以把a看作是一个一维数组,它有3个元素:a0、a1、a2,每个元素又是一个包含4个元素的一维数组。,6.3.1怎样定义二维数组,.,21,怎样定义和引用二维数组,inta23;,a10,a11,a12,a00,a01,a02,先按行存放,再按列存放,a00a01a02a10a11a12,6.3.1怎样定义二维数组,.,22,怎样定义和引用二维数组,6.3.1怎样定义二维数组,地址值数组元素,b00b01b02b10b11b12b20b21b22,3000H3002H3004H3006H3008H300AH300CH300EH3010H,例如:整型数组b33=1,2,3,4,5,6,7,8,9;,123,456,789,.,23,怎样定义和引用二维数组,6.3.2怎样引用二维数组的元素,数组名行下标列下标;,inta34;a00=3;a01=a00+10;a34=5;/*下标越界*/,.,24,怎样定义和引用二维数组,6.3.3二维数组的初始化,按行赋初值:例如:inta23=1,2,3,4,5,6;inta23=1,4,5;按数组元素存放顺序赋初值:例如:inta23=1,2,3,4,5,6;inta23=1,2,3;省略行数(根据初值个数和列声明自动确定行数)例如:inta4=0,0,3,0,10;intc3=1,2,3;,4行,0030000001000,.,25,怎样定义和引用二维数组,例6.4矩阵转置1.问题提出:双层循环2.解题思路:3.编写程序:4.运行结果:5.程序分析:6.程序改进:,#includevoidmain()inta23=1,2,3,4,5,6;intb32,i,j;printf(arraya:n);for(i=0;i2;i+)for(j=0;j3;j+)printf(%5d,aij);bji=aij;printf(n);,.,26,怎样定义和引用二维数组,例6.4矩阵转置1.问题提出:双层循环2.解题思路:3.编写程序:4.运行结果:5.程序分析:6.程序改进:for(i=0;i=2;i+)?,printf(arrayb:n);for(i=0;i3;i+)for(j=0;j2;j+)printf(%5d,bij);printf(n);return0;,运行结果如下:arraya:123456arrayb:142536,.,27,怎样定义和引用二维数组,例6.5成绩统计分析1.问题提出:平均成绩最高学生的序号2.解题思路:二维数组:306平均成绩:最后一列最高,学号3.编写程序:4.运行结果:5.程序分析:6.程序改进:,.,28,怎样定义和引用二维数组,例6.5成绩统计分析1.问题提出:平均成绩最高学生的序号2.解题思路:二维数组:306平均成绩:最后一列最高,学号3.编写程序:4.运行结果:5.程序分析:6.程序改进:,.,29,怎样定义和引用二维数组,例6.5成绩统计分析1.问题提出:平均成绩最高学生的序号2.解题思路:二维数组:306平均成绩:最后一列最高,学号3.编写程序:4.运行结果:5.程序分析:6.程序改进:,.,30,怎样定义和引用二维数组,例6.5成绩统计分析1.问题提出:平均成绩最高学生的序号2.解题思路:二维数组:306平均成绩:最后一列最高,学号3.编写程序:4.运行结果:5.程序分析:6.程序改进:,#includevoidmain()inti,j,max_i;floatsum,max=0;floata56=78,82,93,74,65,91,82,72,76,67,100,90,85,72,98,67,89,90,65,78,77,88,99,45,89;/5个学生5门课的成绩,平均成绩的初始值为0,for(i=0;i5;i+)sum=0;for(j=0;j5;j+)sum=sum+aij;/求出5门课的总成绩ai5=sum/5;/求出平均成绩,存入数组每行的第5个元素,.,31,怎样定义和引用二维数组,例6.5成绩统计分析1.问题提出:平均成绩最高学生的序号2.解题思路:二维数组:306平均成绩:最后一列最高,学号3.编写程序:4.运行结果:5.程序分析:6.程序改进:,for(i=0;imax)max=ai5;max_i=i;,printf(“stu_order=%dn”,max_i);/输出最大值的序号printf(“max=%7.2fn”,max);/输出最大值return0;,for(i=0;i5;i+)sum=0;for(j=0;j5;j+)sum=sum+aij;/求出5门课的总成绩ai5=sum/5;/求出平均成绩,存入数组每行的第5个元素,打擂台算法,找出最大值,.,32,P179,习题4,有3个学生,上4门课,要求输入全部学生的各门课成绩,并分别求出每门课的平均成绩。分析:定义一个二维数组a44:,.,33,字符数组,6.4.1怎样定义字符数组及对其初始化,字符数组的初始化逐个字符赋值用字符串常量字符数组的引用,定义,例charc10,ch34;,.,34,字符数组,6.4.1怎样定义字符数组及对其初始化,.,35,字符数组,例6.6字符图案1.问题提出:菱形2.解题思路:二维数组:*3.编写程序:4.运行结果:5.程序分析:Diamond56.程序改进:,#includevoidmain()chardiamond5=,*,*,*,*,*,*,*,*;inti,j;for(i=0;i5;i+)for(j=0;j5;j+)printf(%c,diamondij);printf(n);,运行结果:*,.,36,字符数组,例输出字符串1.问题提出:2.解题思路:3.编写程序:4.运行结果:5.程序分析:6.程序改进:,#includevoidmain()charc11=I,a,m,a,b,o,y,.;/*字符数组初始化*/inti;for(i=0;i0)strcpy(string,str2);printf(nthelargeststringisn%sn,string);,运行结果如下:CHINAHOLLANDAMERICAthelargeststringisHOLLAND,.,44,字符数组,例6.8统计单词1.问题提出:单词之间用空格分隔2.解题思路:区分新的单词原有单词3.编写程序:4.运行结果:5.程序分析:6.程序改进:,.,45,字符数组,例6.8统计单词1.问题提出:单词之间用空格分隔2.解题思路:区分新的单词原有单词3.编写程序:4.运行结果:5.程序分析:6.程序改进:,#includevoidmain()charstring81;inti,num=0,word=0;charc;gets(string);for(i=0;(c=stringi)!=0;i+)if(c=)word=0;elseif(word=0)word=1;num+;printf(Thereare%dwordsintheline.n,num);return0;,运行情况如下:Iamaboy.Thereare4wordsintheline.,.,46,提高部分,6.5.1为什么在定义二维数组时采用两对双括号的形式,例inta34;floatb25;intc234;inta3,4;(),.,47,提高部分,6.5.2对C的字符串函数的详细说明,常用的字符串处理函数包含在头文件string.h,字符串输出函数puts格式:puts(字符数组)功能:向显示器输出字符串(输出完,换行)说明:字符数组必须以0结束,字符串输入函数gets格式:gets(字符数组)功能:从键盘输入一以回车结束的字符串放入字符数组中,并自动加0说明:输入串长度应小于字符数组维数,.,48,提高部分,6.5.2对C的字符串函数的详细说明,字符串连接函数strcat格式:strcat(字符数组1,字符数组2)功能:把字符数组2连到字符数组1后面返值:返回字符数组1的首地址说明:字符数组1必须足够大连接前,两串均以0结束;连接后,串1的0取消,新串最后加0,.,49,提高部分,6.5.2对C的字符串函数的详细说明,字符串拷贝函数strcpy格式:strcpy(字符数组1,字符串2)功能:将字符串2,拷贝到字符数组1中去返值:返回字符数组1的首地址说明:字符数组1必须足够大拷贝时0一同拷贝不能使用赋值语句为一个字符数组赋值可以将字符数组2中前若干个字符复制到字符数组1中,例strcpy(str

温馨提示

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

评论

0/150

提交评论