(C语言程序设计案例课件)项目四学生成绩的分组汇总

上传人:夏** 文档编号:567484787 上传时间:2024-07-20 格式:PPT 页数:85 大小:12.47MB
返回 下载 相关 举报
(C语言程序设计案例课件)项目四学生成绩的分组汇总_第1页
第1页 / 共85页
(C语言程序设计案例课件)项目四学生成绩的分组汇总_第2页
第2页 / 共85页
(C语言程序设计案例课件)项目四学生成绩的分组汇总_第3页
第3页 / 共85页
(C语言程序设计案例课件)项目四学生成绩的分组汇总_第4页
第4页 / 共85页
(C语言程序设计案例课件)项目四学生成绩的分组汇总_第5页
第5页 / 共85页
点击查看更多>>
资源描述

《(C语言程序设计案例课件)项目四学生成绩的分组汇总》由会员分享,可在线阅读,更多相关《(C语言程序设计案例课件)项目四学生成绩的分组汇总(85页珍藏版)》请在金锄头文库上搜索。

1、大连理工大学出版社C语言程序设计案例教程C语言程序设计案例教程大连理工大学出版社项目四学生成绩的分组汇总v教学目的:教学目的:通通过过本本项项目目的的学学习习,要要求求能能熟熟练练掌掌握握数数组组的的基基本本概概念念,熟熟练练掌掌握握一一维维数数组组、二二维维数数组组和和字字符符数数组组的的定定义义、赋赋值值,熟熟练练掌掌握握数数组组的的输输入入和和输输出出方方法法,掌掌握握字字符符串串和和字字符符数数组组的的不不同同特特点点,掌掌握握数数组组的的排排序序、查查询询等等基基本本操操作作方方法法。学学习习数数组组知知识识为为后后续续项项目目做做好好准准备备,也也为为后后续续面面向向对对象象语语言

2、言课课程程的的学学习打下基础习打下基础 。 C语言程序设计案例教程大连理工大学出版社项目四学生成绩的分组汇总v教学内容教学内容 数组的数组的C C程序引例:通过简单的数组程序引例:通过简单的数组C C程序来引入章节的内容程序来引入章节的内容一维数组的定义和引用一维数组的定义和引用二维数组的定义和引用二维数组的定义和引用字符数组与字符串字符数组与字符串综合实训:通过具体的案例来巩固数组的知识点综合实训:通过具体的案例来巩固数组的知识点C语言程序设计案例教程大连理工大学出版社项目四学生成绩的分组汇总重点:重点:()数组的排序()数组的排序 ()一维数组的定义与应用()一维数组的定义与应用难点难点

3、: 、一维数组的定义与应用、一维数组的定义与应用、数组的排序、数组的排序(3 3)二维数组的定义与应用)二维数组的定义与应用 (4 4)字符数组与字符串的应用)字符数组与字符串的应用 v重点和难点重点和难点C语言程序设计案例教程大连理工大学出版社项目四学生成绩的分组汇总辅辅导导员员张张老老师师在在使使用用小小王王设设计计的的程程序序时时,发发现现他他要要对对一一个个小小组组学学生生成成绩绩的的总总分分及及平平均均分分进进行行计计算算,故故张张老老师师找找来来小小王王同同学学,说说明明了了需需求求,小小王王根根据据张张老老师师的的需需求求,参参考考了了相相关关的的资资料料,完完善善了了原原来来的

4、的程程序序,帮帮助助张张老老师师解解决决了了该该问问题。题。C语言程序设计案例教程大连理工大学出版社项目四学生成绩的分组汇总 实现:实现:/*功能:一个小组学生成绩的总分及平均分的计算功能:一个小组学生成绩的总分及平均分的计算*/#include #define MAX 1000void main()int i;float sum=0.0,ave;int count; int aMAX; printf(“请输入小组的人数:请输入小组的人数:”);scanf(%d,&count);printf(“请输入小组的学生成绩:请输入小组的学生成绩:”);for(i=0;icount;i+)scanf(“

5、%d”,&ai);C语言程序设计案例教程大连理工大学出版社项目四学生成绩的分组汇总for(i=0;icount;i+)sum=sum+ai;ave=sum/count;printf(该该小小组组学学生生成成绩绩的的总总分分是是%f分分t平平均均分分是是%f分分n,sum,ave);编译、连接、和运行程序。程序运行后,屏幕显示:编译、连接、和运行程序。程序运行后,屏幕显示:C语言程序设计案例教程大连理工大学出版社项目四学生成绩的分组汇总请输入小组的人数:10请输入小组的学生成绩:60 70 80 90 100 90 80 70 60 100该小组学生成绩的总分是800.000000分 平均分是8

6、0.000000分要要完完成成上上面面的的任任务务,小小王王必必须须要要熟熟练练掌掌握握数数组组的的基基本本概概念念,熟熟练练掌掌握握一一维维数数组组的的定定义义、赋赋值值,熟熟练练掌掌握握数数组组的的输输入入和和输输出出方法。方法。C语言程序设计案例教程大连理工大学出版社4.1数组引例 【例例4.1】一个简单的一个简单的C程序数组引例程序数组引例/*源文件名:源文件名:Li4_1.c功功能能:从从键键盘盘输输入入一一个个不不长长于于20个个字字符符的的字字符符串串,按按与与输输入入顺顺序序相相反反的的次次序输出此字符串,例如输入序输出此字符串,例如输入dimension,输出,输出noisn

7、emid。*/#include void main()char ch,s20; /*定义定义s字符数组,它最多可以容纳字符数组,它最多可以容纳20个字符个字符*/printf(输入字符串:输入字符串:); /*打印输出一串字符串打印输出一串字符串*/ i=0 /*i为统计字符个数为统计字符个数*/do ch=getchar(); /*从键盘上输入字符从键盘上输入字符*/C语言程序设计案例教程大连理工大学出版社4.1数组引例If(ch!=n) si+=ch; /*读取的字符存在读取的字符存在s0,s1*/ while(i=0;-i) putchar(si) ; /*反向输出这些字符反向输出这些字

8、符*/putchar(n); 编译、连接、和运行程序。程序运行后,屏幕显示:编译、连接、和运行程序。程序运行后,屏幕显示: 输入字符串:输入字符串:dimension 反向顺序:反向顺序:noisnemidC语言程序设计案例教程大连理工大学出版社一个班学生的学习成绩或一行文字等这些数据的特点是:一个班学生的学习成绩或一行文字等这些数据的特点是:具有相同的数据类型具有相同的数据类型使用过程中需要保留原始数据使用过程中需要保留原始数据C语语言言为为这这些些数数据据提提供供了了一一种种构构造造数数据据类类型型:数数组组。所所谓谓数组就是一组具有相同数据类型的数据的有序集合数组就是一组具有相同数据类型

9、的数据的有序集合 。4.2一维数组的定义和引用4.2.1 4.2.1 一维数组的定义一维数组的定义C语言程序设计案例教程大连理工大学出版社一维数组的定义方法一般为:一维数组的定义方法一般为:类型说明符类型说明符 数组名常量表达式数组名常量表达式 其其 中中 类类 型型 可可 以以 是是 任任 何何 的的 C语语 言言 数数 据据 类类 型型 , 例例 如如char,int,long,float,double等等,数数组组名名与与普普通通变变量量名名一一样样,常常量量表表达达式式是是数数组组在在内内存存中中的的单单元元数数,在在定定义义时时必必须须是是一一个个常常数数,不不能能是是变变量量,数数

10、组组的的每每个个单单元元占占的的字字节节数数就就是是对对应应类类型型占占的字节数,显然数组占的总字节数是:的字节数,显然数组占的总字节数是:常量表达式常量表达式*sizeof(类型类型)4.2一维数组的定义和引用4.2.1一维数组的定义1.1.一般定义一般定义C语言程序设计案例教程大连理工大学出版社例如:例如:char s20 ; /*定义能存储定义能存储20个字符的数组个字符的数组*/int n20 ; /*定义能存储定义能存储20个整数的数组个整数的数组*/float f20 ; /*定义能存储定义能存储20个个float数的数组数的数组*/数组定义中常见的错误举例说明如下:数组定义中常见

11、的错误举例说明如下:float a0 ; /*数组大小为数组大小为0没有意义没有意义*/int b(2) ; /*不能使用圆括号不能使用圆括号*/int k,ak ; /*不能用变量说明数组大小不能用变量说明数组大小*/ 4.2一维数组的定义和引用4.2.1一维数组的定义C语言程序设计案例教程大连理工大学出版社4.2一维数组的定义和引用4.2.1一维数组的定义数组在定义时还可以同时为各个单元设置初始值。数组在定义时还可以同时为各个单元设置初始值。定义时给所有元素赋值,例如:定义时给所有元素赋值,例如: char s5= a,b, c,d,e ;定义数组定义数组s5,并且设置,并且设置 s0=a

12、,s1=b,s2=c,s3=d,s4=e2.2.定义及初始化定义及初始化C语言程序设计案例教程大连理工大学出版社4.2一维数组的定义和引用4.2.1一维数组的定义定义时给部分元素赋值,例如:定义时给部分元素赋值,例如:char s5= a,b ;定义数组定义数组s5,并且设置,并且设置 s0=a,s1=b,s2=0,s3=0,s4=0,即即后后面面没没有有赋赋值值的的元元素素全部设置为全部设置为0。定义时给所有的元素赋值,则可以不设置数组的大小,例如:定义时给所有的元素赋值,则可以不设置数组的大小,例如:char s= a,b, c,d,e ;与与char s5= a,b, c,d,e ;是等

13、价的。是等价的。C语言程序设计案例教程大连理工大学出版社4.2一维数组的定义和引用1. 一维数组元素的引用方式一维数组元素的引用方式数组名数组名下标下标下标可以是整型常量或整型表达式。下标可以是整型常量或整型表达式。例如例如: a0=a5+a7-a2*32.一维数组元素引用的程序实例一维数组元素引用的程序实例【例例4.2】用数组来处理用数组来处理,求解求解Fibonacci数列。数列。/*源文件名:源文件名:Li4_2.c功能:求解功能:求解Fibonacci数列前数列前20项的值。项的值。*/4.2.2 4.2.2 一维数组的引用一维数组的引用C语言程序设计案例教程大连理工大学出版社4.2一

14、维数组的定义和引用4.2.2一维数组的引用#include void main() int i,f20=1,1 ; /*定义定义f数组,第数组,第1项和第项和第2项的值都为项的值都为1*/ for(i=2;i20;i+) fi=fi-2+fi-1 ; /*给给f数组第数组第3项和第项和第20项赋值项赋值*/ for(i=0;ii。 对对于于任任何何一一个个ai,如如果果aiaj,表表明明前前面面有有一一个个元元素素ai比比它它后后面面的的元元素素aj大大,ai应应该该在在后后面面,aj应应该该在在前面,交换前面,交换ai与与aj。对对于于任任何何一一个个ai,都都循循环环一一次次j,j循循环环

15、完完成成后后ai必必不不大大于于ai+1,an-1,重重复复i循循环环,i循循环环结结束束后后数数组组从从小小到大排序。到大排序。C语言程序设计案例教程大连理工大学出版社4.2一维数组的定义和引用4.2.2一维数组的引用 /*源文件:源文件:Lib4_3.c功能:用随机函数产生功能:用随机函数产生10个个0100之内的整数,按从小到大排序输出之内的整数,按从小到大排序输出 */#include #include void main()int a10,i,j,k ; /*定义定义a数组,数组,i、j为循环变量,为循环变量,k为临时变量为临时变量*/for(i=0;i10;i+) ai=rand(

16、)%100 ; /*给给a数组随机赋数组随机赋0100之内的整数之内的整数*/ printf(排序之前的数据排序之前的数据) ; for(i=0;i10;i+) printf(%d ,ai) ; /*输出输出a数组的值,未排序数组的值,未排序*/ putchar(n) ; for(i=0;i9;i+)C语言程序设计案例教程大连理工大学出版社4.2一维数组的定义和引用4.2.2一维数组的引用程序运行后,屏幕显示:程序运行后,屏幕显示: for(j=i+1;jaj) k=ai ; ai=aj ; aj=k ; /*数组排序数组排序*/ for(i=0;i10;i+) printf(%d ,ai)

17、; /*输出输出a数组的值,已排序数组的值,已排序*/ putchar(n) ;34 45 26 15 76 84 98 29 67 1111 15 26 29 34 45 67 76 84 98C语言程序设计案例教程大连理工大学出版社任务任务2求每个小组学生成绩的总分及平均分求每个小组学生成绩的总分及平均分辅辅导导员员张张老老师师在在使使用用小小王王设设计计的的程程序序时时,发发现现他他要要对对多多个个小小组组学学生生成成绩绩的的总总分分及及平平均均分分进进行行计计算算,故故张张老老师师找找来来小小王王同同学学,说说明明了了需需求求,小小王王根根据据张张老老师师的的需需求求,参参考考了了相相

18、关关的资料,完善了原来的程序,帮助张老师解决了该问题。的资料,完善了原来的程序,帮助张老师解决了该问题。C语言程序设计案例教程大连理工大学出版社任务任务2求每个小组学生成绩的总分及平均分求每个小组学生成绩的总分及平均分/*/*功能:多个小组学生成绩的总分及平均分的计算功能:多个小组学生成绩的总分及平均分的计算* */ /#include #include #define MAX 1000#define MAX 1000#define M 100#define M 100void main()void main() int i,j;int i,j;float sumM,aveM;float su

19、mM,aveM;int count;int count;int group;int group;int aMMAX;int aMMAX;printf(printf(“请输入小组的组数:请输入小组的组数:”););scanf(scanf(“%d%d”,&group);,&group); printf(printf(“请输入小组的人数:请输入小组的人数:”););scanf(scanf(“%d%d”,&count);,&count);printf(printf(“请输入每小组的学生成绩:请输入每小组的学生成绩:”););C语言程序设计案例教程大连理工大学出版社任务任务2求每个小组学生成绩的总分及平

20、均分求每个小组学生成绩的总分及平均分for(i=0;igroup;i+)for(i=0;igroup;i+) for(j=0;jcount;j+)for(j=0;jcount;j+) scanf(scanf(“%d%d”,&aij);,&aij); for(i=0;igroup;i+)for(i=0;igroup;i+) sumi=0.0; sumi=0.0; for(j=0;jcount;j+) for(j=0;jcount;j+) sumi=sumi+aij;sumi=sumi+aij; C语言程序设计案例教程大连理工大学出版社任务任务2求每个小组学生成绩的总分及平均分求每个小组学生成绩的

21、总分及平均分编译、连接、和运行程序。程序运行后,屏幕显示:请输入小组的组数:3请输入小组的人数:10请输入小组的学生成绩:60 70 80 90 100 90 80 70 60 10060 70 80 70 80 70 60 70 60 8060 70 70 80 100 80 70 70 60 90第1个小组学生成绩的总分是800.000000分 平均分是80.000000分第2个小组学生成绩的总分是700.000000分 平均分是70.000000分第3个小组学生成绩的总分是750.000000分 平均分是75.000000分avei=sumi/count;avei=sumi/count;

22、 for(i=0;igroup;i+)for(i=0;igroup;i+)printf(printf(“第第%d%d个小组学生成绩的总分是个小组学生成绩的总分是%f%f分分tt平均分是平均分是%f%f分分nn”,i+1,sumi,avei);,i+1,sumi,avei); C语言程序设计案例教程大连理工大学出版社任务任务2求每个小组学生成绩的总分及平均分求每个小组学生成绩的总分及平均分要要完完成成上上面面的的任任务务,小小王王必必须须要要熟熟练练掌掌握握数数组组的的基基本本概概念念,熟熟练练掌掌握握二二维维数数组组的的定定义义、赋赋值值,熟熟练练掌掌握数组的输入和输出方法。握数组的输入和输出

23、方法。C语言程序设计案例教程大连理工大学出版社4.3二维数组的定义和引用二二维维数数组组实实际际上上就就是是一一维维数数组组的的数数组组,即即它它的的每每一一个个一一维维元素都是一个一维数组,定义如下:元素都是一个一维数组,定义如下:类型说明符类型说明符 数组名数组名常量表达式常量表达式常量表达式常量表达式 ;例如:例如: int a35 ;4.3.1 4.3.1 二维数组的定义二维数组的定义C语言程序设计案例教程大连理工大学出版社4.3二维数组的定义和引用4.3.1二维数组的定义 a是是一一个个二二维维数数组组,其其中中a0,a1,a2每每一一个个都都是是一维数组,它们各有一维数组,它们各有

24、5个元素,分别是:个元素,分别是:a00、a01、a02、a03、a04a10、a11、a12、a13、a14a20、a21、a22、a23、a24其其中中aij(i=0,1,2,j=0,1,2,3,4)是是一一个个整整数数单单元元,这这个个数数组组共共有有15个个整整数数单单元元,它它们们在在内内存存中中的的分分布布是是先先按按行行排排列列再再按按列列排排列列,a00是是第第1个个元元素素,a10是是第第6个元素,个元素,a24是第是第15个元素,如下表所示。个元素,如下表所示。C语言程序设计案例教程大连理工大学出版社4.3二维数组的定义和引用4.3.1二维数组的定义a00a01a02a03

25、a04a10a11a12a13a14a20a21a22a23a24二维数组在定义时也可以对各个元素初始化,例如:二维数组在定义时也可以对各个元素初始化,例如:Int a35=1,2,3,4,5,6,7,8,9, 10,11,12,13,14,15 ;初初始始化化的的数数据据按按先先排排列列行行再再排排列列列列的的顺顺序序为为每每一一个个元元素素赋赋值值,赋值的结果如下表所示。赋值的结果如下表所示。C语言程序设计案例教程大连理工大学出版社4.3二维数组的定义和引用4.3.1二维数组的定义也可以用大括号来划分初始值,例如:也可以用大括号来划分初始值,例如: int a35=1,2,3,4,5,6,

26、7,8 ;其其中中1,2,3,4,5对对a0数数组组赋赋初初始始值值,6对对a1数数组组赋赋初初始始值值,7,8对对a2数数组组赋赋初初始始值值,赋赋值值的的结结果果如如下下表表所示。所示。 a00=1a01=2a02=3a03=4a04=5a10=6a11=7a12=8a13=9a14=10a20=11a21=0a22=0a23=0a24=0C语言程序设计案例教程大连理工大学出版社4.3二维数组的定义和引用4.3.1二维数组的定义a00=1a01=2a02=3a03=4a04=5a10=6a11=0a12=0a13=0a14=0a20=7a21=8a22=0a23=0a24=0在在明明确确了

27、了括括号号的的对对数数后后,数数组组的的第第1维维可可以以不不写写,但但第第2维不能不写,例如:维不能不写,例如:int a 5=1,2,3,4,5,6,7,8 ;系统也会知道第系统也会知道第1维是维是3,等价于:,等价于:Int a35=1,2,3,4,5,6,7,8 ;C语言程序设计案例教程大连理工大学出版社4.3二维数组的定义和引用4.3.1二维数组的定义二二维维数数组组的的数数值值数数组组被被广广泛泛应应用用于于数数学学的的矩矩阵阵计计算算中中,二二维数组的字符数组可用来存储一组字符串,例如:维数组的字符数组可用来存储一组字符串,例如:char s38= one,two,three ;

28、其其中中,s0,s1,s2都都是是一一个个8个个字字符符的的一一维维字字符符数数组组,分分别别存存储储one、two、three字字符符串串,赋赋值值的的结果如下表所示。结果如下表所示。S00ne0S1two0S2three0C语言程序设计案例教程大连理工大学出版社4.3二维数组的定义和引用1.二维数组元素的表示形式:二维数组元素的表示形式:数组名数组名下标下标下标下标例如:例如:a23下标可以是整型表达式,如下标可以是整型表达式,如a2-12*2-1数组元素可以出现在表达式中,也可以被赋值。数组元素可以出现在表达式中,也可以被赋值。例如:例如:b12=a23/2在在使使用用数数组组元元素素时

29、时,应应该该注注意意下下标标值值应应在在已已定定义义的的数数组组大大小的范围内。小的范围内。4.3.2 4.3.2 二维数组的引用二维数组的引用C语言程序设计案例教程大连理工大学出版社4.3二维数组的定义和引用4.3.2二维数组的引用2.二维数组元素引用的程序实例二维数组元素引用的程序实例 【例例4.4】将一个二维数组行和列元素互换,存到另一个二维数组中。例如将一个二维数组行和列元素互换,存到另一个二维数组中。例如 1 2 3 1 4a= 4 5 6 b= 2 5 3 6/*源文件名:源文件名:Li4_4.c功能:将一个二维数组行和列元素互换,存到另一个二维数组中。功能:将一个二维数组行和列元

30、素互换,存到另一个二维数组中。*/C语言程序设计案例教程大连理工大学出版社4.3二维数组的定义和引用4.3.2二维数组的引用#include void main()int a23=1,2,3,4,5,6 ; /*定义定义a二维数组二维数组*/int b32,i,j ; /*定义定义b二维数组二维数组*/printf(数组数组a:n) ;for (i=0;i=1;i+) for (j=0;j=2;j+) printf(%5d,aij) ; /*输出输出a二维数组二维数组*/ bji=aij ; /*a数组行和列元素互换,存到数组行和列元素互换,存到b数组数组*/ C语言程序设计案例教程大连理工大

31、学出版社4.3二维数组的定义和引用4.3.2二维数组的引用printf(n) ;printf(数组数组b:n) ;for (i=0;i=2;i+) for(j=0;j=1;j+) printf(%5d,bij) ; /*输出输出b二维数组二维数组*/ printf(n) ; C语言程序设计案例教程大连理工大学出版社4.3二维数组的定义和引用4.3.2二维数组的引用程序运行后,屏幕显示:程序运行后,屏幕显示:数组数组a:1 2 34 5 6数组数组b:1 42 53 6C语言程序设计案例教程大连理工大学出版社4.3二维数组的定义和引用4.3.2二维数组的引用【例例4.5】定定义义一一个个整整数数

32、数数组组a56 ,用用随随机机函函数数值值填填写写每每个个单单元,找出最大值的单元,输出其行号及列号。元,找出最大值的单元,输出其行号及列号。/*源文件名:源文件名:Li4_5.c功能:找出二维数组中最大值的单元,输出其行号及列号。功能:找出二维数组中最大值的单元,输出其行号及列号。*/C语言程序设计案例教程大连理工大学出版社4.3二维数组的定义和引用4.3.2二维数组的引用 #include #include void main()int a56 ; /*定义定义a二维数组二维数组*/ int i,j,k,l,max ; /*定义定义i、j为循环变量,为循环变量,k、l为最大值所在的为最大值

33、所在的 行和列,行和列,max为最大值为最大值*/for(i=0;i5;i+) for(j=0;j6;j+) aij=rand()%100 ; /*给给a二维数组赋值二维数组赋值*/ max=a00 ; k=0 ; l=0 ; /*把把a00假设为最大值假设为最大值*/for(i=0;i5;i+) for(j=0;jmax) k=i ; l=j ; max=aij ; /*保存最大值及其行号保存最大值及其行号k及列号及列号l*/printf(数组是数组是n)for(i=0;i5;i+) ; for(j=0;j6;j+) printf(%4d,aij) ; /*输出输出a二维数组的值二维数组的值

34、*/printf(n) ; printf(最大值是最大值是a%d%d=%dn,k,l,max) ;C语言程序设计案例教程大连理工大学出版社4.3二维数组的定义和引用4.3.2二维数组的引用程序运行后,屏幕显示:程序运行后,屏幕显示:数组是数组是 52 65 2 88 53 52 52 65 2 88 53 52 95 46 65 14 85 41 95 46 65 14 85 41 35 35 27 47 74 14 35 35 27 47 74 14 59 91 26 27 51 59 59 91 26 27 51 59 83 56 12 40 32 49 83 56 12 40 32 49

35、最大值是最大值是a10= 95a10= 95C语言程序设计案例教程大连理工大学出版社任务任务3将小组学生按条件筛选将小组学生按条件筛选辅辅导导员员张张老老师师在在使使用用小小王王设设计计的的程程序序时时,发发现现他他要要对对小小组组学学生生的的英英文文姓姓名名按按照照字字典典的的顺顺序序排排列列输输出出它它们们,故故张张老老师师找找来来小小王王同同学学,说说明明了了需需求求,小小王王根根据据张张老老师师的的需需求求,参参考考了了相相关关的的资资料料,完完善善了了原原来来的的程程序序,帮帮助助张张老老师师解解决决了了该问题。该问题。 /* /* 功能:将小组学生的英文姓名按字典的顺序排列功能:将

36、小组学生的英文姓名按字典的顺序排列 * */ /#include #include #include #include void main()void main()C语言程序设计案例教程大连理工大学出版社任务任务3将小组学生按条件筛选将小组学生按条件筛选 char char names520,tmp20 names520,tmp20 ; ; /*/*定定义义字字符符数数组组wordswords和和临临时时变变量量tmp*/tmp*/int i,j ;int i,j ;for(i=0;i5;i+)for(i=0;i5;i+) printf( printf(输入第输入第%d%d个学生的英文姓名:个

37、学生的英文姓名:,i+1) ;,i+1) ; gets(namesi); /* gets(namesi); /*从键盘上输入学生的英文姓名从键盘上输入学生的英文姓名* */ / for(i=0;i4;i+)for(i=0;i4;i+)for(j=i+1;j5;j+)for(j=i+1;j0) if(strcmp(namesi,namesj)0) strcpy(tmp,namesi) ; strcpy(tmp,namesi) ; strcpy(namesi,namesj) ; strcpy(namesi,namesj) ; strcpy(namesi,tmp) ; /* strcpy(names

38、i,tmp) ; /*交换交换namesinamesi与与namesj*/namesj*/ C语言程序设计案例教程大连理工大学出版社任务任务3将小组学生按条件筛选将小组学生按条件筛选puts(puts(字典排序的学生英文姓名字典排序的学生英文姓名) ;) ; for(i=0;i5;i+) puts(namesi); for(i=0;i5;i+) puts(namesi); 设设学学生生的的英英文文姓姓名名存存储储在在names520names520的的字字符符数数组组中中,排排序序方方法法按按比比较较法法进进行行,这这里里比比较较的的是是学学生生的的英英文文姓姓名名字字符符串串的的大大小小。输

39、输入入第第1 1个个学学生生的的英英文文姓姓名名:lilylily输入第输入第2 2个学生的英文姓名:个学生的英文姓名:lucylucy输入第输入第3 3个学生的英文姓名:个学生的英文姓名:katekate输入第输入第4 4个学生的英文姓名:个学生的英文姓名:tomtom输入第输入第5 5个学生的英文姓名:个学生的英文姓名:tonytony字典排序的学生英文姓名字典排序的学生英文姓名lilylilylucy lucy katekatetomtomtonytonyC语言程序设计案例教程大连理工大学出版社任务任务3将小组学生按条件筛选将小组学生按条件筛选输入第输入第1 1个学生的英文姓名:个学生的

40、英文姓名:lilylily输入第输入第2 2个学生的英文姓名:个学生的英文姓名:lucylucy输入第输入第3 3个学生的英文姓名:个学生的英文姓名:katekate输入第输入第4 4个学生的英文姓名:个学生的英文姓名:tomtom输入第输入第5 5个学生的英文姓名:个学生的英文姓名:tonytony字典排序的学生英文姓名字典排序的学生英文姓名lilylilylucy lucy katekatetomtomtonytony编译、连接、和运行程序。程序运行后,屏幕显示编译、连接、和运行程序。程序运行后,屏幕显示: C语言程序设计案例教程大连理工大学出版社任务任务3将小组学生按条件筛选将小组学生按

41、条件筛选要要完完成成上上面面的的任任务务,小小王王必必须须要要熟熟练练掌掌握握数数组组的的基基本本概概念念,熟熟练练掌掌握握字字符符数数组组的的定定义义、赋赋值值,熟熟练练掌掌握握数数组组的的输输入入和和输输出出方方法法, , 字字符符串串和和字字符符数数组组的的不不同同特特点点,掌掌握握数数组的排序、查询等基本操作方法。组的排序、查询等基本操作方法。C语言程序设计案例教程大连理工大学出版社4.4字符数组和字符串一一维维字字符符数数组组是是charchar型型的的数数组组,因因为为它它的的每每一一个个元元素素是是一一个个charchar型型变变量量,可可以以用用来来存存放放字字符符串串,因因此

42、此比比较较特特别别,例例如如:char char a5 a5 ; ;定定义义了了一一个个字字符符数数组组,它它有有a0, a0, a1, a1, a2, a2, a3, a4a3, a4共共5 5个元素,可以为它们赋值,例如:个元素,可以为它们赋值,例如:a0= a0= H H ; ; a1= a1= e e ; ; a2= a2= l l ; ; a3= a3= l l ; ; a4= a4= o o ; ;也也可可以以在在定定义义时时就就对对各各个个元元素素赋赋值值,例例如如:char a5=char a5=H H, , e e, , l l, , l l, , o o ; ;4.4.1

43、4.4.1 一维字符数组一维字符数组C语言程序设计案例教程大连理工大学出版社4.4字符数组和字符串字字符符串串是是一一组组字字符符,这这些些字字符符在在内内存存中中连连续续分分布布,在在最最后后一一个个字字节节单单元元中中用用00表表示示结结束束,这这种种结结构构与与字字符符数数组组十十分分相似,实际上字符数组可以用来表示和存储字符串。例如:相似,实际上字符数组可以用来表示和存储字符串。例如:char b6=Hello ;char b6=Hello ;char char b6=b6=H H, , e e, , l l, , l l, , o o, , 00 ; ;以上两种定义方法是完全等价的。

44、以上两种定义方法是完全等价的。4.4.2 4.4.2 一维字符数组与字符串一维字符数组与字符串C语言程序设计案例教程大连理工大学出版社4.4字符数组和字符串1.1.字字符符数数组组元元素素的的引引用用方方式式和和一一维维数数组组元元素素的的引引用用方方式式相相同数组名同数组名 下标下标 下标可以是整型常量或整型表达式。下标可以是整型常量或整型表达式。例如例如: a0=a2*3+4: a0=a2*3+42.2.字符数组元素引用的程序实例字符数组元素引用的程序实例 【例例4.64.6】输出一个字符串。输出一个字符串。 /* /*源文件名:源文件名:Li4_6.cLi4_6.c 功能:用字符数组输出

45、一个字符串。功能:用字符数组输出一个字符串。* */ /4.4.3 4.4.3 字符数组的引用字符数组的引用C语言程序设计案例教程大连理工大学出版社4.4字符数组和字符串4.4.3字符数组的引用#include #include void main()void main() char char c10=c10=I I, , , ,a a, ,m m, , , ,a a, , , ,b b, ,o o, , y y ; /* ; /*定义定义c c字符数组并赋初值字符数组并赋初值* */ / int i; int i; for(i=0;i10;i+) for(i=0;i10;i+) printf

46、(%c,ci) printf(%c,ci) ; ; /*/*输输出出字字符符数数组组c c的的值值* */ / printf(n) ; printf(n) ; I am a boy程序运行后,屏幕显示:程序运行后,屏幕显示:C语言程序设计案例教程大连理工大学出版社gets是用来输入字符串的函数,使用方法是:是用来输入字符串的函数,使用方法是: gets(字符数组字符数组); gets()函函数数从从输输入入流流中中读读取取一一行行字字符符,一一直直读读到到n,但但不不包包括括n字字符符,最最后后在在末末尾尾自自动动加加上上 0 的的结结束束标标志志。如如果果字字符符串串的的长长度度超超过过字字

47、符符数数组组的的容容量量,C程程序序不不会会自自动动停停止止读读取取字字符符,程程序序设设计计人人员员应应设设法法保保证证读读取取的的字字符符数数不不要要超超过过字字符符数数组组的的容容量量,不不然然数数组组越越界界会会带来预想不到的错误。带来预想不到的错误。4.4字符数组和字符串4.4.4 4.4.4 字符串输入输出函数字符串输入输出函数C语言程序设计案例教程大连理工大学出版社puts函数是用来输出字符串,使用方法是:函数是用来输出字符串,使用方法是:puts(字符数组字符数组);puts ()输出一个字符串,之后输出()输出一个字符串,之后输出 n 换行。换行。4.4字符数组和字符串4.4

48、.4字符串输入输出函数【例例4.7】用用gets()函数读取字符串并用()函数读取字符串并用puts()函数输出字符串。()函数输出字符串。/*源文件名:源文件名:Li4_7.c功能:用功能:用gets()函数读取字符串并用()函数读取字符串并用puts()函数输出()函数输出*/C语言程序设计案例教程大连理工大学出版社4.4字符数组和字符串4.4.4字符串输入输出函数#include void main()char s18 ; /*定义定义s字符数组的初值字符数组的初值*/ printf(输入字符串输入字符串) ; gets(s) ; /*读取字符串读取字符串*/ puts(s) ; /*输

49、出字符串输出字符串*/ printf(读取的字符串是读取的字符串是%sn,s) ; /*输出输出s字符数组的值字符数组的值*/ 输入字符串输入字符串How are you ? How are you ?读取的字符串是读取的字符串是How are you ?程序运行后,屏幕显示:程序运行后,屏幕显示:C语言程序设计案例教程大连理工大学出版社4.4字符数组和字符串字字符符串串在在程程序序中中大大量量用用到到,关关于于字字符符串串有有一一些些常常用用的的函函数数,这这些些函函数数在在string.hstring.h头头文文件件中中说说明明,在在使使用用时时程程序序的的开开始部分要包含下面语句:始部分

50、要包含下面语句:#include #include 4.4.5 4.4.5 常用字符串函数常用字符串函数C语言程序设计案例教程大连理工大学出版社4.4字符数组和字符串4.4.5常用字符串函数strlenstrlen意意思思是是string string lengthlength。strlenstrlen函函数数用用来来测测试试字字符符串串的的长长度度,即即从从第第一一个个字字符符开开始始一一直直到到00之之前前的的一一个个字字符的总字符数,方法是:符的总字符数,方法是:strlen(strlen(字符数组或字符串字符数组或字符串) ;) ;该函数返回一个整数表示字符串的长度,例如:该函数返回一

51、个整数表示字符串的长度,例如:strlen(How) ; strlen(How) ; 值为值为3 3strlen(How about?) ; strlen(How about?) ; 值为值为1010strlen(Cstrlen(C语言语言) ; ) ; 值为值为5 5,一个汉字占两个字节,一个汉字占两个字节1.Strlen1.Strlen函数函数C语言程序设计案例教程大连理工大学出版社4.4字符数组和字符串4.4.5常用字符串函数strcpystrcpy意意思思是是string string copycopy。strcpystrcpy函函数数把把一一个个字字符符串串或或字符数组复制到另一个字

52、符数组中,方法是:字符数组复制到另一个字符数组中,方法是:strcpy(strcpy(字符数组,字符数组或字符串字符数组,字符数组或字符串) ;) ;例如:例如: char s18,t18 ;char s18,t18 ; strcpy(s, Hello) ; /*s strcpy(s, Hello) ; /*s数组中存储了数组中存储了2.Strcpy2.Strcpy函数函数C语言程序设计案例教程大连理工大学出版社Hello*/Hello*/ strcpy(t,s) strcpy(t,s) ; ; /*t/*t数数组组中中也也存储了存储了Hello*/Hello*/在在字字符符串串的的使使用用中

53、中千千万万不不能能把把一一个个字字符符串串直直接接赋赋值值给给另另外外一个字符数组,例如以下语句是错误的:一个字符数组,例如以下语句是错误的:char s=Hello ;char s=Hello ;char t10 ;char t10 ; t=s ; /* t=s ; /*错误!应该是错误!应该是strcpy(t,s) ;*/strcpy(t,s) ;*/4.4字符数组和字符串4.4.5常用字符串函数C语言程序设计案例教程大连理工大学出版社4.4字符数组和字符串4.4.5常用字符串函数在在使使用用strcpystrcpy时时一一定定要要保保证证存存储储字字符符串串的的数数组组空空间间要要足足够

54、够大大,能能容容纳纳所所复复制制的的字字符符串串,不不然然也也会会导导致致越越界界,例例如如下下面的语句是不合适的:面的语句是不合适的:char s5 ;char s5 ;strcpy(s, 123456) ;strcpy(s, 123456) ;strcpystrcpy的的作作用用就就是是把把字字符符串串中中的的字字符符连连同同00一一起起复复制制给给另外一个字符数组。另外一个字符数组。 C语言程序设计案例教程大连理工大学出版社4.4字符数组和字符串4.4.5常用字符串函数strcatstrcat意意思思是是string string catenatecatenate。strcatstrca

55、t函函数数完完成成两两个个字字符串的连接,方法是:符串的连接,方法是:strcat(strcat(字符数组,字符数组或字符串字符数组,字符数组或字符串) ;) ;执执行行后后会会把把另另一一个个字字符符串串连连接接在在已已有有字字符符串串后后面面,形形成成一一个更长的字符串,例如:个更长的字符串,例如:char s18 ;char s18 ;strcpy(s, How) ; /*sstrcpy(s, How) ; /*s为为How*/How*/3.Strcat3.Strcat函数函数C语言程序设计案例教程大连理工大学出版社4.4字符数组和字符串4.4.5常用字符串函数strcat(s, are

56、) ; /*sstrcat(s, are) ; /*s为为How are*/How are*/strcat(s, strcat(s, you?) you?) ; ; /*s/*s为为How How are are you?*/you?*/在在使使用用strcatstrcat函函数数时时一一定定要要保保证证存存储储字字符符串串的的数数组组空空间间要要足足够够大大,能能容容纳纳所所连连接接后后的的字字符符串串,不不然然也也会会导导致致越越界界,例如下面的语句是不合适的:例如下面的语句是不合适的:char s=How ;char s=How ;strcat(s, strcat(s, “areare”

57、) ) ; ; /*s/*s只只有有4 4个个字字节节的的空空间,不能容纳间,不能容纳How are*/How are*/C语言程序设计案例教程大连理工大学出版社4.4字符数组和字符串4.4.5常用字符串函数strcmpstrcmp函数是用来比较两个字符串的大小的,方法是:函数是用来比较两个字符串的大小的,方法是:strcmp(strcmp(字符串字符串1 1,字符串,字符串2) ;2) ;当字符串当字符串11字符串字符串2 2时,返回一个正整数;时,返回一个正整数;当字符串当字符串1=1=字符串字符串2 2时,返回时,返回0 0;当字符串当字符串11字符串字符串2 2时,返回一个负整数。时,

58、返回一个负整数。两两个个字字符符串串的的比比较较是是按按字字母母的的ASCIIASCII码码或或汉汉字字内内码码的的值值来来比比较较的的,程程序序把把字字符符串串在在内内存存中中的的每每一一个个字字节节看看成成是是一一个个无无符符号号二二进进制制数数,比比较较在在两两个个字字符符串串的的字字节节之之间间进进行行,比比较较规规则如下:则如下:C语言程序设计案例教程大连理工大学出版社4.4字符数组和字符串4.4.5常用字符串函数比比较较两两个个字字符符串串的的字字节节值值,如如两两个个对对应应字字节节一一样样,则则继续比较下一个字节。继续比较下一个字节。如两个对应的字节不同,则字节值大的字符串大。

59、如两个对应的字节不同,则字节值大的字符串大。如如比比较较时时其其中中一一个个字字符符串串结结束束,字字节节值值都都一一样样,则则字字符串长的那一个大。符串长的那一个大。两两个个字字符符串串相相等等当当而而且且仅仅当当它它们们两两个个一一样样长长,而而且且每每一个字节值完全相等。一个字节值完全相等。根据根据ASCIIASCII码规则,字符比较一般有以下原则:码规则,字符比较一般有以下原则:空空格格 0 0 1 1 9 9 A A B B Z Z a a b b z z smax则则用用s替替换换smax,不不然然smax保保持持不不变变,这这样样当当所所有有的的字字符符串串输输入入完完毕毕后后,

60、smax中存储的就是最大字符串。中存储的就是最大字符串。How are you ?读取的字符串是读取的字符串是How are you ?5.5.字符串函数应用字符串函数应用C语言程序设计案例教程大连理工大学出版社5.4字符数组和字符串5.4.5常用字符串函数#include #include void main()char smax80,s80 ; /*定义数组定义数组smax和数组和数组s*/strcpy(smax, ) ; /*设置数组设置数组smax为空,也可以设为空,也可以设smax0=0*/do printf(输入字符串输入字符串:) ;gets(s) ; /*读取字符串读取字符串*

61、/ if(strcmp(s,smax)0) strcpy(smax,s) ; /*s数组比数组比smax数组大的话,把数组大的话,把s数组赋值个数组赋值个sma数组数组*/ while(s0!=0puts(最大的字符串是最大的字符串是) ; puts(smax) ; C语言程序设计案例教程大连理工大学出版社4.4字符数组和字符串4.4.5常用字符串函数程序运行后,屏幕显示:程序运行后,屏幕显示:输入字符串:输入字符串:How输入字符串:输入字符串:to输入字符串:输入字符串:compare输入字符串:输入字符串:strings输入字符串:输入字符串:最大的字符串是最大的字符串是toC语言程序设

62、计案例教程大连理工大学出版社4.4字符数组和字符串4.4.5常用字符串函数【例例4.9】输输入入一一个个字字符符串串,把把其其中中的的所所有有大大写写字字母母变变成成小小写字母,其余不变。写字母,其余不变。 /*源文件名:源文件名:Li4_9.c功能:输入一个字符串,把其中的所有大写字母变成小写字母,其余不变。功能:输入一个字符串,把其中的所有大写字母变成小写字母,其余不变。*/分分析析:输输入入的的字字符符串串为为s,逐逐个个去去考考察察它它的的每每一一个个字字符符si,i=0,1,strlen(s)-1,看看,看看si是否是大写,如是则把它转为小写,否则不变。是否是大写,如是则把它转为小写

63、,否则不变。 #include #include void main()char s80 ; /*定义定义s数组数组*/int i=0 ;printf(输入字符串输入字符串:) ;C语言程序设计案例教程大连理工大学出版社4.4字符数组和字符串4.4.5常用字符串函数gets(s) ; /*读取字符串读取字符串*/while(si) /*si=0时条件才为假时条件才为假*/ if(si= A&si=Z) si=si+32 ; /*把大写字母转化为小写字母把大写字母转化为小写字母*/i+;puts(变换后的字符串是变换后的字符串是) ; puts(s) ; 程序运行后,屏幕显示:程序运行后,屏幕显

64、示:输入字符串:输入字符串:To Learn C Program变换后的字符串是变换后的字符串是to learn c programC语言程序设计案例教程大连理工大学出版社4.5实例解析【例例4.10】输输入入一一个个字字符符串串,判判断断它它是是否否是是一一个个回回文文串串,所所谓谓的的回回文文串串是是指指这这个个字字符符串串从从左左到到右右及及从从右右到到左左的的字字母母排排列列是一样的,例如是一样的,例如pop,legel等。等。 /*源文件名:源文件名:Li4_10.c功能:输入一个字符串,判断它是否是一个回文串功能:输入一个字符串,判断它是否是一个回文串*/分分析析:判判断断一一个个

65、字字符符串串s左左右右顺顺序序是是否否一一样样,可可以以设设计计一一个个从从左左到到右右的的下下标标i,i=0,1,.,strlen(s)-1,同同时时设设计计一一个个从从右右到到左左的的下下标标j,j=strlen(s)-1,strlen(s)-2,1,0,每每次次比比较较si和和sj,如如si=sj,则则+i,-j,再再比比较较下下一一对对,如如si!=sj,则,则s肯定不是回文,如对所有的肯定不是回文,如对所有的ij,都有,都有si=sj,则,则s是回文。是回文。C语言程序设计案例教程大连理工大学出版社4.5实例解析#include #include void main()char s8

66、0 ; /*定义定义s数组数组*/int i=0 ,j=0;printf(输入字符串输入字符串:) ;gets(s) ; /*读取字符串读取字符串*/i=0 ; j=strlen(s)-1 ;while(i=j) puts(是回文是回文) ; C语言程序设计案例教程大连理工大学出版社4.5实例解析【例例4.11】输入一个日期,计算这一天是当年的第几天。输入一个日期,计算这一天是当年的第几天。 源文件名:源文件名:Li4_11.c功能:输入一个日期,计算这一天是当年的第几天。功能:输入一个日期,计算这一天是当年的第几天。*/分分析析:设设输输入入的的日日期期是是y年年、m月月、d日日,这这一一日

67、日期期首首先先要要合合法法,其其次次才才能能计计算算是是该该年年的的第第几几天天(例例如如2008-2-19为为第第50天天),计计算算是是第第几几天天可可以以根根据据m是是第第几几月月来来计计算算,它它包包含含1,2,m-1月月的的天天数数及及当当月月的的d天天。注注意意如如果果是是闰闰年年的的话话,2月份天数是月份天数是29。C语言程序设计案例教程大连理工大学出版社5.5实例解析#include void main()int i,y,m,d,days,k ; /*y为年,为年,m为月,为月,d为日,为日,days为总天数为总天数*/int months12=31.28,31,30,31,3

68、0,31,31,30,31,30,31 ;printf(输入日期输入日期(Y-M-D):) ;scanf(%d-%d-%d,&y,&m,&d) ; /*从键盘上输入年、月、日从键盘上输入年、月、日*/if(y0&m=1&m=1&d=monthsm-1) C语言程序设计案例教程大连理工大学出版社4.5实例解析程序运行后,屏幕显示:程序运行后,屏幕显示: days=d ; for(k=0;km-1;k+) days=days+monthsk ; /*累计累计1到到m-1月份的天数月份的天数*/ printf(%d-%d-%d是当年第是当年第%d天天n,y,m,d,days) ; /*输出天数输出天

69、数*/else puts(无效日期无效日期!) ;else puts(无效日期无效日期!) ; 输入日期输入日期(Y-M-D):2007-10-62007-10-6是当年第是当年第279天天C语言程序设计案例教程大连理工大学出版社4.5实例解析【例例4.12】输输入入5个个英英文文单单词词(长长度度不不超超过过20个个字字符符),按按字典顺序排列输出它们。字典顺序排列输出它们。/* 源文件名:源文件名:Li4_12.c 功能:输入功能:输入5个英文单词,按字典顺序排列输出它们。个英文单词,按字典顺序排列输出它们。*/分分析析:设设单单词词存存储储在在words520的的字字符符数数组组中中,排

70、排序序方方法法按按比比较较法法进进行行,这这里比较的是单词字符串的大小。里比较的是单词字符串的大小。C语言程序设计案例教程大连理工大学出版社4.5实例解析#include #include void main()char words520,tmp20 ; /*定义字符数组定义字符数组words和临时变量和临时变量tmp*/int i,j ;for(i=0;i5;i+) printf(输入第输入第%d个单词个单词:,i+1) ; gets(wordsi); /*从键盘上输入单词从键盘上输入单词*/for(i=0;i4;i+)for(j=i+1;j0) strcpy(tmp,wordsi) ; s

71、trcpy(wordsi,wordsj) ; strcpy(wordsi,tmp) ; /*交换交换wordsi与与wordsj*/ puts(字典排序单词字典排序单词) ; for(i=0;i5;i+) puts(wordsi); C语言程序设计案例教程大连理工大学出版社4.5实例解析程序运行后,屏幕显示:程序运行后,屏幕显示: 输入第一个单词:输入第一个单词:art输入第一个单词:输入第一个单词:about输入第一个单词:输入第一个单词:like输入第一个单词:输入第一个单词:music输入第一个单词:输入第一个单词:and字典排序单词字典排序单词aboutandartlikemusicC

72、语言程序设计案例教程大连理工大学出版社4.5实例解析【例例4.13】数数字字中中有有一一个个很很有有趣趣的的现现象象,任任何何一一个个4位位整整数数n,只只要要它它的的4位位数数字字不不完完全全相相同同,把把它它的的4位位数数字字从从大大到到小小排排序序生生成成另另外外一一个个数数p,再再把把它它的的4位位数数从从小小到到大大排排序序生生成成另另外外一一个个数数q,计计算算p与与q的的差差r=p-q,那那么么r可可能能等等于于6174。如如果果r不不是是6174,则则再再把把r看看成成4位位数数(不不足足高高位位补补0),重重复复同同样样的的操操作作,最最终终r必必等等于于6174,编编程程序

73、序验验证证这这一事实。一事实。C语言程序设计案例教程大连理工大学出版社4.5实例解析/*/*源文件名:源文件名:Li4_13.cLi4_13.c功功能能:任任何何一一个个4 4位位整整数数n,n,只只要要它它的的4 4位位数数字字不不完完全全相相同同,把把它它的的4 4位位数数字字从从大大到到小小排排序序生生成成另另外外一一个个数数p p,再再把把它它的的4 4位位数数字字从从小小到到大大排排序序生生成成另另外外一一个个数数q q,计计算算p p与与q q的的差差r=p-qr=p-q,那那么么r r可可能能等等于于61746174。如如果果r r不不是是61746174,则则再再把把r r看看

74、成成4 4位数(不足高位补位数(不足高位补0 0),重复同样的操作,最终),重复同样的操作,最终r r必等于必等于61746174。* */ /分分析析:设设计计一一个个d4d4的的整整数数数数组组,负负责责分分解解每每一一个个数数字字,把把这这个个数数组组从从大大到到小小排序,则排序,则p p的值为:的值为:p=d0*1000+d1*100+d2*10+d3 ;p=d0*1000+d1*100+d2*10+d3 ;q=d3*1000+d2*100+d1*10+d0 ;q=d3*1000+d2*100+d1*10+d0 ;C语言程序设计案例教程大连理工大学出版社4.5实例解析#include

75、#include void main()void main() int n,p,q,r,d4 ; /*int n,p,q,r,d4 ; /*定义定义d d数组存储每个数字数组存储每个数字* */ /int i,j,m ;int i,j,m ;printf(printf(输入一个输入一个4 4位数位数:) ;:) ;scanf(%d,&n) ; /*scanf(%d,&n) ; /*键盘上输入一个键盘上输入一个4 4位整数位整数* */ /m=0 ;m=0 ;dodo for(i=0;i4;i+) for(i=0;i4;i+) di=n%10 ; n=n/10 ; /* di=n%10 ; n=

76、n/10 ; /*分解各位数字到分解各位数字到d0,d1,d2,d3*/ d0,d1,d2,d3*/ for(i=0;i3;i+)for(i=0;i3;i+) for(j=i+1;j4;j+) for(j=i+1;j4;j+)C语言程序设计案例教程大连理工大学出版社4.5实例解析 if(aiaj) if(aiaj) r=di ; di=dj ; dj=r ; /* r=di ; di=dj ; dj=r ; /*从大到小排序从大到小排序* */ / p=d0*1000+d1*100+d2*10+d3 ; p=d0*1000+d1*100+d2*10+d3 ;q=d3*1000+d2*100+d

77、1*10+d0 ;q=d3*1000+d2*100+d1*10+d0 ;r=p-q ;r=p-q ; if(r=0) if(r=0) printf(4printf(4位位数数字字不不能能完完全全相相同同!n) !n) ; ; break break ; ; /* /* r=0r=0表表示示4 4位位数数字字相同相同* */ / n=r ; n=r ;printf(printf(第第%2d%2d:%4d-%4d=%d n,+m,p,q,r) ; /* %4d-%4d=%d n,+m,p,q,r) ; /* 打印每一步打印每一步* */ / while(r!=6174) ; while(r!=61

78、74) ; C语言程序设计案例教程大连理工大学出版社4.5实例解析程序运行后,屏幕显示:程序运行后,屏幕显示: 输入一个输入一个4 4位数:位数:23242324第第1 1步:步:4322-2234=20884322-2234=2088第第2 2步:步:8820-0288=85328820-0288=8532第第3 3步:步:8532-2358=61748532-2358=6174C语言程序设计案例教程大连理工大学出版社小结所谓数组就是一组具有相同数据类型的数据的有序合。所谓数组就是一组具有相同数据类型的数据的有序合。一维数组的定义:一维数组的定义:类型说明符类型说明符 数组名常量表达式;数组名常量表达式;一维数组元素的引用:一维数组元素的引用:数组名数组名 下标下标 二维数组的定义:二维数组的定义:类型说明符类型说明符 数组名数组名 常量表达式常量表达式常量表达式常量表达式 ;二维数组元素的引用:二维数组元素的引用:数组名数组名 下标下标下标下标 常常用用字字符符串串函函数数:1.strlen1.strlen函函数数;2.strcpy2.strcpy函函数数;3.strcat3.strcat函数;函数;4.strcmp4.strcmp函数函数大连理工大学出版社

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号