![[教学目的]掌握数组、函数、指针和结构体的基本能容,并能熟练进_第1页](http://file3.renrendoc.com/fileroot_temp3/2022-3/15/f8f2a1f1-5d6d-4e6c-ad22-188c60b935c0/f8f2a1f1-5d6d-4e6c-ad22-188c60b935c01.gif)
![[教学目的]掌握数组、函数、指针和结构体的基本能容,并能熟练进_第2页](http://file3.renrendoc.com/fileroot_temp3/2022-3/15/f8f2a1f1-5d6d-4e6c-ad22-188c60b935c0/f8f2a1f1-5d6d-4e6c-ad22-188c60b935c02.gif)
![[教学目的]掌握数组、函数、指针和结构体的基本能容,并能熟练进_第3页](http://file3.renrendoc.com/fileroot_temp3/2022-3/15/f8f2a1f1-5d6d-4e6c-ad22-188c60b935c0/f8f2a1f1-5d6d-4e6c-ad22-188c60b935c03.gif)
![[教学目的]掌握数组、函数、指针和结构体的基本能容,并能熟练进_第4页](http://file3.renrendoc.com/fileroot_temp3/2022-3/15/f8f2a1f1-5d6d-4e6c-ad22-188c60b935c0/f8f2a1f1-5d6d-4e6c-ad22-188c60b935c04.gif)
![[教学目的]掌握数组、函数、指针和结构体的基本能容,并能熟练进_第5页](http://file3.renrendoc.com/fileroot_temp3/2022-3/15/f8f2a1f1-5d6d-4e6c-ad22-188c60b935c0/f8f2a1f1-5d6d-4e6c-ad22-188c60b935c05.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2022-3-16c程序设计1教学目的教学目的掌握数组、函数、指针和结构体的基本能容,并能掌握数组、函数、指针和结构体的基本能容,并能熟练进行综合应用。熟练进行综合应用。教学内容教学内容 数组的定义、引用及应用;函数的定义及应用;指数组的定义、引用及应用;函数的定义及应用;指针的定义及应用;结构体的定义及简单应用。在此基础上针的定义及应用;结构体的定义及简单应用。在此基础上能进行综合应用。能进行综合应用。 重点:数组、函数和指针的应用。重点:数组、函数和指针的应用。 难点:函数和指针的应用。难点:函数和指针的应用。教学方法教学方法 多媒体多媒体课时课时 讲授讲授36课时,上机课时,上机18课时
2、课时第四部分第四部分 数据类型构造与模块化程序设计数据类型构造与模块化程序设计2022-3-16c程序设计2第四部分第四部分 数据类型构造与模块化程序设计数据类型构造与模块化程序设计(九周九周)4.1 数组的构造与应用(数组的构造与应用(3周)周)4.2 函数的应用(函数的应用(2周)周)4.3 指针的应用(指针的应用(2周)周)4.4 结构体的构造与应用(结构体的构造与应用(1周)周)4.5 综合设计(综合设计(1周)周)2022-3-16c程序设计3第四部分第四部分 数据类型构造与模块化程序设计数据类型构造与模块化程序设计(九周九周)4.1数组的构造与应用(数组的构造与应用(3周)周)4.
3、2函数的应用(函数的应用(2周)周)4.3指针的应用(指针的应用(2周)周)4.4结构体的构造与应用(结构体的构造与应用(1周)周)4.5 综合设计(综合设计(1周)周)2022-3-16c程序设计4 在前面的学习中,我们学习了简单变量,既将一个在前面的学习中,我们学习了简单变量,既将一个具体的数值或字符存放在内存中的方法,如果需要存放具体的数值或字符存放在内存中的方法,如果需要存放5个数据则需要定义个数据则需要定义5个变量,从而给用户带来了麻烦。因个变量,从而给用户带来了麻烦。因此,在程序语言中引入了一种新的数据结构:数组。使此,在程序语言中引入了一种新的数据结构:数组。使用数组可以很容易的
4、实现存储很多数据的操作。用数组可以很容易的实现存储很多数据的操作。 数组:是以基类型为基础,定义的一组有某种共同数组:是以基类型为基础,定义的一组有某种共同特性的元素,如所有同学的成绩,所有商品的价格,所特性的元素,如所有同学的成绩,所有商品的价格,所有员工的姓名等。所有元素共用一个名称,而通过一个有员工的姓名等。所有元素共用一个名称,而通过一个特殊的标记来区分不同的元素。特殊的标记来区分不同的元素。新课引入:新课引入:2022-3-16c程序设计54.1数组的构造与应用数组的构造与应用 4.1.1一维数组构造一维数组构造 4.1.2一维数组的输入和输出一维数组的输入和输出 4.1.3一维数组
5、应用一维数组应用 4.1.4二维数组的构造与引用二维数组的构造与引用 4.1.5字符数组的构造与应用字符数组的构造与应用2022-3-16c程序设计6提出问题:提出问题: 一个班有一个班有30个同学,通过键盘输入成绩,并打印输出,个同学,通过键盘输入成绩,并打印输出,每行输出每行输出10个同学的成绩。个同学的成绩。2022-3-16c程序设计74.1.1 数组构造数组构造1、数组的定义:、数组的定义:类型类型 数组名数组名长度长度;例如:例如:int a10; float f20; char str80; 2、功能:在计算机内存中开辟连续的空间用来存放数组元素。、功能:在计算机内存中开辟连续的
6、空间用来存放数组元素。以以int a10;为例,要开辟为例,要开辟10个元素的空间,每个元素占两个字节,个元素的空间,每个元素占两个字节,共开辟共开辟10*2=20个字节的空间用来存放该数组中的元素。个字节的空间用来存放该数组中的元素。2022-3-16c程序设计83、特性、特性 数组是单个数据的集合,有下面两个特性:数组是单个数据的集合,有下面两个特性:(1)数组是有序的。)数组是有序的。(2)数组是同类型的。)数组是同类型的。例如:例如:int a10;a0 a2 a4 a6 a8 a1 a3 a5 a7 a9注:注:C语言中,每个数组元素都有两个属性:一是类型,数语言中,每个数组元素都有
7、两个属性:一是类型,数组中可以存储的值的类型;二是数组大小,数组中可以存组中可以存储的值的类型;二是数组大小,数组中可以存储的元素的个数。储的元素的个数。2022-3-16c程序设计94、初始化、初始化(1)在定义数组时,对数组元素赋以初值。)在定义数组时,对数组元素赋以初值。 如:如: int a10=0,1,2,3,4,5,6,7,8,9;(2)可以只给一部分元素赋值。)可以只给一部分元素赋值。 如:如: int a10=0,1,2,3,4 ; 表示只给前表示只给前5个元素赋初值,后个元素赋初值,后5个元素自动赋以个元素自动赋以0值。值。(3) 在对全部数组元素赋初值时,可以不指定数组长度
8、。在对全部数组元素赋初值时,可以不指定数组长度。int a5=1,2,3,4,5; 等价于等价于 int a =1,2,3,4,5;问题:如果想为一个包含有问题:如果想为一个包含有100个元素的整形数组全部赋初个元素的整形数组全部赋初值值0,应如何操作?,应如何操作?2022-3-16c程序设计105、引用、引用#include”stdio.h”main( ) int a3=1,10,100; printf(“%5d%5d%5dn”,a0,a1,a2);#include”stdio.h”main( ) int a3=1,10,100,i; for(i=0;i3;i+) printf(“%5d”
9、,ai); C语言规定只能逐个引用数组元素而不能一次引用整个数组。语言规定只能逐个引用数组元素而不能一次引用整个数组。引用形式为:数组名引用形式为:数组名下标下标整型常量或整型表达式整型常量或整型表达式2022-3-16c程序设计114.1.2一维数组的输入和输出一维数组的输入和输出 程序程序1:一个班有:一个班有30个同学,通过键盘输入成绩,并打印输个同学,通过键盘输入成绩,并打印输出,每行输出出,每行输出10个同学的成绩。个同学的成绩。讨论题目:编程实现任意输入年月日,计算出该天是当年讨论题目:编程实现任意输入年月日,计算出该天是当年的第几天。如:的第几天。如:请输入日期(年月日的格式):
10、请输入日期(年月日的格式):2007 1 31该天是本年的第该天是本年的第31天。天。2022-3-16c程序设计12算法分析:算法分析:1、定义一个数组用来存放、定义一个数组用来存放30个成绩数据,个成绩数据, int score30;2、用循环结构实现成绩输入;、用循环结构实现成绩输入; for(i=0;i30;i+) scanf(“%d”,&scorei);3、用循环结构实现成绩输出、用循环结构实现成绩输出,并控制换行;并控制换行; for(i=0;i30;i+) printf(“%5d”,scorei); if(i+1)%10=0) printf(“n”);2022-3-16c
11、程序设计13#include “stdio.h”main() int i; int score30; /*成绩数组的定义成绩数组的定义*/ for(i=0;i30;i+) /*输入成绩输入成绩*/ scanf(“%d”,&scorei); for(i=0;i30;i+) /*输出成绩输出成绩*/ printf(“%5d”,scorei); if(i+1)%10=0) printf(“n”);/*输出输出10个数据换行个数据换行*/程序:程序:2022-3-16c程序设计144.1.3一维数组应用一维数组应用 1、修改、添加数组元素;、修改、添加数组元素; 2、定位数组元素;、定位数组元
12、素; 3、求极值;、求极值; 4、数组排序;、数组排序; 5、数组合并和拆分;、数组合并和拆分; 6、数组的插入和删除。(能力提高)、数组的插入和删除。(能力提高) 2022-3-16c程序设计15程序程序2:一个班有:一个班有n个同学,通过键盘输入成绩,并进行以下个同学,通过键盘输入成绩,并进行以下处理:处理:1、求平均成绩;、求平均成绩;(数组求和)(数组求和)2、添加、添加m个同学的成绩;个同学的成绩;(数组添加)(数组添加)3、把不及格同学的成绩更新为、把不及格同学的成绩更新为60分;分;(数组更新)(数组更新)4、求成绩的最高分和最低分,并记住对应元素的下标;、求成绩的最高分和最低分
13、,并记住对应元素的下标; (数组求极值)(数组求极值)5、对成绩进行排序。、对成绩进行排序。(数组排序)(数组排序)2022-3-16c程序设计161、求平均成绩。、求平均成绩。算法分析:算法分析:1.输入输入n的值及的值及n个成绩;个成绩;2.对成绩进行汇总求和,存入变量对成绩进行汇总求和,存入变量s中;中;3.求平均数:求平均数:average=s/n;4.输出平均分输出平均分average。2022-3-16c程序设计17开始开始输入输入nini=0输入输入scoreii=i+1ini=0,s=0i=i+1s=s+scoreiaverage=s/n输出输出average结束结束真真假假假
14、假真真输入成绩输入成绩成绩求和成绩求和求平均成绩求平均成绩流程图:流程图:2022-3-16c程序设计182、添加、添加m个同学的成绩。个同学的成绩。算法分析:算法分析:1.当前成绩个数设为当前成绩个数设为n个;个;2.输入输入m的值;的值;3.从第从第n个元素开始输入个元素开始输入m个成绩;个成绩;4.更新数组元素的个数更新数组元素的个数: n=m+n;5.输出添加完后的成绩。输出添加完后的成绩。2022-3-16c程序设计19in+mi=ni=i+1n=m+n结束结束假假真真输入输入m个成绩个成绩输入输入m输入输入scoreiini=0输出输出scoreii=i+1真真假假流程图:流程图:
15、2022-3-16c程序设计203、把不及格同学的成绩更新为、把不及格同学的成绩更新为60分。分。算法分析:算法分析:1.当前成绩个数设为当前成绩个数设为n个;个;2.从第从第0个元素开始逐个元素进行测试:个元素开始逐个元素进行测试:if(scorei60) scorei=60;直到最后一个元素;直到最后一个元素;3.输出修改完后的成绩元素。输出修改完后的成绩元素。2022-3-16c程序设计21ini=0假假真真scori60i=i+1真真假假流程图:流程图:scori=60结束结束imax) max=scorei;if(scoreimin) min=scorei;直到最后一个元素;直到最后
16、一个元素;4.输出输出max和和min。问题:若需要输出对应元素的下标呢?问题:若需要输出对应元素的下标呢?2022-3-16c程序设计23imaxi=i+1真真假假流程图:流程图:max=scorei结束结束输出输出max和和minmax=min=score0scorimin假假真真max=scorei2022-3-16c程序设计245、对成绩进行排序。(从小到大)、对成绩进行排序。(从小到大)两种基本算法两种基本算法:1、起泡法:将相邻两个数比较,小的调到前面。、起泡法:将相邻两个数比较,小的调到前面。 2、选择法:将前面的数和后面的所有数依次进行比较,记、选择法:将前面的数和后面的所有数
17、依次进行比较,记住小数的下标,当比较完一遍,用前面的数和该小数进行交住小数的下标,当比较完一遍,用前面的数和该小数进行交换。换。2022-3-16c程序设计2523212534304937413028232125304934374130282321254930343741302823212530413437493028232125304134493730282321253041343037492823212530413430372849起起 泡泡 法法2022-3-16c程序设计2623212530413430372849232125344130303728492321253437303041
18、284923212534373041302849232125343730283041492022-3-16c程序设计27#include “stdio.h”main()int score10, i,j,k,n=10; printf(“ 输入成绩:输入成绩:n”); for(i=0;in;i+) scanf(“%d”,&scorei); for(i=0;in-1;i+) for(j=0;j scorej+1 ) k= scorej; scorej = scorej+1; scorej+1 =k; for(i=0;in;i+) printf(%5d, scorei ); printf(n)
19、; 程序(下标程序(下标从从1开始):开始):2022-3-16c程序设计28#include “stdio.h”main()int score11, i,j,k,n=10; printf(“ 输入成绩:输入成绩:n”); for(i=1;i=n;i+) scanf(“%d”,&scorei); for(i=1;i=n-1;i+) for(j=1;j scorej+1 ) k= scorej; scorej = scorej+1; scorej+1 =k; for(i=1;i=n;i+) printf(%5d, scorei ); printf(n); 程序(下标程序(下标从从1开始)
20、:开始):2022-3-16c程序设计29第一次比较结果:k为最小值的下标,交换score0与scorek 使score0中存放最小值。29 57 42 30 21 35 27 46 52 39第一次比较:k=0,比较scorek与它后面所有的数scorej (j=1,.,9),若scorek大于scorej,则k=j;kjjjj kjjjjj2129第二次比较:第二次比较:k=1,比较,比较scorek与它后面所有的数与它后面所有的数scorej (j=2,.,9),若,若scorek大于大于scorej,则,则k=j;kj kjkj kjj kjjj2757依次类推经过九次比较可使数组依次
21、类推经过九次比较可使数组score升序。升序。算法算法2:选择排序:选择排序第二次比较结果:第二次比较结果:k为剩余数中最小值的下标,交换为剩余数中最小值的下标,交换score1与与scorek,使使score1中存放剩余数中的最小值。中存放剩余数中的最小值。2022-3-16c程序设计30#include “stdio.h”main() int i,j,k,m,score10,n=10; for(i=0;in;i+) scanf(“%d”,&scorei); for(i=0;in-1;i+) k=i; for(j=i+1;j scorej) k=j; m=scorei; scorei
22、=scorek; scorek=m; for(i=0;in;i+) printf(%5d, scorei); printf(n); 程序:程序:2022-3-16c程序设计31程序程序3:对已经排好序的成绩数组进行以下操作(提高)。:对已经排好序的成绩数组进行以下操作(提高)。1、把一个新成绩按照顺序插入到数组的合适位置。、把一个新成绩按照顺序插入到数组的合适位置。2、删除成绩为、删除成绩为m的元素。的元素。3、删除下标为、删除下标为n的成绩。的成绩。2022-3-16c程序设计321、把一个新成绩按照顺序插入到数组的合适位置(假设原、把一个新成绩按照顺序插入到数组的合适位置(假设原数组数组1
23、0个元素按照从小到大的顺序进行排列)。个元素按照从小到大的顺序进行排列)。算法分析:算法分析:1. 从键盘接收一个数据,存入变量从键盘接收一个数据,存入变量m;2. 根据变量根据变量m的大小进行定位,其对应下标为的大小进行定位,其对应下标为k;3. 把把score9到到scorek的元素依次后移,为新数据腾出空间;的元素依次后移,为新数据腾出空间;4. 把把m存入下标为存入下标为k的空间中:的空间中:scorek=m;5. 输出处理完后的新数组。输出处理完后的新数组。问题:问题:1、如何确定插入的位置,即下标、如何确定插入的位置,即下标k的确定的确定? 2、如何实现元素的后移?、如何实现元素的
24、后移?2022-3-16c程序设计332、删除成绩为、删除成绩为m的元素。(假设原数组的元素。(假设原数组10个元素互不相等)个元素互不相等)算法分析:算法分析:1. 从键盘接收一个数据,存入变量从键盘接收一个数据,存入变量m;2. 把把m与数组中的元素依次进行比较,比较的结果有两种:与数组中的元素依次进行比较,比较的结果有两种: 存在与存在与m相同的元素;不存在与相同的元素;不存在与m相同的元素;相同的元素;3. 若存在与若存在与m相同的元素,则把数组中的该元素删除;若不相同的元素,则把数组中的该元素删除;若不 存在则直接输出存在则直接输出“没有发现要删除的元素!没有发现要删除的元素!”4.
25、 输出处理完后的数组元素。输出处理完后的数组元素。问题:问题:1、如何确定有没有要删除的元素、如何确定有没有要删除的元素? 2、如何把数组中的元素删除?、如何把数组中的元素删除?2022-3-16c程序设计344.1.4 二维数组的构造与引用二维数组的构造与引用提出问题:某学习小组有提出问题:某学习小组有4名同学,学习了名同学,学习了5门课程,如下表门课程,如下表所示,求每个同学的平均分和每门课程的平均分。所示,求每个同学的平均分和每门课程的平均分。姓名姓名课程课程1课程课程2课程课程3课程课程4课程课程5赵彬赵彬8082916877张强张强7883827280张帅张帅7358626075李利
26、李利82878979812022-3-16c程序设计35姓名姓名课程课程1课程课程2课程课程3课程课程4课程课程5赵彬赵彬8082916877张强张强7883827280张帅张帅7358626075李利李利8287897981行行列列8082916877一个同学一个同学的成绩:的成绩:2022-3-16c程序设计36j=0j=1j=2j=3j=4i=08082916877i=27358626075i=38287897981仿照二维表格,用仿照二维表格,用i表示行,用表示行,用j表示列(从表示列(从0开始),可开始),可得出以下表示:得出以下表示:i和和j两个数据,一个
27、控制行,一个控制列,每给定一组两个数据,一个控制行,一个控制列,每给定一组i和和j的值,就可以确定一个成绩。的值,就可以确定一个成绩。2022-3-16c程序设计37类型说明符类型说明符 数组名数组名常量表达式常量表达式常量表达式常量表达式; 例:例:float a34,b510; a00 a02 a10 a12 a20 a22 a01 a03 a11 a13 a21 a23 二维数组在内存中按行存放二维数组在内存中按行存放1、二维数组的定义、二维数组的定义2022-3-16c程序设计38(1)分行给二维数组赋初值。如:)分行给二维数组赋初值。如: int a34=1,2,3,4,5,6,7,
28、8,9,10,11,12;(2)可以将所有数据写在花括弧内,按数组排列的顺序对各)可以将所有数据写在花括弧内,按数组排列的顺序对各 元素赋初值。元素赋初值。 int a34=1,2,3,4,5,6,7,8,9,10,11,12;效果与前相同。效果与前相同。(3)可以对部分元素赋初值。如:)可以对部分元素赋初值。如: int a34=1,5,9 int a34=1,0,6,0,0,11; int a34=1,5,6; int a34=1,9;2、二维数组的初始化、二维数组的初始化2022-3-16c程序设计39引用形式为:引用形式为: 数组名数组名下标下标下标下标 注:下标是整型表达式,但应在已
29、定义的数组大小的范围内。注:下标是整型表达式,但应在已定义的数组大小的范围内。例如:例如:int score34;第第2行第行第3个元素是个元素是score12;第;第i行第行第j个元素是个元素是scoreij;二维数组的输出程序段:二维数组的输出程序段: for(i=0;i3;i+) /*行控制行控制*/ for(j=0;j3;j+) /*列控制列控制*/ printf(“%5d”,scoreij); printf(“n”); /*换行换行*/ 3、二维数组的引用、二维数组的引用2022-3-16c程序设计40程序程序1:编程实现求一个:编程实现求一个3行行4列整型数组的平均数。列整型数组的
30、平均数。程序程序2:编程实现把一个三行三列的二维数组转置输出。:编程实现把一个三行三列的二维数组转置输出。2 3 1 4 75 6 2 5 8 8 9 3 6 9程序程序3:某学习小组有:某学习小组有4名同学,学习了名同学,学习了5门课程,求每门课程,求每 个同学的平均分和每门课程的平均分。个同学的平均分和每门课程的平均分。转置转置5、二维数组应用、二维数组应用2022-3-16c程序设计41程序程序1:编程实现求一个:编程实现求一个3行行4列整型数组的平均数。列整型数组的平均数。算法分析:算法分析:1、定义一个二维数组、定义一个二维数组a34;2、为数组赋值;、为数组赋值;3、累加元素的和,
31、存入变量、累加元素的和,存入变量s中;中;4、求平均数、求平均数ave=s/12;5、输出平均数、输出平均数ave。2022-3-16c程序设计42程序:程序:#include “stdio.h”main() int a34,i,j,s=0; for(i=0;i3;i+) for(j=0;j4;j+) scanf(“%d”,&aij); for(i=0;i3;i+) for(j=0;j4;j+) s+=aij; ave=s/12; printf(“average=%5dn”,ave);2022-3-16c程序设计43程序程序2:编程实现把一个三行三列的二维数组转置输出。:编程实现把一个
32、三行三列的二维数组转置输出。算法分析:算法分析:1、定义一个二维数组、定义一个二维数组a33;2、为数组赋值;、为数组赋值;3、交换、交换aij与与aji的值;的值;4、输出交换后的数组、输出交换后的数组a。2022-3-16c程序设计44#include “stdio.h”main() int a33,i,j,s=0; for(i=0;i3;i+) for(j=0;j3;j+) scanf(“%d”,&aij); for(i=0;i3;i+) for(j=0;ji;j+) t=aij;aij=aji;aji=t; for(i=0;i3;i+) for(j=0;j3;j+) print
33、f(“%5dn”,aij); printf(“n”);程序:程序:2022-3-16c程序设计45程序程序3:某学习小组有:某学习小组有4名同学,学习了名同学,学习了5门课程,求每个同门课程,求每个同学的平均分和每门课程的平均分。学的平均分和每门课程的平均分。算法分析:算法分析:1、定义一个二维数组、定义一个二维数组score56(最后一行和最后一列存放最后一行和最后一列存放平均数平均数);2、为数组赋值;、为数组赋值;3、求行平均数,把平均数存入、求行平均数,把平均数存入scorei5中(中(i=0-3););4、求列平均数,把平均数存入、求列平均数,把平均数存入score4j中(中(j=0
34、-4););5、输出整个数组。、输出整个数组。2022-3-16c程序设计46提出问题:提出问题: 从键盘输入一行字符,要求删除第一次出现的某从键盘输入一行字符,要求删除第一次出现的某个字符(要删除的字符也由键盘输入)。个字符(要删除的字符也由键盘输入)。例如:例如:One can not be in two places at once.删除该行字符中的第一个字符删除该行字符中的第一个字符t。输出结果为:输出结果为:One can no be in two places at once.4.1.5 字符数组字符数组2022-3-16c程序设计47分析问题:分析问题: 首先需要输入一行字符,然
35、后再输入要删除的字符。首先需要输入一行字符,然后再输入要删除的字符。有一个重要问题需要解决:一行字符要先保存起来,才能有一个重要问题需要解决:一行字符要先保存起来,才能执行后面的删除字符操作。执行后面的删除字符操作。问题:问题:1、单个字符如何保存?、单个字符如何保存? 2、多个字符如何保存?、多个字符如何保存?2022-3-16c程序设计481、字符数组的定义、字符数组的定义 格式:格式:char 字符数组名字符数组名整型常量表达式整型常量表达式 例:例:char c10, d23;2、字符数组的初始化、字符数组的初始化 例例: char c10=I,a,m, ,h,a,p,p,y; cha
36、r c=“I am happy”; I a m h a p p y I a m h a p p y 02022-3-16c程序设计49字符串和字符串结束标志字符串和字符串结束标志 在在C语言中,用字符数组来处理字符串,同时,语言中,用字符数组来处理字符串,同时,C语言语言规定以字符规定以字符0作为字符串结束标志。作为字符串结束标志。字符常量:字符常量:a 、 3字符串常量:字符串常量:“a” 、 “3” 、 “You do well!”3、引用、引用 char c =“China”; printf(“%c”,c3); /*单个元素的引用单个元素的引用*/ printf(“%s”,c); /*整
37、体引用整体引用*/2022-3-16c程序设计504、字符数组的输入输出、字符数组的输入输出 输入输出控制字符有两种输入输出控制字符有两种“%c”和和“%s” %c 逐个字符输入逐个字符输入/输出输出 (类似于数值型数组)(类似于数值型数组) %s 一次输入一次输入/输出整个字符串输出整个字符串 输出输出 用用“%s”格式输出字符时,输出遇格式输出字符时,输出遇0时结束,时结束,printf函数函数中的输出项是字符数组名,而不是数组元素。中的输出项是字符数组名,而不是数组元素。 例:例: char c11=“china”; printf(“%s”,c); c h i n a 0输出:输出: c
38、hina2022-3-16c程序设计51输入输入 在使用在使用scanf函数时,若用函数时,若用“%s”格式输入字符串,则格式输入字符串,则后后面跟数组名,且不带面跟数组名,且不带“&”符号,数组名指向该数组的起始符号,数组名指向该数组的起始地址。地址。 例:例: char c11; scanf(%s, c); 输入输入 I am happy I 0 注意:用函数注意:用函数scanf输入(格式字符输入(格式字符%s)无法输入空格)无法输入空格2022-3-16c程序设计52程序程序1:从键盘输入一行字符,要求删除第一次出现:从键盘输入一行字符,要求删除第一次出现的某个字符(要删除的字
39、符也由键盘输入)。的某个字符(要删除的字符也由键盘输入)。算法分析:算法分析:1.定义存放字符串的字符数组定义存放字符串的字符数组str和存放单个字符的字和存放单个字符的字符变量符变量ch;2.输入字符串输入字符串str和要删除的字符和要删除的字符ch;3.对要删除的对要删除的ch定位;定位;4.从该位置开始,开始把后续字符依次前移;从该位置开始,开始把后续字符依次前移;5.检查字符串的结束标记。检查字符串的结束标记。2022-3-16c程序设计53算法分析:算法分析:1、定位:第一个字符串的、定位:第一个字符串的0的位置;的位置;2、从、从0开始把第二个字符串的字符依次放入第一个字符开始把第
40、二个字符串的字符依次放入第一个字符串的后端,直至第二个字符串的串的后端,直至第二个字符串的0;3、检验第一个字符串的末端是否有结束符、检验第一个字符串的末端是否有结束符0,若没有,若没有,修正所得的字符串,在它的末端加上修正所得的字符串,在它的末端加上0。练习练习:编一程序,将两个字符串连接起来编一程序,将两个字符串连接起来。2022-3-16c程序设计54开始开始接收接收s1和和s2s1i!=0?真真输出输出s1假假结束结束i=0;i=i+1;s2j!=0?真真假假j=0;s1i=s2j;j+;i+;s1i=02022-3-16c程序设计55#include “stdio.h”main( )
41、 char s180,s280; int i=0,j=0; gets(s1); gets(s2); while(s1i!=0) i+; while(s2j!=0) s1i=s2j;i+;j+; s1i=0; puts(s1); 程程 序:序:2022-3-16c程序设计565、字符串处理函数、字符串处理函数 所有函数都包含在头文件所有函数都包含在头文件string.h中中 puts(字符数组名字符数组名) 将以将以0结束的字符序列输出到终端,使用结束的字符序列输出到终端,使用puts函函 数输出的字符串中可以包含转义字符。数输出的字符串中可以包含转义字符。 gets(字符数组名字符数组名) 从
42、终端输入一个字符串到字符数组,并且得到一个从终端输入一个字符串到字符数组,并且得到一个 函数值,该函数值是字符数组的起始地址。函数值,该函数值是字符数组的起始地址。 strcat(字符数组字符数组1,字符数组,字符数组2) 连接两个字符数组中的字符串,把字符串连接两个字符数组中的字符串,把字符串2接到字符接到字符 串串 1的后面,结果放到字符数组的后面,结果放到字符数组1中,函数调用后得到中,函数调用后得到 一个函数值一个函数值-字符数组字符数组1的地址。的地址。 说明:说明: 字符数组字符数组1必须足够大,以便容纳连接后的新字符串。必须足够大,以便容纳连接后的新字符串。 连接时,自动取消数组
43、连接时,自动取消数组1后的后的0,只在新串最后保,只在新串最后保留留 一个一个0。2022-3-16c程序设计57 strcpy(字符数组(字符数组1,字符串,字符串2) 作用:将字符串作用:将字符串2拷贝到数组拷贝到数组1中去。中去。 说明:说明: 字符数组字符数组1必须足够大,以便容纳被拷贝的字符串。必须足够大,以便容纳被拷贝的字符串。 “字符数组字符数组1”必须写成数组名形式,必须写成数组名形式,“字符串字符串2”可以是可以是 字符数组名,也可以是一个字符串常量。字符数组名,也可以是一个字符串常量。 拷贝时连同字符串后面的拷贝时连同字符串后面的0一起拷贝到字符数组一起拷贝到字符数组1中中
44、 不能用赋值语句将一个字符串常量或字符数组直接赋不能用赋值语句将一个字符串常量或字符数组直接赋 给一个字符数组。给一个字符数组。 可以用可以用strcpy函数将字符串函数将字符串2中前面若干个字符拷贝到中前面若干个字符拷贝到 字符数组字符数组1中去。中去。 strcnpy(str1,str2,2) 拷贝拷贝str2的前的前2个字符,然后再加一个个字符,然后再加一个02022-3-16c程序设计58 strcmp(字符串(字符串1,字符串,字符串2) 作用作用: 比较字符串比较字符串1和字符串和字符串2 对两个字符串自左至右逐个相比,直到出现不同的字符或对两个字符串自左至右逐个相比,直到出现不同
45、的字符或遇到遇到0为止,如全部字符相同,则认为相等;若出现不相为止,如全部字符相同,则认为相等;若出现不相同的字符,则以第一个不相同的字符的比较结果为准,比较同的字符,则以第一个不相同的字符的比较结果为准,比较的结果由函数值带回。的结果由函数值带回。字符串字符串1=字符串字符串2,函数值为,函数值为0 字符串字符串1字符串字符串2, 函数值为一正整数函数值为一正整数字符串字符串1字符串字符串2, 函数值为一负整数函数值为一负整数 strlen(字符数组)(字符数组) 测试字符串长度的函数,函数的值为字符串的实际长度,测试字符串长度的函数,函数的值为字符串的实际长度,不包括不包括0在内。在内。2
46、022-3-16c程序设计59程序程序2:有三个字符串有三个字符串(长度不超过长度不超过20),要求找出其中最大者。,要求找出其中最大者。str0str1str2 string大大大大 2022-3-16c程序设计60算法分析算法分析:1.输入三个字符串输入三个字符串,存入二维字符数组中存入二维字符数组中;2.先取前两个字符串比较先取前两个字符串比较,找出大的存入找出大的存入string 数组中数组中;3.用用string和后续的依次进行比较和后续的依次进行比较,当出现比当出现比string的时更新的时更新string的值的值;4.输出输出string中的字符串。中的字符串。2022-3-16
47、c程序设计61 #include stdio.h main( ) char string20,str320; int i; for(i=0;i0) strcpy(string,str0); else strcpy(string,str1); if (strcmp(str2,string)0) strcpy(string,str2); printf(nthe largest string is:n%sn,string); 2022-3-16c程序设计62例例:输入一行字符,统计其中有多少个单词,单词之间输入一行字符,统计其中有多少个单词,单词之间用空用空 格分隔。格分隔。算法分析算法分析:1、接
48、收字符串、接收字符串string;2、单词的数目可以由空格出现的次数决定(连续的空格作为、单词的数目可以由空格出现的次数决定(连续的空格作为一个,一行开头的不统计在内)一个,一行开头的不统计在内)根据字符根据字符c是否为空格,可以进行以下判断是否为空格,可以进行以下判断: 不是不是:(1)前面为空格,则认为新单词开始,计数器前面为空格,则认为新单词开始,计数器num加加1; (2)前面为非空格,没出现新单词。前面为非空格,没出现新单词。 是是:未出现新单词。未出现新单词。3、为了区别空格与非空格之间的转换,需要加一个标记,如、为了区别空格与非空格之间的转换,需要加一个标记,如word,作为判别
49、是否单词出现,当作为判别是否单词出现,当word=0,表示未出现单词,当表示未出现单词,当单词出现,则单词出现,则word置置1,2022-3-16c程序设计63#include stdio.hmain( ) char string81; int i,num=0,word=0; char c; gets(string); for (i=0;(c=stringi)!=0;i+) if (c= = ) word=0; else if (word= =0) word=1; num+; printf(There are %d words in the linen,num); 2022-3-16c程序设
50、计64#include “stdio.h”main() int score56,i,j,s; for(i=0;i4;i+) for(j=0;j5;j+) scanf(“%d”,&aij); for(i=0;i4;i+) s=0; for(j=0;j5;j+) s+=scoreij; scoreij=s/j; 程序:程序:for(j=0;j5;j+) s=0; for(i=0;i4;i+) s+=scoreij; scoreij=s/i;for(i=0;i3;i+) for(j=0;jy) z=x; else z=y; return(z);main( ) /*主函数主函数*/int a,
51、b,c; scanf(“%d,%d”,&a,&b); c=max(a,b); printf(“max=%dn”,c);问题:主函数与子函数如何发生联系?问题:主函数与子函数如何发生联系?2022-3-16c程序设计75结论:结论:1.一个源程序文件由一个或多个函数组成一个源程序文件由一个或多个函数组成.2.C程序的执行从程序的执行从main函数开始函数开始,调用其他函数后回到调用其他函数后回到main函函 数数,在在main函数中结束整个程序的运行函数中结束整个程序的运行.3.所有函数都是平行的所有函数都是平行的,即在定义的时候是互相独立的即在定义的时候是互相独立的,函数之函数
52、之间可以相互调用间可以相互调用,但不能调用但不能调用main函数函数.4.函数分类函数分类:用户角度用户角度:标准函数标准函数(库函数库函数),用户自定义函数用户自定义函数.函数形式函数形式:无参函数无参函数,有参函数有参函数.2022-3-16c程序设计761、函数定义、函数定义任何函数(包括主函数任何函数(包括主函数main())都是由函数说明和)都是由函数说明和函数体两部分组成。根据函数是否需要参数,可将函数函数体两部分组成。根据函数是否需要参数,可将函数分为无参函数和有参函数两种。分为无参函数和有参函数两种。(1)无参函数的一般形式)无参函数的一般形式 函数类型函数类型 函数名函数名(
53、 void ) 说明语句部分;说明语句部分; 可执行语句部分;可执行语句部分; 4.2.2函数的定义与应用函数的定义与应用2022-3-16c程序设计77(2)有参函数的一般形式)有参函数的一般形式函数类型函数类型 函数名函数名( 数据类型数据类型 参数参数,数据类型,数据类型 参数参数2 ) 说明语句部分;说明语句部分; 可执行语句部分;可执行语句部分; 问题:有参数的函数与无参数的函数的区别是什么?问题:有参数的函数与无参数的函数的区别是什么?2022-3-16c程序设计78#include “stdio.h”int s(int n1, int n2) /*定义一个函数定义一个函数max(
54、)*/ return (n1+n2); main() int max(int n1, int n2);/*函数说明函数说明*/ int num1,num2; printf(input two numbers:n); scanf(%d%d, &num1, &num2); printf(“sum=%dn, s(num1,num2); getch(); /*使程序暂停,按任一键继续使程序暂停,按任一键继续*/ 程序程序2: 定义一个函数,用于求两个数之和定义一个函数,用于求两个数之和 。2022-3-16c程序设计792、函数知识要点、函数知识要点程序实例:编写以下功能函数程序实例:
55、编写以下功能函数1、求两个数的和、求两个数的和2、求两个数的差、求两个数的差3、求两个数的积、求两个数的积4、求两个数的商、求两个数的商2022-3-16c程序设计80/*两个数之和两个数之和*/int add(int x,int y) int s; s=x+y; return(s);/*两个数之差两个数之差*/int sub(int x,int y) int s; s=x-y; return(s);/*两个数之积两个数之积*/int mul(int x,int y) int s; s=x*y; return(s);/*两个数之商两个数之商*/int div(int x,int y) int
56、s; s=x+y; return(x/y);2022-3-16c程序设计81/*主函数主函数*/#include “stdio.h”main() int a,b,sum; printf(“input two numbers:”); scanf(“%d%d”,&a,&b); sum=add(a,b); printf(“sum=%dn”,sum);/*两个数之和两个数之和*/int add(int x,int y) int s; s=x+y; return(s);问题:问题:1、能否实现其他运算?、能否实现其他运算? 2、能否对这四种运算进行选择执行?、能否对这四种运算进行选择执行
57、?2022-3-16c程序设计82main()int a,b;char ch;while(1)printf(“*n”);printf(“*+-add*n”);printf(“*-sub*n”);printf(“*-mul*n”);printf(“*/-div*n”);printf(“*0-exitn”);printf(“*n”);printf(“input your choice:”);scanf(“%c”,&ch);printf(“input two number:n”);scanf(“%d%d”,&a,&b);switch(ch)case +:k=add(a,b);
58、break;case -:k=sub(a,b);break;case *:k=mul(a,b);break;case /:k=div(a,b);break;case 0:exit(1);break;default:printf(“error!n”);printf(“%d%c%d=%dn”,a,ch,b,k); 说明:说明:1、先显示菜单,再输入选择。、先显示菜单,再输入选择。2、输入和输出操作应该为四个函数所共享。、输入和输出操作应该为四个函数所共享。2022-3-16c程序设计83从以上实例中得到以下与函数有关的知识要点:从以上实例中得到以下与函数有关的知识要点:1、函数参数、函数参数2、函
59、数调用、函数调用3、函数返回值、函数返回值2022-3-16c程序设计84问题:问题:1、什么是函数参数?、什么是函数参数?2、函数的参数分为几种?如何区分?、函数的参数分为几种?如何区分?3、函数的作用是什么?、函数的作用是什么?2022-3-16c程序设计85问题问题1、什么是函数调用?、什么是函数调用?2、调用的形式一般有哪几种?、调用的形式一般有哪几种?3、函数的调用形式?、函数的调用形式? 2022-3-16c程序设计86问题:问题:1、什么是函数返回值?、什么是函数返回值?2、什么时候需要函数的返回值?、什么时候需要函数的返回值?3、如何把函数的返回值进行返回?、如何把函数的返回值
60、进行返回?4、函数返回值和什么有关系?、函数返回值和什么有关系?2022-3-16c程序设计87# include “stdio.h”void s(int n) int i; printf(n_x=%dn,n); /*输出改变前形参的值输出改变前形参的值*/ for(i=n-1; i=1; i-) n=n+i; /*改变形参的值改变形参的值*/ printf(n_x=%dn,n); /*输出改变后形参的值输出改变后形参的值*/ main() void s(int n); /*说明函数说明函数*/ int n=100; /*定义实参定义实参n,并初始化,并初始化*/ s(n); /*调用函数调用函数*/ printf(n_s=%dn,n); /*输出调用后实参的值,便于进行比较输出调用后实参的值,便于进行比较*/ getc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年河南建筑职业技术学院单招职业适应性测试题库参考答案
- 2025年全数字摄影测量系统项目发展计划
- 第五单元第15课一、《信息交流的方式》教学设计 2023-2024学年人教版初中信息技术七年级上册
- 第13课《野望》《黄鹤楼》教学设计-2024-2025学年统编版语文八年级上册
- 人工智能对算力行业的推动作用
- 高端装备数字化项目背景与意义
- 2025至2030年中国弹簧椅数据监测研究报告
- 2025年度短期租赁合同到期后如何处理
- Unit 1 Festivals and Celebrations Discovering Useful Structures 全英文教学设计-2023-2024学年高中英语人教版(2019)必修第三册
- 二零二五年度代持股东权益保障及股权激励计划合同
- (高清版)JTGT 3650-01-2022 公路桥梁施工监控技术规程
- 2024年黑龙江建筑职业技术学院单招职业适应性测试题库全面
- 北京市2024小升初数学模拟试卷一
- 一年级口算题100以内比大小
- 《提案与方案优化设计》课件-第一部分 常见户型问题解析及平面布局优化
- 《水电厂应急预案编制导则》
- 产科抗磷脂综合征诊断与处理专家共识
- (正式版)SHT 3078-2024 立式圆筒形料仓工程设计规范
- 2024ABB IRB IRB6700Inv IRB6700I产品手册指南
- 正弦函数图像与性质.课件
- 成人住院患者静脉血栓栓塞症预防护理
评论
0/150
提交评论