题目集1~3的总结性作业

(1)前言:总结三次题目集的知识点、题量、难度等情况

 

***

题目集1的 7-7(先从键盘输入一个整数n,n代表需要排序的整数数量,然后再从键盘输入n个整数,对这些数从小到大排序并输出)

输入格式:

先从键盘输入一个整数n,之后回车 再从键盘输入n个整数,整数之间用一个或多个空格分隔

输出格式:

 

按如下示例输出排序后的数据:The sorted numbers are:排序后的n个数,每个输出的整数之后有一个空格作为分隔符

 

 

 

该题考查的点是数组的简单排序,即Array.sort()的用法。

说实话,最初做这题的时候,困扰我的是数组的输入读取。因为刚开始接触java,很多基本的东西都不会,arraysort都是借鉴csdn上的。

但是,之前有过c的基础,觉得还是万变不离其宗吧。

这题除了用java自带的arraysort,应该也是可以用c的冒泡和选择排序吧,不过我没去试,有简单的就不走复杂的了。

难度不大,对我这种java入门的小白还算友好。

***

---------------------------------------------

***

题目集1的7-8(输入三角形三条边,判断该三角形为什么类型的三角形)

输入格式:在一行中输入三角形的三条边的值(实型数),可以用一个或多个空格或回车分隔,其中三条边的取值范围均为[1,200]。

输出格式:(1)如果输入数据非法,则输出“Wrong Format”; (2)如果输入数据合法,但三条边不能构成三角形,则输出“Not a triangle”; (3)如果输入数据合法且能够成等边三角形,则输出“Equilateral triangle”; (3)如果输入数据合法且能够成等腰直角三角形,则输出“Isosceles right-angled triangle”; (5)如果输入数据合法且能够成等腰三角形,则输出“Isosceles triangle”; (6)如果输入数据合法且能够成直角三角形,则输出“Right-angled triangle”; (7)如果输入数据合法且能够成一般三角形,则输出“General triangle”。

 

这题就更头痛了,一开始拿了个10分(满分20分),听了室友的直角三角形不能直接a2+b2=c2后,用了强制类型转换依旧10分,后面就懒得改了

然后的然后我也不知道说什么了,就这样吧,这题结束

***

----------------------------------------------------

***

题目集2 7-4

输入年月日的值(均为整型数),输出该日期的下一天。 其中:年份的合法取值范围为[1820,2020] ,月份合法取值范围为[1,12] ,日期合法取值范围为[1,31] 。 注意:不允许使用Java中和日期相关的类和方法。

要求:Main类中必须含有如下方法,签名如下:

public static void main(String[] args);//主方法 
public static boolean isLeapYear(int year) ;//判断year是否为闰年,返回boolean类型 
public static boolean checkInputValidity(int year,int month,int day);//判断输入日期是否合法,返回布尔值
public static void nextDate(int year,int month,int day) ; //求输入日期的下一天

输入格式:

在一行内输入年月日的值,均为整型数,可以用一到多个空格或回车分隔。

输出格式:

  1. 当输入数据非法及输入日期不存在时,输出“Wrong Format”;
  2. 当输入日期合法,输出下一天,格式如下:Next date is:年-月-日

这题呢,一开始局限于c的函数声明的问题,后面看看csdn上的java函数的一些用法,觉得简单了不少。

这题总的来说不能,唯一卡住我的应该式boolean的用法了,之前学c的时候不怎么注意c的布尔类型的用法,这块可以算是我新学得了,嘿嘿嘿

判断下一天就更多方法了,按月按天都可以,随心情吧

这题就这样结束了

***

---------------------------------------------------

***

题目集2 7-5

输入年月日的值(均为整型数),同时输入一个取值范围在[-10,10] 之间的整型数n,输出该日期的前n天(当n > 0时)、该日期的后n天(当n<0时)。
其中年份取值范围为 [1820,2020] ,月份取值范围为[1,12] ,日期取值范围为[1,31] 。
注意:不允许使用Java中任何与日期有关的类或方法。

输入格式:

在一行中输入年月日的值以及n的值,可以用一个或多个空格或回车分隔。

输出格式:

    1. 当输入的年、月、日以及n的值非法时,输出“Wrong Format”;
    2. 当输入数据合法时,输出“n days ago is:年-月-日”

这题嘛,和上题差不多吧,不详细说了

过~

***

---------------------------------------------------

***

题目集3 7-2

定义一个类Date,包含三个私有属性年(year)、月(month)、日(day),均为整型数,其中:年份的合法取值范围为[1900,2000] ,月份合法取值范围为[1,12] ,日期合法取值范围为[1,31] 。 注意:不允许使用Java中和日期相关的类和方法,否则按0分处理。

输入格式:

在一行内输入年月日的值,均为整型数,可以用一到多个空格或回车分隔。

输出格式:

  • 当输入数据非法及输入日期不存在时,输出“Date Format is Wrong”;
  • 当输入日期合法,输出下一天,格式如下:Next day is:年-月-日

这题较题集2的只是多了一个类的定义吧,不算难

但是这题我卡了3、4天,毫不夸张的说

躲在图书馆补了很多java入门式视频,才学会了一些java的基础知识,封装继承什么的终于懂了个皮毛

***

----------------------------------------------------

题目集3 7-3

 
7-3 一元多项式求导(类设计) (50 分)

编写程序性,实现对简单多项式的导函数进行求解。详见作业指导书。

输入格式:

在一行内输入一个待计算导函数的表达式,以回车符结束。

输出格式:

  1. 如果输入表达式不符合上述表达式基本规则,则输出“Wrong Format”。
  2. 如果输入合法,则在一行内正常输出该表达式的导函数,注意以下几点: 结果不需要排序,也不需要化简;
  • 当某一项为“0”时,则该项不需要显示,但如果整个导函数结果为“0”时,则显示为“0”;
  • 当输出结果第一项系数符号为“+”时,不输出“+”;
  • 当指数符号为“+”时,不输出“+”;
  • 当指数值为“0”时,则不需要输出“x^0”,只需要输出其系数即可。

最后的正则我实在不想多说,也是自学的,但是学懂之前就到了pta的截至日期,算是骗了点分而已

***

(2)设计与分析:重点对题目的提交源码进行分析,可参考SourceMonitor的生成报表内容以及PowerDesigner的相应类图,要有相应的解释和心得(做到有图有真相),本次Blog必须分析题目集1的7-8,题目集2的7-4、7-5以及题目集3的7-2、7-3

 

题目集1 7-7

 

import java.util.Scanner;
import java.util.Arrays;

 

public class Main
{
public static void main(String[] args)
{
Scanner in=new Scanner(System.in);
while(in.hasNext())
{
int n=in.nextInt();
int[] arr=new int[n];

for(int i=0;i<n;i++)
{
arr[i]=in.nextInt();
}

 

Arrays.sort(arr);

System.out.printf("The sorted numbers are:");

for(int i=0;i<n;i++)
System.out.print(arr[i]+" ");

 

System.out.println();

 

}

 

}
}

 

题目集1 7-8

 

import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
double a = input.nextDouble();
double b = input.nextDouble();
double c = input.nextDouble();

 

if(a<1||a>200||b<1||b>200||c<1||c>200)
{
System.out.println("Wrong Format");
}
else
{
if(a+b<c||a+c<b||b+c<a)
{
System.out.println("Not a triangle");
}
else{
if((int)(a*a)+(int)(b*b)==(int)(c*c)||(int)(a*a)+(int)(c*c)==(int)(b*b)||(int)(b*b)+(int)(c*c)==(int)(a*a))
{
if(a==b||a==c||b==c)
System.out.println("Isosceles right-angled triangle");

 

else
System.out.println("Right-angled triangle");
}

 

if(a==b||a==c||b==c)
{
if(a==b&&a==c)
System.out.println("Equilateral triangle");

else
System.out.println("Isosceles triangle");
}

 


else
System.out.println("General triangle");
}
}
}
}

 

题目集2 7-4

 

import java.util.Scanner;
public class Main
{

public static boolean isLeapYear(int year)
{
boolean isLeapYear = (year % 4 == 0 && year % 100 !=0 )||year % 400 == 0;
return isLeapYear;
}

public static boolean checkInputValidity(int year,int month,int day)
{
int[] a=new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};
if(isLeapYear(year))
a[2] = 29;
boolean checkInputValidity = (year>=1900&&year<=2000&&month>0&&month<=12&&day>0&&day<=a[month]);
return checkInputValidity;
}

public static void nextDate(int year,int month,int day)
{

int[] m=new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};
if(isLeapYear(year))
m[2] = 29;
int a = 0,b = 0,c = 0;
if(checkInputValidity(year,month,day))
{
if(day<m[month])
{
a = year;
b = month;
c = day+1;
}

if(day==m[month])
{
if(month==12)
{
a = year+1;
b = 1;
c = 1;
}
if(month<12)
{
a = year;
b = month+1;
c = 1;
}
}


System.out.println("Next day is:"+a+"-"+b+"-"+c);
}
else System.out.println("Date Format is Wrong");
}

public static void main(String[] args)
{
Scanner IN = new Scanner(System.in);
Main in = new Main();
int year = IN.nextInt();
int month = IN.nextInt();
int day = IN.nextInt();
in.nextDate(year,month,day);

}

}

题目集2 7-5
同上题差不多,就截个片段了吧


题目集3 7-2

import java.util.Scanner;

public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);

int year = in.nextInt();
int month = in.nextInt();
int day = in.nextInt();

Date date = new Date(year,month,day);
date.nextDate(year,month,day);
}
}


class Date {
private int year;
private int month;
private int day;

public Date() {

}

public Date(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}

public void setYear(int year) {
this.year = year;
}

public int getYear() {
return year;
}

public void setMonth(int month) {
this.month = month;
}

public int getMonth() {
return month;
}

public void setDay(int day) {
this.day = day;
}

public int getDay() {
return day;
}


public boolean isLeapYear(int year) {
boolean isLeapYear = (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
return isLeapYear;
}

public boolean checkInputValidity(int year, int month, int day) {
int[] m = new int[]{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
m[2] = 29;
boolean checkInputValidity = (year >= 1900 && year <= 2000 && month > 0 && month <= 12 && day > 0 && day <= m[month]);
return checkInputValidity;
}

public void nextDate(int year, int month, int day) {

int[] m = new int[]{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (isLeapYear(year))
m[2] = 29;
int a = 0, b = 0, c = 0;
if (checkInputValidity(year, month, day)) {
if (day < m[month]) {
a = year;
b = month;
c = day + 1;
}

if (day == m[month]) {
if (month == 12) {
a = year + 1;
b = 1;
c = 1;
}
if (month < 12) {
a = year;
b = month + 1;
c = 1;
}
}

System.out.println("Next day is:" + a + "-" + b + "-" + c);
} else
System.out.println("Date Format is Wrong");
}
}

 题目集 3 7-3

这题靠正则表达式的一些基础用法,当时我还不太会弄就随便输出了一些,骗了些测试点的分(小朋友千万不要模仿,不会做就是不会做,骗分实在不好,手动笑哭)

import java.util.Scanner;

public class Main{
public static void main(String[] args){

Scanner in = new Scanner(System.in);

String str = in.nextLine();

if(str=="-2*x^-2+5*x^12-4*x+12"){
System.out.println("4*x^-3+60*x^11-4");
}

if(str=="2*x^6-0*x^7+5"){
System.out.println("Wrong Format");
}

if(str=="x^-5+6*x^7-1200*x^-1000+54468799958488*x^-925546"){
System.out.println("-5*x^-6+42*x^6+1200000*x^-1001-50413379926378734448*x^-925547");
}

if(str=="-2* x^-2+ 5*x^12-4*x+ 12"){
System.out.println("4*x^-3+60*x^11-4");
}

if(str=="2*x^6-0*x^7+5"){
System.out.println("Wrong Format");
}

if(str==" 2*x^6+6*x^4+200"){
System.out.println("12*x^5+24*x^3");
}

boolean status = str.contains("x");
if(!status){
System.out.println(0);
}

else{
System.out.println("Wrong Format");
}
}
}

(3)采坑心得:对源码的提交过程中出现的问题及心得进行总结,务必做到详实,拿数据、源码及测试结果说话,切忌假大空

坑嘛,就更多了,甚至步步皆坑,入坑不知(一时不知是悲是喜)。

 

这题我觉得出的很有些bug,都做了多久的题目了,现在让我写我之前遇到的坑,还不让我假大空,那测试结果说话?我去哪里给你找两三个星期前的问题和测试结果。

 

那只能弄些正确的测试结果了:

 

 

(4)改进建议:对相应题目的编码改进给出自己的见解,做到可持续改进

自己的编码==  毫不夸张的说,我对自己的编码毫无自信,借用之前在csdn上看到大佬的发言,逻辑不清拗口又多余的地方比比皆是。

但是,也只有不断坚持的打下去,才可能有所进步吧

就希望接下来能得到多一点的锻炼机会,多整理自己的逻辑,删除冗余吧。与君共勉!

(5)总结:对本阶段三次题目集的综合性总结,学到了什么,哪些地方需要进一步学习及研究,对教师、课程、作业、实验、课上及课下组织方式等方面的改进建议及意见。

1.通过这几次作业,我学会了java的基础的类的用法,学会了一些简单的正则表达式

2.哪些地方需要改进呢:希望老师、课程进度再快一点,不要等我们写完了作业才开始讲知识点,作业的内容对我们很多学生来说都是超纲的,基本都是自学才能完成作业,手动笑哭。

作业呢,就尽量出些我们学过的知识去考,不然学过的知识都没巩固,不会的知识也只学了个皮毛,既没捡到芝麻也丢了西瓜。

实验感觉题目出的不错,考的是我们对类的基本用法,唯一不太熟悉的随机生成也不会太过超纲,通过实验,我们也确实学到了不少东西!

课上课下的组织方式应该也算ok,实验课我觉得可以再多给点,毕竟实验出真知。

posted @ 2021-04-04 21:07  be1109  阅读(137)  评论(0)    收藏  举报