20200910-3命令行和控制台编程 作业提交

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

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

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

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

作用:将b.txt中的数据输入到a.exe程序中执行,最后输出到c.txt中。

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

 

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a,b,c;
    scanf("a=%d b=%d c=%d",&a,&b,&c);
    printf("%d\n%d\n%d\n",a,b,c);
    return 0;
}

运行结果:

 

 

 

 

 2.熟悉 测试用例

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

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

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

 

 

 

(3)代码解读 (20分)

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

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

  本题难点在于计算猜想的步数,那么就需要一个设一个计数的值,每循环一次计数值加一即可。

循环也很容易理解,奇数就是3n+1再除2,偶数直接除2,直到数值变为1。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int numb;
    scanf("%d",&numb);
    int count=0;
    while(numb!=1)
    {
        count++;
        if(numb%2==0)
            numb=numb/2;
        else
            numb=(3*numb+1)/2;

    }
    printf("%d",count);

}

 

 

 

 运行结果如下:

  

1002 写出这个数

读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。

本体难点在于将数字和打印成拼音,所以我先设立了一个数组,将拼音存入数组中,先计算这么大的一个数字的每位数之和,

再将和的每位数存在一个新的数组中,最后再倒序打印对应的拼音。

 

#include <stdio.h>
#include <stdlib.h>
#include<string.h>

int main()
{
    int sum=0,i=0,j=0;
    char  py[10][5]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
    char numb[100];
    int a[10];

    scanf("%s",numb);

    //计算各个位数之和
    for(i;i<strlen(numb);i++)
        sum+=numb[i]-'0';

    //将和的每位数存储到数组中
    while(sum>0)
    {
        a[j++]=sum%10;
        sum=sum/10;
    }

    //因为存储再数组中的每位数是反过来的,所以需要倒序打印拼音
    for(i=j-1;i>=0;i--)
    {
         if(i==0)
        {
            printf("%s",py[a[i]]);

        }else{
            printf("%s ",py[a[i]]);
        }
     }

    return 0;

}

结果如下:

1006 换个格式输出整数 

让我们用字母 B 来表示“百”、字母 S 表示“十”,用 12...n 来表示不为零的个位数字 n<10),换个格式来输出任一个不超过 3 位的正整数。

本题重点:因为最多不超过1000,所以可以用abc代表个十百位上的数,然后是几就输出几个B或者S,个位数输出稍微不同,用一下循环语句就好。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int  numb,a,b,c;
    scanf("%d",&numb);
    if(numb>=0)
        a=numb%10;  
    else
        return 0;
    if(numb/10>0)
        b=(numb/10)%10;
     else
        b=0;
   if(numb/100>0)
        c=numb/100;
    else
        c=0;
    pfB(c);//输出百位
    pfS(b);//输出十位
    pfG(a);//输出个位


}

void pfS(int n)
{
    int i;
    for(i=0;i<n;i++)
        printf("S");
}
void pfB(int n)
{
    int i;
    for(i=0;i<n;i++)
        printf("B");
}
void pfG(int n)
{
    int i;
    for(i=1;i<=n;i++)
        printf("%d",i);
}

 

结果如下

 

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

要求在博客中给出测试数据。

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

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

测试数据:

5

测试结果截图:

 

 

1002写出这个数 

测试数据:

24234234324234

测试结果截图:

 

 

 

1006换个格式输出整数 

测试数据:

234

测试结果截图:

 

 

 (5) PSP(8分)

  预计花费时间min 实际花费时间min 花费时间差距min 原因
题目1001 10 13 3 一开始在思考计数的数放在哪里合适
题目1002 20 30 10 有一些细节没有注意到,浪费了很多时间比如最后一位输出不能有空格,还有转变数据格式有点慢。
题目1006 8 10 2 想用函数调用所以就慢了点

 

 

posted @ 2020-09-13 09:33  晦涩2  阅读(171)  评论(2编辑  收藏  举报