作业要求参见: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 %d %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语法不熟悉,尤其是字符串处理,需要重新看书,并加强练习。 |