C言語プログラミングの基本構成のおさらい

C言語プログラミングをやっていくにあたり、覚えてほしい基本構成をまとめてみます。

「関数」について

プログラミングにおける関数とは、「入力に対して、ある処理を行い結果を出力するもの」です。
例えば、スイッチを押せば電気が流れて電球が光るといった感じです。
スイッチを押すという「入力」があり、電気が流れる「処理」が発生して電球が光る結果が「出力」しています。
こう考えると、世の中の行動すべてがプログラミングをやっていると思えませんか?
C言語では1つのまとまった機能を関数として取り扱い、その関数を組み合わせて大きなプログラムを作っていきます。

プログラムの構成単位

(1)式
    プログラムを構成する1つの要素。数学の数式みたいなもの。
    文字(変数)や数字を演算子で結んだもの。

    a = b + c
    menseki = tate * yoko

(2)文
    式のあとに;(セミコロン)があると文と呼ぶ。
    C言語プログラムはほとんどが文の集まりである。

    a = b + c;
    menseki = tate * yoko;

(3)文のブロック
    C言語で使い方の決まっている「予約語(キーワード)」を使った文。
    文のブロックは{で始まり、}で終わる。文が1つの場合は省略可。

    予約語{
         a = b + c;
        menseki = tate * yoko;
    }

    予約語 menseki;

(4)関数のブロック
    文のブロックと同じように複数の文をひとまとめしたもの。
    「予約語」ではなく「関数名」をつけること。{}を省略できない。

    関数名{
        a = b + c;
        menseki = tate * yoko;
    }

    関数名の例として「void main(void)」が関数名になります。

C言語で使用されるデータの種類

C言語で使用されるデータは大きく分けて、次の2種類です。
    定数・・・プログラムの実行前から実行後まで変わらない値
                  「10」や「1.2」といった数値と「A」や「z」といった文字

    変数・・・プログラムの実行中に変化していくデータをいれるための値

#include <stdio.h> 
void main(void){
 int menseki;
 int tate;
 int yoko;
        
 tate = 10;   //・・・①
 yoko = 5;   //・・・②
 menseki = tate * yoko;  //・・・③
    
 rewind(stdin);
 getchar();
}

上のプログラムを例に説明します。
「10」や「5」が定数になります。
「tate」「yoko」「menseki」が変数になります。
変数につける名前には、標準規格で定められた変数名の規則を守れば、プログラム作成者が自由につけることができます。

①から③の文に「=」の記号が使われています。
C言語で使われる「=」には、「=の右辺の値を左辺に代入する」という意味になります。

したがって、上のプログラムは次のような意味になります。
①定数「10」を変数「tate」に代入する。
②定数「5」を変数「yoko」に代入する。
③変数「tate」×変数「yoko」の結果を変数「menseki」に代入する。
    (「*」はC言語で掛け算を意味します。)

C言語ではデータの代入を繰り返して、プログラムの実行結果を目的の変数に代入していきます。

変数について

変数にはいろいろな型や大きさのデータを扱います。
そのため、変数ごとに数字か文字か、何桁使用するのかあらかじめ決めておかなければなりません。
(パソコンのメモリは有限なので、扱えるデータには限界があります。)

データの種類や大きさを表すものがデータ型と呼ばれます。
データ型には以下のようなものがあります。

  •  char 型・・・文字と数値を扱える。データの大きさは1バイト。文字を表現するコードは、C言語ではASCIIコード(アスキーコード)を使用するのが一般的。 扱える数値の範囲は、-128から+127。
  •  unsigned char 型・・・char型とほぼ同じ。扱える数値が異なる。扱える数値の範囲は、0から+255。
  • short 型・・・整数を扱える。データの大きさは2バイト。  扱える数値の範囲は、-32768から+32767。
  • unsigned short 型・・・整数を扱える。データの大きさは2バイト。 扱える数値の範囲は、0から+65535。
  •  long 型・・・整数を扱える。データの大きさは4バイト。扱える数値の範囲は、約-21億から約+21億。
  •  unsigned long 型・・・整数を扱える。データの大きさは4バイト。扱える数値の範囲は、0から約43億。
  • int 型・・・整数を扱える。使用するパソコンが最も効率よく処理できるデータの大きさになる(2か4バイト)。マイナスの数値を扱える。
  • unsigned int 型・・・整数を扱える。 使用するパソコンが最も効率よく処理できるデータの大きさになる(2か4バイト)。マイナスの数値は扱えない。
  • float 型・・・実数を扱える。小数点以下の数値を扱うときに使用する。データの大きさは4バイト。扱える数値の範囲はコンパイラによって違う。
  •  double 型・・・実数を扱える。小数点以下の数値を扱うときに使用する。データの大きさは8バイト。 扱える数値の範囲はコンパイラによって違う。 float型よりもたくさんの小数点以下の数値を扱うならこっち。



C言語プログラムでは、データとして定数と変数を使用します。
定数は必要なところでそのまま使用できる。
変数はプログラム中で使用する前に、記憶場所を決めなければならない。
これを、「変数の宣言」と言います。

変数の宣言の書式
    データ型 変数名;
    データ型 変数名1, 変数名2;

同じデータ型の変数を複数扱うときは、「,」(カンマ)で区切ることで複数の記憶場所を決めることができる。
書式に従って、書いてみた変数の宣言が以下のようものになる。

#include <stdio.h> 
void main(void){
 //変数の宣言
 int menseki;
 char tate,yoko;
        
 tate = 10;   //・・・①
 yoko = 5;   //・・・②
 menseki = tate * yoko;  //・・・③
    
 rewind(stdin);
 getchar();
}

変数名のつけ方の規則が以下のようになる。
  • 英字(A~Z、a~z)、数字(0~9)、_(アンダーライン)が使える。
  • 英字の大文字と小文字は区別される。
  • 先頭の文字に数字は使えない。
  • 変数名の長さは31文字を超えてはいけない。
  • あらかじめ決められている予約語(キーワード)は使えない(予約語はコンパイラによって異なる。)
    予約語の代表例
  auto   double    int    struct   break    else   long   switch
  case    enum   register   typedef   char    extern   return   union
  const    float   short   unsigned   continue    for   signed   void
  default    goto   sizeof   volatile   do    if   static   while


最初は、文字データを扱うときはchar型、整数データを扱うときはint型、実数はfloat型double型を使っておけば問題ない。

C言語プログラムの記述のコツ

C言語に限らず、プログラムは見やすい文章を心がけて書くのがコツ。

基本的に1行に1文だけ記述する。
    C言語の区切りは「;」で表すため、1行に複数の文を記述することができる。
    しかし、複数の文を記述するとバグの原因になるので、「1行1文」を心がける。

字下げを行うようにする
    関数やブロックの範囲をわかりやすくするため、文字の書き出し位置を数文字ずらす。
    視覚的に他の部分と区分されるので、プログラムが見やすくなります。
    僕は、字下げは「Tabキー」を使って行うようにしています。

適度にコメントを入れるようにする。
    コメントは、プログラムの実行とは関係ない注釈。
    コメントとなる文は、文の頭に「//」を記述します。「//」以降1行分はコメントとなり、プログラムの実行とは関係ない文になります。
    2行以上連続してコメントしたい場合は、文の頭に「/*」を記述し、終わりに「*/」を記述して囲うようにします。
    プログラムの説明や命令の意味を記述することで、プログラムをわかりやすくします。

空白行を使う。
    行(文)と行(文)の間に空白行を入れることで、区切りを明確にする。
    国語の段落分けみたいな感じで使うとよい。

あとは、「入力」「処理」「出力」を意識して書いておくとマイコンプログラミングは行いやすい。
これらを意識して記述すると、こんな感じになる。

/*------------------------------
縦と横から面積を求めるプログラム
5月11日 作成
------------------------------*/

#include <stdio.h> 
void main(void){
 //変数の宣言
 int menseki;
 char tate,yoko;
    
 //入力
 tate = 10;
 yoko = 5;
    
 //処理
 menseki = tate * yoko;
    
 //出力
 printf("縦は%d\n",tate);
 printf("横は%d\n",yoko);
 printf("面積は%d\n",menseki);
    
 rewind(stdin);
 getchar();
}

コメント

このブログの人気の投稿

STM32CubeIDEに日本語化プラグインを導入する

STM32F401でLチカをする(LED点灯)

STM32F401-Nucleoでシリアル通信をやってみる