zoukankan      html  css  js  c++  java
  • 命令行和控制台编程 作业提交

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

    1.熟悉 命令行 和 控制台/标准输入和标准输出

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

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

     

    a.exe < b.txt > c.txt

    作用:程序a接受b.txt作为输入,输出结果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 argc,char *argv[]) {
        
        int a,b,c;
        sscanf(argv[1],"a=%d",&a);//int sscanf(const char *str, const char *format, ...)
        sscanf(argv[2],"b=%d",&b);
        sscanf(argv[3],"c=%d",&c);
        printf("%d
    ",a);
        printf("%d
    ",b);
        printf("%d",c);
        
        
        return 0;
    }

      2.熟悉 测试用例

     (3)代码解读 (20分)

    1001 害死人不偿命的猜想

    卡拉兹(Callatz)猜想:

    对任何一个正整数 n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把 (3n+1) 砍掉一半。这样一直反复砍下去,最后一定在某一步得到 n=1。卡拉兹在 1950 年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题,结果闹得学生们无心学业,一心只证 (3n+1),以至于有人说这是一个阴谋,卡拉兹是在蓄意延缓美国数学界教学与科研的进展……

    我们今天的题目不是证明卡拉兹猜想,而是对给定的任一不超过 1000 的正整数 n,简单地数一下,需要多少步(砍几下)才能得到 n=1?

    输入格式:

    每个测试输入包含 1 个测试用例,即给出正整数 n 的值。

    输出格式:

    输出从 n 计算到 1 需要的步数。

    输入样例:

    3
    
     

    输出样例:

    5
    #include<iostream>
    using namespace std;
    int main() {
        int n,count = 0;
        cin>>n;
        while(n!=1) {
            if(n%2==0) {
                n /= 2;
            } else {
                n = (3*n+1)/2;
            }
            count ++;
        }
        cout<<count;
        
        return 0;
    }

    1002写出这个数

     读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。

    #include<iostream>
      using namespace std;
      int main() {
          string s = "";
          int sum = 0;
          cin>>s;
      
          //求和sum 55->10
          for(int i=0;s[i]!='';i++) {
             int x = s[i] - '0';
             sum += x;
         }
     
         //映射数组
         string transform[10] = {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
         
         //output stack  ling yi ==> yi ling  
         //生成stack存放sum每位数字 个位先进后出
         int top = -1;//定义栈顶指针 
         string stack[10000];
         while(sum != 0) {
             top ++;
             int x;
             x = sum % 10;
             //进栈
             stack[top] = transform[x];
             sum /= 10;
         } 
         //输出最终结果 即输出stack元素
         while(top != -1) {
             cout<<stack[top];
             if(top == 0) break;
             cout<<' '; 
             top --;
         } 

    这3个题目中花费时间最长的是 “写出这个数”题号1002,这里分享下思路

    1004 成绩排名

    读入 n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。

    输入格式:

    每个测试输入包含 1 个测试用例,格式为

    1 行:正整数 n
    第 2 行:第 1 个学生的姓名 学号 成绩
    第 3 行:第 2 个学生的姓名 学号 成绩
      ... ... ...
    第 n+1 行:第 n 个学生的姓名 学号 成绩
    
     

    其中姓名学号均为不超过 10 个字符的字符串,成绩为 0 到 100 之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。

    输出格式:

    对每个测试用例输出 2 行,第 1 行是成绩最高学生的姓名和学号,第 2 行是成绩最低学生的姓名和学号,字符串间有 1 空格。

    输入样例:

    3
    Joe Math990112 89
    Mike CS991301 100
    Mary EE990830 95
    
     

    输出样例:

    Mike CS991301
    Joe Math990112

    #include<iostream>
    using namespace std;
    int main() {
        int n;
        struct Student {
            string name;
            string id;
            int score;
        } ;
        struct Student students[10000];
         
        cin>>n;
        for(int i=1;i<=n;i++) {
            cin>>students[i].name;
            cin>>students[i].id;
            cin>>students[i].score;
        }
        //sort
        for (int i=1;i<n;i++) {
            for (int j=1;j<=n-1;j++) {
                if(students[j].score > students[j+1].score) {
                    struct Student t = students[j];
                    students[j] = students[j+1];
                    students[j+1] = t; 
                }
            }
        }
        //output
        cout<<students[n].name<<' '<<students[n].id<<endl;
        cout<<students[1].name<<' '<<students[1].id;
        
        return 0;
    }

    解题思路:结构体数组加冒泡排序。


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

      1001害死人不偿命的猜想

    1002写出这个数

    1004成绩排名

    (4) PSP(8分)

    类别 预估时间min 实际花费时间min 时间差min
    估算3道题目时间 30 68 38
    题目1001 10 25 15
    题目1002 10 30 20
    题目1004 10 13 3
    时间差产生原因:第一道题,IDE使用不熟悉,学了点python ,c++给忘了,头文件都想了一会才想起来,不过题目很简单。第二道题,改不掉有个得分点卡了较长时间比如输入55产生错误结果yi,没有考虑到这些特殊情况就急着动手。第三道题,太久不刷题,冒泡还想了会。不过此题思路很简单。
  • 相关阅读:
    spark学习
    推荐系统-摘录
    matplotlib安装问题解决
    秒杀系统分析
    大数据常用启动命令
    推荐系统简介
    java面试-JVM内存结构
    推荐算法-基于内容的推荐
    推荐算法-基于模型的协同过滤
    监督学习之模型评估与选择
  • 原文地址:https://www.cnblogs.com/lichao17/p/13655143.html
Copyright © 2011-2022 走看看