Ex06Ans

From Prog0

Jump to: navigation, search

演習第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;
}
Personal tools