梁梦瑶 20190905-3 命令行和控制台编程

此作业的要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/5523

1.熟悉 命令行和控制台 

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

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

a.exe < b.txt > c.txt

答:“<”代表输入重定向,将文档b代替键盘作为程序a的输入,“>”代表输出重定向,该运算符会导致建立一个名为c.txt的新文件供我们使用,然后将a.exe的输出重定向到该文件。

请用C语言开发应用程序d.exe,从控制台指令读入命令行参数,并在控制台分别打印出abc的值。运行效果形如下面的示例(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);
}

 

 

 

控制台程序

 

 

2.熟悉 测试用例


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


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


(3)代码解读。(20分)


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

答:(2)

                                                            

(3)代码解读

1001题目:害死人不偿命的3n+1猜想
重难点:
此题目较为简单,需要做的工作就是重复对n进行切割。如果n为偶数,那n就变成原来的一半,如果n为奇数,那n就变为(3*n+1)/2,将这个过程进行循环,设置一个计数器每循环一次计数器+1,退出循环的条件是n==1,最终输出计数器的个数。重难点就在于循环的内容和循环条件的判断。
重要代码片断:
  while(n!=1)
    {
       if(n%2==0)
        {
          n=n/2;
          count++;
        }
        else
        {
          n=(3*n+1)/2;
          count++;
        }
    }

 


 1006题目:换个格式输出整数

重难点:此题的重点即为给一个整数后能够分别得到它的个位十位和千位,得到个十百千位以后就可以使用循环打出想要的答案。

重要代码片断:

    a=n/100;
    b=n%100/10;
    c=n%10;
    for(int i=1;i<=a;i++)
        putchar('B');
    for(int j=1;j<=b;j++)
        putchar('S');
    for(int k=1;k<=c;k++)
        printf("%d",k); 

 

 

 

1009题目:说反话

重难点:重点就是当遇到空格时说明一个单词的结束,单词个数加1,可使用二维数组,分别来统计单词个数和单词的长度,最后可将二维数组当做特殊的一维数组,倒向输出单词即可。

重要代码片断:

 

    gets(str1);
    for(i=0;i<strlen(str1);i++)
    {
        if(str1[i]=='\n')
          break;
        if(str1[i]==' ')
        {
            str2[j][m]='\0';
            j++;
            m=0;
            n++;
        }
        else
        {
            str2[j][m]=str1[i];
            m++;
        }
    }
    str2[j][m]='\0';
    for(i=n;i>0;i--)
    {
        printf("%s ",str2[i]);
    }
    printf("%s",str2[0]);

 

 

 

 


 3.psp表格

 代码1出现偏差的原因是很久不太用c语言了,知识有点生疏,出现很多小错误进行了多次修改。

 代码2出现偏差的原因是之前遇到这个题目,已经做过一遍了,所以比预计时间少了一点。

代码3出现偏差的原因是对数组这方面的知识遗忘太多了,这个题目对我而言很有难度。

 

posted @ 2019-09-08 17:12  summerkingy  阅读(210)  评论(1编辑  收藏  举报