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\n\n",a);
    printf("%d\n\n",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]!='\0';i++)
   {
      num=a[i]-'0';
      b[num]++;
   }
for(j=0;j<10;j++)
   {
      if(b[j]==0)continue;
      printf("%d:%d\n",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]!='\0';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中每项时间花费的差距,分析原因。

 

posted @ 2020-09-14 01:07  zwh12  阅读(195)  评论(2编辑  收藏  举报