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类型,还是不行,后来思考了一下,对于位数极多的整数,还想统计每一个个位数字出现的个数,只能定义成字符数组的形式,用时再把字符转成整数,还是编程的经验不太够,思考不全面。

  • 相关阅读:
    toj 2975 Encription
    poj 1797 Heavy Transportation
    toj 2971 Rotating Numbers
    zoj 2281 Way to Freedom
    toj 2483 Nasty Hacks
    toj 2972 MOVING DHAKA
    toj 2696 Collecting Beepers
    toj 2970 Hackle Number
    toj 2485 Card Tric
    js页面定位,相关几个属性
  • 原文地址:https://www.cnblogs.com/simpleli66/p/11487386.html
Copyright © 2011-2022 走看看