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;
}
