中間試験類似問題の答えと解説 |
問題4 答え: 答え:
これはあくまで類似問題なので,こまかな問題数や配点,実施時間などは実際の中間試験とは異なる場合があります。
この類似問題の答えをそのまま丸ごとおぼえて解答しても,絶対に正解にはなりません。例えば,変数名などは
当然違うでしょうし,空欄になっている部分も完全に同じではありません。内容を理解するように努力してください。
答え:
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 が入る。
(1)
(1)-①:6.0
(1)-②:3.0
(1)-③:3.0 ※「x = 3.0」とは書かないこと。あくまで「値」を聞いているのであって,「x = 3.0」のままでは「式」である。
(2)
(2)-①:2.0
(2)-②:3.0
(2)-③:5.0
(2)-④:5.0 ※「x = 5.0」とは書かないこと。あくまで「値」を聞いているのであって,「x = 5.0」のままでは「式」である。
(3)
答え:
(3)-①:9.0
(3)-②:12.0
(3)-③:14.0
if( 条件式 ) 文という形をしていて,
if( c != 0 ) x = a / c; y = b / c;というように書いた場合,意図に反して,cの値が0であろうがなかろうが,後半の「y = b / c;」は必ず実行されて
if( c != 0 ) x = a / c;という部分だけだからである。つまり,後半の「y = b / c;」はその前のif文には含まれず,普通の文にすぎないので
{ x = a / c; y = b / c; }複合文は,「ブロック文」とか,単に「ブロック」とも呼ばれる。複合文は,「それ全体が1個の文として扱われる」
if ( 条件式 ) 複合文という形で書けば,条件式が成立したときだけ,複合文の中に書かれている複数の文が実行されることになる。先の例
if ( c != 0 ) { x = a / c; y = b / c; }と書けば,「変数cが0でないときだけ,x = a / c; と y = b / c; の2つの計算をしたい」という目的が達せられることに
if ( 条件式 ) 文1 else 文2という形を持つ「if-else文」は,指定された条件が成立するときに文1を実行し,指定された条件が成立しないときには文2
if ( 条件式 ) { 条件式が真の時に実行させたい処理をここに書く } else { 条件式が偽の時に実行させたい処理をここに書く }という形で書くと見やすい。
if ( 条件式1 ) 文1 else 文というものであるが,elseの後ろの文のところに別のif-else文を書くと,次のような形になる。
if ( 条件式1 ) 文1 else if ( 条件式2 ) 文2 else 文この文は,
if ( 条件式1 ) { 条件式1が真の時に実行させたい処理をここに書く } else if ( 条件式2 ) { 条件式1が偽で,条件式2が真の時に実行させたい処理をここに書く } else { 条件式1も条件式2も両方が偽の時に実行させたい処理をここに書く }
問題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
※画面への表示の仕方はどんな方法でも表示さえされればよしとする。
回答例:クラスによっては表示方法などが違うため,各クラスの担任の回答例の説明を受けること。
問題7
回答例:
if( (x % 2) == 0) { printf( "xは偶数です。\n" ); } else { printf( "xは奇数です。\n" ); }
注意点:
この類似問題の答えをそのまま丸ごとおぼえて解答しても,絶対に正解にはなりません。例えば,変数名などは
当然違うでしょうし,空欄になっている部分も完全に同じではありません。内容を理解するように努力してください。
類似問題の答えだけを丸おぼえで解答した場合は,減点もあり得ます。