20200910-3 命令行和控制台编程

 

作业要求参见:https://edu.cnblogs.com/campus/nenu/2020Fall/homework/11185

1.(1)熟悉 命令行 和 控制台/标准输入和标准输出

  假设在当前目录下存在应用程序 a.exe 和 文件文件 b.txt,

  请以数据流图并辅助以文字说明下述控制台命令的作用是什么。(5分)

   

a.exe < b.txt > c.txt

  答:a可执行文件包含了处理文件的功能,通过读取b.txt文件内容,通过处理,最终将结果写入c.txt中保存。

 

  (2)请用C语言开发应用程序d.exe,从控制台指令读入命令行参数,并在控制台分别打印出a、b、c的值。运行效果形如下面的示例(6分)

  代码:

 

#include <stdio.h>
int main(int argc, char  *argv[])
{
    int a,b,c;
    sscanf(argv[1], "a=%d", &a);
    sscanf(argv[2], "b=%d", &b);
    sscanf(argv[3], "c=%d", &c);
    printf("%d\n%d\n%d",a,b,c);   
    return 0;
}

 

 

 

 exe是windows操作系统可执行文件,在MacOS系统终端编译运行运行结果如下:

 在macOS终端末尾无换行符号会出现反色的%,这一点与Windows的不同。

2.熟悉 测试用例

(1)请在网站 [https://pintia.cn/]注册账号。(0分)

  账号昵称:lh

(2)在题目集 PAT (Basic Level) Practice (中文) 中任选3道题目完成。截图如下,要求包括1.红色对号、2.标号、3.用户名(此例中为 Young)。(30分)

    注意,需要读完本作业全部题目才能开始做题,有对时间记录和代码解读的要求。

  答:这里的题以前用C++刷过一部分,最近新学习了Python,用Python完成3道入门题练习一下。选题为1001、1002、1006。(通过率高,简单题,适合我这种菜鸟)

 

(3)代码解读 (20分)

    发表博客,介绍上述3个题目代码中重点/难点,展示重要代码片断,给出执行效果截图,展示你感觉得意、突破、困难的地方。

   答:1001 害死人不偿命的(3n+1)猜想 (15分)

        解题思路:偶数除二,奇数(3n+1)除二。模拟类型题。

    难点:对Python语言的不熟悉,书看了,但自己上手编程漏洞百出。Python语言我觉得与我最熟悉的C语言相比太灵活了,甚至有些“随意”。比如:input输入,在C语言需要指明输入类型%d,并且需要提前定义变量。在Python,统统不需要!结果入门题也用了17分钟完成。刚开始就遭遇滑铁卢,我知道了学习新语言光看不行,动手实操最重要,哪怕看了半本书也不会。

 

n = 0
number = eval(input())
while number != 1 :
    n = n + 1
    if number % 2 == 0:
        number = number/2
    else:
        number = (number * 3 + 1)/2
print(n)

 

  终端运行结果图:

 

AC截图:(C++编写为历史提交)

 

    1002 写出这个数 (20分)

    解题思路:很简单,就是模拟类型,咋说咋做。结果用时41分钟。。。

    难点:体现出Python的优势了,大数处理不在话下,10的100次方也没问题,不过Python有些东西真的和C语言不一样,C语言做整数除法结果是整数,Python想要得到整数要用//才行。在进行程序调试的时候及时添加输出语句或者使用IDE断点调试可以很快找出bug。

    

n = 0
number = eval(input())
while number != 0:
    n = n + number % 10
    number = number // 10
def change(value):
    switcher = {
        0: "ling",
        1: "yi",
        2: "er",
        3: "san",
        4: "si",
        5: "wu",
        6: "liu",
        7: "qi",
        8: "ba",
        9: "jiu"
    }
    return switcher.get(value)
nu = str(n)
for i in nu[:-1]:
    print(change(eval(i)), end=' ')
print(change(eval(nu[-1])))

 

 运行结果图:

 

     1006 换个格式输出整数 (15分)

    解题思路:字符串处理。

    难点:要熟练运用Python字符串处理,我开始想用for循环输出的,结果发现原来字符串乘数字就可以完成拼接。

number = int(input())
Bai = number//100
Shi = (number%100)//10
Ge = number%10
print("B"*Bai,end='')
print("S"*Shi,end='')
for i in range(1,Ge+1):
    print(i,end='')

 

运行结果:

 结尾为啥多出百分号?AC了已经,后来查了半天资料才知道:

 

原文链接:https://aoenian.github.io/2019/06/30/python-zsh-percent-prompt/

(4)控制台应用 (15分)

要求在博客中给出测试数据。参照上一题中“控制台”的知识,给出运行时从控制台读入测试数据和向控制台输出的截图。

图表过小、字迹不清、错别字、句子不通顺的,教师会因为读不懂而对此题扣分。

1001 害死人不偿命的(3n+1)猜想
测试数据:(正整数,1为边界数据)
1
3

测试结果截图:



1002 写出这个数
测试数据:(题目要求10的100次方以内)

123000000000000000000000000000000000000000000000004

测试结果截图:




1006 换个格式输出整数
测试数据:(1000以内)
135

测试结果截图:



(5) PSP(8分)

  预计花费时间  实际花费时间 花费时间差距 原因
题目1001 10min 17min 7min 不熟悉Python语法,基本语法也需要现查现用。
题目1002 15min 41min 26min 输出格式不对,总是部分正确,没发现这个问题还以为算法有问题,以为Python不支持10的100次方,反复调整没错的地方,导致浪费大量时间。
题目1006 10min 19min 9min Python语法不熟悉,尤其是字符串处理,需要重新看书,并加强练习。

 

 











posted @ 2020-09-13 21:24  lhbat  阅读(156)  评论(0)    收藏  举报