1 / 2 2J プログラミング言語前期中間試験 June2014 担当小坂 1.次の

プログラミング言語前期中間試験 June2014
2J プログラミング言語前期中間試験 June2014 担当小坂
printf("%d %d\n",x,y);
while (y<50) {
y=y+x;
x++;
}
printf("%d %d\n",x,y);
1.次のプログラムの実行結果(コンソール画面
に表示されるままに)を予想し,書きなさい。
ただし,「#include <stdio.h>,return 0」は省
略されている。[60]
(1)
int main()
{
int x,y;
x=4;
y=10*x+5;
printf("x=%d y=%d\n",x,y);
x++;
y=(10*x+5)/10;
printf("x=%d y=%d\n",x,y);
x++;
y=(10*x+7)%10;
printf("x=%d y=%d\n",x,y);
}
}
(5)
int main()
{
int n,i,j;
int k1,k2;
n=8;
for (i=0;i<=n/2+1;i++) {
k1=i;
k2=n-2*k1+1;
for (j=0;j<k1;j++) printf("$");
for (j=0;j<k2;j++) printf("*");
for (j=0;j<k1+2;j++) printf("#");
printf("\n");
}
}
(2)
int main()
{
int x,x2,x3;
for (x=0;x<4;x++) {
x2=x*x+1;
x3=(x2*2+3)%5;
printf("%3d %5d %7d\n",x,x2,x3);
}
printf("%3d\n",x);
}
(6)
int main()
{
int nmb0,nmb,n,cnt;
int i;
nmb0=4000;
for (i=1;i<=2;i++) {
nmb=nmb0*8*i;
n=nmb;
cnt=0;
while (n%10==0) {
n=n/10;
cnt++;
printf("n=%8d, ",n);
printf("cnt=%2d\n",cnt);
}
printf("nmb=%6d ",nmb);
printf("cnt=%2d\n",cnt);
}
}
(3)
int main()
{
int x,z;
z=0;
for (x=0;x<6;x++) {
for (x=1;x<6;x++) {
printf("%3d",z);
z=z+1;
}
printf("\n");
}
}
2.次のプログラムは2つの整数の平均を求め,
小数点以下も含んで平均を求めようとしている。
誤りが 2 箇所あるので,採点者が誤解できないよ
うに丁寧に指摘しなさい。
なお指摘しやすいように,行には番号をつけたが,
これはプログラムとは無関係である。
[10]
(4)
int main()
{
int x,y;
y=10;
for (x=1; x<3; x++) {
y=y+x;
}
1/2
プログラミング言語前期中間試験 June2014
01
02
03
04
05
06
07
08
09
10
11
12
13
14
c=(a+b)/2;
printf("c=%d\n",c);
return 0;
#include <stdio.h>
int main()
{
int Altair;
int Vega;
double Deneb;
scanf("%d %d",Altair,Vega);
Deneb=(Altair+Vega)/2.0;
printf("Altair=%d\n",Altair);
printf("Vega=%d\n",Vega);
printf("Deneb=%f\n",Deneb);
return 0
}
}
(3)
int main()
{
int a=10,b=13;
int c;
c=(a+b)/2.0;
printf("c=%d\n",c);
return 0;
}
3.while 文あるいは do-while 文ではループ継続
条件を括弧の中に書くことになっている。
次の条件の時,プログラムではどのような表現に
なるか書きなさい。条件だけ書けばよい。
[16]
(1)int 型変数 a も b も正の値である
(2)int 型変数 a,b は少なくとも片が正の値で
ある
(3)int 型変数 x は 0 以上 10 未満である
(4)int 型変数 y は 10 未満か 20 を超える値で
あり,しかも int 型変数 y は偶数である
例
int 型変数 xxx は 0 である → xxx == 0
4.次のプログラムは 2 つの値 10 と 13 の平均値
11.5 を求めようとしている。正しく求められたか
どうかは別として,実行結果を予想し,書きなさ
い。小数点以下の表示がある場合は小数点以下 3
桁書きなさい。予測不能の場合は予測不能と書き
なさい。ただし,「#include <stdio.h>」は省略
されている。
(全問正解で[14])
(4)
int main()
{
int a=10,b=13;
double c;
c=(a+b)/2.0;
printf("c=%d\n",c);
return 0;
}
(5)
int main()
{
int a=10,b=13;
double c;
c=(a+b)/2;
printf("c=%d\n",c);
return 0;
}
(6)
int main()
{
int a=10,b=13;
double c;
c=(a+b)/2;
printf("c=%f\n",c);
return 0;
}
(1)
int main()
{
int a=10,b=13;
double c;
c=(a+b)/2.0;
printf("c=%f\n",c);
return 0;
}
(2)
int main()
{
int a=10,b=13;
int c;
2/2
プログラミング言語前期中間試験解答用紙June2014
2J( )名前( 1. (1)
(2)
(3)
(4)
(5)
(6)
2. (1)
(2)
3. (1)
(2)
(3)
(4)
4. (1)
(2)
(3)
(4)
(5)
(6)
)
プログラミング言語前期中間試験解答用紙June2014
2J( )名前( 1. (1) x=4 y=45
x=5 y=5
x=6 y=7
(3)
0
1 2
(2)
3
(5) *********##
$*******###
$$*****####
$$$***#####
$$$$*######
$$$$$#######
4
0
1
2
3
4
1
2
5
10
)
0
2
3
3
(4) 3 13
10 55
(6) n=
n=
n=
nmb=
n=
n=
n=
nmb=
3200,
320,
32,
32000
6400,
640,
64,
64000
cnt=
cnt=
cnt=
cnt=
cnt=
cnt=
cnt=
cnt=
1
2
3
3
1
2
3
3
2. (1)
scanfのところで各変数の前に&をつけなければならない
(2)
return 0 の後ろに「;」をつける
3. (1)
(2)
0<a && 0<b
(3)
(2)
(3)
(4)
(5)
(6)
0<a || 0<b
(4)
0<=x && x<10
4. (1)
演算子の優先順位があるのでカッコは必須
c=11.500
(y<10 || 20<y) && y%2==0
右辺は混合演算なので11.5になり,double型整数に代入され11.5
c=11
整数同士の割り算で11になる
c=11
右辺は混合演算なので11.5になるがint型整数に代入したので11になる
「c=」を表示した後,その後は意味不明の値を表示する
「c=」を表示した後,その後は意味不明の値を表示する
c=11.000
整数同士の割り算で11になったものをdouble型に代入しても11.0になるだけ
https://xythos.tokyo-ct.ac.jp/usr/kosaka/web/for_students/CIntro/operator.html
の「B.1 C言語における算術演算子」の「整数と実数の混合演算」参照