単純な文字パターンの出力
以下のコードは、特定の文字で構成されたパターンを画面に表示するものです。人型を模したアスキーアートを複数行にわたって出力しています。
#include <stdio.h>
int main() {
printf(" 0\n");
printf("<H>\n");
printf("I I\n");
return 0;
}
並列表示のための整形出力
次に、2つの同じパターンを横に並べて表示する例です。空白を利用して視覚的に分離しています。
#include <stdio.h>
int main() {
printf(" 0 0\n");
printf("<H> <H>\n");
printf("I I I I\n");
return 0;
}
三角形の成立条件判定
3辺の長さを入力として受け取り、それらが三角形を形成できるかを判定するプログラムです。三角不等式を利用しています。
#include <stdio.h>
int main() {
double side1, side2, side3;
scanf("%lf %lf %lf", &side1, &side2, &side3);
if (side1 + side2 > side3 &&
side1 + side3 > side2 &&
side2 + side3 > side1) {
printf("これらの辺は三角形を構成できます\n");
} else {
printf("これらの辺では三角形を作れません\n");
}
return 0;
}
ユーザーの学習習慣に関する対話型処理
文字入力を用いてユーザーの行動習慣を確認し、それに応じたメッセージを返すコードです。改行文字の処理に注意が必要です。
#include <stdio.h>
int main() {
char prep, practice;
printf("授業前に予習・後に復習していますか?(y/n): ");
prep = getchar();
getchar(); // 改行文字の消費
printf("実際にコードを書いていますか?(y/n): ");
practice = getchar();
if ((prep == 'y' || prep == 'Y') && (practice == 'y' || practice == 'Y')) {
printf("\n継続は力なり、その調子!\n");
} else {
printf("\n今からでも遅くない、一緒に頑張ろう\n");
}
return 0;
}
ポイント: 最初の getchar() 後にある追加の getchar() は、キーボード入力後のバッファに残る改行(\n)を読み捨てるために必要です。これを省略すると次の入力関数が即座に終了してしまいます。
異なるデータ型の連続入力処理
整数、文字、浮動小数点数を順に入力し、それぞれを正しく読み取る例です。入力バッファの管理が重要になります。
#include <stdio.h>
int main() {
int val1, val2, val3;
char ch1, ch2, ch3;
double num1, num2;
scanf("%d %d %d", &val1, &val2, &val3);
printf("整数: %d, %d, %d\n", val1, val2, val3);
scanf(" %c %c %c", &ch1, &ch2, &ch3); // スペースを入れて前後の空白を無視
printf("文字: %c, %c, %c\n", ch1, ch2, ch3);
scanf("%lf %lf", &num1, &num2);
printf("実数: %.2f, %.2f\n", num1, num2);
return 0;
}
時間換算:秒から年へ
10億秒が何年に相当するかを計算するプログラム。丸め処理も含んでいます。
#include <stdio.h>
int main() {
double secondsPerYear = 31536000.0; // 1年 = 365日
double totalSeconds = 1000000000.0;
double years = totalSeconds / secondsPerYear;
int roundedYears;
if (years - (int)years >= 0.5) {
roundedYears = (int)years + 1;
} else {
roundedYears = (int)years;
}
printf("10億秒は約%d年です\n", roundedYears);
return 0;
}
累乗計算の繰り返し処理
ユーザーが入力した数値を365乗するループ処理。EOFで終了します。
#include <stdio.h>
#include <math.h>
int main() {
double base, result;
while (scanf("%lf", &base) != EOF) {
result = pow(base, 365);
printf("%.2f の365乗: %.2f\n\n", base, result);
}
return 0;
}
摂氏から華氏への温度変換
繰り返し入力に対応した温度単位変換ツール。
#include <stdio.h>
int main() {
double celsius, fahrenheit;
while (scanf("%lf", &celsius) != EOF) {
fahrenheit = (9.0 * celsius) / 5.0 + 32;
printf("摂氏%.2f度 → 華氏%.2f度\n", celsius, fahrenheit);
}
return 0;
}
ヘロンの公式による面積計算
3辺の長さから三角形の面積を求めるプログラム。数学ライブラリを使用します。
#include <stdio.h>
#include <math.h>
int main() {
int x, y, z;
double perimeter, area;
while (scanf("%d %d %d", &x, &y, &z) != EOF) {
perimeter = (x + y + z) / 2.0;
area = sqrt(perimeter * (perimeter - x) * (perimeter - y) * (perimeter - z));
printf("x=%d,y=%d,z=%d,面積=%.3f\n", x, y, z, area);
}
return 0;
}