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

原文地址:https://www.cnblogs.com/simpleli66/p/11487386.html