简单构造数据类型.ppt
《简单构造数据类型.ppt》由会员分享,可在线阅读,更多相关《简单构造数据类型.ppt(70页珍藏版)》请在三一办公上搜索。
1、2023/10/21,C语言程序设计,1,第四章 简单构造数据类型,前面的章节中我们已经学习了C语言中的一些基本数据类型(整型、字符型、实型),从本章开始我们学习构造类型的数据:数组类型、结构体类型、共同体类型,枚举类型。,4.1 一维数组4.2 二维数组4.3 字符数组与字符串4.4 数组与指针4.5 字符串与指针4.6 典型例题,2023/10/21,C语言程序设计,2,4.1一维数组4.1.1 一维数组的引出,例4.1:编写一个函数,从键盘读如10个数,返回最大数,在主函数中输出最大数。,#includeint max()float x,n,p;printf(“input 10 numb
2、ers:n”);scanf(“%f”,void main()printf(“max=%dn”,max();,2023/10/21,C语言程序设计,3,改进4.1_1:要求在主函数中读入10个数。,2023/10/21,C语言程序设计,4,上节回顾,(1)指针变量(2)变量的指针(3)int a=4,*s;s=则,*s=?(4)值传递方式 vs 地址传递方式,就是存放变量地址的变量。,就是变量的地址。,4,#includevoid swap(int*px,int*py)int temp;temp=*px;*px=*py;*py=temp;void main()int x=7,y=11,*p1,*
3、p2;p1=,2023/10/21,C语言程序设计,5,上节回顾,1、数组:2、数组定义:3、数组的引用:4、数组的初始化:5、冒泡排序:,是指一个有序数据的集合,其中每个元素由统一的数组名和下标来唯一的表示。,定义形式:类型说明符 数组名常量表达式,引用形式:数组名下标,如:int a5=1,3,5,7,9;,2023/10/21,C语言程序设计,6,1、所谓的数组是指一个有序数据的集合,其中每个元素由统一的数组名和下标来唯一的表示。,2、定义形式:类型说明符 数组名常量表达式 如:int a5;表示一个含有5个整型元素的数组,其中a是数组名,元素是a0,a1,a2,a3,a4。,一维数组的
4、定义和引用,2023/10/21,C语言程序设计,7,【说明】:、数组名由用户定义,定义规则和变量名相同,、常量表达式表示数组的元素个数,即数组长度。常量表达式中可以包括常量和符号常量,不能包含变量。、数组的下标从0开始。、和其他变量一样,数组也必须先定义后使用。,2023/10/21,C语言程序设计,8,判断一下数组表达方式正误?,int a(10);数组a10中包括元素:a0,a1,a9,a10int n;scanf(“%d”,(),(),(),(),2023/10/21,C语言程序设计,9,3、一维数组的引用,引用形式:数组名下标,注意:数组元素的下标可以是整型常量或整型表达式;C语言规
5、定只能逐个引用数组元素而不能一次引用整个数组;对下标的引用不要超过下标的最大值。,例:int x10,n;for(n=0;n10;n+)scanf(“%d”,4、一维数组的初始化(1)概念:在定义一维数组时对各元素指定初始值称为 数组的初始化,如:int a5=1,3,5,7,9;,(2)方法:1)、在数组定义的同时对全体数组元素初始化。(可以省略数组长度)如:int a=1,2,3,4,5;2)、可以仅对一部分下标元素赋初值。(不能省略数组长度)如:int a5=1,2,3,则;a0=a1=a2=a3=a4=,1,2,0,0,3,2023/10/21,C语言程序设计,11,3)、如果不对某些
6、下标元素赋初值,则对数值型元素均为0,对字符型元素均为空操作符0.4)、如果想对所有的元素全部赋初值,可以省略定义元素个数。如:int a=1,2,3,4,5;5)、如果使数组所有元素值为0,可以:int a10=0,0,0,0,0,0,0,0,0,0;或 int a10=0;,经典例题4.2:用冒泡排序法对6个数进行排序(从小到大),a0a1a2a3a4a5,2,7,7,5,4,7,1,4,5,1,5,1,4,1,2,冒泡排序方法:依次比较相邻的两个数,将小数放前面,大数放后面.n个数排序需要进行n-1轮比较,从第1轮到第n-1轮,各轮的比较次数依次为:n-1次、n-2次 1次,9,9,9,
7、9,9,7,2,5,4,1,初始状态,第1轮,第2轮,第3轮,第4轮,第5轮,7,一维数组程序举例,2023/10/21,C语言程序设计,13,#include void main()int a6,i,j,t;for(i=0;iaj+1)t=aj;aj=aj+1;aj+1=t;for(i=0;i6;i+)printf(“%3d”,ai);,输入6个数据,用嵌套的for循环实现排序外层循环控制进行6-1轮比较内层循环控制第i轮进行6-i次比较,若前面的数大于后面的数,则进行交换,输出排序后的6个数据,2023/10/21,C语言程序设计,14,a0a1a2a3a4a5,第1轮,第2轮,第3轮,第
8、4轮,第5轮,从这道例题中我们发现,在进行完第二轮比较后,实际上排序已经完成了,从第三轮开始,后面的比较都是多余的,在这种情况下我们希望可以终止比较.,初始状态,为了解决问题,我们在程序中设置一个变量flag,用它记录在一轮比较中是否进行了交换在每轮比较开始前flag=0,如果在此轮比较中进行了交换,则flag=1,在一轮比较结束后,判断flag的值是否为1,如果值为0,说明在此轮比较中没有进行交换(即已经完成排序了),此时可以终止循环(即结束排序)如果flag的值为1,则要继续进行排序,#include void main()int a6,i,j,t,flag;for(i=0;iaj+1)t
9、=aj;aj=aj+1;aj+1=t;flag=1;i+;while(flag);for(i=0;i6;i+)printf(“%3d”,ai);,2023/10/21,C语言程序设计,16,例4.3 用数组处理Fibonacci数列问题,输出20以内的所有项的值。,#include void main()int f20=1,1;int i;for(i=2;i20;i+)fi=fi-2+fi-1;for(i=0;i20;i+)if(i%5=0)printf(n);/*if语句用来控制换行,每行输出5个数据。*/printf(%-12d,fi);printf(n);,2023/10/21,C语言程
10、序设计,17,例4.4:假设考试共有4个科目,一个班有3名学生。输入所有学生的各科成绩,求出每名学生的总成绩。,4.2、二维数组的定义和引用4.2.1 二维数组的引出,2023/10/21,C语言程序设计,18,1、概念:一个一维数组,它的每一个元素都是类型相同的一维数组,就形成一个二维数组,2、定义形式:类型标识符 数组名 常量表达式1 常量表达式2 如:int a34;,a0a1a2,4.2.2 二维数组的定义和使用,2023/10/21,C语言程序设计,19,3、存储形式:数组的元素在内存中是连续存放的 例 int a33;的存放形式如下:,a10a11a12,a20a21a22,a00
11、a01a02,a00a01a02a10a11a12a20a21a22,101010121014101610181020102210241026,2023/10/21,C语言程序设计,20,4、二维数组元素的引用,二维数组元素的表示:数组名下标下标,2023/10/21,C语言程序设计,21,(1).分行初始化 int a34=1,2,3,4,5,6,7,8,9,10,11,12;此方法较直观,第一对 内的数据赋给 第一行数组元素,以此类推,(2).按数据的排列顺序对数组元素赋初值 int a34=1,2,3,4,5,6,7,8,9,10,11,12 将数据依次赋给元素 a00,a01 a23,
12、注意:此方法数据没有明显的界限,当数据较多时容易出错,5.二维数组的初始化,2023/10/21,C语言程序设计,22,(3).对数组的部分元素赋初值 int a34=1,2,3,0,4;,int a34=1,2,3,4,5,6;,(4).对数组的全部元素赋初值时可以省略第一维的长度 系统会根据数据的个数和第二维的长度自动求出 第一维的长度 int a 4=1,2,0,3,4,5;int b 2=1,2,3,4,5,6,7,8;,数组a 第一维长度为 3,数组b 第一维长度为 4,4.2.3 二维数组程序举例,#include#define M 3/*定义符号常量M,代表学生总人数*/#def
13、ine N 4/*定义符号常量N,代表5个考试科目*/void main()float score205,sum20;int i,j;printf(Input%d students%d scores(score%d%d):n,M,N,M,N);for(i=0;iM;i+)sumi=0;/*第i个学生的总成绩初值0*/for(j=0;jN;j+)printf(input%dth student%dth score:,i+1,j+1);scanf(%f,/*输出第i个学生的总成绩*/,例4.4,2023/10/21,C语言程序设计,24,#includevoid main()int a23=1,2
14、,3,4,5,6;int b32,i,j;printf(array a:n);for(i=0;i=1;i+)for(j=0;j=2;j+)printf(%5d,aij);bji=aij;printf(n);,printf(array b:n);for(i=0;i=2;i+)for(j=0;j=1;j+)printf(%5d,bij);printf(n);,2023/10/21,C语言程序设计,26,上节回顾,1、二维数组的定义2、二维数组的引用3、二维数组的初始化,类型标识符 数组名 常量表达式1 常量表达式2 如:int a34;,数组名下标下标,(1).分行初始化(2).按数据的排列顺序对
15、数组元素赋初值,2023/10/21,C语言程序设计,27,4.3 字符数组 4.3.1 字符数组的引出,一、引入 思考:怎样表达 Tom,China,ISBN等?,二、定义字符串:由若干有效字符组成的字符序列;字符串必须以0作为结束标志,它只是表示一个字符串的结束,没有任何的具体含义。,C语言中的字符串是作为字符数组来处理的。,2023/10/21,C语言程序设计,28,4.3.2 字符数组的定义和引用,1.字符数组定义:用来存放字符型数据的数组称为字符数组。例:char c10;,2.字符数组的初始化:(1)可以逐个字符元素赋值;例:char 5=C,h,i,n,a;(2)当初值个数小于字
16、符数组长度时,其余元素自动赋值为0;例:char10=B,e,i,J,i,n,g;则:str7=str8=str9=0;,2023/10/21,C语言程序设计,29,(3)当初值个数大于数组长度,按语法错误处理;(4)当初值个数与预定的数组长度相同时,可以省略数组长度;例:char c=C,h,i,n,a;(5)也可以定义和初始化一个二位字符数组。例:char diamond33=,*,*,*,*,*,2023/10/21,C语言程序设计,30,3.字符数组的引用:引用字符数组中的一个元素,可以得到一个字符。,例4.6:/*输出一个字符串*/#include void main()static
17、 char c10=I,a,m,a,s,t,u,d,e,n,t;int i;for(i=0;i10;i+)printf(%c,ci);printf(n);运行结果为:I am a student,2023/10/21,C语言程序设计,31,1.字符串的定义:由若干个有效字符组成的序列,用双引号括起来。有效字符包括字母,数字,专用字符,转义字符 如:“bfer”“a45-7”“mtkn”,C语言中没有专门的字符串变量,因此字符串存放在字符数组中,字符串以“0”作为结束标志,说明:定义字符数组时,要保证数组长度始终大于字符串实际长度。例:字符串“How are you”在内存中实际占12个字符。,
18、4.3.3 字符串的定义和引用,2023/10/21,C语言程序设计,32,2、字符数组的初始化:初始化形式:(1)数据类型 数组名=字符串;或(2)数据类型 数组名=字符串;如:char aa=”good morning!”;则数组aa的长度为14而不是13。由系统在字符串后加一个0。以上字符串赋值相当于:char aa=“good morning!”;或 char aa=g,o,o,d,m,o,r,n,i,n,g,!,0;,(1).为数组中的元素指定初值 char c8=H,e,l,l,o;,如果对数组全部元素指定初值,则可以省略数组的长度char c=H,e,l,l,o;,(2).对字符
19、数组指定字符串初值,char c8=“Hello”;char c8=“Hello”;char c8=H,e,l,l,o,0;,char c=“Hello”;,char c6=“Hello”;,char c5=“Hello”;,错误的初始化,注意:初始化时数组的长度应足够大,确保可以容纳所有字符和结束标志0,3、字符串的输入(1).输入单个字符 char c8;int i;scanf(“%c%c%c”,for(i=3;i8;i+)scanf(“%c”,(2).输入一个字符串 scanf(“%s”,c);说明:用格式字符%s 输入字符串,字符数组变量c不需要 加地址运算符&,因数组名本身代表数组的
20、首地址,注意:(1)从键盘输入字符串时不加“”(2)用scanf 输入字符串时,空格和回车符都会作为 字符串的分隔符,即scanf不能用来输入包含有 空格的字符串,(3).字符串输入函数 gets(字符数组)如:gets(c);,说明:输入有空格的字符串时应使用函数gets,它会读入全部字符直到遇到回车符为止,例:int i;char c8;for(i=0;i8;i+)scanf(“%c”,假设输入为:abcd efgh,注意:用gets输入字符串时,若输入字符数目大于字符数组的长度,多出的字符则会存放在数组的合法存储空间之外,实际编程不建议这样做,多出字符较多时执行会出错。,2023/10/
21、21,C语言程序设计,36,4、字符串的输出(1).输出单个字符,char c8;int i;printf(“%c%c”,c0,c1);for(i=2;i8;i+)printf(“%c”,ci);,(2).输出字符串 printf(“%s”,c);,注意:输出时不包括字符0,如果一个字符串中有多个0 则输出时遇到第一个0即认为字符串结束,(3).字符串输出函数 puts(字符数组)一次输出一个字符串,输出时将0自动转换成换行符,例:char s15=“abc”,s210=“defg”;printf(“%s%sn”,s1,s2);puts(s1);puts(s2);,输出结果:abcdefgab
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简单 构造 数据类型
链接地址:https://www.31ppt.com/p-6372864.html