コンピュータプログラミングII(亀田クラス)
中間テスト(第2回,12月13日)
制限時間90分 テキスト参照可,PC使用可
http://www.tuat.ac.jp/~kamelab/CPII/test2.htm
各自の理解度を確かめたいので,友達同士での話し合いやメールのやり取りはしないこと.
第1問
二つのベクトルA = (ax, ay, az), B = (bx, by, bz)のベクトル積 (外積) を計算するプログラムを作りたい.コンソール入出力,ベクトル積計算の部分に関する以下の空欄[@]〜[E]を埋めなさい.なお,ベクトル積は以下の式で表される.
・・・
(1)

#include<stdio.h>
void main(void)
{
int
a[3], b[3], c[3];
printf(“ベクトル積の計算\n”);
/* ベクトルA, Bの入力 */
printf("Vector
A: a_x, a_y, a_z => ");
scanf("%d,%d,%d",
[ @ ]);
printf("Vector
B: b_x, b_y, b_z => ");
scanf("%d,%d,%d",
[ A ]);
/* ベクトル積A×B = C */
c[0]
= [ B ];
c[1]
= [ C ];
c[2]
= [ D ];
/* 出力 */
printf(“A×B = (%d,%d,%d)\n”, [ E ]);
}
第2問
次のプログラムに関する各問に答えなさい.

#include<stdio.h>
void main(void)
{
int
i;
float
f;
double
d;
d
= 5.1234567890123456789;
→ f
= d;
→ i
= f;
printf("%20.19lf\n%20.19f\n",
d, f);
printf("%5d\n",
i);
}
@
変数d, fの有効桁数を答えなさい.
A
プログラム矢印の部分を下記のようにした場合のf, iの数値はどうなるか?
i = d;
f = i;
第3問
次のプログラムに関する各問に答えなさい.

#include<stdio.h>
void main(void)
{
int
a, i, m[10], *a_pt, *m_pt;
a
= 29;
[
@ ];
printf("a=%2d\n",
a);
printf("a=%2d\n",
[ A ]);
for(i
= 0; i<10; i++)
m[i]
= i * 10;
m_pt
= [ B ];
for(i
= 0; i < 10; i++)
{
printf("m[%d]=%2d,
m_pt =%d\n", i, m[i], m_pt);
m_pt++;
}
}
@
ポインタ変数a_ptにaのアドレスを指定するよう,空欄[ @
]を埋めなさい.
A
ポインタ変数a_ptを使って変数aの値を出力するよう,空欄[ A
]を埋めなさい.
B
配列mの先頭ポインタを指定するよう,空欄[ B
]を埋めなさい.
C
上記のプログラムを実行すると,m_ptの値は4つずつ増えていく.その理由を答えなさい.
第4問
キーボードから入力した10個の整数
(0から100までの値) を,小さい順に並べ替えて出力するプログラムを作りたい.並べ替えの途中経過も含めて,ファイル “result.dat”に出力できるよう,空欄[ @
]から[ D ]を埋めなさい.

#include<stdio.h>
#include<stdlib.h>
void
main(void)
{
int
i, j;
int
a[10], b;
FILE
[ @ ];
printf(“0から100までの整数をキーボードから10個入力せよ\n");
for(i
= 0; i < 10; i++)
{
printf("%2d番目のデータ =>",i+1);
scanf("%d",
&a[i]);
}
/* 出力用ファイル “result.dat”をひらく */
if((fp
= fopen([ A ])) == NULL)
{
printf(“Can't
open the file.”);
exit(1);
}
/* 入力したデータを横に並べ,同じ形式で,コンソール,ファイルに出力 */
for(j
= 0; j < 10; j++)
{
printf(“%3d”,
a[j]);
fprintf([
B ]);
}
printf("\n");
fprintf(fp,
"\n");
/* 入力したデータを小さい順に並べ替える */
for(i
= 0; i < 10; i++)
{
/* 並べ替えの経過を,同じ形式で,コンソール,ファイルに出力 */
for(j
= 0; j < 10; j++)
{
printf(“%3d”,
a[j]);
fprintf([
B ]);
}
printf("\n");
fprintf(fp,
"\n");
/* 配列a[]の中身を小さい順に並べ替える */
[
C ]
}
/* ファイルを閉じる */
fclose([
D ]);
}
第4問の出力結果例
