Java面向对象编程基础(1)实训答案

任务描述
编写程序:该程序用于根据Java面向对象程序设计这门课程的成绩评定规则,完成对学生最终成绩的评定。
最终成绩=平时成绩×30%+实验成绩×30%+期末考试×40%
平时成绩、实验成绩、期末考试都按百分制给出,使用单精度型。

编程要求
(1)程序运行时,依次提示输入学号、姓名、平时成绩、实验成绩及期末考试成绩。 (2)要输出最终成绩的计算结果(四舍五入到小数点后2位有效数字)及对应的“A”(>=90)、“B”(>=80 and <90)、“C”(>=70 and <80)、“D”(>=60 and <70)、“E”(<60) (3)你只需要在Teacher.java和Student.java中完成使主类正常运行的类的定义即可。

import java.util.Scanner;

public class MainClass {
    public static Scanner sc=new Scanner(System.in);
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Student stu=new Student();
        //从控制台输入学生信息
        Teacher.inputInfo(stu,sc);
        //根据输入的学生信息进行处理:计算总评成绩及对应等级
        stu.updateGrade();
        //输出处理后的结果
        stu.outputInfo();
        sc.close();

    }

}
public class Student {
    static int number;
    static String name;
    static double pscore;
    static double sscore;
    static double kscore;
    static double sum;
    static String level;

    public void updateGrade() {
        sum = pscore*0.3+sscore*0.3+kscore*0.4;
        if (sum>90){
            level = "A";
        }else if(sum>=80 && sum<90){
            level = "B";
        }else if(sum>=70 && sum<80){
            level = "C";
        }else if(sum>=60 && sum<90){
            level = "D";
        }else {
            level = "E";
        }
    }



    public void outputInfo() {
        System.out.println("学号=姓名=平时成绩=实验成绩=期末考试="+name+"("+number+")的课程\"Java面向对象程序设计\"的成绩评定如下:");
        String pscore1 = String.format("%.2f",pscore);
        String sscore1 = String.format("%.2f",sscore);
        String kscore1 = String.format("%.2f",kscore);
        String sum1 = String.format("%.2f",sum);
        System.out.println("平时成绩:"+pscore1);
        System.out.println("实验成绩:"+sscore1);
        System.out.println("期末考试:"+kscore1);
        System.out.println("总评:"+sum1+",等级:"+level);
    }
}
import java.util.Scanner;

public class Teacher {
    public static void inputInfo(Student stu, Scanner sc) {
        stu.number = sc.nextInt();
        stu.name = sc.next();
        stu.pscore = sc.nextDouble();
        stu.sscore = sc.nextDouble();
        stu.kscore = sc.nextDouble();
    }
}

任务描述
矩阵运算是线性代数中的基本运算。请实现一个Matrix类,可以实现矩阵乘法、矩阵的数组乘法、矩阵相加、相减,矩阵转置、矩阵和一个标量的乘积。
测试说明
平台会对你编写的代码进行测试,以下是测试画面之一:
输入矩阵行列数
2 3
输入2×3矩阵
[0][0]=1
[0][1]=2
[0][2]=3
[1][0]=4
[1][1]=5
[1][2]=6
矩阵A=
[[1.00, 2.00, 3.00],
[4.00, 5.00, 6.00]]
输入2×3矩阵
[0][0]=4
[0][1]=5
[0][2]=3
[1][0]=8
[1][1]=7
[1][2]=0.3
矩阵B=
[[4.00, 5.00, 3.00],
[8.00, 7.00, 0.30]]
运算结果如下:
C=
[[5.00, 7.00, 6.00],
[12.00, 12.00, 6.30]]
D=
[[6.60, 7.60, 8.60],
[9.60, 95.00, 11.60]]
F=
[[3.40, 6.80, 10.20],
[13.60, 303.96, 20.40]]
G=
[[1.00, 4.00],
[2.00, 89.40],
[3.00, 6.00]]
E=
[[14.00, 200.80],
[200.80, 8044.36]]

import java.util.Scanner;
public class MainClass {
    public static Scanner sc=new Scanner(System.in);
    public static void main(String[] args) {
        int rowCount,colCount;
        System.out.println("输入矩阵行列数");
        rowCount=sc.nextInt();
        colCount=sc.nextInt();

        //创建1个rowCount×colCount的矩阵,矩阵所有元素初始化为0
        Matrix matA=new Matrix(rowCount,colCount);
        MainClass.inputMatrix(matA);
        System.out.println("矩阵A=\n"+matA);
        Matrix matB=new Matrix(rowCount,colCount);
        MainClass.inputMatrix(matB);
        System.out.println("矩阵B=\n"+matB);
        System.out.println("运算结果如下:");

        //执行矩阵相加运算
        Matrix matC=matA.plus(matB);
        System.out.println("C=\n"+matC);
        //修改matA的第2行,第2列的那个元素
        matA.data[1][1]=89.4;
        //执行矩阵与一个数相加的运算,即矩阵的所有元素都加上这个数
        Matrix matD=matA.plus(5.6);
        System.out.println("D=\n"+matD);
        //执行矩阵和1个数相乘,即矩阵的所有元素都乘上这个数
        Matrix matF=matA.multiply(3.4);
        System.out.println("F=\n"+matF);
        //求转置矩阵
        Matrix matG=matA.transpose();
        System.out.println("G=\n"+matG);
        //执行矩阵乘法,不清楚矩阵乘法的真正含义,请参考线性代数教材。
        Matrix matE=matA.multiply(matG);
        //按[[1,2,3],[4,5,6]]类似格式输出矩阵,这里的逗号都是英文逗号
        System.out.println("E=\n"+matE);
        MainClass.sc.close();
    }

    private static void inputMatrix(Matrix mat) {
        int rowCount=mat.getRowCount();
        int colCount=mat.getColCount();
//        System.out.println(rowCount);
//        System.out.println(colCount);
        System.out.println("输入"+rowCount+"×"+colCount+"矩阵");
        for(int i=0;i<rowCount;i++) {
            for(int j=0;j<colCount;j++) {
                System.out.print("["+i+"]["+j+"]=");
                mat.data[i][j]=sc.nextDouble();
            }
        }
    }
}
import java.text.DecimalFormat;

//请实现Matrix类,在下方完成代码。
//提示:要将浮点型数四十五入小数点后面若干位,可使用DecimalFormat类,请参考IDE中的帮助或百度。
public class Matrix {
    int rowCount;
    int colCount;
    double[][] data;

    public Matrix() {
    }

    public Matrix(int rowCount, int colCount) {
        this.rowCount = rowCount;
        this.colCount = colCount;
        this.data = new double[rowCount][colCount];
    }

    public int getRowCount() {
        return rowCount;
    }

    public int getColCount() {
        return colCount;
    }

    public Matrix plus(Matrix matB){
        Matrix matC = new Matrix();
        matC.data = new double[rowCount][colCount];
        for(int i = 0; i<rowCount;i++){
            for(int j = 0; j<colCount; j++){
                matC.data[i][j] = this.data[i][j] + matB.data[i][j];
            }
        }
        return matC;
    }

    public Matrix plus(double q){
        Matrix matD = new Matrix();
        matD.data = new double[rowCount][colCount];
        for(int i = 0; i<rowCount;i++){
            for(int j = 0; j<colCount; j++){
                matD.data[i][j] = this.data[i][j] + q;
            }
        }
        return matD;
    }

    public Matrix multiply(double p){
        Matrix matF = new Matrix();
        matF.data = new double[rowCount][colCount];
        for(int i = 0; i<rowCount;i++){
            for(int j = 0; j<colCount; j++){
                matF.data[i][j] = this.data[i][j] * p;
            }
        }
        return matF;
    }

    public Matrix transpose(){
        Matrix matE = new Matrix();
        matE.data = new double[colCount][rowCount];
        for(int i = 0; i<rowCount;i++){
            for(int j = 0; j<colCount; j++){
                matE.data[j][i] = this.data[i][j];
            }
        }
        return matE;
    }

    public Matrix multiply(Matrix matG){
        Matrix matE = new Matrix();
        matE.data = new double[this.data.length][matG.data[0].length];
        for(int i = 0; i<this.data.length; i++){
            for(int j = 0; j<matG.data[0].length; j++){

                for(int k = 0; k<this.data[0].length;k++){
                    matE.data[i][j] += this.data[i][k] * matG.data[k][j];
                }
            }
        }
        return matE;
    }

    @Override
    public String toString() {
        int i ;
        int j ;
        String result = "[";
        for(i = 0; i<data.length; i++){
            if(i!=0){
                result += " ";
            }
            result+="[";
            for(j = 0; j<data[0].length; j++){
                DecimalFormat format = new DecimalFormat(".00");
                result += format.format(data[i][j]);
                if(j < data[0].length-1){
                    result += ",";
                }
                if(j == data[0].length-1 && i != data.length-1){
                    result += "],\n";
                }
            }
            if (i == data.length-1){
                result += "]]";
            }
        }

        return result;
    }
}

wlw的同学可以看看我另外一篇类与对象的,有些话希望各位看一下,哪怕你觉得很多余。

杨教授大学堂 精心创作的优秀程序员 职业提升必读系列资料 杨教授大学堂,版权所有,盗版必究。 1/7 页 《面向对象编程与设计(Java) 》后作业及参考解答 1.1.1 第一周 程(9 月 4 日)的后作业及参考解答 1、 请用 Java 程序示例说明什么是面向过程的程序设计方法、什么是面向对象的程序 设计方法? 面向过程就是分析出所需要开发的应用的系统在解决某个问题时所需要的步骤和工 作流程,然后用代码(当然应该把这些代码设计为各个函数或者过程)来表示这些步骤 的具体实现——面向过程是以过程为中心的编程思想。 而面向对象是把构成问题的各个方面分解成各个对象,并用代码来实现对象之间的 交互——面向对象是以事物为中心的编程思想。 (1)面向过程程序设计方法的示例 #include "stdio.h" int add(int a, int b){ //对数据的操作(方法或者函数) return a+b; } int main(){ //数据(属性或者状态) int x=1, y=1; int sum=add(x,y); print("Sum=%d",sum); } 面向过程程序的程序中的数据与方法是相互分离的!而面向对象程序中的数据与方 法是相互组合在一起的。 当数据(也就是问题的属性或者状态)发生变化,需要修改大量的关联的方法的程 序模块。 (2)面向对象程序设计方法的示例 import java.io.*; public class Add{ 杨教授大学堂 精心创作的优秀程序员 职业提升必读系列资料 杨教授大学堂,版权所有,盗版必究。 2/7 页 //数据(属性或者状态) private int sum; public int add(int a, int b){ //对数据的操作(方法或者函数) sum=a+b; return sum; } public void showSum() { //对数据的操作(方法或者函数) System.out.println("Sum="+sum); } public static void main(String args[]){ Add oneAdd=new Add(); oneAdd.add(1,2); oneAdd.showSum(); } } 2、谈谈你对开源的理解(可以是任何方面的主题) ,你熟悉 J2EE 平台中的哪些开源框 架、对这些开源框架的熟悉程度怎样(包括在项目中的具体应用) (1)开源软件 1) 开源软件一定是源代码开放,任何人可以免费使用,任何人可以再开发; 2) 开源同时也是一种商业运营手段,软件免费提供但服务收费。 3) 开源软件有别于自由软件——自由、免费、公开与分享,许多开源软件有"许 可证"的限制。 (2)J2EE 平台中的哪些开源框架 S2SH——Struts2、Spring 和 Hibernate 等表现层框架、应用层框架和持久层框架。 1.1.2 第二周 程(9 月 11 日)的后作业及参考解答 1、请用 Java 程序示例说明什么是 Java 中的静态多态性和动态多态性? (1)静态多态性是指在编译程序代码时,编译器就会根据参数的不同而调用不同的方 杨教授大学堂 精心创作的优秀程序员 职业提升必读系列资料 杨教授大学堂,版权所有,盗版必究。 3/7 页 法,并且跟具体的方法体结合起来,生成最终的程序代码。 实现的具体手段是应用方法重载。 (2)动态多态性是指在编译程序代码时,编译器不会将某一方法体的调用和方法体结 合起来,而是在程序执行过程中根据对象的实际类型选择相应的方法体,再最终生成对 应的程序代码。 实现的具体手段是应用方法重写。 2、软件业一直在探讨,如何使软件实现如同传统产业一样的大规模生产。软件工程的 提出,便是为了实现这个愿望。然而,虽然软件工程至今已经有了很大的发展,软件的 大规模工业化生产仍然没有实现。您认为原因何在? (1)张三同学的解答 软件业不是一个孤立的行业,它具有很大的依附性。它必须依附在计算机硬件上 才能生存,否则无影无踪;它必须依附在各行各业的业务需求中才能发展,否则无人问 津。这种独一无二的依附性决定了软件产业的发展步伐:既不能超前,也不能落伍。 随着计算机硬件技术呈摩尔定律向前发展,以及计算机应用向社会生产和社会生 活的广泛渗透,计算机软件技术必须迎头赶上。为了解决生产率问题,人们提出了面向 对象技术和构件生产;为了解决质量问题,人们提出了软件过程控制和 CMM;为了解决 成本问题,人们提出了软件复用技术。这些原理的提出和技术的应用,极大提高了软件 开发的效率。 但令人遗憾的是软件工程的实践非常令人失望。大量的软件项目不能按照人们的 计划实施和完成,持续了二三十年的软件危机变得更加突出。暮然回首,人们
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值