PTA前三次题目集总结
题目集一:主要让我们学习了对Java程序的基本写法,通过学习我们可以知道有许多的地方是和c语言的差不多的,但是还有许许多多的地方是不同的,
题目集一
这题让我学习如何通过键盘为变量a和b赋值,通过键盘来输入数据进行处理,
7-2 电话键盘字母数字转换
这题让我学会饿了如何输入字符串,并对其转化,
7-3 成绩分级管理
(学校进行成绩分级管理,取消分数制,改为成绩分级评定。具体办法是:小于60分为E类;60分至70分(不含70分)为D类;70分至80分(不含)为C类;80分至90分(不含)为B类;90分以上为A类。设计一个程序,对输入的成绩进行等价划分—)
通过这题的学习我学习到了if语句和switch语句的运用,基本上和c语言的写法是一样的。
7-4 计算税率 (17 分)
美国联邦个人所得税是根据申报情况和应纳税所得额计算的。有四种申报情况:单身申报、已婚联合申报、已婚单独申报、户主申报。税率每年都不一样。下表即为假定税率计算方法,例如,某人单身申报,应纳税收入为$10,000,则计算方法为:$8,350的部分按10%计税,剩余的$1,650的部分按15%计税,因此其应缴税额为:$8,350×10%+$1,650×15%=$1,082.5。
你要写一个计算个人所得税的程序。程序应该首先输入申报状态和应纳税所得额并计算税款。其中,输入申报状态用整型数表示,0表示单身申报,1表示已婚联合申报,2表示已婚单独申报,3表示户主申报。应纳税所得金额用实型数表示。下表为具体的税率。
这题需要一定的耐心,对大数据的慢慢处理。
7-5 计算钱币 (10 分)
编写程序,读取用户输入的代表总金额的double值,打印表示该金额所需的最少纸币张数和硬币个数,打印从最大金额开始。纸币的种类有十元、五元、一元,硬币的种类有五角、一角、贰分、壹分。
还是对选择语句的运用
7-6 使用一维数组求平均值 (12 分)
本题目要求使用一维数组,存储5个整数,输出5个整数的平均值。
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
int[] scores = new int[5];
int sum = 0;
Scanner input = new Scanner(System.in);
for(int i = 0; i < 5; i++){
scores[i] = input.nextInt();
sum = sum + scores[i];
}
System.out.println((double)sum/5);
}
}
学习数组的写法:int [ ]a=new int[2];
7-7 对多个整数进行排序 (16 分)
先从键盘输入一个整数n,n代表需要排序的整数数量,然后再从键盘输入n个整数,对这些数从小到大排序并输出
这题我选择了冒泡排序的写法是我们上学期学过的一个基本算法;
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner input =new Scanner(System.in);
int n=input.nextInt();
int num=0;
int[] a=new int[n];
for(int i=0;i<n;i++)
{
a[i]=input.nextInt();
}
for(int k=0;k<n;k++)
{
for(int j=0;j<n-1;j++)
{
if(a[j]>a[j+1])
{
num=a[j];
a[j]=a[j+1];
a[j+1]=num;
}
}
}
System.out.print(“The sorted numbers are:”);
for(int x=0;x<n;x++)
{
System.out.print(a[x]+” “);
}
}
}
其中红色的字体是冒泡排序的主体,一种计算机科学领域的较简单的排序算法。
它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
题目集二:主要的学习目的是让我们学习如何使用类中的方法和自己用构造方法来解决问题。题目和题目一比较简单。
题目7-4 求下一天 (30 分)
输入年月日的值(均为整型数),输出该日期的下一天。 其中:年份的合法取值范围为[1820,2020] ,月份合法取值范围为[1,12] ,日期合法取值范围为[1,31] 。 注意:不允许使用Java中和日期相关的类和方法。
代码:
import java.util.Scanner;
public class Main
{
public static boolean isLeapYear(int year) //判断year是否为闰年,返回boolean类型;
{
if(year%400==0||(year%100!=0&&year%4==0))
return true;
else
return false;
}
public static void main(String[] args)
{
Scanner input = new Scanner (System.in);
int a= input.nextInt();
int g=a+1;
int b= input.nextInt();
int e=b+1;
int c= input.nextInt();
int f=c+1;
boolean d=isLeapYear(a);
if(a>2020||a<1820||b>12||b<1||c<1||c>31||(d==false&&b==2&&c>28))
{
System.out.println(“Wrong Format”);
System.exit(0);
}
if(b==1||b==3||b==5||b==7||b==8||b==10)
{
if(f>31)
System.out.println(“Next date is:”+a+”-“+e+”-1″);
else
System.out.println(“Next date is:”+a+”-“+b+”-“+f);
}
if(b==4||b==6||b==9||b==11)
{
if(f>30)
System.out.println(“Next date is:”+a+”-“+e+”-1″);
else
System.out.println(“Next date is:”+a+”-“+b+”-“+f);
}
if(b==12)
{
if(f>31)
System.out.println(“Next date is:”+g+”-“+1+”-1″);
else
System.out.println(“Next date is:”+a+”-“+b+”-“+f);
}
if(b==2)
{
if(d==true)
{
if(f>29)
System.out.println(“Next date is:”+a+”-“+e+”-1″);
else
System.out.println(“Next date is:”+a+”-“+b+”-“+f);
}
else
{
if(f>28)
System.out.println(“Next date is:”+a+”-“+e+”-1″);
else
System.out.println(“Next date is:”+a+”-“+b+”-“+f);
}
}
}
}
7-5 求前N天 (30 分)
输入年月日的值(均为整型数),同时输入一个取值范围在[-10,10] 之间的整型数n,输出该日期的前n天(当n > 0时)、该日期的后n天(当n<0时)。
其中年份取值范围为 [1820,2020] ,月份取值范围为[1,12] ,日期取值范围为[1,31] 。
注意:不允许使用Java中任何与日期有关的类或方法
import java.util.Scanner;
public class Main
{
public static boolean isLeapYear(int year) //判断year是否为闰年,返回boolean类型;
{
if(year%400==0||(year%100!=0&&year%4==0))
return true;
else
return false;
}
public static void main(String[] args)
{
Scanner input = new Scanner (System.in);
int a= input.nextInt();
int b= input.nextInt();
int c= input.nextInt();
int n= input.nextInt();
int f=c-n;
boolean d=isLeapYear(a);
if(a>2020||a<1820||b>12||b<1||c<1||c>31||(d==false&&b==2&&c>28))
{
System.out.println(“Wrong Format”);
System.exit(0);
}
if(b==5||b==7||b==10)
{
if(f>31)
System.out.println(n+” days ago is:”+a+”-“+(b+1)+”-“+(f-31));
else if(f<1)
System.out.println(n+” days ago is:”+a+”-“+(b-1)+”-“+(f+30));
else
System.out.println(n+” days ago is:”+a+”-“+b+”-“+f);
}
if(b==4||b==6||b==9||b==11)
{
if(f>30)
System.out.println(n+” days ago is:”+a+”-“+(b+1)+”-“+(f-30));
if(f<1)
System.out.println(n+” days ago is:”+a+”-“+(b-1)+”-“+(f+31));
if(f<=30&&f>=1)
System.out.println(n+” days ago is:”+a+”-“+b+”-“+f);
}
if(b==12)
{
if(f>31)
System.out.println(n+” days ago is:”+(a+1)+”-1-“+(f-31));
else if(f<1)
System.out.println(n+” days ago is:”+a+”-“+(b-1)+”-“+(f+30));
else
System.out.println(n+” days ago is:”+a+”-“+b+”-“+f);
}
if(b==8)
{
if(f>31)
System.out.println(n+” days ago is:”+(a+1)+”-1-“+(f-31));
else if(f<1)
System.out.println(n+” days ago is:”+a+”-“+(b-1)+”-“+(f+31));
else
System.out.println(n+” days ago is:”+a+”-“+b+”-“+f);
}
if(b==1)
{
if(f>31)
System.out.println(n+” days ago is:”+a+”-“+(b+1)+”-“+(f-31));
else if(f<1)
System.out.println(n+” days ago is:”+(a-1)+”-12-“+(f+31));
else
System.out.println(n+” days ago is:”+a+”-“+b+”-“+f);
}
if(b==2)
{
if(d==true)
{
if(f>29)
System.out.println(n+” days ago is:”+a+”-“+(b+1)+”-“+(f-29));
if(f<1)
System.out.println(n+” days ago is:”+a+”-“+(b-1)+”-“+(f+31));
if(f<=29&&f>=1)
System.out.println(n+” days ago is:”+a+”-“+b+”-“+f);
}
else
{
if(f>28)
System.out.println(n+” days ago is:”+a+”-“+(b+1)+”-“+(f-28));
if(f<1)
System.out.println(n+” days ago is:”+a+”-“+(b-1)+”-“+(f+31));
if(f<=28&&f>=1)
System.out.println(n+” days ago is:”+a+”-“+b+”-“+f);
}
}
if(b==3)
{
if(d==true)
{
if(f>29)
System.out.println(n+” days ago is:”+a+”-“+(b+1)+”-“+(f-31));
if(f<1)
System.out.println(n+” days ago is:”+a+”-“+(b-1)+”-“+(f+29));
if(f<=29&&f>=1)
System.out.println(n+” days ago is:”+a+”-“+b+”-“+f);
}
else
{
if(f>28)
System.out.println(n+” days ago is:”+a+”-“+(b+1)+”-“+(f-31));
if(f<1)
System.out.println(n+” days ago is:”+a+”-“+(b-1)+”-“+(f+28));
if(f<=28&&f>=1)
System.out.println(n+” days ago is:”+a+”-“+b+”-“+f);
}
}
}
}
这两题主要是对月份的各个不同情况进行分析外加对方法的写法即可完成。
方法:
题目集三;
我们主要要学习的是如果自己构造一个类,对类的运用。还有就是对正则表达式的学习,还是它类中包含的一些方法,其中7-1.7-2比较简单,只要掌握了类就可以比较容易的完成,而7-3这题对正则表达式的不了解不知道从何下手,最后通过老师在群发的代码对这个有了初步的了解但是还是不是很熟,最后也没能完成,只有大体的思路还没有实现功能。
题目7-2; 定义日期类 (28 分)
定义一个类Date,包含三个私有属性年(year)、月(month)、日(day),均为整型数,其中:年份的合法取值范围为[1900,2000] ,月份合法取值范围为[1,12] ,日期合法取值范围为[1,31] 。 注意:不允许使用Java中和日期相关的类和方法,否则按0分处理。
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner input=new Scanner (System.in);
int year=input.nextInt();
int month=input.nextInt();
int day=input.nextInt();
Date data=new Date(year,month,day);
data.getNextDay();
}
public static class Date
{
private int year;
private int month;
private int day;
Date()
{}
Date(int year,int month,int day)
{
this.year=year;
this.month=month;
this.day=day;
}
// int getYear()
// {
// return year;
// }
// void setYear(int year)
// {
// this.year=year;
// }
// int getMonth()
// {
// return year;
// }
// void setMonth(int year)
// {
// this.year=year;
// }
// int getDay()
// {
// return year;
// }
// void setDay(int year)
// {
// this.year=year;
// }
boolean isLeapYear(int year)
{
if(year%400==0||(year%100!=0&&year%4==0))
return true;
else
return false;
}
void getNextDay()
{
int a=year;
int b=month;
int c=day;
int e=b+1;
int f=c+1;
int g=a+1;
boolean d=isLeapYear(year);
if(a>2000||a<1900||b>12||b<1||c<1||c>31||(d==false&&b==2&&c>28))
{
System.out.println(“Date Format is Wrong”);
System.exit(0);
}
if(b==1||b==3||b==5||b==7||b==8||b==10)
{
if(f>31)
System.out.println(“Next day is:”+a+”-“+e+”-1″);
else
System.out.println(“Next day is:”+a+”-“+b+”-“+f);
}
if(b==4||b==6||b==9||b==11)
{
if(f>30)
System.out.println(“Next day is:”+a+”-“+e+”-1″);
else
System.out.println(“Next day is:”+a+”-“+b+”-“+f);
}
if(b==12)
{
if(f>31)
System.out.println(“Next day is:”+g+”-“+1+”-1″);
else
System.out.println(“Next day is:”+a+”-“+b+”-“+f);
}
if(b==2)
{
if(d==true)
{
if(f>29)
System.out.println(“Next day is:”+a+”-“+e+”-1″);
else
System.out.println(“Next day is:”+a+”-“+b+”-“+f);
}
else
{
if(f>28)
System.out.println(“Next day is:”+a+”-“+e+”-1″);
else
System.out.println(“Next day is:”+a+”-“+b+”-“+f);
}
}
}
}
}
这题和第二次题目集中的7-4相似确实只要构造一个类然后把方法一个个填充即可。
题目7-3一
编写程序性,实现对简单多项式的导函数进行求解。详见作业指导书。
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.io.*;
public class Main
{
public static void main(String[] args)
{
Scanner input=new Scanner(System.in);
String s=input.nextLine();
s=s.replaceAll(” “,””);
String totalRegex = “([-+]?([1-9]+[0-9]*(\\*)?)?x?(\\^[+-]?[1-9]+[0-9]*)?)+”;
String sbuRegex = “[-+]?([1-9]+[0-9]*(\\*)?)?x?(\\^[+-]?[1-9]+[0-9]*)?”;
boolean bl=Pattern.matches(totalRegex,s);
if(bl==true)
{
Pattern pattern = Pattern.compile(sbuRegex);
Matcher matcher=pattern.matcher(s);
while(matcher.find())
{
String tmp=matcher.group();
int begin=matcher.start();
int end=matcher.end();
System.out.println(“项:”+tmp+” begin:”+begin+” end:”+ (end-1));
shuchu(tmp);
if(end==s.length())
break;
}
}
else
System.out.println(“Wrong Format”);
void shuchu(String s)
{
String n=”[-+]?([1-9]+[0-9]*”;
Pattern p= Pattern.compile(n);
Matcher m=p.matcher(s);
while(m.find())
{
String tmp=m.group();
int begin=m.start();
int end=m.end();
System.out.println(tmp);
if(end==s.length())
break;
}
}
}
这个题目到现在我也还没有解决,第一是对正则表达式的不了解,第二是对matcher
Pattern两类不了解。
3、踩坑心得:一开始有畏难情绪不是很想动手,但是慢慢的自己摸索都可以将问题予以解决,
1、没基础没基础得学啊,有谁生下来就有基础的,有哪一个Java大神生下来就有Java 基础的,有谁不是通过后天学习才成为大神的。
2、吸收慢吸收慢可以我们可以课前预习,课后多多点练习,别人花一个小时我们花两个小时。Java的学习是一个循循渐进的过程。
3、缺少练习
四.总结:在这三次学习中我能写一些简单的Java程序,比较复杂的还是不能很熟练的写出来,这是我要学习的地方。但是我认为我学习到的最大的地方是我最大如何去学习Java语言,上课听老师听讲,下课写练习,通过各种书籍和学习网站来学习Java语言,弥补自己的缺点。对于老师我十分的满意,就是很凶不是很想和他打交道,实验有点难有一些问题不知道如何解决,主要是自己忘记了还有实验美誉哦充足的时间,以后要养成自我的时间管理习惯,你要拖拉。还有就是我不是特别喜欢老师上课的那个小软件,因为自己在上面书写编写运行不是很舒服,不方便。