注意: これは過去問です。
以下の問に答えよ。
以下のプログラムは動作はする(はずだ)がインデンテーションが滅茶苦茶である。 プログラミングⅠのインデンテーションの約束事に厳密に従って、 インデントしなおせ。(ブレース内の字下げは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