第6回レポート課題の解答例

課題 6-1 の解答例

方式1:goto 使用

#include<stdio.h>             /* 無条件に入れる */
#include<math.h>              /* 無条件に入れる */
#define N 100                 /* 無条件に入れる */

main(){                       /* 無条件に入れる */

    int i,n;                  /* 整数変数の宣言 (以下で i と n を使う) */
    int data,result;          /* 整数変数の宣言 ( data と result も使う) */
    int table[N];             /* N までの添字が使える配列 */

    table[1]=2;               /* 「あらかじめ」格納する */
    table[2]=4;               /* 「あらかじめ」格納する */
    table[3]=6;               /* 「あらかじめ」格納する */
    table[4]=8;               /* 「あらかじめ」格納する */
    table[5]=10;              /* 「あらかじめ」格納する */
    n=5;                      /* データ数は 5 */
    data=6;                   /* 探すデータ */

/* データの表示(なくてもよい。) */

    printf(" 以下のデータから %d を探します。\n", data );
    for(i=1;i<=n;i=i+1){
        printf(" %2d:%5d\n",i,table[i]);
    }

/*ここからアルゴリズムの本体 */ 

    result=0;
    i=1;
    while(i<=n){
        if(table[i]==data){
            result=i;
            goto found;
        }
    i=i+1;
    }

found:

/* ここまでアルゴリズムの本体 */

/* 結果の表示(ないとうまくいったかどうかわからない。) */
/* もっと簡単でもよい。例えば printf("%d\n",result); */

    if(result==0){
        printf(" 見つかりませんでした。\n");
    }else{
        printf(" %d 番目に見つかりました。\n",result);
    }

    exit(0);                  /* 無条件に入れる */

}                             /* } のあとの改行がないとだめ */

方式2:「番兵」テクニック

#include<stdio.h>             /* 無条件に入れる */
#include<math.h>              /* 無条件に入れる */
#define N 100                 /* 無条件に入れる */

main(){                       /* 無条件に入れる */

    int i,n;                  /* 整数変数の宣言 (以下で i と n を使う) */
    int data,result;          /* 整数変数の宣言 ( data と result も使う) */
    int table[N];             /* N までの添字が使える配列 */

    table[1]=2;               /* 「あらかじめ」格納する */
    table[2]=4;               /* 「あらかじめ」格納する */
    table[3]=6;               /* 「あらかじめ」格納する */
    table[4]=8;               /* 「あらかじめ」格納する */
    table[5]=10;              /* 「あらかじめ」格納する */
    n=5;                      /* データ数は 5 */
    data=6;                   /* 探すデータ */

/* データの表示(なくてもよい。) */

    printf(" 以下のデータから %d を探します。\n", data );
    for(i=1;i<=n;i=i+1){
        printf(" %2d:%5d\n",i,table[i]);
    }

/*ここからアルゴリズムの本体 */ 

    table[n+1]=data;          /* この文のない人が多い。 */
                              /* 重要な意味をもつ文です。 */

    i=1;
    while(table[i]!=data){
        i=i+1;
    }
    if( i<=n ){
        result=i;
    }else{
        result=0;
    }

/* ここまでアルゴリズムの本体 */

/* 結果の表示(ないとうまくいったかどうかわからない。) */
/* もっと簡単でもよい。例えば printf("%d\n",result); */

    if(result==0){
        printf(" 見つかりませんでした。\n");
    }else{
        printf(" %d 番目に見つかりました。\n",result);
    }

    exit(0);                  /* 無条件に入れる */

}                             /* } のあとの改行がないとだめ */

課題 6-2 の解答例

A. p=0;
B. break;
C. 割り切れない

課題 4-3 の解答例

教科書「3.6 go to 文と go to なしプログラミング」参照。