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

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

1.熟悉 命令行和控制台

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

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

a.exe<b.txt>c.txt

数据流图:

b.txt输入到a.exe里执行完毕后输出到c.txt里。

1.2 请用C语言开发应用程序d.exe,从控制台指令读入命令行参数,并在控制台分别打印出a、b、c的值。运行效果形如下面的示例。

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;
    while(scanf("a=%d b=%d c=%d",&a,&b,&c))
    {
        printf("%d\n\n",a);
        printf("%d\n\n",b);
        printf("%d\n\n",c);
        printf("\n");
    }
    return 0;
}

 运行结果如下

 2.熟悉 测试用例

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

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

2.3 代码解读。(20分)

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

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

这道题目先要判别奇偶性,如果是偶数就除以2,是奇数就3*n+1再除以2,然后设置一个计数器赋值为0,每执行一次加一,最后输出次数即可。

重要代码片段:

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

执行效果截图

(2)1004:成绩排名

这个题我首先想到的是用结构题来做,但是第一次运行格式错误,我第一次的输入输出是用c的scanf和printf写的,scanf在输入字符串时会遇到空格和换行就结束,于是我想到了用cin做输入 cout做输出可以避免此类情况的发生,还可以提高效率。

重要代码片段 :

#include<iostream>
#include<string>

using namespace std;

struct student{
    string name;
    string id;
    int score;
};

int main()
{
    int n,max = 0,min = 0;
    string text_name,text_id,text_score;
    cin>>n;
    student acs[n];
    for( int i = 0; i < n; i++){
        cin>>acs[i].name;
        cin>>acs[i].id;
        cin>>acs[i].score;
        if( acs[i].score > acs[max].score) max = i;
        if( acs[i].score < acs[min].score) min = i;
    }
    cout<<acs[max].name<<" "<<acs[max].id<<endl;
    cout<<acs[min].name<<" "<<acs[min].id<<endl;
 }

运行结果截图

(3)1006:换个格式输出整数

这个题是要把数字n的个位,十位,百位分别表示出来,然后输出个数是对应个位,十位,百位的数字,注意个位是输出数字。

重要代码片段:

#include<stdio.h>
int main()
{
    int n, b, s, g;
    scanf("%d", &n);
    b = n / 100;
    s = n % 100 / 10;
    g = n % 10;
    for(int i = 0; i < b; i++)  printf("B");
    for(int i = 0; i < s; i++)  printf("S");
    for(int i = 1; i <= g; i++) printf("%d", i);

    return 0;
}

运行结果截图:

2.4 PSP(8分)

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

1001题和1006时间差不是很大,因为题比较简单,1004题第一遍格式错误,改错改了一段时间所以时间差稍大。

 

posted @ 2019-09-09 22:21  徐丽君2019102951  阅读(232)  评论(2编辑  收藏  举报