20190905-3 命令行和控制台编程
此作业的要求参见[https://edu.cnblogs.com/campus/nenu/2019fall/homework/5523]
1.熟悉 命令行和控制台
(1)假设在当前目录下存在应用程序 a.exe 和 文件文件 b.txt,请以数据流图并辅助以文字说明下述控制台命令的作用是什么。(5分)
a.exe < b.txt > c.txt
答:此控制台命令的作用是将标准输入重定向为文件b.txt,标准输出重定向到c.txt,也就是说,数据基本流向为,由b经a到c,进一步可如下数据流图:
(2)请用C言开发应用程序d.exe,从控制台指令读入命令行参数,并在控制台分别打印出a、b、c的值。运行效果形如下面的示例(6分)
d.exe a=1 b=2 c=3
1
2
3
d.exe a=11 b=22 c=33
11
22
33
答:代码及运行结果如下:
#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\n",a);//输出第一个参数 printf("%d\n\n",b);//输出第二个参数 printf("%d",c);//输出第三个参数 return 0; }
2.熟悉 测试用例
(2)在题目集 PAT (Basic Level) Practice (中文) 中任选3道题目完成。截图如下,要求包括1.红色对号、2.标号、3.用户名(此例中为 Young)。(30分)
注意,需要读完本作业全部题目才能开始做题,有对时间记录和代码解读的要求。
答:题目完成情况如图:
(3)代码解读。(20分)
发表博客,介绍上述3个题目代码中重点/难点,展示重要代码片断,给出执行效果截图,展示你感觉得意、突破、困难的地方。
答:
①题目1006: 换个格式输出整数
题目要求参见[https://pintia.cn/problem-sets/994805260223102976/problems/994805318855278592]
本题重点是要理清楚,对于此输入的整数,字符的输出规律与各位上的数字有直接的关系,因此也要会求百位、十位、个位上的数字。
bai=n/100;//计算得到百位 shi=n%100/10;//计算得到十位 ge=n%10;//计算得到个位 //控制输出B for(i=0;i<bai;i++) { printf("B"); } //控制输出S for(i=0;i<shi;i++) { printf("S"); } //控制输出数字 for(i=0;i<ge;i++) { printf("%d",i+1); }
②题目1021:个位数统计
题目要求参见[https://pintia.cn/problem-sets/994805260223102976/problems/994805300404535296]
本题重点是要理清楚,对于位数很大的一个整数的输入,需要怎样处理接收,以及如何有效的统计各位数字的个数,并且保存起来进行累加;
本程序缺点是,如果是各位数字几乎相同时,代码中的数组将有很多荒废空间没有利用,因此此处有改进空间
//统计各位数的个数 while((temp=getchar())!='\n') { N=temp-'0'; data[N]++; } //输出各位数 for(i=0;i<10;i++) { if(data[i]) { printf("%d:%d\n",i,data[i]); } }
③题目1056:组合数的和
题目要求参见[https://pintia.cn/problem-sets/994805260223102976/problems/994805271455449088]
本题难点在于找求解规律,由于知道N个非0的个位数字,求所有他们组合出新的两位数之和,每个数字在十位出现的次数为N-1此,在个位出现的次数也为N-1次,因此只需要知道这个规律,就可以很快的求解所有组合的数字之和了
for(i=0;i<N;i++) { scanf("%d",&data[i]); } for(i=0;i<N;i++) { for(j=0;j<N-1;j++) { count+=data[i]*10+data[i]; } }
(4) PSP(8分)
在同一篇博客中,参照教材第35页表2-2和表2-3,为上述3个题目制作PSP阶段表格。
PSP阶段表格第1列分类,如功能1、功能2、测试功能1等。
要求1 估算你对每个功能 (或/和子功能)的预计花费时间,填入PSP阶段表格,时间颗粒度为分钟。
要求2 记录词频统计项目实际花费时间,填入PSP阶段表格,时间颗粒度要求分钟。
要求3 对比要求1和要求2中每项时间花费的差距,分析原因。
答: