单元任务一学生成绩计算程序设计_第1页
单元任务一学生成绩计算程序设计_第2页
单元任务一学生成绩计算程序设计_第3页
单元任务一学生成绩计算程序设计_第4页
单元任务一学生成绩计算程序设计_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

任务一:学生成绩计算程序设计单元三:数据与异常处理程序设计教学目标知识目标掌握数组的声明和创建掌握Java.util.Arrays类中的方法能力目标能够遍历一维数组能够使用Java.util.Arrays类对数组进行操作教学内容4任务陈述123知识准备任务实施任务拓展任务实训5任务描述:

对学生成绩进行统计计算,参加考试的有6名学生,考试成绩分别为94.5,89.0,79.5,64.5,81.5,73.5,计算考试的总分数并保存大于考试平均分的成绩信息,将信息存入数组HighScore中。运行结果如下图3-1所示:1.任务陈述2.知识准备intstu1=95;intstu2=89;intstu3=79;intstu4=64;intstu5=76;intstu6=88;……avg=(stu1+stu2+stu3+stu4+stu5…+stu30)/3030个变量30个变量太繁琐1、Java考试结束后,老师给张三分配了一项任务,让他计算全班(30人)的平均分2.知识准备列表中的内容是否可以按照如右图所示的方式来存储呢?可以,这就是数组!生活案例:购物列表2.知识准备数组是一个变量,存储相同数据类型的一组数据声明一个变量就是在内存空间划出一块合适的空间声明一个数组就是在内存空间划出一串连续的空间2.知识准备数组的结构和基本要素标识符:数组的名称,用于区分不同的数组数组元素:向数组中存放的数据元素下标:对数组元素进行编号元素类型:数组元素的数据类型2.知识准备什么是数组?数组只有一个名称,即标识符元素下标标明了元素在数组中的位置,从0开始数组中的每个元素都可以通过下标来访问数组长度固定不变,避免数组越界2.知识准备使用数组四步走:1、声明数组2、分配空间3、赋值4、处理数据int[]a;a=newint[5];a[0]=8;a[0]=a[0]*10;a880a[0]int[]score1;//Java成绩intscore2[];//C#成绩String[]name;//学生姓名声明数组:

告诉计算机数据类型是什么1数据类型数组名[];

数据类型[]数组名;

声明数组时不规定数组长度score=newint[30];avgAge=newint[6];name=newString[30];30……分配空间:

告诉计算机分配几个连续的空间2数据类型[]数组名=new

数据类型[大小];声明数组并分配空间score[0]=89;score[1]=79;score[2]=76;……赋值:向分配的格子里放数据……30score[0]score[1]score[2]

89

79

76太麻烦!能不能一起赋值?32.知识准备【例3-1】声明并创建存放4个人考试成绩的一维数组并打印之。

floatscore[]=newfloat[4]; score[0]=78.9f; score[1]=80.4f; score[2]=89.0f; score[3]=88.5f; System.out.println(score[0]); ... floatscore2[]={68.9f,60.4f,69.0f,68.5f}; ..... System.out.println(score2[2]);数组创建及使用简洁创建数组2.知识准备

数组遍历、排序数组的遍历:使用循环语句while或for来获取数组中的每一个元素,通过下标来控制访问哪一个元素。

floatscore[]=newfloat[4]; score[0]=78.9f; score[1]=80.4f; score[2]=89.0f; score[3]=88.5f; for(inti=0;i<score.length;i++){System.out.println(score[i]);}为了访问数组方便。Java提供了一维数组长度的提取办法是数组名.length,返回数组的长度。二维数组是使用数组名【行下标】.length来获得每行的长度的。使用如下嵌套的循环来完成二维数组的遍历的。for(i=0;i<数组名.length,i++)for(j=0;i<数组名[i].length,i++){System,out.println(数组名[i][j]);}2.知识准备【例3-2】随机产生3行3列的二维数组,并对每个元素赋初值。int[][]number=newint[3][3];System.out.println("随机产生3*3的二维数组");for(inti=0;i<number.length;i++){ for(intj=0;j<number[i].length;j++){ number[i][j]=(int)(Math.random()*100);System.out.print(number[i][j]+"");}System.out.println();}2.知识准备

【例3-3】实现一个数组的转置,操作过程是将二维数组表示的矩阵对应的每一个元素number[i][j]变成number[j][i]。2.知识准备int[][]number=newint[3][3];System.out.println("随机产生3*3的二维数组");for(inti=0;i<number.length;i++){ for(intj=0;j<number[i].length;j++){ number[i][j]=(int)(Math.random()*100);

System.out.print(number[i][j]+"");} System.out.println();}创建3行3列的二维数组2.知识准备System.out.println("转置后");for(inti=0;i<number.length;i++){ for(intj=0;j<number[i].length;j++){

if(i<j){inttemp=number[i][j]; number[i][j]=number[j][i]; number[j][i]=temp;} System.out.print(number[i][j]+"");}}对角变换,元素坐标,列变行,行变列2.知识准备数组排序

首先冒泡排序方法的过程是将待排序的数据存放在数组中,自后向前依次两两相互比较,如果后者比前者小,则交换之。一直比较到第一个位置,将数据序列的第一个最小的数据选出放在第一个位置。在剩余的数列(除第一个位置数据外的数据)中再自后向前按上述方法比较,直到整个数列有序为止。【例3-4】简单的冒泡排序,按关键字由小到大排列一组整数。2.知识准备publicstaticvoidbubbleSort(int[]table)//冒泡排序 {System.out.println("冒泡排序");

booleanexchange=true;

for(inti=1;i<table.length&&exchange;i++) {exchange=false;//假定元素未交换

for(intj=0;j<table.length-i;j++) if(table[j]>table[j+1]){ inttemp=table[j]; table[j]=table[j+1]; table[j+1]=temp; exchange=true;} } }一趟冒泡排序2.知识准备用java.util.Arrays类操纵数组

java.util包包含许多常用的包,Arrays类就是其中一个,它提供了数组的一些常用的方法,如比较、排序、查找等常用的方法。1.方法publicstaticvoidsort(数值类型[]a)对指定的数值型数组按数字升序进行排序。【例3-5】对无序的10个数字使用Arrays类的sort方法进行排序。2.知识准备Arrays.sort(sum);System.out.println("*****排序后******");for(inti=0;i<sum.length;i++){System.out.println("sum["+i+"]="+sum[i]);}注意:有序数组对数据的查找效率很高。如果一组有序序列需要频繁查找而较少更新的话,则建议用数组结构。比如输入法中的拼音字库中字或词的查找等。2.知识准备2.publicstaticintbinarySearch(数组,关键字)使用二进制搜索算法来搜索指定的数值型数组,以获得指定的值。必须在进行此调用之前对数组进行排序(通过上面的sort方法)。如果没有对数组进行排序,则结果是不明确的。【例3-5】对给定的有序数字序列,使用Arrays类提供的二分查找来实现给定关键字的查找。2.知识准备

int[]sum1={1,4,2,3,6,7,8,11,10,20};

Arrays.sort(sum1); for(inti=0;i<sum1.length;i++){ System.out.print(""+sum1[i]);} System.out.println("key=10的下标是::"+Arrays.binarySearch(sum1,10));小经验:对于数组中的数据需要频繁进行插入、删除操作,建议不要用数组处理,因为频繁的移动数据元素,所以效率不高。可以使用动态数组LinkedList类,它在java.util包中,提供了插入和删除的方法,并且有较高的效率。3.1解决步骤(1)打开Eclipse中,创建一个类(2)在类的main方法中定义一个含有6个元素的整形数组(3)给数组元素进行赋值(4)通过循环完成数组元素相加求和(5)输出总分,测试运行(6)计算平均分avgscore(7)通过getHighScore方法获得高于平均分的分数信息(8)最后通过visitAllArray方法打印高于平均分的分数信息3.任务实施3.任务实施publicstaticvoidmain(String[]args){ System.out.println("计算本组成员的考试总分数");

floata[]={94.5f,89.0f,79.5f,64.5f,81.5f,73.5f};

visitAllArray(a);

floattotalscore=calculate(a);

System.out.print("高于平均分的是:");

visitAllArray(getHighScore(a));

}publicstaticfloatcalculate(floata[]){ floatsum=0.0f;

for(inti=0;i<a.length;i++){ sum+=a[i]; } returnsum; }//计算数组数据数值的总和publicstaticfloat[]getHighScore(floata[]){ intcount=0; floatavgscore=calculate(a)/a.length;

for(inti=0;i<a.length;i++){ if(a[i]>avgscore){count++;} }//for

floatb[]=newfloat[count];//确定数组的长度为count的值

count=0;//count初始化为0

for(inti=0;i<a.length;i++){

//筛选高于平均分的学生成绩到b数组

if(a[i]>avgscore){b[count]=a[i];

count=count+1;}}

returnb; }publicstaticvoidvisitAllArray(floata[]){//遍历数组

for(inti=0;i<a.length;i++){ System.out.print(a[i]+""); }//循环打印数组

System.out.println(); }//end_visitAllArray在前一部分,解决问题的程序使用的交简单的一维数组,在本部分我们学习一个使用一维数组和二维数组的综合实例。【例3-7】设计一个学生成绩管理系统,定义一个一维数组存储10个学生名字;定义一个二维数组存储这10个学生的6门课(C程序设计、物理、英语、高数、体育、政治)的成绩;程序应具有下列功能:1.按名字查询某位同学成绩?2.查询某个科目不及格的人数,及学生名单?4.任务拓展String[]name={“a”,“b”,“c”,“d”,“e”,“f”,“g”,“h”,“i”,“l”};//存储学生的名字int[][]grade={{50,60,70,80,90,10},{40,90,80,60,40,70},{60,80,70,60,40,90},{50,60,70,80,90,10},

温馨提示

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

评论

0/150

提交评论