演習課題1:成績評価システム
#include <stdio.h>
char evaluate_score(int mark); // 関数宣言
int main() {
int mark;
char evaluation;
while(scanf("%d", &mark) != EOF) {
evaluation = evaluate_score(mark); // 関数呼び出し
printf("得点: %d, 評価: %c\n\n", mark, evaluation);
}
return 0;
}
// 関数定義
char evaluate_score(int mark) {
char result;
switch(mark/10) {
case 10:
case 9: result = 'A'; break;
case 8: result = 'B'; break;
case 7: result = 'C'; break;
case 6: result = 'D'; break;
default: result = 'F';
}
return result;
}
問題1:入力された百分評価を対応する等級に変換する。引数の型:int、戻り値の型:char 問題2:各case文の後にbreak文がない場合、次のcase文が実行されてしまう。単一文字は' 'で囲む必要がある。
演習課題2:数字の各桁の合計
#include <stdio.h>
int calculate_digit_sum(int num); // 関数宣言
int main() {
int num;
int result;
while(printf("数値を入力: "), scanf("%d", &num) != EOF) {
result = calculate_digit_sum(num); // 関数呼び出し
printf("入力値: %d, 合計: %d\n\n", num, result);
}
return 0;
}
// 関数定義
int calculate_digit_sum(int num) {
int total = 0;
while(num != 0) {
total += num % 10;
num /= 10;
}
return total;
}
問題1:整数の各桁の数字を合計する 問題2:再帰呼び出しを使用することも可能
演習課題3:べき乗計算
#include <stdio.h>
int compute_power(int base, int exponent); // 関数宣言
int main() {
int base, exponent;
int result;
while(printf("底と指数を入力: "), scanf("%d%d", &base, &exponent) != EOF) {
result = compute_power(base, exponent); // 関数呼び出し
printf("%dの%d乗: %d\n\n", base, exponent, result);
}
return 0;
}
// 関数定義
int compute_power(int base, int exponent) {
int temp;
if(exponent == 0)
return 1;
else if(exponent % 2)
return base * compute_power(base, exponent-1);
else {
temp = compute_power(base, exponent/2);
return temp*temp;
}
}
問題1:整数xのn乗を計算する 問題2:再帰関数である。nが奇数の場合、power(x,n)=x*power(x,n-1)。nが偶数の場合、power(x,n)=power(x,n/2)*power(x,n/2)。nが0の場合、power(x,n)=1。
演習課題4:三角形の分類
#include <stdio.h>
int identify_triangle(int side1, int side2, int side3);
int main(){
int side1, side2, side3, classification;
while(scanf("%d%d%d", &side1, &side2, &side3) != EOF){
classification = identify_triangle(side1, side2, side3);
switch(classification){
case 0: printf("三角形を形成できません\n\n");
break;
case 1:printf("不等辺三角形\n\n");
break;
case 2:printf("正三角形\n\n");
break;
case 3:printf("二等辺三角形\n\n");
break;
case 4:printf("直角三角形\n\n");
break;
}
}
return 0;
}
int identify_triangle(int side1, int side2, int side3){
if(side1 >= side2 + side3 || side2 >= side1 + side3 || side3 >= side1 + side2)
return 0;
if(side1 == side2 && side2 == side3)
return 2;
if(side1 == side2 || side1 == side3 || side3 == side2)
return 3;
if(side1*side1 == side2*side2 + side3*side3 || side2*side2 == side1*side1 +side3*side3 || side3*side3 == side1*side1 + side2*side2)
return 4;
else
return 1;
}
演習課題5:組み合わせ計算
#include <stdio.h>
int combination(int total, int select);
int main() {
int total, select;
int result;
while(scanf("%d%d", &total, &select) != EOF) {
result = combination(total, select);
printf("総数: %d, 選択数: %d, 結果: %d\n\n", total, select, result);
}
return 0;
}
int combination(int total, int select) {
if (select > total) return 0;
if (select == 0 || select == total) return 1;
return combination(total - 1, select) + combination(total - 1, select - 1);
}
演習課題6:最大公約数
#include <stdio.h>
int find_gcd(int num1, int num2, int num3);
int main() {
int num1, num2, num3;
int result;
while (scanf("%d%d%d", &num1, &num2, &num3) != EOF) {
result = find_gcd(num1, num2, num3);
printf("最大公約数:%d\n", result);
}
return 0;
}
int find_gcd(int num1, int num2, int num3) {
int smallest = num1;
int i;
if(num2 < smallest)
smallest = num2;
if(num3 < smallest)
smallest = num3;
for (int i = smallest; i >= 1; i--) {
if(num1%i == 0 && num2%i == 0 && num3%i == 0) {
return i;
}
}
}
演習課題7:文字パターン出力
#include <stdio.h>
#include <stdlib.h>
void display_pattern(int level);
int main() {
int level;
printf("レベルを入力: ");
while (scanf("%d", &level) != EOF) {
printf("入力レベル: %d\n", level);
display_pattern(level);
printf("\nレベルを入力: ");
}
return 0;
}
void display_pattern(int level) {
for (int row = 1; row <= level; row++) {
for (int space = 1; space < row; space++) {
printf("\t");
}
for (int element = 1; element <= 2 * (level - row) + 1; element++) {
printf(" O \t");
}
printf("\n");
for (int space = 1; space < row; space++) {
printf("\t");
}
for (int element = 1; element <= 2 * (level - row) + 1; element++) {
printf(" <H> \t");
}
printf("\n");
for (int space = 1; space < row; space++) {
printf("\t");
}
for (int element = 1; element <= 2 * (level - row) + 1; element++) {
printf(" I I \t");
}
printf("\n");
}
}