すべてのXuedong 20190905から3コマンドラインコンソールプログラミング

この仕事のための要件は、https://edu.cnblogs.com/campus/nenu/2019fall/homework/5523見ます

1.1アプリケーションがA.EXEと、現在のディレクトリ内のファイル、および次のテキストコンソールがはいコマンドをどのような役割図における補助データストリームがB.TXTことが想定されます。(5点)

             A.EXE <B.TXT> c.txt

         A:このコマンドは、ファイルBの内容であるプログラムファイルcに得られる出力した後、実行中のプロセスを保存し、プログラムに入力されています。次のようにデータフロー図です。

 

1.2 Cでアプリケーションを開発するためになさD.EXEください、それぞれ、コンソール・コマンドラインパラメータから命令を読み出し、及び、bの値を印刷し、コンソールにおけるc。次の例をフォームの効果を実行する(6点)

D.EXE A = 1、B = 2、C = 3

1

2

3

 

= B = 22、C = 11 33 D.EXE

 

11

22

33

コードは以下の通りであります:

1つの#include <stdio.hの> 
2 INT メイン(){ 
3 int型A、B、C。
4のscanf( "A =%DB =%DC =%d個"、&、&B、&C)。
5のprintf( "%d個の\ n%d個の\ n%d個の\ n" 、A、B、C)。 6戻り0 ;  7 }

 次のようにショットを実行します。 

 

 

 

2.1ウェブサイトは、[https://pintia.cn/]アカウントを登録しました。(0)

A:私は登録されています。

必要に応じてタイトルセットタイトル完全PAT(初級)実践(中国語)で2.2 3。次のようにショットは、赤のチェックマークを含む、請求項1において、(この例ヤング)2符号3ユーザ名です。(30点)

 コードの2.3解釈。(20点)

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

 

本题目比较简单,格式要求也不是很严格,完成的比较顺利。

代码如下:

 

    int n=0,i;
    scanf("%d",&n);
    for(i=0;n!=1;i++){
        if(n%2==0){
            n=n/2;    
        }
        else{
            n=(3*n+1)/2;
        }
    }
    printf("%d",i);

 

 

 

运行截图如下:

(2)1006 让我们用字母 B 来表示“百”、字母 S 表示“十”,用 12...n 来表示不为零的个位数字 n<10),换个格式来输出任一个不超过 3 位的正整数。例如 234 应该被输出为 BBSSS1234,因为它有 2 个“百”、3 个“十”、以及个位的 4。

本题目难度也不大,只要注意输出的要求和格式就可以了,其中的个位按格式输出时要注意从1开始,这一点与前两个for循环有区别。

代码如下

    int n=0,i,bai,shi,ge;
    while(scanf("%d",&n)!=EOF){
        bai=n/100;
        shi=n/10%10;
        ge=n%10;
        for(i=0;i<bai;i++){
            printf("B");
        }
        for(i=0;i<shi;i++){
            printf("S");
        }
        for(i=1;i<=ge;i++){
            printf("%d",i);
        }
    }

 

 

 

运行截图如下:

(3)1023 给定数字 0-9 各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意 0 不能做首位)。例如:给定两个 0,两个 1,三个 5,一个 8,我们得到的最小的数就是 10015558。现给定数字,请编写程序输出能够组成的最小的数。

本题目比较麻烦,要注意的点比较多。首先要求给定的数必须全部使用,而且0不能做首位,在保证这两点的基础上要组成最小数。

代码如下:

 

    int a[10],i,b[50],j=1;
    for(i=0;i<10;i++){
        scanf("%d",&a[i]);
    }
    for(i=1;i<10;i++){//找一个除0以外最小的数做最高位 
        if(a[i]!=0){
            b[0]=i;
            a[i]--;
            break;
        }
    }
    for(i=0;i<10;i++){//把数字按大小顺序和个数写到b数组中 
        while(a[i]){
            b[j]=i;
            j++;
            a[i]--;
        }
    }
    for(i=0;i<j;i++){
        printf("%d",b[i]);        
    }
    return 0;

 

 

 

运行截图如下:

2.4在同一篇博客中,参照教材第35页表2-2和表2-3,为上述3个题目制作PSP阶段表格。PSP阶段表格第1列分类,如功能1、功能2、测试功能1等。

   PSP阶段 预计花费时间 实际花费时间 时间差 原因
1001编程 10min 6min 4min

原以为一段时间没有编写c语言程序

会比较生疏,但实际上还比较顺利

1001测试 1min 1min 0min 输入格式没有特定的要求,比较简单
1006编程 8min 10min 2min

第一次编程时没注意到个位是

从1开始,for循环中i的初值写错了

1006测试 1min 1min 0min 只需输入一个三位数即可
1023编程 15min 17min 2min 其中需要注意的问题比较多,考虑的要全面一些
1023测试 1min 3min 2min

输入的格式比较麻烦,每个数中间要有空格

,而且要数好自己输入的数字的个数

 

 

おすすめ

転載: www.cnblogs.com/nenu-dxd/p/11494562.html