• 20200910-3 命令行和控制台编程


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

    1.熟悉 命令行和控制台/标准输入和标准输出
    假设在当前目录下存在应用程序 a.exe 和 文件文件 b.txt,请以数据流图并辅助以文字说明下述控制台命令的作用是什么。(5分)

    数据流图:

    a.exe < b.txt > c.txt 控制台命令的作用:b文件中的数据输入a应用程序中执行,将结果数据覆盖到新生成的c文件中。<和>为重定向命令。

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

    代码:

    #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
    
    ",a);
        printf("%d
    
    ",b);
        printf("%d",c);
        return 0;
    }

    运行截图:

       

    2.熟悉 测试用例

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

    (3)代码解读 (20分)

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

     1006 换个格式输出整数 (15分)

    让我们用字母 B 来表示“百”、字母 S 表示“十”,用 12...n 来表示不为零的个位数字 n<10),换个格式来输出任一个不超过 3 位的正整数。例如 234 应该被输出为 BBSSS1234,因为它有 2 个“百”、3 个“十”、以及个位的 4。

    输入格式:

    每个测试输入包含 1 个测试用例,给出正整数 n(<1000)。

    输出格式:

    每个测试用例的输出占一行,用规定的格式输出 n。

    输入样例 1:

    234

    输出样例 1:

    BBSSS1234

    输入样例 2:

    23

    输出样例 2:

    SS123

    重点/难点:求个、十、百位的数字,并根据数字循环输出。

    重要代码:

    while(scanf("%d",&n)!=EOF&&n<1000)
       {
          b=n/100;
          for(i=0;i<b;i++)
          {
            printf("B");
          }
          s=n/10%10;
          for(i=0;i<s;i++)
          {
            printf("S");
          }
          g=n%10;
          for(i=0;i<g;i++)
          {
            printf("%d",i+1);
          }
       }

    运行截图:

    1021 个位数统计 (15分)

    给定一个 k 位整数 N=dk1​​10k1​​++d1​​101​​+d0​​ (0di​​9, i=0,,k1, dk1​​>0),请编写程序统计每种不同的个位数字出现的次数。例如:给定 N=100311,则有 2 个 0,3 个 1,和 1 个 3。

    输入格式:

    每个输入包含 1 个测试用例,即一个不超过 1000 位的正整数 N。

    输出格式:

    N 中每一种不同的个位数字,以 D:M 的格式在一行中输出该位数字 D 及其在 N 中出现的次数 M。要求按 D 的升序输出。

    输入样例:

    100311

    输出样例:

    0:2
    1:3
    3:1 

    重点/难点:

    • 定义一个字符数组存放不超过1000位的正整数N,且进行初始化,否则数组中各元素的值不可预料。
    • 如果数字出现次数为0,则不输出,所以需要加上代码if(b[j]==0)continue;,continue作用不执行continue之后的语句而执行下一次循环。

    重要代码:

    for(i=0;a[i]!='';i++)
       {
          num=a[i]-'0';
          b[num]++;
       }
    for(j=0;j<10;j++)
       {
          if(b[j]==0)continue;
          printf("%d:%d
    ",j,b[j]);
       }

    运行截图:

    1042 字符统计 (20分)

    请编写程序,找出一段给定文字中出现最频繁的那个英文字母。

    输入格式:

    输入在一行中给出一个长度不超过 1000 的字符串。字符串由 ASCII 码表中任意可见字符及空格组成,至少包含 1 个英文字母,以回车结束(回车不算在内)。

    输出格式:

    在一行中输出出现频率最高的那个英文字母及其出现次数,其间以空格分隔。如果有并列,则输出按字母序最小的那个字母。统计时不区分大小写,输出小写字母。

    输入样例:

    This is a simple TEST. There ARE numbers and other symbols 1&2&3...........

    输出样例:

    e 7

    重点/难点:

    •  由于统计时不区分大小写,所以a和A的个数都统计在a[0]中,其它同理。
    • 统计并输出出现频率最高的英文字母及其次数,设置一个max变量,如果有比它次数更高的则替换,同时解决了并列问题。

    重要代码:

    for(i=0;arr[i]!='';i++)
        {
            if('a'<=arr[i]&&arr[i]<='z')
                num[arr[i]-'a']++;
            if('A'<=arr[i]&&'Z'>=arr[i])
                num[arr[i]-'A']++;
        }
    for(i=0;i<26;i++)
        {
            if(max<num[i])
            {
                max=num[i];
                c=i+'a';
            }
        }
    printf("%c %d",c,max);

    运行截图:

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

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

    图表过小、字迹不清、错别字、句子不通顺的,教师会因为读不懂而对此题扣分。

    1006 换个格式输出整数:

    测试数据:

    345

    124

    34

    测试结果图:

     1021 个位数统计:

    测试数据:

    123433

    测试结果图:

     1042 字符统计:

    测试数据:

    asgdhdjk

    测试结果图:

    (4) PSP(8分)

    在同一篇博客中,参照教材第35页表2-2和表2-3,为上述3个题目制作PSP阶段表格。

    PSP阶段表格第1列分类,如功能1、功能2、测试功能1等。

    要求1 估算你对每个功能 (或/和子功能)的预计花费时间,填入PSP阶段表格,时间颗粒度为分钟。 

    要求2 记录词频统计项目实际花费时间,填入PSP阶段表格,时间颗粒度要求分钟。

    要求3 对比要求1和要求2中每项时间花费的差距,分析原因。

     

  • 相关阅读:
    前端工程师们,这些干货让你开发效率加倍
    我的代码片段
    人生至少有一次为了自己的勇气而活
    美食篇之御桥小聚
    美食篇之好好对自己
    F
    Github 简明教程
    A
    完美字符串
    1222: FJ的字符串 [水题]
  • 原文地址:https://www.cnblogs.com/zhangwenyan/p/13660528.html
Copyright © 2020-2023  润新知