




已阅读5页,还剩68页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
程序设计基础(C语言),东北大学高级语言程序设计课程组课程网站:,程序设计基础(C语言),数组概念,3,基本概念,问题的提出?,a,b从大到小排序输出?,Programming1:if(ab)temp=a;a=b;btemp;printf(“%d%dn”,a,b);,a,b,c从大到小排序输出?,Programming1:if(ab)temp=a;a=b;b=temp;if(ac)temp=a;a=c;c=temp;if(bc)temp=b;b=c;c=temp;printf(“%d%d%dn”,a,b,c);,a,b,c,d从大到小排序输出?,a,b,从大到小排序输出?,利用数组可以进行数据的排序,4,基本概念,问题的提出?,用变量来解决:#includemain()floatcj1,cj2,cj3,cj10;/*定义10个变量*/floatpj;scanf(“%f”,例2:计算10个同学的成绩:计算平均成绩、打印低于平均成绩的同学成绩,如果增加1000个成绩?,5,基本概念,问题的提出?,用数组来解决:#includemain()floatcj10;/*定义一个实型数组存放10个成绩*/floatpj;inti;for(i=0;i10;i+)/*输入10个数据*/scanf(%f,例2:计算10个同学的成绩:计算平均成绩、打印低于平均成绩的同学成绩,6,基本概念,问题的提出?用数组解决此类问题在程序设计中,数组是十分有用的数据类型循环中使用数组能更好地发挥循环的作用例2:采用数组和循环相结合,循环变量的值改变某些问题不使用数组就难以解决例1:优点程序简洁、思路清楚明了书写简洁,通用性强,7,基本概念,什么是数组?是一组具有固定数目的、有序的、类型相同的数据的集合是同类型有序数据的集合可以为该数据集合起一个名字,称为数组名该数据集合中的各数据项称为数组元素,用数组名和下标表示根据数组下标的多少,数组可以分为一维数组和多维数组一维只有一个下标,例如:cj10二维有两个下标,例如:grade34,8,基本概念,什么是数组?一个数组就是一组连续的内存空间,用来保存数据,数组中的每一项称为一个元素C语言数组的特点数组的个数必须确定不允许变动,但数组元素的值可以改变数组元素的类型必须是相同的不允许混合的,9,基本概念,什么是数组?使用下标的优点?下标唯一确定了元素在数组中的位置(或者说是排列顺序)采用数组名+下标可以准确访问到数组中的每一个元素提示C语言是一个有趣的语言,它从0开始计数,而不是从1开始,所以例题中10个元素的编号是从0到9,程序设计基础(C语言),一维数组,11,一维数组,一维数组的定义格式:类型说明符数组名常量表达式;说明:数据类型是数组全体数组元素的数据类型数组名用标识符表示符合表示服的命名规则整型常量表达式代表数组具有的数组元素个数必须是正的整型常量表达式,不能出现变量或非整型值提示编译程序为数组开辟连续的存储单元,用来顺序存放数组的各数组元素用数组名表示该数组存储区的首地址数组元素的下标一律从0开始一维数组元素按顺序存放,其所占字节数的计算公式:数组所占总字节数=sizeof(type)*size,12,一维数组,一维数组的定义inta5,b5;floatc10;说明:定义了整型数组a和b以及实型数组ca和b的数组元素的类型都是intc的数组元素的类型都是floata数组有5个数组元素,b数组有5个数组元素,c数组有10个元素以a5为例a数组的数组元素是a0,a1,a2,a3和a4共5个数组元素a数组元素的下标大于等于0,且小于5定义了int型数组a编译程序将为a数组在内存中开辟5个连续的存储单元(每个int存储单元占2个字节),用来存放a数组的5个数组元素a0代表这片存储区的第一个存储单元数组名a代表a数组的首地址,即a0存储单元的地址ai实际上代表这片存储区序号为i的存储单元ai就是一个带下标的int型变量a数组是这些int型下标变量的集合,13,一维数组,一维数组的定义正确的定义方式#defineN5intaN;/*N是符号常量,其值为5*/intb2+3;/*2+3是常量表达式,其值为5*/intc10;错误的数组定义intaj;/*j不是常量*/intx=10,bx;/*?*/intM(4);/*不能用圆括号定义数组*/intn1.0;/*?*/,14,一维数组,一维数组初始化格式说明可在中给出各数组元素的初值各初值之间用逗号分开把中的初值依次赋给各数组元素,数据类型数组名整型常量表达式=初值1,初值2,;,15,一维数组初始化例intnum4=1,2,3,4;表示把初值1,2,3,4依次赋给num0,num1,num2,num3相当于执行如下语句intnum4;num0=1;num1=2;num2=3;num3=4;提示初始化的数据个数不能超过数组元素的个数,否则出错例如:inta4=1,2,3,4,5;是错误的,一维数组,16,一维数组,一维数组初始化对数组的部分元素赋初值例intnum5=1,2,3;,该语句执行:num0=1;num1=2;num2=3;num3=0;num4=0;,17,一维数组,一维数组初始化提示初始化的数据个数不能超过数组元素的个数,可以少于数组元素的个数数组的元素不能自动初始化采用语句intcj10=0;将数组cj的元素初始化为0若数组元素的个数定义省略,则系统根据初值的个数来确定数组元素的个数例如:inta3=1,2,3;数组有3个数组元素:a0=1,a1=2,a2=3若省略数组元素个数的定义,则初值必须完全给出C语言编译系统将自动根据初始化数据的个数来确定数组的长度,18,一维数组,数组的引用数组引用两种形式对整个数组的引用只给出数组名即可对数组元素的引用需要给出数组名下标的形式形式:数组名下标表达式例如inta5,i=1,j=2,k=4;ak,aj-1,aj+i都是对a数组元素的合法引用ak=ai-1+a0;表示a0的值与a2的值求和并赋给a4for(i=0;i5;i+)scanf(%d,表示依次为a数组的5个元素输入数据,19,一维数组,数组的引用提示定义时整型常量表达式与引用时的数组元素的下标表达式是完全不同的概念数组定义:inta5;整型常量表达式5表示a数组有5个数组元素数组元素的引用a2=a1+a5;下标表达式2和1均表示数组元素的下标a5是错误的数组元素引用,因为下标从0开始,所以数组元素的下标小于5,下标已经越界系统不检查数组元素下标是否越界只能由编程者自己掌握下标越界会破坏其它变量的值编程时一定要保证数组元素下标不越界,20,问题1:inta2;scanf(“%d%d”,?,错误:在C语言中数组元素的下标由0开始,一个数组的下标的合法范围在0n-1,因此该题正确的写法是:inta2;scanf(“%d%d”,for(k=0;kak)min=ak;printf(max=%d,min=%dn,max,min);,求10个数中的最大值和最小值。把以上求最大值的程序和求最小值的程序按串行方式写入一个程序中。程序中先求最大值,然后再求最小值,25,一维数组,一维数组的操作,例:编写程序求10个数中的最大值和最小值以及求10个数中的最大值和最小值的位置,#defineN10#includestdio.hmain()intaN,k,max,min;for(k=0;kak)min=k;/*找出最小值下标min*/printf(max=a%d=%d,min=a%d=%dn,max,amax,min,amin);,在上面程序中必须增加记忆最大值下标和最小值下标的语句。即每当产生一个最大(小)值时,立即记录它的下标。若最大值下标是max,最小值下标是min,则amax就是最大值,amin就是最小值,程序设计基础(C语言),二维数组,27,二维数组,二维数组的定义需要两个下标才能识别某个元素的数组称为“二维数组”二维数组可以看作具有行和列的平面数据结构如矩阵格式说明数据类型是数组全体数组元素的数据类型数组名用标识符表示两个整型常量表达式分别代表数组具有的行数和列数数组元素的下标一律从0开始例:intarray34;,类型说明符数组名常量表达式1常量表达式2;,28,数组名,行下标,列下标,数组中的每一个元素都用aij的形式表示。,所以:该例中定义了一个3*4(3行4列)的数组,我们可以将其视为一个有3个元素a0、a1、a2组成的一维数组,而a0、a1、a2又是包含4个元素的一维数组。因此,可以将a0、a1、a2分别看成是三个一维数组的名字。,二维数组,29,二维数组,二维数组的存放方式在C语言中,二维数组在内存中的存储是按行存放的,a11,a12,a13,a20,a21,a22,a23,a00,a01,a02,a03,a10,a,二维数组存储所占的内存字节数的计算公式为:数组总字节数=sizeof(type)*size1*size2,30,二维数组,二维数组的初始化形式数据类型数组名整常量表达式整常量表达式=初始化数据;在中给出各数组元素的初值各初值之间用逗号分开把中的初值依次赋给各数组元素初始化方式分行进行初始化例:inta23=1,2,3,4,5,6;在内部再用把各行分开提示初始化的数据个数不能超过数组元素的个数,否则出错,31,二维数组,二维数组的初始化按二维数组在内存中的排列顺序初始化例:inta23=1,2,3,4,5,6;把中的数据依次赋给a数组各元素(按行赋值)为部分数组元素初始化例:inta23=1,2,4;省略第一维的定义,但不能省略第二维的定义系统根据初始化的数据个数和第2维的长度可以确定第一维的长度例:inta3=1,2,3,4,5,6;a数组的第一维的定义被省略,初始化数据共6个,第二维的长度为3,即每行3个数,所以a数组的第一维是2省略第一维的定义时,第一维的大小按如下规则确定:初值个数能被第二维整除,所得的商就是第一维的大小;若不能整除,则第一维的大小为商再加1例如inta3=1,2,3,4;等价于:inta23=1,2,3,4;,32,二维数组,二维数组的初始化提示只对部分数组元素初始化。未被初始化的数组元素将被编译系统自动清0两种初始化方法得到的初始结果是不同的,inta23=5,6,7,8;,5,6,07,8,0,inta23=5,6,7,8,5,6,78,0,0,33,二维数组,二维数组的初始化,例:一下能够对二维数组a进行正确初始化的语句是:(A)inta2=1,0,1,2,0,2;(B)inta3=1,2,3,4,5,6;(C)inta24=1,2,3,4,5,6;(D)inta3=1,0,1,,2,3;,例:已知inta3=0,1,2,3,4,5,6;则数组的第一维的大小是多少?(A)2(B)3(C)4(D)无确定值,34,二维数组,二维数组元素的引用格式数组名下标1下标2;每个元素同一般变量一样使用例:inta24;a02=a13*4;例:inta23,i=1,j=2,k=0;合法引用aik,aj-1i,a1j+kaik=ai-1j+a1j;错误引用a23下标越界a32,行下标越界a1,0a(1)(2)C语言不进行数组的越界检查,在引用时不要使数组越界,35,二维数组,二维数组的操作可以采用循环(嵌套)结构实现对二维数组的操作例从键盘依次为数组元素输入数据计算数组a24的所有元素之和的操作将数组a24的第二行的所有元素初始化值为0的操作,for(i=0;i2;i+)for(j=0;i3;i+)scanf(%d,total=0;for(row=0;row=1;row+)for(column=0;column=3;column+)total+=arowcolumn;,for(column=0;column=3;column+)a1column=0;,36,二维数组,【例】:阅读下列程序,选择程序的运行结果。intm33=1,2,3;intn33=1,2,3;main()printf(”%dn”,m10+n00);/*1.结果*/printf(”%dn”,m01+n10);/*2.结果*/,1.结果:A)0B)1C)2D)32.结果:A)0B)1C)2D)3,37,【例】:阅读下列程序,选择程序的运行结果。main()inta66,m,n;for(m=1;m6;m+)for(n=1;n6;n+)amn=(m/n)*(n/m);,for(m=1;m6;m+)for(n=1;n6;n+)printf(”%2d”,amn);printf(”n”);,A)1111111111111111111111111B)0000100010001000100010000,C)1000001000001000001000001D)1000101010001000101010001,二维数组,38,二维数组,应用例将一个二维数组的每个元素按逆序存放在另一个数组中,main()inta23=1,2,3,4,5,6;intb23;inti,j;printf(arraya:n);for(i=0;i2;i+)for(j=0;j3;j+)printf(%4d,aij);bi2-j=aij;printf(n);printf(arrayb:n);for(i=0;i2;i+)for(j=0;j3;j+)printf(%4d,bij);printf(n);,39,二维数组,应用例:求出一个二维数组的两条对角线上的元素之和,#include”stdio.h”main()inta33=1,3,7,13,19,27,37,49,63;intsum1=0,sum2=0,m,n;for(m=0;m=0;n-)if(m+n=2)sum2=sum2+amn;printf(“sum1=%d,sum2=%dn”,sum1,sum2);,40,二维数组,应用例:根据用户输入的年份和月份,输出这个月的天数分析要考虑平年和闰年的二月份的天数是不一样的程序中采用一个二维数组来存放平年和闰年的各个月份的天数,#includemain()intdays212=31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31,30,31;intyear,month;intleap;,41,二维数组,应用,printf(“enterayear:n”);scanf(“%d”,演示66.c,42,小测试,1.以下对一维数组a的正确说明是。A、chara(10);B、inta;C、intk=5,ak;D、chara=a,b,c;,2.若有说明语句:inty4=0,0;则下面叙述不正确的是。A、数组y的每个元素都可得初值0B、二维数组y的行数为1C、该说明等价于inty4=0;D、只有元素y00和y01可得到初值0,其余元素均得不到初值0,43,小结,提示“数组的第1个元素”和“下标为1的元素”之间的区别数组在编译时占用内存空间,要指定空间长度下标是一个整数或整数表达式在使用循环访问数组时,数组下标应该不小于0并且小于数组元素的个数初始化数据列表的数据个数可以少于数组元素个数常见错误缺少对数组元素的初始化声明时进行初始化的数据列表的数据个数多于数组元素的个数越界访问数组元素,程序设计基础(C语言),字符数组与字符串,45,基本概念,字符数组定义当数组元素为字符类型时,被称之为字符型数组具有一般数组的性质定义的格式charstr10;/*含有10个字符的一维字符型数组*/charstree310;/*含有3*10个字符的二维字符型数组*/也可以将其看成3行并且每行各含有10个字符的一维字符数组,46,基本概念,字符数组字符数组的引用同数值型数组在用法上一样字符数组中的一个元素位置存放一个字符用赋值语句为其赋值时应该是单个字符,例:intstr10;str0=A;str1=;str2=n;str3=e;str4=w;str5=;str6=y;str7=e;str8=a;str9=r;,Anewyear,str开辟的连续存储单元中存放的是:Anewyear。(一串字符),47,例如:charname4;main()name0=c;name1=+;name2=+;name3=0;此程序段建立了一个四个元素的字符型数组。,基本概念,字符数组字符串串就是一组字符C语言没有提供内部串的类型串是由字符数组创建的实际上字符串就是带有若干限制的字符型数组其中一个限制条件是用0(NULL)来表示串的结束,Anewyear0,字符串,48,基本概念,字符数组双重性可被认为是一个表示若干个字符的字符类型的数组可被认为是一个字符串类型变量(如果一串字符的最后一个字符是一个0字符)提示字符型数组作为字符串形式处理时,无需使用下标实际上是将数组以指针的方式进行处理当使用下标时,实际上使用的是字符串中某一位置上的字符,而不是整个字符串字符型数组也不能整体赋值操作不允许一个数组赋给另一个数组,49,基本概念,字符数组赋值和引用方法将其元素作为字符型采用一般数组的处理方式,赋值、引用或初始化以字符串形式进行赋值、引用或初始化,charmessage6=“hello”;或charmessage=“hello”;,charmessage=h,e,l,l,o;不是字符串;charmessage=h,e,l,l,o,0;是字符串;,50,基本概念,字符数组赋值和引用方法区别字符常量charmessage5=h,e,l,l,o;存放方式:字符串常量charmessage=“hello”;存放方式,charmessage=h,e,l,l,o,0;,51,基本概念,存放方式:,存放方式:,charstr16=“Thisisabook!”;或省略,直接写成:charstr16=“Thisisabook!”;charstr1310=“P.CHINA”,“JAPAN”,“CANADA”;,52,基本概念,字符数组提示两种方式实现对字符数组的部分元素的初始化(赋初值)可省略一维数组的维长度和二维数组的第一维长度(与数值型相同)当用字符串常量赋初值时,系统自动加上“0”字符字符数组的维长度要比实际字符长度多1个字符数组存放字符串时,应该事先估计出来实际字符串的长度保证数组的长度始终大于字符串的实际长度如果在一个数组中先后存放多个长度不同的字符串,数组长度的定义应大于最长字符串的长度如果字符串的长度大于存储它的字符数组的长度,由于C语言不提供越界检查。超出字符数组长度的部分就会将内存中字符数组后面的数据覆盖掉赋初值时,初值个数要少于数组的维长度,否则进行系统编译时越界例如:charstr23=“this”,“is”,“a”,“book”;,53,基本概念,【例1】下面有关字符数组和字符串说法正确的是:A)字符数组中存放的一定是一个字符串。B)所有的字符数组都可以被当作字符串处理。C)对存放字符串的字符数组可以像一般数组一样对数组中的单个元素进行操作。D)一个字符数组可以认为就是一个字符串。,【例2】合法的数组说明语句是。inta=“string”;inta5=0,1,2,3,4,5;chara=“string”;chara=0,1,2,3,4,5;,在C语言中,字符变量中存放的是与字符对应的ASCII码。数值0,1,2,3,4,5所对应的ASCII字符虽然是不可显示的字符,但是这些都可以作为控制字符。,54,【例3】若有以下语句,则正确的描述是。charx=“12345”;chary=1,2,3,4,5;X数组和y数组的长度相同X数组长度大于y数组长度X数组长度小于y数组长度X数组等价与y数组,【例4】阅读下面的程序给出执行结果。main()inti=0;chara33=1,2,3,4,5,6,7,8,9;for(i=0;i3;i+)printf(“%d”,ai1);A)50,53,56B)49,52,55C)2,5,8D)1,4,7,基本概念,55,字符数组输入/输出,输入采用%c格式符,逐个输入所有字符,main()inti,string15;for(i=0;istr2)printf(“true!”);非法if(strcmp(st
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版影视广告制作与投放合同模板
- 二零二五年度电商企业快递服务全面合作协议书范本
- 二零二五年度15kw大泽柴油发电机组购销与客户定制化设计合同
- 2025版商铺租赁合同样本:解析与模板
- 二零二五版混凝土预制件购销及项目管理合同
- 2025版人工智能企业员工算法知识产权保密合同
- 2025版跨行业公司间资金借贷合同范本
- 二零二五年度汽车维修与保养服务合同
- 2025版智能家居系统集成与建筑工程二次结构承包综合服务合同
- 2025版工程担保服务合同示范文本
- JG/T 24-2018合成树脂乳液砂壁状建筑涂料
- T/CHATA 035-2024结核病定点医疗机构消毒技术规范
- 委托生产卫生纸协议书
- 探究情侣关系中礼物形象一致性产生的原因及其对礼物交换体验的影响
- 铁路工务安全规范培训
- 幼儿园大班家长会
- 2025年全国保密教育线上培训考试试题库附参考答案【完整版】附答案详解
- 超市诚信课件培训
- 网络基础知识课件教学
- 防火防电防交通安全课件
- 2025年保安证考试题型分析试题及答案
评论
0/150
提交评论