第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 なしプログラミング」参照。