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中每项时间花费的差距,分析原因。

 答:

 

posted @ 2019-09-09 14:13  刘信鹏  阅读(290)  评论(2编辑  收藏  举报