List 1 の空欄部(// ...)に適切なコードを補い, 九九の練習のためのプログラムを完成せよ.
答案には,完成した 99.c のソースコード全体を記述すること. [配点:10]
#include <stdio.h>
// r の段の練習
int row(int r)
{
int score = 0; // 正解した回数
int c; // 列のカウンタ
int a; // 回答
printf("%d の段:\n", r);
// ...
return (score);
}
// 成績の表示
int print(int *result)
{
int score = 0; // クリアした段の個数
int r; // 段のカウンタ
printf("==== 現在の成績 ====\n");
// ...
printf("====================\n");
return (score);
}
int main()
{
int result[10] = {0}; // 各段の成績状況(result[0] は不使用)
int r;
printf("*** 九九の練習 ***\n\n");
while (1) {
if (print(result) == 9) break;
printf("何の段を練習?(1〜9)> ");
scanf("%d", &r);
if (r < 1) continue;
if (r > 9) continue;
if (row(r) == 9) {
result[r] = 1; // クリア
} else {
result[r] = -1; // 要再挑戦
}
}
printf("すべてクリア!!");
return (0);
}
実行例:
$ ./99 *** 九九の練習 *** ==== 現在の成績 ==== 1 の段:未挑戦 2 の段:未挑戦 3 の段:未挑戦 ... 9 の段:未挑戦 ==================== 何の段を練習?(1〜9)> 2 2 の段: 2 * 1 = ? > 2 OK! 2 * 2 = ? > 4 OK! 2 * 3 = ? > 6 OK! ... 2 * 9 = ? > 18 OK! ==== 現在の成績 ==== 1 の段:未挑戦 2 の段:クリア 3 の段:未挑戦 ... 9 の段:未挑戦 ==================== 何の段を練習?(1〜9)> 3 3 の段: 3 * 1 = ? > 3 OK! 3 * 2 = ? > 5 NG... 3 * 3 = ? > 7 NG... ... 3 * 9 = ? > 27 OK! ==== 現在の成績 ==== 1 の段:未挑戦 2 の段:クリア 3 の段:要再挑戦 ... 9 の段:未挑戦 ==================== ... ==== 現在の成績 ==== 1 の段:クリア 2 の段:クリア 3 の段:クリア ... 9 の段:クリア ==================== すべてクリア!! $
「非負整数 x の自乗 x2 を 加減算の繰り返しだけで計算する関数 int sqr(int x) について, 次の2問に答えなさい. [配点:10]
(1) 反復によって定義せよ.(5点)
動作テストのために List 2 を利用してよい. ただし答案用紙には, 定義した関数 sqr() のソースコードだけを記述すること.
#include <stdio.h>
int sqr(int x)
{
// ...
}
int main()
{
int x;
printf("非負整数 x > ");
scanf("%d", &x);
printf("%d^2 = %d\n", x, sqr(x));
return (0);
}
次の3問に答えなさい. [配点:10]
(1) 各自のユーザ ID の数字部分を 256倍した整数値を 8桁(4バイト)の 16進数として リトルエンディアン形式で表わせ. (3点)
(2) 配列 double a[10] の先頭アドレスを 0x0123ABCD とする. 要素 a[6] のアドレスを求めよ. (3点)
(3) List 3 のコードは,文字列を縦書き表示しようとした失敗例であり, 実行時にセグメントエラーが発生する. 問題点を指摘し,解決策を提案せよ. (何行目の何がどうしてエラーとなるか? 何行目の何をどのように変更するべきか?明記すること.) (4点)
L01: #include <stdio.h>
L02: int main()
L03: {
L04: char a[] = "tategaki";
L05: while (*a != '\0') {
L06: printf("%c\n", *a);
L07: a++;
L08: }
L09: return (0);
L10: }