RETURN

基本的な文法事項

  1. 主関数

    Cのプログラムには主関数(main)がただひとつ存在します。 プログラムは主関数から始まります。波括弧「{, }」 のなかがその定義となります。

  2. 変数とその宣言

    変数はメモリ内の位置を 部屋のようなものとかんがえればよいでしょう。 宣言は変数の型の名前と変数のリストから成ります。 Cでは、ふつうは関数の初めに変数の宣言をします。

    float upper, lower;
    int fahr, celsius;
    
  3. 変数の初期化
  4. 初期化は変数に初期値をセットすることです。 つまり、変数のメモリ領域に、じっさいにビット(0または1) の列が入ることです。
    lower = 0;
    upper = 300;
    
  5. 基本的な演算子
  6. 代入演算子「=」

    右辺を左辺に代入する。

    a = b;
    a = a + 1;
    
    算術演算子「+, -, *, /, %」

    「✕」、「÷」は、それぞれ、「*」、「/」で表わします。 整数型どうしの時は、「/」では切り捨てが行われることに 注意が必要です。「%」は整数どうしの演算で余りを 計算します。

    celsius = 5 * (fahr - 32) / 9;
    
    q  = a / b;
    r = a % b;
    
    関係・等値演算子

    演算子と用例 意味
    a > b aはbより大
    a >= b aはb以上
    a < b aはbより小
    a <= b aはb以下
    a == b aとbは等しい(論理的等価)
    a != b aとbは等しくない


    論理演算子

    演算子と用例 用例 意味
    ! !a 論理的否定。真偽を反転させる。
    && (a == b) && (c == d) かつ。論理積を取る。
    || (a == b) || (c == d) または。論理和を取る。
  7. 標準入出力
  8. モニターへの出力が標準出力。 キーボードからの入力が標準出力。 そのための関数群を取り込むために
    #include <stdio.h>
    
    と書くのでした。

    標準出力

    演算子と用例 意味
    printf("%d + %d = %d\n", a, b, c); a, b, cを順に%dの箇所に 10進整数で出力する。
    printf("%3.0f %6.1f\n", fahr, celsius); fahr, celsiuscを順に%fの箇所に 実数で出力する。fahrは、すくなくとも3文字幅 (小数点を込める)、小数点以下なし。celsiusは、 すくなくとも6文字幅、小数点以下3桁。
    printf("%c", c); cを半角文字として出力する。
    putchar(c); cを半角文字として出力する。

    標準入力

    演算子と用例 意味
    scanf("%d", &a); キーボードから読み込んだ10進整数を変数aに入れる。
    scanf("%d %d", &a, &b); キーボードから10進整数をふたつ、空白を置いて 読み込む。
    scanf("%d", &a); キーボードから読み込んだ10進整数を変数aに入れる。
    scanf("%f", &a); キーボードから(10進の)単精度実数を読み込む。
    scanf("%lf", & a); キーボードから(10進の)単精度実数を読み込む。 「%lf」は「エル・エフ」である。
    scanf("%lf", &a); キーボードから(10進の)単精度実数を読み込む。 「%lf」は「エル・エフ」である。
    scanf("%c", &c); cを半角文字として入力する。
    getchar( ); cを半角文字として入力する。

  9. プログラムの流れの制御(概論)
  10. プログラムは、主関数(main)から始まり、とくべつな流れの制御の指示 がなければ、上の行から順番に実行されます(連続、逐次的実行)。 流れの制御の種類としては、ある条件をみたすかどうかによって プログラムの流れを分岐して選択させる(分岐、選択)、および、 ある条件をみたすときに、プログラムのある部分を連続的に繰り返すもの (繰り返し、ループ)があります。 (ジャンプするようなものは省きます。)

    いかなるプログラムも、上記の(i)連続 (ii)分岐・選択 (iii)繰り返し(ループ)の3種類をつかって構成することができます。

    実際のプログラムでは、 1(i)1連続 (ii)分岐・選択 (iii)繰り返し(ループ)の3種類を 組み合わせて用いることになります。いくつかの例を、 以下に、 模式的に挙げてみることにします。

  11. プログラムの流れの制御(繰り返し、while)
  12.  while (式)                                  
     {                                                        
          文;                                                       
     }     
    
    「式」が真であるかぎり、「文」を繰り返します。 論理値が真であるかの判定は、「文」を実行するまえにおこなわれます。「式」 はいつかは偽になるように設定しなければならなりません。 そのためには、「文」が「式」にふくまれる変数の状態 を変化させるようになっている必要があります。 そうでないと「無限ループ(どうにもとまらない状態)」に陥ってしまいます。gccの場合、そのときには、
    C-c (強制終了)
    
    すればよいでしょう。
  13. プログラムの流れの制御(繰り返し、 for)
    for (式 1; 式 2; 式 3)
       {                                                         
            文;                                              
       } 
    

    これは、つぎのwhileをつかったもの と等価です。

    式 1; 
       while (式 2)
       {
             文; 
             式 3;
       }
    

    forループはwhileループと似ています。 前者では初期化、条件の判定、 ループカウンターの更新を一行に書くことができるので、 プログラムがひじょうにわかりやすくなります。

  14. プログラムの流れの制御(選択、if-else)
  15.   if (式1)
         {                     
                  文 1;
         }
         else                     
         {            
                  文 2;
         }
    
    if 文では、括弧『(』、『)』のなかの「式 1」が真(true)のときに、「文 1」が実行される。 「式 1」が偽(false)のときには、if ブロックには入らず、elseブロックのほ うに進み、「文 2」を実行します。 ここで、真というのは、「式 1」の値が0以外のときで、偽は「式 1」の値が0に なるときです。elseブロックは省略することができます。
    /* saikoro1.c */
    /* 丁か半か?  */ 
    
    #include <stdio.h>
    
    main() 
    { 
       int a, b, c; 
             
       printf("a: "); 
       scanf("%d", &a);  /* ひとつめのサイコロの目の数 */ 
       printf("\nb: "); 
       scanf("%d", &b); /* ふたつめのサイコロの目の数 */ 
        
       c = a + b; /* サイコロの目の数の和 */ 
    if ((c % 2) == 0) /* 目の数の和が偶数のとき*/ 
       { 
          printf("%d, %d の「丁」\n", a, b); 
       } 
       else /* 目の数の和が奇数のとき*/ 
       { 
          printf("%d, %d の「半」\n", a, b); 
       } 
    } 
    
    サイコロ賭博でよくある風景です。 ほんらい乱数などでサイの目をきめるべきです。 しかし、ここでは、いかさまの意図はありませんが、 、手動にしてあります。 また、丁・半の分類だけで、「ぞろ目」の場合をとくに区別はしていません。
  16. 一般的な場合のプログラム全体の流れ
  17. (0) まず、プログラムは、主関数から始まる。 その後の流れは、つぎの (i)∼(iv) に依る。

    (i) 基本的には上から下へ進む。

    (ii) 選択や繰り返しに当った場合、より外側のブロック(先に遭遇したブロック)の指示に したがう。

    (iii) つぎに、そのブロックの内でより外側のブロック(先に遭遇したブロック)の指示にしたがう。

    (iv) 内側のブロックのコードが終われば、ひとつ外側のブロックに戻る。


RETURN