作成 2010.01.08
更新 2010.01.23
C言語の練習 Level 1
http://oshiete1.goo.ne.jp/qa5577807.html
問題
  1. 整数型の変数を2個だけ使い、キーボードから5個の整数を読み込み負の整数のみの和を表示するプログラムを作れ
  2. 1 の問題について使える変数を3個に増やしたうえでwhile文を使ったプログラムを作れ
  3. 1 の問題について使える変数を3個に増やしたうえfor文を使ったプログラムを作れ
解答例
解答 1
#include <stdio.h>

int main(int args, char *argv[]){
  int i=0, j=0;
  printf("1つ目の数字:");
  if(scanf("%d", &i) != 1){
    scanf("%*s");
    printf("数字以外が入力されました。\n");
  }else if(i < 0){
    j += i;
  }
  printf("2つ目の数字:");
  if(scanf("%d", &i) != 1){
    scanf("%*s");
    printf("数字以外が入力されました。\n");
  }else if(i < 0){
    j += i;
  }
  printf("3つ目の数字:");
  if(scanf("%d", &i) != 1){
    scanf("%*s");
    printf("数字以外が入力されました。\n");
  }else if(i < 0){
    j += i;
  }
  printf("4つ目の数字:");
  if(scanf("%d", &i) != 1){
    scanf("%*s");
    printf("数字以外が入力されました。\n");
  }else if(i < 0){
    j += i;
  }
  printf("5つ目の数字:");
  if(scanf("%d", &i) != 1){
    scanf("%*s");
    printf("数字以外が入力されました。\n");
  }else if(i < 0){
    j += i;
  }
  printf("結果: %d\n", j);
  return 0;
}
解答 2
#include <stdio.h>

int main(int args, char *argv[]){
  int i=0, j=0, k=0;
  while( k < 5 ){
    k++;
    printf("%d つ目の数字:", k);
    if(scanf("%d", &i) != 1){
      scanf("%*s");
      printf("数字以外が入力されました。\n");
    }else if(i < 0){
      j += i;
    }
  }
  printf("結果: %d\n", j);
  return 0;
}
解答 3
#include <stdio.h>

int main(int args, char *argv[]){
  int i=0, j=0, k;
  for(k=1; k<6; k++){
    printf("%d つ目の数字:", k);
    if(scanf("%d", &i) != 1){
      scanf("%*s");
      printf("数字以外が入力されました。\n");
    }else if(i < 0){
      j += i;
    }
  }
  printf("結果: %d\n", j);
  return 0;
}
解説というか補足のようなもの

この問題の目的は、繰り返し処理の利便性について理解すること。
エラー処理に関してはバッドノウハウなのでコンパイラの不具合として解釈した方が良い。

if(scanf("%d", &i) != 1){
  scanf("%*s");
  printf("数字以外が入力されました。\n");

この部分の記述は数値以外が入力された際の処理を行っている。
scanf("%d", &i) で期待通りの値が入ると1が返る。それ以外は異常入力なので scanf("%*s") で入力内容をクリアする。

タグ: C言語

©2004-2017 UPKEN IPv4