付宇泽20190905-3 命令行和控制台编程

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

1.熟悉 命令行和控制台

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

a.exe < b.txt > c.txt

     b.txt中存放a.exe所需的输入数据,在控制台执行命令时,b.txt中的数据作为a.exe的输入数据传递给a.exe。a.exe接受输入数据运行后的结果传递给系统创建的c.txt后保存。

请用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 a,b,c;
    scanf("a=%d b=%d c=%d",&a,&b,&c); 
    printf("%d

%d

%d",a,b,c);
}

截图如下:

 2.熟悉 测试用例

(1)请在网站 [https://pintia.cn/]注册账号。(0分)

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

(3)代码解读。(20分)

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

 1001:

难点:本题无难点,题目理解简单,只要基础语法掌握即可做出。

重要代码片段:

        for(i=0;n!=1;i++){
           if(n%2==0)
                   n=n/2;//偶数除2 
           else
                   n=(3*n+1)/2;//奇数(3*n+1)/2 
        }
        printf("%d",i);
return 0; }

执行效果:

1002:

难点:此题需注意类型范围,需用数组输入。功能段略多,思路一定要清晰。本题测试点较多,需要各种数据情况面面俱到方可按要求正确解出。另外如果选的编译器是c++的话,如果你的字符串数组是按C风格初始化的话,记得前面加const。

重要代码片段:

    int p;
    char const *s[]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
    char n[100];
    //p为每位值,s为对应数字的拼音数组,n为输入数字数组。 
    while(scanf("%s",n)!=EOF){
        int i,sum=0; //i:和值位数,sum为和值 
           for(i=0;i<(signed)strlen(n);i++){
               sum+=n[i]-'0';            
         }  //求和过程 
        for(i=10;i<=sum;){    
            i*=10;        
        }    
        i/=10;//得出和位数 
        while(i){
            p=sum/i;
            if(i<10)//i<10说明到了最后一位
            printf("%s",s[p]);    
            else 
            printf("%s ",s[p]);    
            sum=sum-p*i;
            i/=10;
        }  return 0;          
    }    

执行效果截图:

1006:

难点:本题无难点,题目易懂,把各个位数分离出也很简单,基础语法掌握即可做出。

重要代码片段:

    int n,i,j,k,count;//n:输出 i:百位数 j:十位数 k:个位数  count:循环计数 
    while(scanf("%d",&n)!=EOF&&n<1000){
        k=n%10;
        j=(n-k)/10%10;
        i=n/100;
        for(count=1;count<=i;count++){
            printf("B");
        } 
        for(count=1;count<=j;count++){
            printf("S");
        } 
        for(count=1;count<=k;count++){
            printf("%d",count);
        } 
    }

执行效果截图:

(4) PSP(8分)

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

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

PSP阶段 预计花费时间 实际花费时间 时间差
功能1 10 19 9
测试功能1 3 1 -2
功能2 40 118 78
测试功能2 15 43 28
功能3 10 6 -4
测试功能3 3 1 -2

功能1实际花费比预计花费时间多的原因是因为长时间不接触题目语法太过生疏,3*n竟然写成3n浪费大量时间,真是蠢哭了。

功能2由于第一次使用这个网站,测试点较多,不清楚测试点测试的究竟是什么,不清楚测试点错误的原因的情况下重写多次代码,浪费大量时间,最后发现原因后马上就改过了,也是要哭了。

功能3由于基本错误再犯我就要哭死了,所以很快就做完了。

 

 

原文地址:https://www.cnblogs.com/Fuyuze/p/11491733.html