注意: これは過去問です。
以下の問に答えよ。
以下のプログラムは動作はする(はずだ)がインデンテーションが滅茶苦茶である。 プログラミングⅠのインデンテーションの約束事に厳密に従って、 インデントしなおせ。(ブレース内の字下げは4文字分とせよ。) 特に 5番目のルール
ifやforなどでは、選択されたり、 繰り返したりされる文が一つだけの場合も、ブレースに囲む。に注意すること。 もちろんプログラムの動作は変えないこと。
#include <stdio.h> int main(void) { int k, n=1; for (k=1; k<10; k++) if (k%3!=0) n*=k; printf("%d ", n); return 0; }
下に示すように、横幅と高さを受け取って、ディスプレイ上に 0123456789を繰返し表示して、 与えられた横幅と高さの長方形を描くプログラムを作成せよ。
横幅:5 高さ:3 01234 56789 01234
横幅:7 高さ:4 0123456 7890123 4567890 1234567
横幅:12 高さ:6 012345678901 234567890123 456789012345 678901234567 890123456789 012345678901
参考にするプログラム: List 4-17
int型の引数 m, n (ただし m≥2, n≥1と仮定して良い)を受け取り、 mkが nを割り切るような最大の整数 k (k≥0)を返す関数 int multiplicity(int m, int n)を定義せよ。
なお、main関数は、以下のコードを使用して、値を確認せよ。
int main(void) { printf("multiplicity(2, 3) = %d\n", multiplicity(2, 3)); printf("multiplicity(2, 12) = %d\n", multiplicity(2, 12)); printf("multiplicity(2, 200) = %d\n", multiplicity(2, 200)); printf("multiplicity(2, 1023) = %d\n", multiplicity(2, 1023)); printf("multiplicity(3, 162) = %d\n", multiplicity(3, 162)); printf("multiplicity(5, 1000) = %d\n", multiplicity(5, 1000)); printf("multiplicity(3, 999999999) = %d\n", multiplicity(3, 999999999)); return 0; }
この出力結果は、以下のようになる。 (3 = 20×3, 12 = 22×3, 200 = 23×25, などなど)
multiplicity(2, 3) = 0 multiplicity(2, 12) = 2 multiplicity(2, 200) = 3 multiplicity(2, 1023) = 0 multiplicity(3, 162) = 4 multiplicity(5, 1000) = 3 multiplicity(3, 999999999) = 4
参考にするプログラム: (あえて言えば) List 6-4
int型の配列 vcと、その要素数 noを受け取り、 vcが単調に増加する配列ならば 1を そうでなければ 0を返す関数 int increasing(int vc[], int no)を定義せよ。
ただしここでは、vcが単調に増加する配列であるとは、 1 ≤ i < no のすべての添字 iに対して、 vc[i-1] < vc[i]が成り立つことである、とする。
なお、テストデータは以下のコードを使用して、結果を確認せよ。
int arr1[] = {2, 3, 5, 7, 11, 13}; int arr2[] = {2, 3, 7, 5, 11, 13}; int arr3[] = {1, 2, 3, 4, 5, 6, 7, 1}; int arr4[] = {1, 2, 3, 4, 5, 6, 7, 7}; int arr5[] = {1, 2, 3, 4, 5, 6, 7, 9}; int main(void) { if (increasing(arr1, sizeof(arr1)/sizeof(int))) { printf("arr1は単調増加です。\n"); } else { printf("arr1は単調増加ではありません。\n"); } if (increasing(arr2, sizeof(arr2)/sizeof(int))) { printf("arr2は単調増加です。\n"); } else { printf("arr2は単調増加ではありません。\n"); } if (increasing(arr3, sizeof(arr3)/sizeof(int))) { printf("arr3は単調増加です。\n"); } else { printf("arr3は単調増加ではありません。\n"); } if (increasing(arr4, sizeof(arr4)/sizeof(int))) { printf("arr4は単調増加です。\n"); } else { printf("arr4は単調増加ではありません。\n"); } if (increasing(arr5, sizeof(arr5)/sizeof(int))) { printf("arr5は単調増加です。\n"); } else { printf("arr5は単調増加ではありません。\n"); } return 0; }
この出力結果は、以下のようになる。
arr1は単調増加です。 arr2は単調増加ではありません。 arr3は単調増加ではありません。 arr4は単調増加ではありません。 arr5は単調増加です。
参考にするプログラム: List 6-11