Java基础实验二

数组应用

[实验任务1]统计信息

[任务介绍]

  1. 任务描述

学生成绩统计。从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实现下列功能:

  1. 统计不及格人数并打印不及格学生名单;
  2. 统计成绩高于或等于全班平均分的学生人数,并打印这些学生的名单;
  3. 统计各分数段的人数及所占的百分比。

提示

  1. 用num[i]存放第i+1个学生的学号,用score[i]存放第i+1个学生的成绩。设置计数器count,当score[i]<60时,计数器count计数一次,并打印num[i]和score[i]。
  2. 先计算全班平均分aver,当第i个学生的成绩score[i]>=aver时,打印num[i]和score[i]。
  3. 将成绩分为6个分数段,60分以下为第0段,60~69分为第1段, 70~79分为第2段,80~89分为第3段,90~99分为第4段,100分为第5段,因此成绩与分数段的对应关系为:

        各分数段的学生人数保存在数组stu中,用stu[i]存放第i段的学生人数。对于每个学生的成绩,先计算出该成绩所对应的分数段,然后将相应的分数段的人数加1,即stu[i]++。

        注意:要求使用函数来实现各个功能,并用主函数调用它们。

[任务目标]

  1. 学会分析“统计信息”程序的实现思路;
  2. 根据思路独立完成“统计信息”的源代码编写、编译和运行;
  3. 掌握在程序中使用if选择结构、while循环结构语句和 增强for语句 进行读取数组数据并进行相应的运算操作;
  4. 能够根据“统计信息”程序功能的不同,将功能封装到不同的方法中;
  5. 掌握方法和数组的使用。

[实现思路] 

[实现代码及运行结果] 

实现代码如下:

package a;
import java.util.Scanner;
public class Test {
	static void search(int[] num,int[] score,int n){//查找不及格学生
		int i;
		for (i=0;i<n;i++){
			if (score[i]<60&&score[i]>=0){
				System.out.println(num[i]+" "+score[i]);
			}
		}
	}
	static void Ave(int[] num,int[] score,int n){//查找高于等于平均数的学生
		int sum=0,i;
		double aver;
		for (i=0;i<n;i++){
			sum+=score[i];
		}
		aver=sum/n;
		for (i=0;i<n;i++){
			if (score[i]>=aver){
				System.out.println(num[i]+" "+score[i]);
			}
		}
	}
	static void Zhanbi(int[] score,int[] stu,int n){//求各分数段的人数及所占的百分比
		for (int i=0;i<n;i++){
			if (score[i]<60) stu[0]++;
			else stu[(score[i]-50)/10]++;
		}
		for (int i=0;i<n;i++){
			System.out.println(stu[i]+" "+(stu[i]*1.0/n)*100+"%");
		}
	}
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		Scanner reader=new Scanner(System.in);
		int[] num=new int[30];
		int[] score=new int[30];
		int[] stu=new int[6];
		int count=0,i,n=0;
		for (i=0;i<score.length;i++){
			num[i]=reader.nextInt();
			score[i]=reader.nextInt();
			if (score[i]<0) break;//如果输入分数小于0,退出循环
			n++;
		}
		System.out.println("分数小于60的学生信息如下:");
		System.out.println("学号"+" "+"成绩");
		search(num,score,n);
		System.out.println("分数高于平均分的学生信息如下:");
		System.out.println("学号"+" "+"成绩");
		Ave(num,score,n);
		System.out.println("各分数段的人数及所占的百分比:");
		Zhanbi(score,stu,n);
	}
}

 运行结果如下:

[实验任务2]随机点名器

[任务介绍]

  1. 任务描述

编写一个随机点名的程序,使其能够在全班同学中随机点中某一名同学的名字。随机点名器具备3个功能,包括存储全班同学姓名,总览全班同学姓名和随机点取其中一人姓名。比如随机点名器首先向班级存入张飞、刘备和关羽这3位同学名字,然后总览全班同学的姓名,打印出这3位同学的名字,最后在这3位同学中随机选择一位,并打印出该同学的名字,至此随机点名成功。

备注:

(1)存储全班同学的姓名要求存储5个即可;

(2)输出全班同学姓名,此方法要求能够重载,即能读取users二维数组中的内容并存储到姓名数组中也能读取(1)中存储的人名数组(要求使用增强for语句),且每行输出5个人的姓名。String[][] users = {{"Xb13620114","吴泽胜","男"},{"Xb13620204","蒋驰阳","男"},

                {"Xb15330106","季晨","男"},{"Xb15330117","吴成鑫","男"},

                {"Xb15620109","毛伟强","男"},{"Xb15620110","佘奔","男"},

                {"Xb15620112","汪铭","男"},{"Xb15620115","叶伟港","男"},

                {"Xb15620118","张天鹏","男"},{"Xb15620125","佘鑫儿","女"},

                {"Xb15620123","陈雨箫","女"},{"Xb15620124","蒋怡雨","女"},

                {"Xb15620201","苌一杭","男"},{"Xb15620223","马晨佳","女"},

                {"Xb15620204","范晓航","男"},{"Xb15620211","林子","男"},

                {"Xb15620214","王塞宇","男"},{"Xb15620215","闻广超","男"},

                {"Xb15620222","李娜","女"},{"Xb15620224","沈青遥","女"}

               };

        2. 运行结果

图1  输入人名的数组测试结果

图2  users数组测试结果

[任务目标]

  1. 学会分析“随机点名器”程序的实现思路;
  2. 根据思路独立完成“随机点名器”的源代码编写、编译和运行;
  3. 能够根据“随机点名器”程序功能的不同,将功能封装到不同的方法中;
  4. 能够使用数组解决多个同学姓名的存储问题;
  5. 掌握方法的重载和数组的使用。

[实现思路] 

        随机点名系统有一维和二维两种。一维是输入班级同学姓名,并存进一维数组,并用增强for循环将名字一行输出。调用random产生[0,5]的随机数,用重载函数输出被点到名字的同学姓名。二维数组是在已经存有数据的数组中将姓名输出并每行输出5个姓名(count%5)。同样调用函数(重载函数)产生随机姓名并输出。         

[实现代码及运行结果] 

实现代码如下:

package a;
import java.util.Random;
import java.util.Scanner;
public class Test {
	static void F(String[] user,int a){
		System.out.print("被点到名的同学是:");
		System.out.println(user[a]);
	}
	static void F(String[][] users,int b){
		System.out.print("被点到名的同学是:");
		System.out.println(users[b][1]);
	}
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		Scanner reader=new Scanner(System.in);
		Random random=new Random();
		int a,b;
		a=random.nextInt(5);
		b=random.nextInt(20);
		String[] user=new String[5];
		int i;
		for (i=0;i<5;i++){
			System.out.print("第"+(i+1)+"个学生:");
			user[i]=reader.nextLine();
		}
		System.out.println("全班同学信息如下:");
		for (String k:user){
			System.out.print(k+"\t");
		}
		System.out.println();
		F(user,a);
		String[][] users={{"Xb13620114","吴泽胜","男"},{"Xb13620204","蒋驰阳","男"},
                {"Xb15330106","季晨","男"},{"Xb15330117","吴成鑫","男"},
                {"Xb15620109","毛伟强","男"},{"Xb15620110","佘奔","男"},
                {"Xb15620112","汪铭","男"},{"Xb15620115","叶伟港","男"},
                {"Xb15620118","张天鹏","男"},{"Xb15620125","佘鑫儿","女"},
                {"Xb15620123","陈雨箫","女"},{"Xb15620124","蒋怡雨","女"},
                {"Xb15620201","苌一杭","男"},{"Xb15620223","马晨佳","女"},
                {"Xb15620204","范晓航","男"},{"Xb15620211","林子","男"},
                {"Xb15620214","王塞宇","男"},{"Xb15620215","闻广超","男"},
                {"Xb15620222","李娜","女"},{"Xb15620224","沈青遥","女"}
              };
		int count=0;
		System.out.println("全班同学信息如下:");
		for (String[] k:users){
			System.out.print(k[1]+"\t");
			count++;
			if (count%5==0) System.out.println();
		}
		F(users,b);
	}
}

运行结果如下: 

感悟:

  1. 通过此次实验我发现,前面学的C语言、C++变得很生疏,一些基础很模糊,函数调用,函数重载......等导致在做实验的时候出现很多错误。我觉得还是得多练习,不然真的很容易就生疏。
  2. Java的数组定义和前面学过的有一定区别,比如以前定义数组都是int a[10];Java中数组的定义是int[] a=new int[10];虽然看上去很不相同,但是都大同小异,在使用和思路方面都差不多。
  3. 此次实验主要掌握了增强for循环的使用,数组的定义以及一维、二维数组的运用。前面学过C++,所以Java接受起来还不算很难。通过此次实验我了解了自己不足的地方和自己努力的方向。对Java有了一定的了解,感觉通过实验自己的动手操作能力有了一定的提高。
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值