中間試験類似問題の答えと解説


これはあくまで類似問題なので,こまかな問題数や配点,実施時間などは実際の中間試験とは異なる場合があります。
 この類似問題の答えをそのまま丸ごとおぼえて解答しても,絶対に正解にはなりません。例えば,変数名などは
当然違うでしょうし,空欄になっている部分も完全に同じではありません。内容を理解するように努力してください。





答え:
 
int x;

解説:
 変数とは,データを入れて保管できる箱のようなものである。入れるデータの種類と変数自体の
名前を指定して,

データ型 変数名;

という形で変数を作ることができる。このように変数を作ることを「変数を宣言する」と言う。問題
ではint型という整数を表すデータ型と,名前xが指定されているので,上記のような答えになる。
なお,変数名はちゃんと指定されたものを書くこと。





答え:
double d = 12.3;

解説:
 C言語では,変数を宣言しただけでは,その変数に元から入ってる値は予想できない。
 これは,プログラムを動かす毎に違う値が入っていることもあるためである。正しく
 動くプログラムを作るためには,変数に最初から入っている値(初期値)を定めておいた
 方がよい。以下のように変数を宣言するときに,初期値を指定できるようになっている。

データ型 変数名 = 初期値;






解説:
 変数に値を入れることを「変数に値を"代入する"」と言う。代入を行うには,代入演算子=を使って
変数名 = 式や値;
というように,左端に変数を,=の右側に計算式や値を書く。計算式が書かれた場合は,計算式の計算結果の値
が変数に代入される。
 足し算は+,引き算は-,かけ算は*という演算子で計算する。割り算に関しては,商は/,余りは%で計算する。
たとえば,aとbがint型の変数で,aの値が2であれば,
 a = 10 * b;
という式は,10 * 2 という計算が行われた後,その結果がaに代入されるので,aの値は20になっている。また,
aの値が10であるとき,
 a = a + 5;
という式は,10 + 5 の結果をaに代入するので,この式を実行するとaの値は10から15に変化している(5だけ増
えている)。

問題3-(1)

答え:
 1  ※「x = 1」とは書かないこと。あくまで「値」を聞いているのであって,「x = 1」のままでは「式」である。
解説:
 次の計算「x = 4 - 23 / 6;」は,まず,=の右側の「4 - 23 / 6」が計算されて,その結果が変数xに代入される。
そこでまず「4 - 23 / 6」の計算をしなければならないが,引き算よりも割り算が優先されるので,最初に
「23 / 6」 の商が計算される。23/6の商は3なので,「4 - 23 / 6」という式は結局,「4 - 3」という式になり,
計算結果は1となる。したがって,代入は「x = 1;」ということになり,xには1という値が入ることになる。

問題3-(2)

答え:
 4  ※「x = 4」とは書かないこと。あくまで「値」を聞いているのであって,「x = 4」のままでは「式」である。
解説:
 次の計算「x = 18 % 7;」は,まず,右側の「18 % 7」が計算されて,その結果が変数xに代入される。そこでまず
「18 % 7」の計算をしなければならないが,%が余りを計算するので,「18 % 7」の計算は「18を7で割ったり」,
つまり4となる。したがって,代入は「x = 4;」ということになり,xには4という値が入ることになる。

問題3-(3)

答え:
 3  ※「x = 3」とは書かないこと。あくまで「値」を聞いているのであって,「x = 3」のままでは「式」である。
解説:
 最初に変数xに値2が代入されている。次の計算「x = x + 1;」は,まず,右側の「x + 1」が計算されて,その結果
が変数xに代入される。そこでまず「x + 1」の計算をしなければならない。xにはすでに2という値が入っているで,
ここでの「x + 1」は結局,「2 + 1」という計算をしていることになる。そのため,計算「x = x + 1;」は,
「x = 3;」ということになり,xには3という値が入ることになる。変数xの値が1増えたことに注意。

問題3-(4):

答え:
 4  ※「x = 4」とは書かないこと。あくまで「値」を聞いているのであって,「x = 4」のままでは「式」である。
解説:
 最初に変数xに値2が代入されている。次の計算「x = x * 2;」は,まず,右側の「x * 2」が計算されて,
その結果が変数xに代入される。そこでまず「x * 2」の計算をしなければならない。xにはすでに2という値が入って
いるので,「x * 2」は結局,「2 * 2」という計算をしていることになる。「2 * 2」の答えは,4である。そのため,
計算「x = x * 2;」は,「x = 4;」ということになり,xには4という値が入ることになる。

問題3-(5)

答え:
 10  ※「x = 10」とは書かないこと。あくまで「値」を聞いているのであって,「x = 10」のままでは「式」である。
解説:
 最初の行で変数xには値0が代入されている。次の行(2行目)からの計算は,ひとつひとつ計算していっても良いが,
ここでは次のように考えてみよう。2行目以降は,
  x = x + 1;
  x = x + 2;
  x = x + 3;
  x = x + 4;
という4つの計算が行われているが,すべて,
  x = x + □;
という形で,□のところが1から4まで1づつ増えているだけである。ここで,
  x = x + □;
という形をよく考えてみよう。これは,
  「x + □」(xに□を加えた数)の計算結果を変数xに代入する
という計算である。つまり,この
  x = x + □;
という式は,「xを,元の値より□だけ増やす」という意味なのである。この考えに基づいて上の一連の計算を考えて
みると,
  x = x + 1;  … xの値を元の値より1だけ増やす。xの元の値は0なので,xの値は(0 + 1)の結果の1になる。
  x = x + 2;  … xの値を元の値より2だけ増やす。xの元の値は1なので,xの値は(1 + 2)の結果の3になる。
  x = x + 3;  … xの値を元の値より3だけ増やす。xの元の値は3なので,xの値は(3 + 3)の結果の6になる。
  x = x + 4;  … xの値を元の値より4だけ増やす。xの元の値は6なので,xの値は(6 + 4)の結果の10になる。
となり,最終的にxの値は10になる。
※この計算は,結局( 0+1+2+3+4)を計算していることになる。


問題3-(6)

答え:
 6  ※「x = 6」とは書かないこと。あくまで「値」を聞いているのであって,「x = 6」のままでは「式」である。
解説:
 最初の行で,変数xには0が代入され,変数iには1が代入されている。次の行(2行目)からの計算は,
ひとつひとつ計算していっても良いが,ここでは次のように考えてみよう。2〜3行目の2行分をよく見ると,
  x = x + i; i = i +1;
という2つの計算式が2回繰り返されていることが分かる。この内容をよく吟味してみよう。まず前半の,
  x = x + i;
という式は,前問でも登場した
  x = x + □; … 変数xを元の値より□だけ増やす
というパターンであるので,ここでの
  x = x + i;
は,「変数xの値をiだけ増やす」という計算であることがわかる。一方,後半の
  i = i + 1;
という式は,「i + 1」という計算をして,その結果を変数iに代入するという処理を行う。つまり,この式は
「変数iの値を元の値より1だけ増やす」という処理を行うことになる。
 以上のことから,
  x = x + i; i = i +1;
という2つの式からなる処理は,
  「xをiだけ増やした後,iの値を1増やす」
という内容であることがわかる。これを2回繰り返すと次のようになる。
  x = x + i; i = i +1;  … 「xをiだけ増やした後,iの値を1増やす」,つまり,xは,元の値は0だからそれよりi(つまり1)増えた「1」になり, iは1から2になる。
  x = x + i; i = i +1;  … 「xをiだけ増やした後,iの値を1増やす」,つまり,xは,元の値は1だからそれよりi(つまり2)増えた「3」になり, iは2から3になる。
この段階で,xは3,iは3になっている。最後の行の計算「x = x + i;」は,xの値をi(つまり3)だけ増やすから,結局変数xの値は6になる。
※実は,この計算は前問同様に「0+1+2+3」を計算していることになる。

問題3-(7)

答え:
 4  ※「x = 4」とは書かないこと。あくまで「値」を聞いているのであって,「x = 4」のままでは「式」である。
解説:
 以下の様に計算が進み,int型変数xには整数値 4 が入る。


問題4
2011_Q4_kisetsu

(1)
2011_Q4

2011_Q4_1_kaisetsu

答え:
 (1)-①:6.0
 (1)-②:3.0
 (1)-③:3.0  ※「x = 3.0」とは書かないこと。あくまで「値」を聞いているのであって,「x = 3.0」のままでは「式」である。


(2)
2011_Q4_2

2011_Q4_2_kaisetsu

答え:
 (2)-①:2.0
 (2)-②:3.0
 (2)-③:5.0
 (2)-④:5.0  ※「x = 5.0」とは書かないこと。あくまで「値」を聞いているのであって,「x = 5.0」のままでは「式」である。

(3)
2011_Q4_#

2011_Q4_3_kaisetsu

答え:
 (3)-①:9.0
 (3)-②:12.0
 (3)-③:14.0


問題5
Q5

解説:
【条件判定について】
 条件が成立していることを「真」,成立していないことを「偽」という。この真か偽の値を「真理値」という。
 コンピュータでは,すべての情報(文字すらも)を数値で表現しているので,条件判定は「数値の比較」という形
でしか書けない。数値の比較をするための演算子が,<,<=,>=,>,==,!= である。これらの演算子で,条件
を判定する式(条件式)を書くことができる。詳しくは,こちらを参照。
また今回の試験には出ないが,複数の条件を組み合わせるのに「かつ」
,「または」,「でない」があり,それぞれ「&&」,「||」,「!」という演算子が使われる。詳しくはこちら
参照。


【if文】
 if文は,   
         
        if( 条件式 ) 文
         
        
 という形をしていて,
  条件を判定して,条件が成立(真)のときだけ指定した文を実行する
というように動作する。気をつけなければならないのは,「指定できる文は1つだけ」であることである。例えば,
「変数cが0でないときだけ,x = a / c; と y = b / c; の2つの計算をしたい」と思って,
         
         if( c != 0 ) x = a / c;  y = b / c;
         
        
というように書いた場合,意図に反して,cの値が0であろうがなかろうが,後半の「y = b / c;」は必ず実行されて
しまう。これは,if文に含まれるのが前半の
         
		  if( c != 0 ) x = a / c; 
         
        
という部分だけだからである。つまり,後半の「y = b / c;」はその前のif文には含まれず,普通の文にすぎないので
条件判定と関係なく必ず実行されるというわけである。
 これを解決するのが,「複合文」である。複合文は {} で複数の文を囲んだもので,たとえば,次のような形になる。
         
		  { 
		    x = a / c;
		    y = b / c;
		  }
         
        
複合文は,「ブロック文」とか,単に「ブロック」とも呼ばれる。複合文は,「それ全体が1個の文として扱われる」
という性質がある。つまり,この複合文の中に文が100個あろうが,全体でひとつの文としてみなされるのである。
この複合文をif文につかって
         
		  if ( 条件式 ) 複合文
         
        
という形で書けば,条件式が成立したときだけ,複合文の中に書かれている複数の文が実行されることになる。先の例
だと
         
		  if ( c != 0 ) {
		    x = a / c;
		    y = b / c;
		  }
         
        
と書けば,「変数cが0でないときだけ,x = a / c; と y = b / c; の2つの計算をしたい」という目的が達せられることに
なる。

【if-else文】
 if文は指定された条件が成立しないときには何も実行されなかった。これに対して,
         
		  if ( 条件式 ) 文1 else 文2
         
        
という形を持つ「if-else文」は,指定された条件が成立するときに文1を実行し,指定された条件が成立しないときには文2
を実行する。文1と文2の場所には,もちろん複合文が使用できる。というよりも,常に複合文を使って,
         
		  if ( 条件式 ) {
		   条件式が真の時に実行させたい処理をここに書く
		  }
		  else {
		   条件式が偽の時に実行させたい処理をここに書く
		  }
         
        
という形で書くと見やすい。

【if-else文を組み合わせる】
 if-else文の形は,
         
		  if ( 条件式1 ) 文1 else 文
         
        
というものであるが,elseの後ろの文のところに別のif-else文を書くと,次のような形になる。
         
		  if ( 条件式1 ) 文1 else if ( 条件式2 ) 文2 else 文
          
        
この文は,
  条件式1が成立する → 文1を実行
  条件式1が成立せず,条件式2が成立する → 文2を実行
  条件式1が成立せず,条件式2も成立しない → 文3を実行
となる。つまり,3つの場合に処理を分けることができることになる。
 もし,この文1〜文3に複合文を使うと,形としては次のようになる。
	         
		  if ( 条件式1 ) {
		   条件式1が真の時に実行させたい処理をここに書く
		  }
		  else if ( 条件式2 ) {
		   条件式1が偽で,条件式2が真の時に実行させたい処理をここに書く
		  }
		  else {
		   条件式1も条件式2も両方が偽の時に実行させたい処理をここに書く
		  }
          
        

問題5-(1)

答え:
 10  ※「z = 10」とは書かないこと。あくまで「値」を聞いているのであって,「z = 10」のままでは「式」である。
解説:
 int型の変数xには7が代入され,yには3が代入されている。xの値とyの値をたすと10になり,
その10がzに代入されている。

問題5-(2)

答え:
 3  ※「z = 3」とは書かないこと。あくまで「値」を聞いているのであって,「z = 3」のままでは「式」である。
解説:
 int型の変数xには10が代入され,int型変数yには初期値7が代入されている。次の行の x % y で,xの値をyの値
で割ったあまりが計算され,その結果の値3がint型変数zに代入される。

問題5-(3)

答え:
 11  ※「z = 11」とは書かないこと。あくまで「値」を聞いているのであって,「z = 11」のままでは「式」である。
解説:
 if文の問題。一連のif文の前に,int型の変数xには4が代入され,int型変数zには0が代入されている。その後,4つのif文が
書かれている。各if文の条件式をあげると
  第1のif文の条件式: 3 <= x  … 結果は真
  第2のif文の条件式: x <= 2  … 結果は偽
  第3のif文の条件式: x != 4  … 結果は偽
  第4のif文の条件式: x == 4  … 結果は真
となるので,実行されるのは第1のif文と第4のif文。したがって,以下の2つの処理が実行されることになる。
  z = z + 1;
  z = z + 10;
変数zには事前に0が代入されているので,
  z = z + 1;
で変数zの値は1増えて結果として1となり,次の
  z = z + 10;
で変数zの値は更に10増えて,結局変数zの値は11となる。

問題5-(4)

答え:
 1  ※「z = 1」とは書かないこと。あくまで「値」を聞いているのであって,「z = 1」のままでは「式」である。
解説:
 if-else文の問題。int型の変数xは初期値3で宣言されている。if文の条件式
 x < 1
の値は偽となるので,elseの後ろの複合文(ブロック文)部分
 {
  z = 1;
 }
が実行されるので,変数zには値1が入る。


問題5-(5)

答え:
 30  ※「z = 30」とは書かないこと。あくまで「値」を聞いているのであって,「z = 30」のままでは「式」である。
解説:
 if-else文の問題。int型の変数xは初期値8で宣言されている。int型の変数yは,xを3で割った余り,
すなわち2で初期化される。
その後のif-else文の条件式は,「 y == 0」である。この
時点で変数yの値は2なので,この条件式は成立しない(偽)。したがって,その後のelse以降の文が
実行される。elseの後ろの文もif-else文になっている。このif-else文の条件式は「y == 1」である。
yの値が2なので,この条件式は成立しない(偽)。したがって,その後のelse以降の文
 {
  z = 30;
 }
が実行されるので変数zには値30が代入される。


問題6

Q6
※画面への表示の仕方はどんな方法でも表示さえされればよしとする。

回答例:クラスによっては表示方法などが違うため,各クラスの担任の回答例の説明を受けること。



問題7

Q6

回答例:

if( (x % 2) == 0) {
    printf( "xは偶数です。\n" );
}
else {
    printf( "xは奇数です。\n" );
}

注意点:
 この類似問題の答えをそのまま丸ごとおぼえて解答しても,絶対に正解にはなりません。例えば,変数名などは
当然違うでしょうし,空欄になっている部分も完全に同じではありません。内容を理解するように努力してください。
類似問題の答えだけを丸おぼえで解答した場合は,減点もあり得ます。