程序设计基础(C语言).ppt
《程序设计基础(C语言).ppt》由会员分享,可在线阅读,更多相关《程序设计基础(C语言).ppt(73页珍藏版)》请在三一办公上搜索。
1、程序设计基础(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,基本概念,问题的提出?,用变量
2、来解决:#include main()float cj1,cj2,cj3,cj10;/*定义10个变量*/float pj;scanf(“%f”,例2:计算10个同学的成绩:计算平均成绩、打印低于平均成绩的同学成绩,如果增加1000个成绩?,5,基本概念,问题的提出?,用数组来解决:#include main()float cj10;/*定义一个实型数组存放10个成绩*/float pj;int i;for(i=0;i10;i+)/*输入10个数据*/scanf(%f,例2:计算10个同学的成绩:计算平均成绩、打印低于平均成绩的同学成绩,6,基本概念,问题的提出?用数组解决此类问题在程序设计中
3、,数组是十分有用的数据类型循环中使用数组能更好地发挥循环的作用例2:采用数组和循环相结合,循环变量的值改变某些问题不使用数组就难以解决例1:优点程序简洁、思路清楚明了书写简洁,通用性强,7,基本概念,什么是数组?是一组具有固定数目的、有序的、类型相同的数据的集合是同类型有序数据的集合可以为该数据集合起一个名字,称为数组名该数据集合中的各数据项称为数组元素,用数组名和下标表示 根据数组下标的多少,数组可以分为一维数组和多维数组一维只有一个下标,例如:cj10二维有两个下标,例如:grade34,8,基本概念,什么是数组?一个数组就是一组连续的内存空间,用来保存数据,数组中的每一项称为一个元素C语
4、言数组的特点数组的个数必须确定不允许变动,但数组元素的值可以改变数组元素的类型必须是相同的不允许混合的,9,基本概念,什么是数组?使用下标的优点?下标唯一确定了元素在数组中的位置(或者说是排列顺序)采用数组名+下标 可以准确访问到数组中的每一个元素提示C语言是一个有趣的语言,它从0开始计数,而不是从1开始,所以例题中10个元素的编号是从0到9,程序设计基础(C语言),一维数组,11,一维数组,一维数组的定义格式:类型说明符 数组名常量表达式;说明:数据类型是数组全体数组元素的数据类型数组名用标识符表示符合表示服的命名规则整型常量表达式代表数组具有的数组元素个数必须是正的整型常量表达式,不能出现
5、变量或非整型值提示编译程序为数组开辟连续的存储单元,用来顺序存放数组的各数组元素用数组名表示该数组存储区的首地址数组元素的下标一律从0开始一维数组元素按顺序存放,其所占字节数的计算公式:数组所占总字节数=sizeof(type)*size,12,一维数组,一维数组的定义 int a5,b5;float c10;说明:定义了整型数组a和 b以及实型数组ca和 b的 数组元素的类型都是intc的 数组元素的类型都是floata数组有5个数组元素,b数组有5个数组元素,c数组有10个元素以a5为例a数组的数组元素是a0,a1,a2,a3和a4 共5个数组元素a数组元素的下标大于等于0,且小于5定义了
6、int型数组a编译程序将为a数组在内存中开辟5个连续的存储单元(每个int存储单元占2个字节),用来存放a数组的5个数组元素a0代表这片存储区的第一个存储单元数组名a代表a数组的首地址,即a0存储单元的地址ai实际上代表这片存储区序号为i的存储单元ai就是一个带下标的int型变量a数组是这些int型下标变量的集合,13,一维数组,一维数组的定义正确的定义方式#define N 5 int aN;/*N是符号常量,其值为5*/int b2+3;/*2+3是常量表达式,其值为5*/int c10;错误的数组定义int aj;/*j不是常量*/int x=10,bx;/*?*/int M(4);/*
7、不能用圆括号定义数组*/int n1.0;/*?*/,14,一维数组,一维数组初始化格式说明可在 中给出各数组元素的初值各初值之间用逗号分开把 中的初值依次赋给各数组元素,数据类型 数组名整型常量表达式=初值1,初值2,;,15,一维数组初始化例int num 4=1,2,3,4;表示把初值1,2,3,4依次赋给num 0,num1,num2,num 3相当于执行如下语句int num 4;num 0=1;num 1=2;num 2=3;num 3=4;提示初始化的数据个数不能超过数组元素的个数,否则出错例如:int a4=1,2,3,4,5;是错误的,一维数组,16,一维数组,一维数组初始化
8、对数组的部分元素赋初值例int num5=1,2,3;,该语句执行:num0=1;num1=2;num2=3;num3=0;num4=0;,17,一维数组,一维数组初始化提示初始化的数据个数不能超过数组元素的个数,可以少于数组元素的个数 数组的元素不能自动初始化采用语句 int cj10=0;将数组cj的元素初始化为0若数组元素的个数定义省略,则系统根据初值的个数来确定数组元素的个数例如:int a3=1,2,3;数组有3个数组元素:a0=1,a1=2,a2=3若省略数组元素个数的定义,则初值必须完全给出C 语言编译系统将自动根据初始化数据的个数来确定数组的长度,18,一维数组,数组的引用数组
9、引用两种形式对整个数组的引用只给出数组名即可对数组元素的引用需要给出数组名下标的形式形式:数组名 下标表达式 例如 int a5,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,一维数组,数组的引用提示定义时整型常量表达式与引用时的数组元素的下标表达式是完全不同的概念数组定义:int a5;整型常量表达式5表示a数组有5个数组元素数组元素的引用a2=a1+a5;下标表达式2和1均表示数组元素的下标a5是错误的数组元素引用,因
10、为下标从0开始,所以数组元素的下标小于5,下标已经越界系统不检查数组元素下标是否越界只能由编程者自己掌握下标越界会破坏其它变量的值编程时一定要保证数组元素下标不越界,20,问题1:int a2;scanf(“%d%d”,?,错误:在C语言中数组元素的下标由 0开始,一个数组的下标的合法范围在0n-1,因此该题正确的写法是:int a2;scanf(“%d%d”,&a0,&a1);,错误:数组元素是通过数组名下标来访问的,其中下标必须是大于0的整数、整型变量或整型表达式,在这段程序中,i是浮点数,不能做数组元素的下标。,问题2:int a10;float i=3;ai=10;?,一维数组,21,
11、一维数组,一维数组的操作数组只是一种便于实现算法的数据结构,如何使用它解决实际问题才是实质在程序设计中常使用数组,很多算法也是建立在数组和循环之上由于数组元素具有相同的性质处理他们往往需要重复操作,因此数组操作离不开循环结构数组与循环总是联系在一起的,22,一维数组,一维数组的操作,例:在数组中查找和X相同的元素的位置,如果找到打印元素的位置,如果未找到则打印信息(假定数组中的元素互不相同)。,#include#define SIZE 10main()int aSIZE=1,2,35,6,39,47,53,4,5,10;int i,x;printf(“please enter a x:n”);
12、scanf(“%d”,&x);for(i=0;i=SIZE-1;i+)if(ai=x)break;if(i SIZE)printf(“%d,poster is%dn”,x,i);else printf(“no find%d n”,x);,23,一维数组,一维数组的操作,例:已知一维数组中存放10个互不相同的整数,从键盘输入一个数,并从数组中删除与该值相同的元素中的值。,#include#define SIZE 10main()int aSIZE=1,2,35,6,39,47,53,4,5,10;int i,j,x;for(i=0;iSIZE;i+)printf(“%4d”,ai);printf
13、(“please enter a x:n”);scanf(“%d”,i+)printf(“%4d”;ai);printf(“n”);,说明:做删除操作时,首先要找到删除元素的位置,找到后,立即用break语句推出循环并进行删除操作,删除操作实质是把一些数组元素向前移动一位。最后一位的删除不必移位,直接输出前size-1位。,24,一维数组,一维数组的操作,例:编写程序求10个数中的最大值和最小值以及求10个数中的最大值和最小值的位置,#define N 10main()int aN,k,max,min;for(k=0;kak)min=ak;printf(max=%d,min=%dn,max,m
14、in);,求10个数中的最大值和最小值。把以上求最大值的程序和求最小值的程序按串行方式写入一个程序中。程序中先求最大值,然后再求最小值,25,一维数组,一维数组的操作,例:编写程序求10个数中的最大值和最小值以及求10个数中的最大值和最小值的位置,#define N 10#include stdio.hmain()int aN,k,max,min;for(k=0;kak)min=k;/*找出最小值下标min*/printf(max=a%d=%d,min=a%d=%dn,max,amax,min,amin);,在上面程序中必须增加记忆最大值下标和最小值下标的语句。即每当产生一个最大(小)值时,立
15、即记录它的下标。若最大值下标是max,最小值下标是min,则amax就是最大值,amin就是最小值,程序设计基础(C语言),二维数组,27,二维数组,二维数组的定义需要两个下标才能识别某个元素的数组称为“二维数组”二维数组可以看作具有行和列的平面数据结构如矩阵 格式说明数据类型是数组全体数组元素的数据类型数组名用标识符表示两个整型常量表达式分别代表数组具有的行数和列数数组元素的下标一律从0开始例:int array34;,类型说明符 数组名常量表达式1常量表达式2;,28,数组名,行下标,列下标,数组中的每一个元素都用aij的形式表示。,所以:该例中定义了一个3*4(3行4列)的数组,我们可以
16、将其视为一个有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,二维数组,二维数组的初始化形式数据类型 数组名整常量表达式 整常量表达式=初始化数据;在 中给出各数组元素的初值各初值之间用逗号分开把
17、中的初值依次赋给各数组元素初始化方式分行进行初始化例:int a23=1,2,3,4,5,6;在 内部再用 把各行分开提示初始化的数据个数不能超过数组元素的个数,否则出错,31,二维数组,二维数组的初始化按二维数组在内存中的排列顺序初始化例:int a23=1,2,3,4,5,6;把 中的数据依次赋给a数组各元素(按行赋值)为部分数组元素初始化例:int a23=1,2,4;省略第一维的定义,但不能省略第二维的定义系统根据初始化的数据个数和第2维的长度可以确定第一维的长度例:int a 3=1,2,3,4,5,6;a数组的第一维的定义被省略,初始化数据共6个,第二维的长度为3,即每行3个数,所
18、以a数组的第一维是2省略第一维的定义时,第一维的大小按如下规则确定:初值个数能被第二维整除,所得的商就是第一维的大小;若不能整除,则第一维的大小为商再加1例如int a 3=1,2,3,4;等价于:int a23=1,2,3,4;,32,二维数组,二维数组的初始化提示只对部分数组元素初始化。未被初始化的数组元素将被编译系统自动清0两种初始化方法得到的初始结果是不同的,int a23=5,6,7,8;,5,6,07,8,0,int a23=5,6,7,8,5,6,78,0,0,33,二维数组,二维数组的初始化,例:一下能够对二维数组a进行正确初始化的语句是:(A)int a2=1,0,1,2,0
19、,2;(B)int a3=1,2,3,4,5,6;(C)int a24=1,2,3,4,5,6;(D)int a3=1,0,1,,2,3;,例:已知 int a3=0,1,2,3,4,5,6;则数组 的第一维的大小是多少?(A)2(B)3(C)4(D)无确定值,34,二维数组,二维数组元素的引用格式 数组名下标1下标2;每个元素同一般变量一样使用例:int a24;a02=a13*4;例:int a23,i=1,j=2,k=0;合法引用aik,aj-1i,a1j+k aik=ai-1j+a1j;错误引用a23下标越界a32,行下标越界a1,0 a(1)(2)C语言不进行数组的越界检查,在引用时
20、不要使数组越界,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,二维数组,【例】:阅读下列程序,选择程序的运行结果。int m33=1,2,
21、3;int n33=1,2,3;main()printf(”%dn”,m10+n00);/*1.结果*/printf(”%dn”,m01+n10);/*2.结果*/,1.结果:A)0 B)1 C)2 D)32.结果:A)0 B)1 C)2 D)3,37,【例】:阅读下列程序,选择程序的运行结果。main()int a66,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)0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 基础 语言
链接地址:https://www.31ppt.com/p-6011230.html