• 作业要求 20190905-3 命令行和控制台编程


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

    1.熟悉 命令行和控制台

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

    答:B里面的内容作为程序a的数据输入,最后结果结果输出到c并保存。

    请用C言开发应用程序d.exe,从控制台指令读入命令行参数,并在控制台分别打印出a、b、c的值。

    代码如下:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        int a,b,c;
        scanf("a=%d b=%d c=%d",&a,&b,&c);
        printf("%d
    ",a);
        printf("%d
    ",b);
        printf("%d
    ",c);
        return 0;
    }

    运行效果如下:

     2.熟悉 测试用例

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

    (2)在题目集 PAT (Basic Level) Practice (中文) 中任选3道题目完成。

    截图如下:

    (3)代码解读。

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

    1001 害死人不偿命的(3n+1)猜想

    重难点:这个题目属于比较简单的题目,就是判定一下数据是奇数还是偶数,判定后分别给予不同的处理罢了。

    代码片段:

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

    执行效果截图:

    1002 写出这个数

    重难点:我感觉这个题的重难点是如何把一个数各分位上的数加起来,我采用了将一个数按字符串输入,然后再转换成数字,用For循环将所有的数加起来,将0到9用拼音表示存在数组中,通过除法和除余来判断各个位上的数字然后再分别输出。

    代码片段:

    #include<stdio.h>
    int main(){
        char n[100];
        int i=0;
        int j;
        scanf("%s",&n);
        for(;n[i]!='';i++)
        {
            j=j+(n[i]-'0');
        }
        char a[10][10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
        if(j>99)
        {
            printf("%s ",a[j/100]);
            printf("%s ",a[j%100/10]);
            printf("%s",a[j%100%10]);
        }
        else if(j>9)
        {
            printf("%s ",a[j/10]);
            printf("%s",a[j%10]);
        }
        else{
            printf("%s",a[j]);
        }
        return 0;
    }

    执行效果截图:

    1003 我要通过

    重难点:我认为这道题还是比较难的,首先这个读题就花费了很多的时间,第三个条件是最难判断的,前期一直不对,后来看了他给的测试用例,才猜测P前面A的个数乘以P和T之间的A的个数必须等于T后面的A的个数。

    代码片段:

    def func(lis):
    
        if 'A' in lis and 'P' in lis and 'T' in lis:
    
            if len(set(lis)) == 3 and lis.index('P') < lis.index('T'):
                start = lis.index('P')
                end = lis.index('T')
                numbefore = len(lis[:start])
                nummid = len(lis[start+1:end])
                numafter = len(lis[end+1:])
    
                if numbefore*nummid == numafter:
                    return 1
                else:
                    return 0
            return 0
        return 0
    
    
    n = int(input())
    ret = []
    for i in range(n):
        ret.append(list(input()))
    for lis in ret:
        if func(lis):
            print('YES')
        else:
            print('NO')

    执行结果截图:

    (4) PSP

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

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

    总结出现时间差的原因

    1 C语言的基本语法忘掉的太多,很多时候出现很低级的错误。

    2 编写代码是逻辑混乱,对如何使用数组竟然产生了疑问,编写了一半又去查找关于数组方面的资料,导致编码时间过长。

    3 对题目的解读能力太差,一直没有读懂第三个条件该如何写,测试了很多用例不通过,后来在给定的用例中发现规律,三个位置的A的数量是存在关系的,通过这种关系写的限制条件,这个题目我是用Python写的,因为我感觉用C语言实在是太麻烦了。

  • 相关阅读:
    mac下安装oracle客户端
    Mac下安装tomcat
    eclipse上Git使用
    深拷贝1兼容多构造函数
    Oracle查询表大小,更新或查询太慢的时候
    Redis弱密码修改
    学习参考
    c#简单类型转换As<T>
    NPM相关
    java项目和npm项目命令窗口部署方便调试
  • 原文地址:https://www.cnblogs.com/hejw031/p/11493807.html
Copyright © 2020-2023  润新知