zoukankan      html  css  js  c++  java
  • 宋晓丽20190905-3 命令行和控制台编程

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

    1.熟悉命令行和控制台

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

    请以数据流图并辅助以文字说明下述控制台命令的作用是

    a.exe < b.txt > c.txt

    答:“<”将输入重定向到文本b中,即将文本b中的内容作为程序a的输入,“>”将输出重定向到文本c中,即程序a经过运行得到的结果,被保存到文本c中。

    数据流图如下:

    请用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 n,char  *arrg[])
    {
        int a,b,c;
        sscanf(arrg[1],"a=%d",&a);
        sscanf(arrg[2],"b=%d",&b);
        sscanf(arrg[3],"c=%d",&c);
        printf("%d
    
    ",a);
        printf("%d
    
    ",b);
        printf("%d",c);    
        
        return 0;
    }

    截图:

    2.熟悉、测试用例

    2)完成题目截图

    (3)1001害死人不偿命的(3n+1)猜想   要求:对任何一个正整数 n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把 (3n+1) 砍掉一半。这样一直反复砍下去,最后一定在某一步得到 n=1,

    输入一个正整数,计算需要多少步(砍几下)才能得到 n=1?

    重难点:判断给定整数是奇数还是偶数;循环结束的条件

    重要代码:

        int sum=0;
        while(n!=1)
        {
            if(n%2==0)
            {
                n/=2;
                sum++;
            }
            else
            {
                n=n*3+1;
                n/=2;
                sum++;
            }
    }

    执行效果截图

    1006换个格式输出整数   要求:让我们用字母 B 来表示“百”、字母 S 表示“十”,用 12...n 来表示不为零的个位数字 n<10),

    换个格式来输出任一个不超过 3 位的正整数。例如 234 应该被输出为 BBSSS1234,因为它有 2 个“百”、3 个“十”、以及个位的 4。

    重难点:如何得到百位数字、十位数字和个位数字

    重要代码:

        int a=num%10;
        int b=(num/10)%10;
        int c=num/100;
        if(c!=0)
          for(int i=1;i<=c;i++)
              putchar('B');
        if(b!=0)
           for(int i=1;i<=b;i++) 
               putchar('S');
        if(a!=0)
            for(int i=1;i<=a;i++)
                printf("%d",i);

    执行效果截图:

    1021个位数统计   要求:输入一个不超过1000位的正整数,统计里面个位数字出现的次数,将次数非0的按照“D:M”格式输出

    重难点:如何存储接近1000位的正整数

    重要代码:

        char a[1001];
        scanf("%s",a);
        int num[10],k;
        for(int i=0;i<=9;i++)
            num[i]=0;
        int l=strlen(a);
        for(int i=0;i<l;++i)
        {
            k=a[i]-48;
            num[k]++;
        }
        for(int i=0;i<10;++i)
        {
            if(num[i]!=0)
              printf("%d:%d
    ",i,num[i]);
        }

    执行效果截图:

    (4)PSP

    出现时间差的原因:

    (1)1001害死人不偿命的(3n+1)猜想编码:长时间没有用c语言编程,对于它的输入输出还有一些基本的格式有很多遗忘,花时间补了一

    些这方面的知识。

    (2)1006换个格式输出整数编码:在输出字母这里,开始使用的printf,但忘记给字母加分号,编译时出现了错误,当时没想到加分号,又改成了putchar,还是基础知识有点薄弱。

    (3)1021个位数统计编码:在编码时,我开始定义的变量是int类型,提交时提示部分错误,又改成了long类型,还是不行,后来思考了一下,对于位数极多的整数,还想统计每一个个位数字出现的个数,只能定义成字符数组的形式,用时再把字符转成整数,还是编程的经验不太够,思考不全面。

  • 相关阅读:
    NPOI单元格公式不刷新
    DIV+CSS HACK
    简答好用的邮件服务器hMailServer(转)
    C# 后台POST和GET 获取数据
    Quartz.Net1.0.2.3 配置记录
    ASP.NET自定义控件VS2012中添加失败(下列控件已成功添加到工具箱中,但未在活动设计器中启用)
    NPOI 1.2.5复制行(包括格式)
    Javascript中Null和Undefined的区别[转]
    测试流程(立项会)
    测试计划
  • 原文地址:https://www.cnblogs.com/simpleli66/p/11487386.html
Copyright © 2011-2022 走看看