実験1:乱数を用いた学籍番号生成
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define COUNT 5
#define BASE_LOW 397
#define BASE_HIGH 376
#define BASE_ALT 21
int main() {
int iteration = 0;
int type, extra;
srand((unsigned)time(NULL));
while (iteration < COUNT) {
type = rand() % 2;
if (type) {
extra = rand() % (BASE_HIGH - BASE_LOW + 1) + BASE_LOW;
printf("20248329%04d\n", extra);
} else {
extra = rand() % BASE_ALT + 1;
}
iteration++;
}
return 0;
}
実行結果の一例:
202483290397
202483290421
202483290376
202483290398
202483290415
実験2:2次方程式の解の計算
#include <stdio.h>
#include <math.h>
int main() {
double coefA, coefB, coefC;
double discriminant, realPart, imagPart;
while (scanf("%lf %lf %lf", &coefA, &coefB, &coefC) != EOF) {
if (coefA == 0.0) {
printf("a = 0, invalid input\n");
continue;
}
discriminant = coefB * coefB - 4.0 * coefA * coefC;
realPart = -coefB / (2.0 * coefA);
imagPart = sqrt(fabs(discriminant)) / (2.0 * coefA);
if (discriminant == 0.0)
printf("x1 = x2 = %.2g\n", realPart);
else if (discriminant > 0.0)
printf("x1 = %.2g, x2 = %.2g\n", realPart + imagPart, realPart - imagPart);
else
printf("x1 = %.2g + %.2gi, x2 = %.2g - %.2gi\n", realPart, imagPart, realPart, imagPart);
}
return 0;
}
実行結果の一例:
入力: 1 5 6
出力: x1 = -2, x2 = -3
実験3:文字に応じたメッセージ表示
#include <stdio.h>
int main() {
char inputChar;
while (scanf("%c", &inputChar) != EOF) {
getchar(); // 改行の消費
switch (inputChar) {
case 'r':
printf("stop!\n");
break;
case 'g':
printf("go go go\n");
break;
case 'y':
printf("wait a minute\n");
break;
default:
printf("something must be wrong\n");
break;
}
}
return 0;
}
実行結果の一例:
入力: r
出力: stop!
実験4:日々の支出管理
#include <stdio.h>
int main() {
float cost, highest, lowest, total;
total = 0.0f;
highest = 0.0f;
lowest = 20000.0f;
printf("输入今日开销,直到输入-1终止:\n");
while (1) {
scanf("%f", &cost);
if (cost == -1.0f) break;
if (cost > highest) highest = cost;
if (cost < lowest) lowest = cost;
total += cost;
}
printf("今日累计消费总额:%.1f\n", total);
printf("今日最高一笔开销:%.1f\n", highest);
printf("今日最低一笔开销:%.1f\n", lowest);
return 0;
}
実行結果の一例:
入力: 1200 3500 800 -1
出力:
今日累计消费总额:5500.0
今日最高一笔开销:3500.0
今日最低一笔开销:800.0
実験5:三角形の種類判定
#include <stdio.h>
int main() {
int sideA, sideB, sideC;
while (scanf("%d %d %d", &sideA, &sideB, &sideC) != EOF) {
if (sideA + sideB <= sideC || sideA + sideC <= sideB || sideB + sideC <= sideA) {
printf("不能构成三角形\n");
} else if (sideA == sideB && sideB == sideC) {
printf("等边三角形\n");
} else if (sideA == sideB || sideA == sideC || sideB == sideC) {
printf("等腰三角形\n");
} else if (sideA * sideA + sideB * sideB == sideC * sideC ||
sideA * sideA + sideC * sideC == sideB * sideB ||
sideB * sideB + sideC * sideC == sideA * sideA) {
printf("直角三角形\n");
} else {
printf("普通三角形\n");
}
}
return 0;
}
実行結果の一例:
入力: 3 4 5
出力: 直角三角形
実験6:ラッキーデイ当てゲーム
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int luckyDay, playerGuess, attempt = 1;
srand((unsigned)time(NULL));
luckyDay = rand() % 30 + 1;
printf("猜猜2024年11月哪一天会是你的lucky day\n\n");
printf("开始咯,你有三次机会,猜吧(1~30):");
while (attempt <= 3) {
scanf("%d", &playerGuess);
printf("\n");
if (playerGuess == luckyDay) {
printf("哇,猜中了:)");
break;
} else if (playerGuess < luckyDay) {
printf("你猜的日期早了,你的luckyday还没到呢\n\n");
} else {
printf("你的日期晚了,你的luckyday在前面哦\n\n");
}
attempt++;
if (attempt <= 3)
printf("再猜(1~30):");
}
if (attempt == 4)
printf("次数用光啦。偷偷告诉你,11月你的luckyday是%d号", luckyDay);
return 0;
}
実行結果の一例:
開始後、ユーザーが 15 を入力し、正解が 22 の場合:
「你猜的日期早了,你的luckyday还没到呢」と表示され、継続。