董亚辉 20190905 命令行和控制台编程

此作业的要求参见[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
%d
%d
",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 的“D​A​​(为 1 位整数)部分”定义为由 A 中所有 D​A​​ 组成的新整数 P​A​​。例如:给定 A=3862767,D​A​​=6,则 A 的“6 部分”P​A​​ 是 66,因为 A 中有 2 个 6。

 现给定 A、DA、B、DB请编写程序计算 PA+PB

输入格式:输入在一行中依次给出 A、D​A​​、B、D​B​​,中间以空格分隔,其中 0<A,B<10​10​​。

 输出格式:在一行中输出 P​A​​+P​B的值。

 输入样例: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平台不熟悉,提交时频频出错。

    这次作业确实给自己提醒了一次警钟,无论做什么基础最重要,一定要认清自己的实力,从实际出发,一步一个脚印,踏实学习。

原文地址:https://www.cnblogs.com/dongyahui/p/11506732.html