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

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

1.熟悉 命令行和控制台

假设在当前目录下存在应用程序 a.exe 和 文件文件 b.txt,

请以数据流图并辅助以文字说明下述控制台命令的作用是什么。(5分)

a.exe < b.txt > c.txt


作用:文档传入程序a,程序a运行将内容传给文档c。
请用C语言开发应用程序d.exe,从控制台指令读入命令行参数,并在控制台分别打印出a、b、c的值。
#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/]注册账号。

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

(3)代码解读。

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

1001 害死人不偿命的(3n+1)猜想:对给定的任一不超过 1000 的正整数 n,简单地数一下,需要多少步(砍几下)才能得到 n=1?

此题的重点在于首先判断不等于1,否则会输出2步,与实际不符。其次是判断n为奇数/偶数的判断条件。

#include<stdio.h>
int main()
{
    int n,count=0;
    scanf("%d",&n);
    while(n!=1)
    {
        if(n%2==0){
            n=n/2;
        }else{
            n=(3*n+1)/2;
        }
        count++;
    }
    printf("%d",count);
    return 0;
}

运行截图:

1036 跟奥巴马一起编程:输入在一行中给出正方形边长 N(3N20)和组成正方形边的某种字符 C,间隔一个空格。

此题是一道打印图案的题目,重点在于行、列的判断条件,分清(N+1)/2还是(N-1)/2。

#include<stdio.h>
int main()
{
    int N,r,l;
    char s;
    scanf("%d %c",&N,&s);
    for(r=0;r<(N+1)/2;r++)
    {
        for(l=0;l<N;l++)
        {
            if( l==0 || l==N-1 || r==0 || r==(N-1)/2)
                putchar(s);
            else
            printf(" ");
        }
        printf("
");
    }
    return 0;
}

运行截图:

1047 编程团体赛 :输入第一行给出一个正整数 N(104​​),即所有参赛队员总数。随后 N 行,每行给出一位队员的成绩,格式为:队伍编号-队员编号 成绩,其中队伍编号为 1 到 1000 的正整数,队员编号为 1 到 10 的正整数,成绩为 0 到 100 的整数。

输出要求:在一行中输出冠军队的编号和总成绩,其间以一个空格分隔。注意:题目保证冠军队是唯一的。

此题重点在于(1)每个队员成绩的累加:运用加法赋值运算符进行累加计算。(2)选出分数最高队伍的部分:利用循环,将各个队伍的分数两两进行比较 ,最后输出最大的一队及其分数

#include<stdio.h>
int main()
{
    int N,a,b,c,max=0,team[1000]={0};
    if(scanf("%d",&N) >0){}
    for(int i=0; i<N; i++)
    {
        scanf("%d-%d %d", &a,&b,&c);
        team[a-1] += c;
    }
    for(int j=0; j<1000; j++)
    if(team[j] > team[max])
    max=j;
    printf("%d %d",max +1,team[max]);
    return 0;
}

运行截图:

 

(4) PSP(8分)

  预计花费时间  实际花费时间 花费时间差距 原因
题目1001          10min  13min 3min

题目本身思路不难,由于C语言使用不够熟练,实际时间超出了预计。

题目1036 12min 17min 5min

是绘制图案的题目,在if语句:判断行、列;回顾putchar()函数上费了一定时间。

题目1047 20min 34min 14min

题中涉及到的变量较多,还有两个循环语句,稍微比前两题复杂一些。前几次提交答案后网站一直显示scanf()返回值被忽略的错误,搜索了其他人的经验后,更正为if(scanf("%d",&N) >0){}才通过,浪费了部分时间。

 
原文地址:https://www.cnblogs.com/wkf-/p/11484929.html