C语言程序设计课程ppt课件 之第四章简单构造数据类型.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《C语言程序设计课程ppt课件 之第四章简单构造数据类型.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计课程ppt课件 之第四章简单构造数据类型.ppt(94页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Rose第四章第四章 简单构造数据类型简单构造数据类型济南大学Rose整型整型整型整型实型实型实型实型枚举型枚举型枚举型枚举型 字符型字符型字符型字符型 charchar数组类型数组类型数组类型数组类型结构体类型结构体类型结构体类型结构体类型共用体类型共用体类型共用体类型共用体类型双精度双精度双精度双精度 doubledouble单精度单精度单精度单精度 floatfloat短整短整短整短整型型型型 short short intint 整型整型整型整型 intint长整型长整型长整型长整型 long long intint济南大学Rose引例:输入全班引例:输入全班30名同学的成绩,求平均分
2、,并名同学的成绩,求平均分,并将将30名同学的成绩由高到低排序。名同学的成绩由高到低排序。问题:问题:30名同学的成绩没有同时保留下来,无法进行名同学的成绩没有同时保留下来,无法进行排序。排序。一批变量的特点:类型相同(一批变量的特点:类型相同(float),),意义相同(成意义相同(成绩)绩)济南大学Rose数组是一批具有相同数据类型的变量的集合。数组是一批具有相同数据类型的变量的集合。数组各元素在内存中的存储单元是连续的。数组各元素在内存中的存储单元是连续的。数组元素通常批量操作。数组元素通常批量操作。例:例:float score30;济南大学Rose目录4.1 一维一维数组数组4.2
3、二维数组二维数组4.3 字符数组字符数组4.4 数组与指针数组与指针4.5 数组及指针作为函数参数数组及指针作为函数参数Rose4.1 一维数组一维数组Rose一、定义和使用:一、定义和使用:1 1、定义形式:、定义形式:int a10;float b6;char c10;Rose数组元素的下标从数组元素的下标从0 0开始。例如:开始。例如:intint a5;a5;其元素的表示为其元素的表示为a0a0、a1a1、a2a2、a3a3、a4a4。如果用如果用a5a5则是错误的。则是错误的。2、元素引用:、元素引用:Rose3 3、补充说明:、补充说明:、数组名由用户定义,命名规则和变量名相同。、
4、数组名由用户定义,命名规则和变量名相同。、元素个数为常量表达式而不能是变量表达式。、元素个数为常量表达式而不能是变量表达式。如下错误:如下错误:intint n;n;scanf(scanf(“%d%d”,&n,&n););intint an;an;、每一个元素相当于一个变量。每一个元素相当于一个变量。Rose二、数组的编程使用特色二、数组的编程使用特色 例:例:输入输入10个数,求它们的和。个数,求它们的和。用数组类型来解决。用数组类型来解决。Rose例:例:输入输入10个数,求它们的和。个数,求它们的和。main()int a10;int i,s=0;for(i=0;i=9;i+)print
5、f(“enter%d number:”,i+1);scanf(“%d”,&ai);s=s+ai;printf(“the total is%d:”,s);或或i10总结:总结:1、循环变量的、循环变量的起始和终值;起始和终值;2、循环中元素、循环中元素的表达。的表达。济南大学Rose注意:注意:对下标的引用不要超过下标的最大值。对下标的引用不要超过下标的最大值。尽管超过最大值时不出现编译错误尽管超过最大值时不出现编译错误,但数组越但数组越界,取的是下一个单元的值,这个单元有可界,取的是下一个单元的值,这个单元有可能存放的是其它的变量值,运算结果错误,能存放的是其它的变量值,运算结果错误,甚至出现
6、严重错误。甚至出现严重错误。济南大学Rose学生练习学生练习 定义一个长度为定义一个长度为5的一维整型数组,将一个的一维整型数组,将一个5位位数的各个位存入该一维数组中,然后将各个位数逆数的各个位存入该一维数组中,然后将各个位数逆序输出。序输出。例:一个例:一个5位数为位数为12345,将其各个位数求出来,并,将其各个位数求出来,并依次存入数组各元素中后,将各元素逆序输出,结依次存入数组各元素中后,将各元素逆序输出,结果应该为果应该为54321。要求该数应由用户从键盘上输入。要求该数应由用户从键盘上输入。济南大学Rosemain()int x,a5,i;printf(“enter a 5 bi
7、ts number:”);scanf(“%d”,&x);for(i=0;i=0;i+)printf(“the revert number is:”,ai);ai=x%10;x=x/10;济南大学Rose三、一维数组初始化:三、一维数组初始化:在程序运行之前,使数组各下标变量有一个初值。1 1、在数组定义的同时对数组元素初始化。、在数组定义的同时对数组元素初始化。intint a5=1,2,3,4,5 a5=1,2,3,4,5;2 2、可以仅对一部分下标元素赋初值。可以仅对一部分下标元素赋初值。如:如:static static intint a5=1,2,3 a5=1,2,3;如如果果不不对对
8、某某些些下下标标元元素素赋赋初初值值,则则对对于于数数值值型型元元素素初初值值均为均为0 0,对于字符型元素均为空操作符,对于字符型元素均为空操作符00.3 3、如如果果想想对对所所有有的的元元素素全全部部赋赋初初值值,可可以以省省略略定定义义元元素个数。如:素个数。如:static static intint aaaa=1,2,3,4,5;=1,2,3,4,5;Rose四、一维数组程序举例四、一维数组程序举例题目:题目:对输入到数组中的对输入到数组中的6个整数升序个整数升序排序。排序。从数组的第一个从数组的第一个元素开始,依次元素开始,依次和后面的元素比和后面的元素比较,如果比当前较,如果比
9、当前元素值小则互换元素值小则互换值。值。38 23 17 78 6 123 3817 38 23 17 38 23 78 1:2:6 38 23 78 171 38 23 78 17 61 6 38 78 23 173:1 6 17 78 38 234:1 6 17 23 78 385:1 6 17 23 38 78济南大学Rosemain()int a6,i,j,t;printf(Please input 6 numbers:n);for(i=0;i6;i+)scanf(%d,&ai);for(i=0;i5;i+)for(j=i+1;jaj)t=ai;ai=aj;aj=t;for(i=0;i
10、6;i+)printf(%d ,ai);Rose38 23 17 17 6 1 23 17 23 6 1 6 17 38 6 1 17 17 78 6 1 23 23 23 6 1 38 38 38 38 1 78 78 78 78 78 济南大学Rose1723381786初始初始1723138678第一趟第一趟1712363878第二趟第二趟1176233878第三趟第三趟1617233878第四趟第四趟1617233878第五趟第五趟济南大学Rosemain()int a6,i,j,t;printf(Please input 6 numbers:n);for(i=0;i6;i+)scan
11、f(%d,&ai);for(i=0;i5;i+)for(j=0;jaj+1)t=aj;aj=aj+1;aj+1=t;for(i=0;i6;i+)printf(%d ,ai);Rose分析:分析:设设min为每轮比较的最小值元素的下标值,为每轮比较的最小值元素的下标值,第一轮先假设第一轮先假设a0为最小值,为最小值,min=0;用用amin和和a1,a2,an-1比较,出现比比较,出现比amin小的值,让小的值,让min=j;比较完毕,比较完毕,amin为第一轮最小值,将为第一轮最小值,将a0与与amin互换,此时互换,此时a0里存放最小值。里存放最小值。第二轮假设第二轮假设a1为最小值,为最小
12、值,min=1;用用amin和和a2,an-1比较,出现比比较,出现比amin小的值,让小的值,让min=j;比比较完毕,较完毕,amin为第二轮最小值,将为第二轮最小值,将a1与与amin互换,互换,此时此时a1里存放次小值。里存放次小值。重复以上操作。外循环为重复以上操作。外循环为n-1次,内循环比较次,内循环比较n-i次次.Rose4.2 二维数组二维数组Rose问题引出:问题引出:如果统计全班同学总分,并求总分最高者。如果统计全班同学总分,并求总分最高者。假设全班假设全班40名同学成绩,而每个同学的成绩名同学成绩,而每个同学的成绩共有共有6门课,那么怎么定义数组呢?门课,那么怎么定义数
13、组呢?此处应定义为二维数组:第一维表示班级此处应定义为二维数组:第一维表示班级人数,第二维表示每人共有人数,第二维表示每人共有6门课成绩,定门课成绩,定义形式如下:义形式如下:float score406;总结:二维数总结:二维数组由两个组由两个 组组成,前面为第成,前面为第一维,后面为一维,后面为第二维。第二维。Rose提问:提问:二维数组各元素如何表达?二维数组各元素如何表达?score00、score01、score05、score10、score11、score15、score390、score391、score395共有共有406240个元素个元素Rose提问:提问:二维数组各元素在
14、内存中如何存储?二维数组各元素在内存中如何存储?按照先行后列的顺序,如下:按照先行后列的顺序,如下:score00、score01、score05、score10、score11、score15、score390、score391、score395Rosemain()float s406,sum40,x,max;int i,j;max=0;for(i=0;i40;i+)printf(input three course score of student%dn:,i+1);x=0;for(j=0;jmax)max=sumi;for(i=0;i40;i+)printf(student%d is%.
15、fn,i+1,sumi);程序程序4-5.cRose二维数组定义格式二维数组定义格式类型类型 数组名数组名行数行数列数列数;如:如:intint aa23;aa23;表示整型数组表示整型数组aaaa共共2 2行,每行行,每行3 3列,共列,共2 23=63=6个下标元素,每一个元素相当于一个个下标元素,每一个元素相当于一个整型变量。整型变量。Rose二维数组元素的引用:二维数组元素的引用:aa行号行号列号列号1.1.行号和列号都是从行号和列号都是从0 0开始的,并注意行号和列号不要开始的,并注意行号和列号不要超过数组定义的范围超过数组定义的范围。2.2.二维数组在内存中,是二维数组在内存中,是
16、按行按行存放的。数组的存储是按存放的。数组的存储是按先行后列先行后列的顺序,各个元素的存储顺序:的顺序,各个元素的存储顺序:aa00,aa01,aa02,aa10aa00,aa01,aa02,aa10,aa11,aa12aa11,aa12。3.每行相当于一个一维数组,如上例每行相当于一个一维数组,如上例相当于由相当于由2个一维数组组成。个一维数组组成。Rose二维数组元素的初始化二维数组元素的初始化 1、按行给二维数组赋初值。按行给二维数组赋初值。如:如:static static intint aa23=0,0,1,1,0,0;aa23=0,0,1,1,0,0;2 2、也可以把数值写在一块:
17、也可以把数值写在一块:static static intint aa23=0,0,1,1,0,0 aa23=0,0,1,1,0,0则则 aa00=0,aa01=0,aa02=1,aa00=0,aa01=0,aa02=1,aa10=1,aa11=0,aa12=0,aa10=1,aa11=0,aa12=0,Rose3 3、给部分下标变量赋初值,其它的元素值默认为、给部分下标变量赋初值,其它的元素值默认为0 0,如:如:static static intint a45=1,2,0,1,3 a45=1,2,0,1,3则各值为:则各值为:1 2 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0
18、 0 0 0 0 1 3 0 0 0 1 3 0 0 0 0 0 0 0 0 0 0 0 0说明:说明:a.a.一行中的最后几列元素赋初值为一行中的最后几列元素赋初值为0 0,这些元素可省。,这些元素可省。b.b.一行中的前一列或一行中的前一列或n n列元素赋初值为列元素赋初值为0 0,这些元素不能省。,这些元素不能省。c.c.一整行元素都赋初值一整行元素都赋初值0 0,若该行是最后一行,整行,若该行是最后一行,整行 的赋值可省。如不是最后一行,则必须用一个空大的赋值可省。如不是最后一行,则必须用一个空大 括号表示。括号表示。Rose4.4.如如果果对对二二维维数数组组的的所所有有元元素素都都
19、赋赋值值,则则数数组组的的第一维可以省略。第一维可以省略。如如:intint m m 3=1,2,3,4,5,6,7,8,9;3=1,2,3,4,5,6,7,8,9;则则默默认的第一维的值是认的第一维的值是3 3。5.5.如如仅仅对对部部分分元元素素赋赋初初值值,要要想想省省略略数数组组的的行行数数,则必须分行赋值则必须分行赋值,如:如:static static intint a 5=1,2,0,1,3 a 5=1,2,0,1,3建议使用分行赋值的方法。建议使用分行赋值的方法。Rose 二维数组的编程特点:使用二维数组的编程特点:使用双重循环,外循环控制双重循环,外循环控制“行行”,内循环控
20、制,内循环控制“列列”。牢记牢记Rose四、二维数组程序举例:四、二维数组程序举例:1、对以下矩阵进行转置:、对以下矩阵进行转置:1 2 3 4 1 2 3 4 5 6 7 8 5 6 7 8 9 10 11 12说明:该矩阵是非对称矩阵,所以利用两个二维说明:该矩阵是非对称矩阵,所以利用两个二维数组进行存储原矩阵和转置矩阵。数组进行存储原矩阵和转置矩阵。源程序源程序48.c1 5 9 1 5 9 2 6 102 6 103 7 114 8 12Rose2、P84页例页例5.5:有四个学生,每个学生学有四个学生,每个学生学3门课程,门课程,已知所有学生的各门课成绩,分别求每门课的平均成已知所有
21、学生的各门课成绩,分别求每门课的平均成绩和每个学生的平均成绩。绩和每个学生的平均成绩。cour1 cour2 cour3 stu1 78 86 92 stu1 78 86 92 stu2 62 73 65stu2 62 73 65stu3stu3 90 93 95stu4stu4 82 73 86 源程序源程序47.c济南大学Rose重点内容回顾重点内容回顾1.一维数组定义:一维数组定义:int a10;2.数组下标:从数组下标:从0到到N1;3.元素按顺序存放。元素按顺序存放。4.常用循环操纵:常用循环操纵:5.for(i=0;iN;i+)济南大学Rose1.二维数组定义:二维数组定义:in
22、t a310;2.元素按先行后列的顺序存放。元素按先行后列的顺序存放。3.常用循环操纵:常用循环操纵:4.for(i=0;iN;i+)5.for(j=0;jM;j+)Rose4.3 字符数组与字符串字符数组与字符串Rose 字符数组主要是用于处理字符串信息的。字符数组主要是用于处理字符串信息的。C语言中没有字符串类型,只有语言中没有字符串类型,只有char单字符类型。单字符类型。如果存放并处理一个字符串(由多个字符组成如果存放并处理一个字符串(由多个字符组成的字符序列)信息,就需要定义字符数组。的字符序列)信息,就需要定义字符数组。字符数组中每一个元素存放一个字符信息,若字符数组中每一个元素存
23、放一个字符信息,若干个元素的信息连在一起就表达了一串字符序干个元素的信息连在一起就表达了一串字符序列,通常就是字符串。列,通常就是字符串。在实际使用使许多数据都是字符型的,如姓在实际使用使许多数据都是字符型的,如姓名、单位、用户名、密码、英文单词、简介等。名、单位、用户名、密码、英文单词、简介等。4.3.1 字符数组的引出字符数组的引出Rose1、定义格式:、定义格式:char char 数组名数组名 字符个数字符个数;注意:字符串数据的特点:注意:字符串数据的特点:实际存储的字符个数通常是实际字符数实际存储的字符个数通常是实际字符数1 1。这是在定义时需要考虑的特征。这是在定义时需要考虑的特
24、征。回忆字符串常量的特点:回忆字符串常量的特点:“China”末尾有一个系统自动加上的末尾有一个系统自动加上的0结束标记,因此存结束标记,因此存储时占用的实际字节数是储时占用的实际字节数是6个。个。Rosechar char 数组名数组名 字符个数字符个数;思考一个问题:实际输入时,输入字思考一个问题:实际输入时,输入字符串长度可能不固定,怎么定义数组符串长度可能不固定,怎么定义数组的长度呢?的长度呢?考虑实际可能的最大长度,尽量定义考虑实际可能的最大长度,尽量定义的长度大些,如的长度大些,如50、80、100等,防等,防止丢失部分数据。止丢失部分数据。Rose字符数组初始化;字符数组初始化;
25、char s6=C,”h,i,n,a,0char s6=“China”;思考以下两种初始化形式有什么不同?思考以下两种初始化形式有什么不同?char s=“China”;char s=C,”h,i,n,a后后一种是普通的字符数组,其中存放的字一种是普通的字符数组,其中存放的字符序列不能作为一个字符串对待,因为没符序列不能作为一个字符串对待,因为没有有0结束标记。结束标记。济南大学Rose注意:一个字符数组存放的一串字符型数据,注意:一个字符数组存放的一串字符型数据,只有当它末尾有只有当它末尾有00时才能称之为字符串。时才能称之为字符串。否则只能是普通的字符数组,里面的数据不否则只能是普通的字符
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计课程ppt课件 之第四章简单构造数据类型 语言程序设计 课程 ppt 课件 第四 简单 构造 数据类型
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内