Ex06Ans
From Prog0
演習第6回
Contents |
解答例
A問題
A-1 forループによる3の倍数の和の計算
ファイル名: ex06a1.c
#include <stdio.h> int main() { int n, sum = 0; int i; printf("整数を入力して下さい:"); scanf("%d", &n); for(i = 1 ; i <= n ; i++){ if((i % 3) == 0){ sum += i; } } printf("%d以下で3の倍数となる正の整数の和は%dです\n", n, sum); return 0; }
A-2 break, continueの利用
ファイル名: ex06a2.c
#include <stdio.h> int main() { int i; int count; int score; int L = 50; int U = 80; count = 0; printf("点数を入力して下さい\n"); for(i = 0; i < 15; i++){ scanf("%d", &score); if (score < 0) break; if (score < L || score >= U) continue; count++; } printf("%d点以上、%d点未満の答案の数は%dです\n", L, U, count); return 0; }
B問題
B-1 階乗の計算
ファイル名: ex06b1.c
#include <stdio.h> int main() { int i, n; int fact = 1; printf( "階乗を計算したい数を入力して下さい: " ); scanf( "%d", &n ); if( n >= 13 || n < 0 ) { printf( "計算できません\n" ); } else { for( i = n; i > 0; i-- ) { fact *= i; } printf( "%d\n", fact ); } return 0; }
B-2 「組み合わせ」の計算
ファイル名: ex06b2_1.c
#include <stdio.h> /* * nCrの計算を、「まじめ」に行った場合 * まずn!, 次に(n-r)!, さらにr!を計算し、割っている。 */ int main() { int n, r, ncr, i; int fact_n = 1, fact_n_r = 1, fact_r = 1; printf( "nとrを入力してください:" ); scanf( "%d %d", &n, &r ); /* n!の計算 */ for( i = 1; i <= n; i++ ) { fact_n *= i; } /* (n-r)!の計算。変数の再利用も実施 */ for( i = 1; i <= (n-r); i++ ) { fact_n_r *= i; } /* r! の計算。変数の再利用も実施 */ for( i = 1; i <= r; i++ ) { fact_r *= i; } ncr = fact_n / fact_n_r / fact_r; printf( "%dC%d = %d\n", n, r, ncr ); return 0; }
ファイル名: ex06b2_2.c
#include <stdio.h> /* * nCrの計算を少し工夫して行う場合 * nCr = n(n-1)…(n-r+1) / r! になることを利用。 */ int main() { int n, r, ncr, i; int fact = 1, fact_r = 1; printf( "nとrを入力してください:" ); scanf( "%d %d", &n, &r ); /* 分子 (n-r+1)*(n-r+2)*...*n の計算 */ for( i = n-r+1; i <= n; i++ ) { fact *= i; } /* 分母 r! の計算。変数の再利用も実施 */ for( i = 1; i <= r; i++ ) { fact_r *= i; } ncr = fact / fact_r; printf( "%dC%d = %d\n", n, r, ncr ); return 0; }
B-3 利子の複利計算
ファイル名: ex06b3.c
#include <stdio.h> int main() { int i, p, n; int debt = 10000; printf( "利率と期間を整数で入力して下さい:" ); scanf( "%d%d", &p, &n ); for( i = 1; i <= n; i++ ) { debt = debt * (1 + (double)p/100); } printf( "%dヶ月後の借金は %d円です\n", n, debt ); return 0; }
Extra問題
E-1 素数判定
ファイル名: ex06e1.c
#include <stdio.h> int main(){ int i, j; int n; int c = 0; int is_prime; for(i = 0; i < 5; i++) { printf("%d個目の整数を入力してください:", i+1); scanf("%d", &n); if (n <= 0) { printf("入力は正の整数にしてください\n"); continue; } if (n == 1) { printf("入力された整数が 1 なのでスキップします\n"); continue; } is_prime = 1; for(j = 2; j <= n-1; j++) { if (n % j == 0) { is_prime = 0; break; } } if (is_prime == 1) { printf("%d は素数\n", n); c++; } } printf("素数は %d 個ありました\n", c); return 0; }