此作业的要求参见[https://edu.cnblogs.com/campus/nenu/2019fall/homework/5523]
1.熟悉 命令行和控制台
假设在当前目录下存在应用程序 a.exe 和 文件文件 b.txt,请以数据流图并辅助以文字说明下述控制台命令的作用是什么。(5分)
a.exe < b.txt > c.txt
答:控制台命令的作用是将文本文件b中的内容作为a程序的数据流入,然后a将流入的数据写入文本文件c。数据流图如下所示:
请用C言开发应用程序d.exe,从控制台指令读入命令行参数,并在控制台分别打印出a、b、c的值。运行效果形如下面的示例(6分)
d.exe a=1 b=2 c=3
1
2
3
代码:
#include<stdio.h> int main() { int a , b ,c; scanf("a=%d b=%d c=%d",&a,&b,&c); printf("%d\n%d\n%d\n",a,b,c); return 0; }
测试截图:
2.熟悉 测试用例
(1)请在网站 [https://pintia.cn/]注册账号。(0分)
(2)在题目集 PAT (Basic Level) Practice (中文) 中任选3道题目完成。截图如下,要求包括1.红色对号、2.标号、3.用户名(此例中为 Young)。(30分)
注意,需要读完本作业全部题目才能开始做题,有对时间记录和代码解读的要求。
1009 说反话
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子。
输入样例:Hello World Here I Come
输出样例: Come I Here World Hello
重要代码如下所示:
public class two { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String abc= scanner.nextLine(); //接收输入的整段语句,以回车结束 String[] zfc = abc.split(" "); //利用split函数将字符串分割为一个一维数组 for(int i=zfc.length-1;i>=0;i--){ //将数组逆向输出 System.out.print(zfc[i]); if(i!=0)System.out.print(" "); } } }
运行结果
难点:这个题目本身难度不是太大,主要的难点就是如何将输入的一句话重新切割,放入一个数组中,之前自己想了不少办法,经过在网上搜寻和查看java开发文档,找到了split函数。split函数的作用就是拆分字符串,通过指定分隔符对字符串进行切片。正好满足了题目需求。
1016 部分A+B
正整数 A 的“DA(为 1 位整数)部分”定义为由 A 中所有 DA 组成的新整数 PA。例如:给定 A=3862767,DA=6,则 A 的“6 部分”PA 是 66,因为 A 中有 2 个 6。
现给定 A、DA、B、DB请编写程序计算 PA+PB
输入格式:输入在一行中依次给出 A、DA、B、DB,中间以空格分隔,其中 0<A,B<1010。
输出格式:在一行中输出 PA+PB的值。
输入样例:3862767 6 13530293 3
输出样例: 399
for(int i=0;i<num1;i++) { if((A.charAt(i)-48) == DA) //利用charAt截取A里面的单一字符,因为其为数字字符形式需要减去48确保数值对应 { a1++; //累加A中相同字符个数 } } for(int j=0;j<num2;j++) { if((B.charAt(j)-48) == DB) { //用利用charAt截取B里面的单一字符,同样减去48 b1++; //累加B中相同字符个数 } } int PA=0,PB=0; for(int i=0;i<a1;i++) { PA = PA*10+DA; //将A中相同的数值拼接成一个整数 } for(int j=0;j<b1;j++) { PB = PB*10+DB; //将B中相同的数值拼接成一个整数 } System.out.println(PA+PB);
输出截图:
难点:按照题目的需要,如果将输入的A和B以整数形式接收,没法满足需求,只能以字符串形式,所以需要将字符串拆分为一个一个的字符,但是接收的字符串不能当作一个字符数组来使用,会出现语法错误。寻找这个解决办法确实花费了太长时间,主要也是自己学艺不精的原因。Java本身有一个charAt函数可以对字符串进行切分,很好的解决了问题,同时也给自己增加了知识点。
1087 有多少不同的值
当自然数 n 依次取 1、2、3、……、N 时,算式 ⌊n/2⌋+⌊n/3⌋+⌊n/5⌋ 有多少个不同的值?(注:⌊x⌋ 为取整函数,表示不超过 x 的最大自然数,即 x 的整数部分。)
输入格式:输入给出一个正整数 N(2≤N≤104)。
输出格式:在一行中输出题面中算式取到的不同值的个数。
输入样例:2017
输出样例:1480
部分代码:
public class three { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int num = scanner.nextInt(); int[] a = new int[3*num]; int count = 0,sum=0; for(int i=1;i<=num;i++) { sum = i/2+i/3+i/5; if(a[sum]==0) { count++; a[sum]=1; } } System.out.print(count); } }
输出截图:
难点:这道题基本算是简单的,因为之前自己做过类似的,做起来还是比较顺利的,这道题主要注意的地方有两个,一是数组a的容量一定要大点,因为小了容易造成容量不足:二是if中的判断条件,需要确保a数组没有数值。
PSP表格:
原因:
(1)对语法十分不熟练,全部都忘的一干二净,有点高估自己(2)查找资料的时候,花费时间较多,自己的查找方法有问题 (3)对PTA平台不熟悉,提交时频频出错。
这次作业确实给自己提醒了一次警钟,无论做什么基础最重要,一定要认清自己的实力,从实际出发,一步一个脚印,踏实学习。