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: }