(C语言程序设计案例课件)项目四学生成绩的分组汇总.ppt
《(C语言程序设计案例课件)项目四学生成绩的分组汇总.ppt》由会员分享,可在线阅读,更多相关《(C语言程序设计案例课件)项目四学生成绩的分组汇总.ppt(85页珍藏版)》请在三一文库上搜索。
1、大连理工大学出版社,C语言程序设计案例教程,项目四 学生成绩的分组汇总,教学目的: 通过本项目的学习,要求能熟练掌握数组的基本概念,熟练掌握一维数组、二维数组和字符数组的定义、赋值,熟练掌握数组的输入和输出方法,掌握字符串和字符数组的不同特点,掌握数组的排序、查询等基本操作方法。学习数组知识为后续项目做好准备,也为后续面向对象语言课程的学习打下基础 。,项目四 学生成绩的分组汇总,教学内容,数组的C程序引例:通过简单的数组C程序来引入章节的内容,一维数组的定义和引用,二维数组的定义和引用,字符数组与字符串,综合实训:通过具体的案例来巩固数组的知识点,项目四 学生成绩的分组汇总,重点:,()数组
2、的排序,()一维数组的定义与应用,难点 : 、一维数组的定义与应用 、数组的排序,(3)二维数组的定义与应用,(4)字符数组与字符串的应用,重点和难点,项目四 学生成绩的分组汇总,1)问题情景与实现,辅导员张老师在使用小王设计的程序时,发现他要对一个小组学生成绩的总分及平均分进行计算,故张老师找来小王同学,说明了需求,小王根据张老师的需求,参考了相关的资料,完善了原来的程序,帮助张老师解决了该问题。,项目四 学生成绩的分组汇总,实现: /* 功能:一个小组学生成绩的总分及平均分的计算 */ #include #define MAX 1000 void main() int i; float s
3、um=0.0,ave; int count; int aMAX; printf(“请输入小组的人数:”); scanf(“%d“,项目四 学生成绩的分组汇总, for(i=0;icount;i+) sum=sum+ai; ave=sum/count; printf(“该小组学生成绩的总分是%f分t平均分是%f分n“,sum,ave); ,编译、连接、和运行程序。程序运行后,屏幕显示:,项目四 学生成绩的分组汇总,请输入小组的人数:10 请输入小组的学生成绩:60 70 80 90 100 90 80 70 60 100 该小组学生成绩的总分是800.000000分 平均分是80.000000分
4、,2)相关知识,要完成上面的任务,小王必须要熟练掌握数组的基本概念,熟练掌握一维数组的定义、赋值,熟练掌握数组的输入和输出方法。,4.1 数组引例,【例4.1】一个简单的C程序数组引例 /* 源文件名:Li4_1.c 功能:从键盘输入一个不长于20个字符的字符串,按与输入顺序相反的次序输出此字符串,例如输入dimension,输出noisnemid。 */ #include void main() char ch,s20; /*定义s字符数组,它最多可以容纳20个字符*/ printf(“输入字符串:“); /*打印输出一串字符串*/ i=0 /*i为统计字符个数*/ do ch=getcha
5、r(); /*从键盘上输入字符*/,4.1 数组引例,I f(ch!=n) si+=ch; /*读取的字符存在s0,s1*/ while(i=0;-i) putchar(si) ; /*反向输出这些字符*/ putchar(n); ,编译、连接、和运行程序。程序运行后,屏幕显示:,输入字符串:dimension 反向顺序:noisnemid,一个班学生的学习成绩或一行文字等这些数据的特点是: 具有相同的数据类型 使用过程中需要保留原始数据 C语言为这些数据提供了一种构造数据类型:数组。所谓数组就是一组具有相同数据类型的数据的有序集合 。,4.2 一维数组的定义和引用,4.2.1 一维数组的定义
6、,一维数组的定义方法一般为: 类型说明符 数组名常量表达式 其中类型可以是任何的C语言数据类型,例如char,int,long,float,double等,数组名与普通变量名一样,常量表达式是数组在内存中的单元数,在定义时必须是一个常数,不能是变量,数组的每个单元占的字节数就是对应类型占的字节数,显然数组占的总字节数是: 常量表达式 * sizeof(类型),4.2 一维数组的定义和引用 4.2.1 一维数组的定义,1.一般定义,例如: char s20 ; /*定义能存储20个字符的数组*/ int n20 ; /*定义能存储20个整数的数组*/ float f20 ; /*定义能存储20个
7、float数的数组*/ 数组定义中常见的错误举例说明如下: float a0 ; /*数组大小为0没有意义*/ int b(2) ; /*不能使用圆括号*/ int k,ak ; /*不能用变量说明数组大小*/,4.2 一维数组的定义和引用 4.2.1 一维数组的定义,4.2 一维数组的定义和引用 4.2.1 一维数组的定义,数组在定义时还可以同时为各个单元设置初始值。 定义时给所有元素赋值,例如: char s5= a,b, c,d,e ; 定义数组s5,并且设置 s0=a,s1=b, s2=c,s3=d,s4=e,2.定义及初始化,4.2 一维数组的定义和引用 4.2.1 一维数组的定义,
8、定义时给部分元素赋值,例如: 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 ;是等价的。,4.2 一维数组的定义和引用,1. 一维数组元素的引用方式 数组名下标 下标可以是整型常量或整型表达式。 例如: a0=a5+a7-a2*3 2.一维数组元素引用的程序实例,【例4.2】用数组来处理,求解Fibonacci数列。 /* 源文件名:Li4_2.c 功能:求解F
9、ibonacci数列前20项的值。 */,4.2.2 一维数组的引用,4.2 一维数组的定义和引用 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;i20;i+) if(i%5=0) printf(n) ; /*用来控制换行,每行输出5个数据*/ printf(“%12d“,fi); /*输出f数组的值*/ ,4.2 一维数组的定义和引用 4.2.2 一维数组的引用,程序运行后,屏
10、幕显示,1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765,4.2 一维数组的定义和引用 4.2.2 一维数组的引用,【例4.3】用随机函数产生10个0100之内的整数,按从小到大排列输出。,/* 源文件名:Li4_3.c 功能:用随机函数产生10个0100之内的整数,按从小到大排列输出 */ 使数组从小到大排序的规则如下:,4.2 一维数组的定义和引用 4.2.2 一维数组的引用,设数组为a0,a1,an-1,构造i循环从0,1,n-2变化,构造j循环从i+1,i+2,n-1变化,即ji。 对于任何一个ai,如
11、果aiaj,表明前面有一个元素ai比它后面的元素aj大,ai应该在后面,aj应该在前面,交换ai与aj。 对于任何一个ai,都循环一次j,j循环完成后ai必不大于ai+1,an-1,重复i循环,i循环结束后数组从小到大排序。,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()%100 ; /*
12、给a数组随机赋0100之内的整数*/ printf(“排序之前的数据“) ; for(i=0;i10;i+) printf(“%d “,ai) ; /*输出a数组的值,未排序*/ putchar(n) ; for(i=0;i9;i+),4.2 一维数组的定义和引用 4.2.2 一维数组的引用,程序运行后,屏幕显示:,for(j=i+1;jaj) k=ai ; ai=aj ; aj=k ; /*数组排序*/ for(i=0;i10;i+) printf(“%d “,ai) ; /*输出a数组的值,已排序*/ putchar(n) ; ,34 45 26 15 76 84 98 29 67 11
13、11 15 26 29 34 45 67 76 84 98,任务2 求每个小组学生成绩的总分及平均分,1)问题情景与实现,辅导员张老师在使用小王设计的程序时,发现他要对多个小组学生成绩的总分及平均分进行计算,故张老师找来小王同学,说明了需求,小王根据张老师的需求,参考了相关的资料,完善了原来的程序,帮助张老师解决了该问题。,任务2 求每个小组学生成绩的总分及平均分,/* 功能:多个小组学生成绩的总分及平均分的计算 */ #include #define MAX 1000 #define M 100 void main() int i,j; float sumM,aveM; int count;
14、 int group; int aMMAX; printf(“请输入小组的组数:”); scanf(“%d”,任务2 求每个小组学生成绩的总分及平均分,for(i=0;igroup;i+) for(j=0;jcount;j+) scanf(“%d”, ,任务2 求每个小组学生成绩的总分及平均分,编译、连接、和运行程序。程序运行后,屏幕显示:,请输入小组的组数:3 请输入小组的人数:10 请输入小组的学生成绩:60 70 80 90 100 90 80 70 60 100 60 70 80 70 80 70 60 70 60 80 60 70 70 80 100 80 70 70 60 90 第
15、1个小组学生成绩的总分是800.000000分 平均分是80.000000分 第2个小组学生成绩的总分是700.000000分 平均分是70.000000分 第3个小组学生成绩的总分是750.000000分 平均分是75.000000分,avei=sumi/count; for(i=0;igroup;i+) printf(“第%d个小组学生成绩的总分是%f分t平均分是%f分 n”,i+1,sumi,avei); ,任务2 求每个小组学生成绩的总分及平均分,要完成上面的任务,小王必须要熟练掌握数组的基本概念,熟练掌握二维数组的定义、赋值,熟练掌握数组的输入和输出方法。,2)相关知识,4.3 二维
16、数组的定义和引用,二维数组实际上就是一维数组的数组,即它的每一个一维元素都是一个一维数组,定义如下: 类型说明符 数组名常量表达式常量表达式 ; 例如: int a35 ;,4.3.1 二维数组的定义,4.3 二维数组的定义和引用 4.3.1 二维数组的定义,a是一个二维数组,其中a0,a1,a2每一个都是一维数组,它们各有5个元素,分别是: a00、a01、a02、a03、a04 a10、a11、a12、a13、a14 a20、a21、a22、a23、a24 其中aij(i=0,1,2,j=0,1,2,3,4)是一个整数单元,这个数组共有15个整数单元,它们在内存中的分布是先按行排列再按列排
17、列,a00是第1个元素,a10是第6个元素,a24是第15个元素,如下表所示。,4.3 二维数组的定义和引用 4.3.1 二维数组的定义,二维数组在定义时也可以对各个元素初始化,例如: Int a35=1,2,3,4,5,6,7,8,9, 10,11,12,13,14,15 ; 初始化的数据按先排列行再排列列的顺序为每一个元素赋值,赋值的结果如下表所示。,4.3 二维数组的定义和引用 4.3.1 二维数组的定义,也可以用大括号来划分初始值,例如: int a35=1,2,3,4,5,6,7,8 ; 其中1,2,3,4,5对a0数组赋初始值,6对a1数组赋初始值,7,8对a2数组赋初始值,赋值的
18、结果如下表所示。,4.3 二维数组的定义和引用 4.3.1 二维数组的定义,在明确了括号的对数后,数组的第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 ;,4.3 二维数组的定义和引用 4.3.1 二维数组的定义,二维数组的数值数组被广泛应用于数学的矩阵计算中,二维数组的字符数组可用来存储一组字符串,例如: char s38= “one“,“two“,“three“ ; 其中,s0,s1,s2都是一个8个字符的一维字符数组,分别存储“one“、“two“、“three
19、“字符串,赋值的结果如下表所示。,4.3 二维数组的定义和引用,1.二维数组元素的表示形式: 数组名下标下标 例如:a23 下标可以是整型表达式,如a2-12*2-1 数组元素可以出现在表达式中,也可以被赋值。 例如:b12=a23/2 在使用数组元素时,应该注意下标值应在已定义的数组大小的范围内。,4.3.2 二维数组的引用,4.3 二维数组的定义和引用 4.3.2 二维数组的引用,2.二维数组元素引用的程序实例,【例4.4】将一个二维数组行和列元素互换,存到另一个二维数组中。例如 1 2 3 1 4 a= 4 5 6 b= 2 5 3 6 /* 源文件名:Li4_4.c 功能:将一个二维数
20、组行和列元素互换,存到另一个二维数组中。 */,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数组*/ ,4.3 二维数组的定义和引用 4.3.2 二维数组的引用,printf(“n“) ; printf(
21、“数组b:n“) ; for (i=0;i=2;i+) for(j=0;j=1;j+) printf(“%5d“,bij) ; /*输出b二维数组*/ printf(“n“) ; ,4.3 二维数组的定义和引用 4.3.2 二维数组的引用,程序运行后,屏幕显示:,数组a: 1 2 3 4 5 6 数组b: 1 4 2 5 3 6,4.3 二维数组的定义和引用 4.3.2 二维数组的引用,【例4.5】定义一个整数数组a56 ,用随机函数值填写每个单元,找出最大值的单元,输出其行号及列号。,/* 源文件名:Li4_5.c 功能:找出二维数组中最大值的单元,输出其行号及列号。 */,4.3 二维数组
22、的定义和引用 4.3.2 二维数组的引用,#include #include void main() int a56 ; /*定义a二维数组*/ int i,j,k,l,max ; /*定义i、j为循环变量,k、l为最大值所在的 行和列,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;j6;j+),4.3 二维数组的定义和引用 4.3.2 二维数组的引用,if(aijmax) k=i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 案例 课件 项目 学生 成绩 分组 汇总
链接地址:https://www.31doc.com/p-2758627.html