Ex06Ans
From Prog0
演習第6回
Contents |
解答例
A問題
A-1 5の倍数の和の計算
ファイル名: 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 % 5) == 0){ sum += i; } } printf("%d以下で5の倍数となる正の整数の和は%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 for, continue, breakを使った数当てゲーム
ファイル名: ex06b1.c
#include <stdio.h> int main() { int i, n, sum = 0; int target = 47; /* この数を当てる */ int hit = 0; /* 当たったかどうか記録する変数(当たれば 1 にする) */ for( i=1 ; i<=10 ; i++ ) { printf( "1から9までの数を入力して下さい。%2d回目: ", i ); scanf( "%d", &n ); /* 指定された範囲外の数が入力されたら、入力をやり直す(回数のカウントは増える) */ if( n>=10 || n<=0 ){ printf( "その数字は範囲外です\n" ); continue; } sum += n; if( sum == target ) { /* 当たりの判定 */ hit = 1; break; } if( sum > target ) break; /* 超過の判定 */ } if( hit == 1 ) printf( "%d回目で当たりました!\n\n", i ); else if( sum < target ) printf( "残念ですが、入力された数の合計(%d)が設定値未満でした。\n\n", sum ); else printf( "残念ですが、入力された数の合計(%d)が設定値を超えました。\n\n", sum ); return 0; } /* 注:else if( sum < target ) は else if( i==11 ) 等でもよい。(forループ内でbreakしないと最終的に i が11になるため) */
B-2 読みやすいプログラム、無駄のないプログラム
ファイル名: ex06b2.c
#include <stdio.h> int main() { int i,n,k,s=0,s2; printf("nを入力して下さい:"); scanf("%d", &n); for(i=1;i<=n;i++){ k=i*i; s=s+k; printf("%d",k); if (i == n) break; printf("+"); } printf(" = %dです\n",s); s2 = n * ( n + 1 ) * ( 2 * n + 1 )/6; printf("公式による結果は%dです\n",s2); return 0; }
B-3 アスキーアート
ファイル名: ex06b3.c
#include <stdio.h> int main() { int i, j, n; printf("1から9までの整数を入力してください:"); scanf("%d", &n); if( n < 1 || n > 9 ) { printf( "入力する数は1から9までです\n" ); } else { for(i = 1; i < n; i++){ /*1から入力された数値まで増加 ※別解:下記コメント*/ for(j = 0; j < i; j++){ /*その数字の回数だけ表示を繰り返し,その後改行*/ printf("%d", i); } printf("\n"); } for(i = n; i > 0; i--){ /*入力された数値から1まで減少 ※*/ for(j = 0; j < i; j++){ printf("%d", i); } printf("\n"); } } return 0; }
/* ※別解 for(i = 1; i < n; i++){ ... for(i = n; i > 0; i--){ は for(i = 1; i <= n; i++){ ... for(i = n-1; i > 0; i--){ などと書いてもOK */
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; }