在C语言中利用动态结构数组处理学生成绩表_第1页
在C语言中利用动态结构数组处理学生成绩表_第2页
在C语言中利用动态结构数组处理学生成绩表_第3页
在C语言中利用动态结构数组处理学生成绩表_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、在 C 语言中利用动态结构数组处理学生成绩表0 引言C语言拥有简单的数据类型即整型、浮点型和字符型,并且有简洁的格式转换形式 , 可以灵活处理不同数据,需要处理的数 据量比较大并且这些数据都属于同一数据类型时, 可以将它们定 义为一个数组,便于采用统一的名字进行管理和使用。然而,在 C语言中也拥有不足之处,就是在定义数组的同时必须指明数组 的大小,也就是可以存放数据的个数。 这个个数必须是一个常数, 这就导致了在定义数组之前必须弄清楚所要存放数据量的多少, 从而给出准确定义。 一旦定义的数组过大, 会造成存储空间的浪 费,影响程序执行的效率;反之,如果定义的数组太小,又不能 满足实际需要。 并

2、且一旦程序完成, 要改变数组的大小就必须修 改程序本身,导致程序通用性差。比如,要对一个学校各个班级 学生的成绩进行相应的统计, 由于各个班级人数不一样, 就会导 致每处理一个班级后都要再次修改程序,重新统计。在C语言中有没有一种办法可以将数组的长度定义为不定 长的动态数组, 可以根据实际数据的个数自由调整数组长度, 这 样既保证了数组够用, 也不会造成浪费呢?下面以对学生成绩表 进行统计计算为例,阐述使用动态数组处理这一类问题的方法。1 一维动态数组假定学校要计算的成绩只有一门, 比如只是为了统计期末各班数学成绩,在程序中可以定义定长数组 score100, 这样就能计算出每一个班级的平均分

3、和最大最小 值。程序段如下:int score10,average=0,max,min,i;for(i=0;i v 10;i+)scanf(%d,&scorei);max=score0;min=score0;for(i=0;i v10;i+)if (scorei max) max=scorei;if (scoreiv min) min=scorei;average=average+scorei;printf(max=%d,min=%d,average=%dn,max,min,avera ge/10) ;这样固然解决了成绩统计的问题, 可是并不是每一个班级都 有 100 人的,这样就会造成大量空

4、间浪费。其实,在 C 语言中提 供了可以根据自己需要来申请所需空间大小的内存空间动态分 配函数,利用这样的函数就可以为自己的数组申请到满足需要的 空间,从而也就解决了每个班级学生人数不同的问题 , 比如 malloc( )函数。 malloc( )是一个可以根据用户要求而分配内存 空间,这样就可以在分配内存空间之前设置变量用于保存学生人 数,然后根据输入的学生人数来分配内存空间, 保证了内存空间 够用而不浪费的原则。写程序段如下:int average=0,max,min,i,n;int *p;scanf(%d,&n);p=(int*)malloc(n*sizeof(int);if (p=NU

5、LL)printf(error);exit(0);for(i=0;i v n;i+)scanf(%d,&pi);max=p0;min=p0;for(i=0;i v n;i+)if (pi max) max=pi;if (pi v min) min=pi;average=average+pi;printf(max=%d,min=%d,average=%dn,max,min,average/n)2 二维动态数组用一维动态数组解决了不同班级的单科成绩求平均和最大 最小值的问题, 然而在现实生活中学校面对的更多不同班级的成 绩表,要求求取每个班级每一个同学的总分, 每一门课程的平均 分、最高分、最低分

6、等问题。比如,每一个学期结束,中小学都 要统计各个年级的班级之间不同科目的成绩情况, 每个班级也要 统计不同学生的成绩情况。 为了减少篇幅, 假设只需要计算每一 个同学的总分。在这样的情况下, 用一维动态数组就不能解决问题, 只能设 计使用二位动态数组。 假设每一个同学都有 5 门课, 用一个 n 行 6 列的动态二维数组,前 5 列用于存放学生的原始成绩,最后一 列用于存放计算所得的每一个学生的总分。为了在输入输出以及计算二维数组时表示直观, 我们将用于 指向动态存储空间的指针 P 定义为行指针的形式, 这样可以直接 用直观的 pij 的形式来表示成绩表中的每一个成绩。程 序段如下:int n,(*p)6;int i,j;scanf(%d,&n);p=(int*)malloc(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论