joho1-2017の日記

Subscribed unsubscribe Subscribe Subscribe

joho1-2017の日記

情報処理実習1の解説ブログです.皆さんが課題を解く時の助けになれば幸いです.

制御文1

第3回 制御文1のおさらいと課題を解くにあたっての考え方についての簡単に解説したいと思います.

まず今回の授業で扱った制御文ですが,今後いろいろなプログラムを書く上での基本となるため,しっかりと復習をしてください.
簡単なおさらいなので,詳しく勉強したいときは授業ページを見たり,Googleや本などできちんと調べてください.

さて,制御文とはプログラムを実行するときに「ある条件によって処理を変更」したり「同じ処理を何度も繰り返し(ループ)」たりするときに便利な書き方です.この制御文を利用することで,複雑な処理を実行することが可能となるメリットがあります.
このようにプログラムを書く上で重要となる制御文ですが,第3回の授業ではその基本となるif文とwhlie文,for文を勉強しました.

if文は英語の「もし~なら」という意味の通り,条件分岐を行うことができるようになります.
if文の詳しい構造は授業ページに書いてあるので,ここではif文のイメージを簡単に説明したいと思います.

	if(条件式){
		処理
	}

例えば,このようなif文があったときは,「条件式が正しければ(成り立てば),処理が実行される」という感じです.この条件式は関係演算子論理演算子を用いて表現します.関係演算子と論理演算子については,詳しくは授業ページにまとめられているのでそちらを参照してください.

while文,for文は繰り返しを行うことができる制御文です.
while文の構造は,

       while(条件式){
               処理
       }

この文のイメージは,「毎回の繰り返しにおいて,条件式が成り立つときは処理を行い,条件式が成り立たなくなったら繰り返しを終了する」という感じです.

for文の構造は,以下のようになっています.

	for(初期化式;条件式;値変化){
		処理
	}

この文のイメージは「初期化式で設定した変数が条件式を満たすことができなくなるまで,繰り返す(初期化式で設定した値は値変化で設定したように変化させる)」ということです.

授業では,特にfor文がどのような働きをするのかが分かっていない人が多かったように感じたので具体例をひとつ挙げて説明したいと思います.

)
	for(int i=0;i<10;i++){
		printf("%d¥n", i);
	}

このようなfor文があるとき,処理の流れは,

  1. 「i=0」によって,iに0を代入する
  2. 「i<10」よりiの値が10より小さいかを判定し,この条件を満たしていれば(iが10より小さければ),処理(printf)を実行する.
  3. 「printf」によって,iの値を出力する
  4. 「i++」によって,iに1を足す
  5. iが10以上になるまで,2〜4の処理を繰り返す

となります.

この流れがfor文の基本になり,繰り返しを行いたい処理(今回は「printf」)を適宜変更することで,様々なプログラムに応用できます.

以上が,第3回のおさらいです.情報処理自習1の授業は積み重ねが大切なので,繰り返しになりますが,復習をよろしくお願いします.

では,課題の考え方について解説したいと思います.
今回の課題は全部で3問ありましたが,すべてif文を使用します(正直に言うと,for文は使いません).

1.入力された2つの整数が等しいか否かを判定するプログラムを作成せよ.

【実行例】
整数1:3
整数2:4
2つの整数は違います.

この問題を解くポイントは,

  1. どのようにキーボードから値を入力するか?
  2. 等しいか否かの判定のやり方は?

という2点かと思います.
まず,①に関してですが,C言語には,キーボードから入力された値をプログラムで利用するための機能が予め用意されています(標準の関数が用意されているということ).(ちなみに,「printf」などは関数と呼びます).その関数は「scanf」という関数です.この関数の使い方は,main関数のなかで以下のように使います.

int input;

scanf("%d", &input);

この文は,「予め用意しておいた,変数(今回は「input」)にキーボードから入力された値を代入しています」.「scanf」の書き方は,少し「printf」に似ていますね.注意する点は,「&input」のように「&」マークをつけることです.この「&」をつける意味は,C言語でもっとも難しいと言われている「ポインタ」という部分に関係しているのですが,今はまだ「scanfの時はつけなきゃいけないもの」だと思っておいてください.

次に②については,「キーボードから値を入れた2つの変数をどのように比べるか」ですが,この部分にif文を利用します.このときのif文の構造は以下のようになると思います.

	if(条件式){
		printf("2つの整数は等しいです.¥n");
	}
	else{
		printf("2つの整数は違います.¥n");
	}

このときの条件式が「2つの変数が等しい」ということを表現できれば問題は解けると思います.

  • ヒント:授業ページの関係演算子の部分を参照

2.キーボードより入力した整数が3の倍数かどうか判定するプログラムを作りなさい.

【実行例】
・パターン1
3の倍数かどうか判定します。 
整数を入力してください:7
7は3の倍数ではありません。

・パターン2
3の倍数かどうか判定します。 
整数を入力してください:12
12は3の倍数です。

この問題を解くことにおけるポイントは,

  1. どのようにキーボードから値を入力するか?
  2. 3の倍数という判断はどのように行うのか?

の2点だと思います.
①に関しては,上記の問題1を参照してください.
②についてですが,「ある値(たいていは変数)が何の倍数(今回は3の倍数)かを判定する」ときには,「割り算をしたときのあまり」に注目することが非常に有効となります.C言語において,この「割り算をしたときのあまり」を計算してくれる演算子が「%」演算子です.つまり,例えば,ある値(x)が5の倍数かどうかを判定するには,「x%5」が「0」であれば良いのです.これを利用するととても簡単に「ある値が何の倍数なのか」を判定することができます.
この問題では,3の倍数かどうかを判定するので,キーボード入力さた変数が3で割った時にあまりが0となるように条件式を設定(「%」演算子を利用)してあげれば,if文の構文(else文も使う)によって解けるかと思います.

 

3.テストの点数(0~100)を入力し,成績(S,A,B,C,F)を表示するプログラムを作りなさい.点数が範囲外の場合はエラー判定をしなさい.

【実行例】
・パターン1
テストの点数を入力してください:89
89点の成績はAです.

・パターン2
テストの点数を入力してください:111
エラー:点数が範囲外です.

この問題を解くポイントは,

  1. キーボードからの入力
  2. 成績の判定
  3. エラー処理

の3つだと思います.

①は問題1を参照してください.
②についてですが,こちらはif文の条件式で成績S,A,B,C,Fとなる点数の範囲を設定してあげます.
例えば,S, Aの場合は

                if(90<=test_score){
			printf("%d点の成績はSです.¥n", test_score);
		}
		else if(80<=test_score && test_score<90){
			printf("%d点の成績はAです.¥n", test_score);
		}
                .....

となります.ここで「else if」ですが,多分岐構造のif文です.詳しくは授業ページの「else文」の項目を参照してください.
このif文での条件式は(80<=test_score && test_score<90)となっています.test_scoreが変数(キーボードから入力される点数)なので,数式的にこの条件式を表すと,


のようになります.これは成績Aについての例なので,それぞれ他の成績にも当てはめてあげてください.

最後に③ですが,このエラー処理を行う上でのヒントは授業ページの「コードブロック」の項目になります.
この処理もif文によって構成されるのですが,イメージとしては,「大きな枠組みで入力された値が範囲内かどうかを判断し,範囲外ならエラーを出力し,範囲内なら②の処理を行う」,という流れが良いかと思います.
例としては,

        if(入力された点数が0~100の間ある){
		if(点数が90点以上){
			成績Sと表示する
		}
		else if(点数が80点以上90点未満){
			成績Aと表示する
		}
                .....
	}
	else{
		エラーと表示する
	}

のようになると思います.

以上が第3回の宿題の考え方です.

また,授業中に気になったこととして,webブラウザで開いているタブが講義ページだけという人が多い印象を受けました. 授業中知らない単語がでてきたり,理解できない箇所がでてきたときにすぐに検索して調べる癖をつけましょう.

そして講義中はテキストファイルに残したり,Evernoteを使うなどして,メモをしっかりとるようにしてください.

 

タイピング練習についても,授業中に紹介したアプリや各種無料のタイピングゲームなどで,各自スキマ時間を使って行うようにしてください.

 

第3回のプログラムに関する質問は,こちらの記事のコメント欄にお願いします.

何度もしつこいようですが,ファイルの名前の付け方,zipファイルの名前の付け方は,授業中に伝えたルールに従ってつけてください.
ルールに従っていない場合は,採点することができなくなってしまいますので,よろしくお願いします.

Remove all ads