10〜18章で学んだ内容の総合演習。
各問とも、まず自分でコードを書いてから答えを確認しよう。
点数を入力し、次の条件で評価を表示するプログラムを作れ。
score / 10 の結果を switch 文の式に使って判定する。
0〜100 の範囲外なら「エラー」と表示する。
| 入力 | 出力 |
|---|---|
| 90〜100 | 評価:A |
| 70〜89 | 評価:B |
| 50〜69 | 評価:C |
| 0〜49 | 評価:D |
| 範囲外 | エラー |
#include <stdio.h>
int main(void)
{
int score;
printf("点数を入力してください: ");
scanf("%d", &score);
/* 0〜100 の範囲外チェックを if 文で先に行う */
/* switch (score / 10) を使って評価を分岐する */
return 0;
}
score / 10 の値:90点なら 9、85点なら 8、70点なら 7、50点なら 5 になる。
100点のとき score / 10 = 10 なので case 10 も必要。
同じ処理を複数の case に割り当てるには case を並べて書ける:
case 7:
case 8:
printf("評価:B\n");
break;
#include <stdio.h>
int main(void)
{
int score;
printf("点数を入力してください: ");
scanf("%d", &score);
if (score < 0 || score > 100) {
printf("エラー\n");
return 0;
}
switch (score / 10) {
case 10:
case 9:
printf("評価:A\n"); break;
case 8:
case 7:
printf("評価:B\n"); break;
case 6:
case 5:
printf("評価:C\n"); break;
default:
printf("評価:D\n");
}
return 0;
}
1〜30 の整数を順に表示する。ただし:
#include <stdio.h>
int main(void)
{
int i;
for (i = 1; i <= 30; i++) {
/* ここに条件分岐を書く */
}
return 0;
}
#include <stdio.h>
int main(void)
{
int i;
for (i = 1; i <= 30; i++) {
if (i % 15 == 0) {
printf("FizzBuzz\n");
} else if (i % 3 == 0) {
printf("Fizz\n");
} else if (i % 5 == 0) {
printf("Buzz\n");
} else {
printf("%d\n", i);
}
}
return 0;
}
正の整数 n を入力して、素数かどうかを判定するプログラムを作れ。
素数:1 と自分自身以外に約数を持たない整数(2, 3, 5, 7, 11, ...)
#include <stdio.h>
int main(void)
{
int n, i, isPrime;
printf("正の整数を入力してください: ");
scanf("%d", &n);
/* ここに判定ロジックを書く */
return 0;
}
2 から n-1 まで順に割ってみて、割り切れるものがあれば素数でない。
フラグ変数 isPrime = 1(素数と仮定)を用意して、割り切れたら isPrime = 0 にする。
#include <stdio.h>
int main(void)
{
int n, i, isPrime;
printf("正の整数を入力してください: ");
scanf("%d", &n);
if (n <= 1) {
printf("%d は素数ではありません\n", n);
return 0;
}
isPrime = 1;
for (i = 2; i < n; i++) {
if (n % i == 0) {
isPrime = 0;
break;
}
}
if (isPrime) {
printf("%d は素数です\n", n);
} else {
printf("%d は素数ではありません\n", n);
}
return 0;
}
2つの整数と演算子(+, -, *, /)を入力して計算し、「q」が入力されるまで繰り返すプログラムを作れ。
実行例:
計算式を入力してください(例: 10 + 3)、qで終了: 10 + 3 結果: 13 計算式を入力してください(例: 10 + 3)、qで終了: 8 / 0 0で割れません 計算式を入力してください(例: 10 + 3)、qで終了: q 終了します
#include <stdio.h>
int main(void)
{
int a, b;
char op;
while (1) {
printf("計算式を入力してください(例: 10 + 3)、qで終了: ");
/* scanf で op が 'q' かどうかを先にチェックする工夫が必要 */
}
return 0;
}
最初に op だけ読み込んで 'q' なら break する方法がある:
scanf(" %c", &op);
if (op == 'q') { break; }
scanf("%d %c %d", /* ... */ );
または scanf("%d %c %d", &a, &op, &b) の戻り値(読めた項目数)で判定する方法もある。
#include <stdio.h>
int main(void)
{
int a, b;
char op;
while (1) {
printf("計算式を入力してください(例: 10 + 3)、qで終了: ");
if (scanf("%d %c %d", &a, &op, &b) != 3) {
printf("終了します\n");
break;
}
switch (op) {
case '+': printf("結果: %d\n", a + b); break;
case '-': printf("結果: %d\n", a - b); break;
case '*': printf("結果: %d\n", a * b); break;
case '/':
if (b != 0) { printf("結果: %d\n", a / b); }
else { printf("0で割れません\n"); }
break;
default: printf("無効な演算子です\n");
}
}
return 0;
}