double hoge (int n) {
return 1.618 * n;
}
以下のプログラムは動作はする(はずだ)がインデンテーションが滅茶苦茶である。 <%-- そして、誤解を招くおそれがある --%> 「プログラミング」のインデンテーションの約束事に厳密に従ってブレースを追加し、意味を変えずにインデントしなおせ。 ブレース({〜})内の字下げは 4 文字分とせよ。 特に 5 番目のルール:
if や for などでは、選択されたり、 繰り返したりされる文が一つだけの場合も、ブレース({〜})に囲む。に注意すること。 もちろんプログラムの動作は変えないこと。
#include <stdio.h>
int main(void) {
int i, j;
for (i = 0; i < 10; i++)
for (j = 0; j < i; j++)
if (j % 3 == 0)
printf("*");
else
printf("&");
for (j = 0; j< i; j++)
printf("#");
return 0;
}
正解例は以下のようになる。
#include <stdio.h>
int main(void) {
int i, j;
for (i = 0; i < 10; i++) {
for (j = 0; j < i; j++) {
if (j % 3 == 0) {
printf("*");
} else {
printf("&");
}
}
}
for (j = 0; j< i; j++) {
printf("#");
}
return 0;
}
下に示すように、段数を受け取って、数字、空白、* と # を繰返し表示して、与えられた段数の三角形を描くプログラムを作成せよ。 1 列目に行番号の下一桁の数字を表示し、2 列目の空白のあと、 上から 1 行目は * が 1 つ、2 行目は # が 2 つ、3 行目は * が 3 つ、… というように、奇数行目は *、偶数行目は # が行番号と同じ数だけ繰り返すようにせよ。
実行例 1:何段ですか:4 1 * 2 ## 3 *** 4 ####実行例 2:
何段ですか:7 1 * 2 ## 3 *** 4 #### 5 ***** 6 ###### 7 *******実行例 3:
何段ですか:12 1 * 2 ## 3 *** 4 #### 5 ***** 6 ###### 7 ******* 8 ######## 9 ********* 0 ########## 1 *********** 2 ############実行例 4:
何段ですか:0
参考にするプログラム: List 4-18
正解例は以下のようになる。
#include <stdio.h>
int main(void)
{
int i, j, len;
printf("何段ですか:");
scanf("%d", &len);
for (i = 1; i <= len; i++) {
char ch = i % 2 ? '*' : '#';
printf("%d " , i % 10);
for (j = 1; j <= i; j++) {
putchar(ch);
}
putchar('\n');
}
return 0;
}
秘密のルールを知っていなければ、整数を入力できない関数 foo を定義する。 つまり、2 つの整数の入力を読込み、2 つの数の和が 9999 のときは、 1 つめに入力された整数を返し、2 つの数の和が 9999 以外のときは、 2 つの整数の入力の読込みを繰り返す関数 int foo(void) を定義せよ。
なお、main関数は、以下のコードを使用して、確認せよ。
/* … 略 … */
int main(void) {
int m = foo();
printf("あなたが入力した整数は %d です。\n", m);
return 0;
}
出力例は、以下のようになる。
実行例 1:整数1を入力してください: 1234 整数2を入力してください: 8765 あなたが入力した整数は 1234 です。実行例 2:
整数1を入力してください: 1111 整数2を入力してください: 7777 整数1を入力してください: 2222 整数2を入力してください: 7777 あなたが入力した整数は 2222 です。実行例 3:
整数1を入力してください: 0 整数2を入力してください: 9999 あなたが入力した整数は 0 です。実行例 4:
整数1を入力してください: 10000 整数2を入力してください: 0 整数1を入力してください: 10000 整数2を入力してください: -1 あなたが入力した整数は 10000 です。
正解例は以下のようになる。
#include <stdio.h>
int foo(void) {
int n1, n2;
do {
printf("整数1を入力してください: ");
scanf("%d", &n1);
printf("整数2を入力してください: ");
scanf("%d", &n2);
} while (n1 + n2 != 9999);
return n1;
}
int main(void) {
int m = foo();
printf("あなたが入力した整数は %d です。\n", m);
return 0;
}
int 型の配列 vc を受け取り vc の中の、vc の正の要素の最大値を返す関数 maxArr(const int vc[]) を作成せよ。 ただし、この関数は引数として配列の要素数を受け取らず、 0 または負の要素が現れたら、その直前の要素を配列の最後の要素と見なす。
なお、vc 中に正の要素がない場合は戻り値として 0 を返すようにせよ。
なお、テストデータは以下のコードの断片を使用して、結果を確認せよ。
#include <stdio.h>
int maxArr(const int vc[]) {
/* … ここを考える … */
}
int vc1[] = {1, 6, 3, 4, 2, 5, -1};
int vc2[] = {8, 5, 6, 2, 3, 7, 3, 2, -1};
int vc3[] = {3, 7, 4, 12, 19, 2, 29, 31, -1};
int vc4[] = {-1};
int main(void) {
printf("vc1 中の最大値は %d です。\n", maxArr(vc1));
printf("vc2 中の最大値は %d です。\n", maxArr(vc2));
printf("vc3 中の最大値は %d です。\n", maxArr(vc3));
printf("vc4 中の最大値は %d です。\n", maxArr(vc4));
return 0;
}
この出力結果は、以下のようになる。
vc1 中 の最大値は 6 です。 vc2 中 の最大値は 8 です。 vc3 中 の最大値は 31 です。 vc4 中 の最大値は 0 です。
正解例は以下のようになる。
#include <stdio.h>
int maxArr(const int vc[]) {
int i;
int max = 0;
for (i = 0; vc[i] > 0; i++) {
if (vc[i] > max) {
max = vc[i];
}
}
return max;
}
int vc1[] = {1, 6, 3, 4, 2, 5, -1};
int vc2[] = {8, 5, 6, 2, 3, 7, 3, 2, -1};
int vc3[] = {3, 7, 4, 12, 19, 2, 29, 31, -1};
int vc4[] = {-1};
int main(void) {
printf("vc1 中の最大値は %d です。\n", maxArr(vc1));
printf("vc2 中の最大値は %d です。\n", maxArr(vc2));
printf("vc3 中の最大値は %d です。\n", maxArr(vc3));
printf("vc4 中の最大値は %d です。\n", maxArr(vc4));
return 0;
}