実験タスク1
#include <stdio.h>
char grade_converter(int score);
int main() {
int score;
char grade;
while(scanf("%d", &score) != EOF) {
grade = grade_converter(score);
printf("Score: %d, Grade: %c\n\n", score, grade);
}
return 0;
}
char grade_converter(int score) {
char result;
switch(score/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 = 'E';
}
return result;
}
問題1:
- 関数は整数スコアを文字グレードに変換する。
- 引数タイプ:int
- 戻り値タイプ:char
問題2:
- 文字型不一致
- caseブランチでbreakがない場合、デフォルトへ進む。
実験タスク2
#include <stdio.h>
int digit_sum(int num);
int main() {
int num;
int total;
while(printf("Enter num: "), scanf("%d", &num) != EOF) {
total = digit_sum(num);
printf("num = %d, total = %d\n\n", num, total);
}
return 0;
}
int digit_sum(int num) {
int total = 0;
while(num != 0) {
total += num % 10;
num /= 10;
}
return total;
}
問題1:
- 関数は入力された整数の各桁の合計を計算する。
問題2:
- はい。元は反復思考、修正後は再帰思考。
実験タスク3
#include <stdio.h>
int exponentiation(int base, int exp);
int main() {
int base, exp;
int ans;
while(printf("Enter base and exp: "), scanf("%d%d", &base, &exp) != EOF) {
ans = exponentiation(base, exp);
printf("exp = %d, ans = %d\n\n", exp, ans);
}
return 0;
}
int exponentiation(int base, int exp) {
if(exp == 0)
return 1;
else if(exp % 2)
return base * exponentiation(base, exp-1);
else {
int temp = exponentiation(base, exp/2);
return temp*temp;
}
}
問題1:
- 関数はxのn乗を計算する。
問題2:
- はい。
実験タスク4
#include<stdio.h>
int is_prime_number(int n);
int main(){int n;
int count=0;
printf("Twin primes under 100:\n");
for(n=1;n<=100;n++)
{if(is_prime_number(n)&&is_prime_number(n+2)){
printf("%d %d\n",n,n+2);
count++;}}
printf("Total twin primes under 100: %d\n",count);
getchar();
return 0;}
int is_prime_number(int n){int i;
if(n<=1)return 0;
if(n==2)return 1;
if(n>=3)for(i=2;i
実験タスク5
#include <stdio.h>
int combination(int x, int y);
int main() {
int x, y;
int result;
while(scanf("%d%d", &x, &y) != EOF) {
result = combination(x, y);
printf("x = %d, y = %d, result = %d\n\n", x, y, result);
}
return 0;
}
int combination(int x, int y){
if(y<0||y>x)return 0;
if(y==0||y==x)return 1;
return combination(x-1,y)+combination(x-1,y-1);
}
実験タスク6
#include <stdio.h>
int greatest_common_divisor(int a,int b,int c);
int main() {
int a, b, c;
int ans;
while(scanf("%d%d%d", &a, &b, &c) != EOF) {
ans = greatest_common_divisor(a, b, c);
printf("GCD: %d\n\n", ans);
}
return 0;
}
int greatest_common_divisor(int a,int b,int c){int i;
if(a=1;--i) if (a%i==0&&b%i==0&&c%i==0)return i;}
実験タスク7
#include <stdio.h>
#include <stdlib.h>
void print_pattern(int rows);
int main() {
int rows;
printf("Enter rows: ");
scanf("%d", &rows);
print_pattern(rows);
system("pause");
return 0;
}
void print_pattern(int rows){int i,k,j;
for(i=0;i