ぼんさい塾

ぼんさいノートと補遺に関する素材や注釈です.ミスが多いので初稿から1週間を経た重要な修正のみ最終更新日を残しています.

Cの文法 (6)

2010-08-16 15:58:25 | 暮らし
「まず覚えるCの文法」
(ミス多し.校正中)

Ex2-1A: 擬似コード(#11)
//-------------------------------------
#include <stdio.h>
int main(void){
  int x, y;
  $[総和の計算]$
  $[総和の表示]$
  return 0;
}

$[総和の計算]$=${
  y=0; $[x に整数を入力する]$
  while(x!=0){
    $[y に x の絶対値を加える]$
    $[x に整数を入力する]$
  }
}$

$[y に x の絶対値を加える]$=${
  if(x>0){y=y+x;}else{y=y-x;}
}$
//-------------------------------------

Ex2-1B: 解答例
//-------------------------------------
#include <stdio.h>
int main(void){
  int x, y;
  y=0; printf("x="); scanf("%d", &x);
  while(x!=0){
    if(x>0){y=y+x;}else{y=y-x;}
    printf("x="); scanf("%d", &x);
  }
  printf("y=%d\n", y);
  return 0;
}
//-------------------------------------

問2-1. つぎの処理をするプログラムを示せ.
(1) 0 が入力されるまでキーボードから整数の
    データを読み続ける.
(2) 入力された整数の絶対値の総和を計算して
    画面に表示する.
(3) 入力データが整数でないときや,総和が
    オーバーフローするときのの対策は考え
    なくてよい.

・構造化プログラミングでは所望の処理をトップ
  ダウン的に連接,選択,反復の組み合わせに分解
  していきます(stepwise refinement).
    (1) 連接:  → {文1 文2}
    (2) 選択:  → if(式0){文1}else{文2}
    (3) 反復:  → while(式0){文0}
・(#11)の擬似コード表現によるトップダウン的
  設計例を Ex2-1A に示します.
    x: 入力データの記憶用
    y: 絶対値の総和の記憶用
・解答例を Ex2-1B に示します.Cでは y=y+x を
  y+=x,y=y-x を y-=x と書くことができるので,
    //-------------------------------------
    #include <stdio.h>
    int main(void){
      int x, y=0;
      while(1){
        printf("x="); scanf("%d", &x);
        if(x>0){y+=x;}
        else if(x<0){y-=x;}
        else{break;}
      }
      printf("y=%d\n", y);
      return 0;
    }
    //-------------------------------------
  と変形できます.