第4回 C言語講座 | 南 晴輝のブログ

南 晴輝のブログ

マイクロプロセッサを応用した、自立動作型ロボットの開発を

目指します。

とくに ロボカップジャパンジュニア の

サッカー

レスキュー

に使用できるロボットを、目標とします。

今回は、基本的な 演算子 について、解説します。





代入演算子

「=」を使います。

変数に定数を代入したり、変数に変数を代入する時に使用します。

算術演算子

算術演算子とは、「+」「-」「*」「/」「%」です。それぞれ、加算、減算、乗算、除算、

余りを求めます。

計算の順序は、数学の場合と同じです。

整数同士の割り算の場合は、結果も整数になります。

この時には、小数点以下は切り捨てになります。

負数を含む「余り(%)」を計算する場合は、コンパイラによって異なります。

*/

/*

#include <stdio.h>

void main() {

int a, b, c;

printf( "\n\n");
printf("a の値を入力してください。");

scanf("%d", &a);

printf("b の値を入力してください。");

scanf("%d", &b);


printf( "\n\n");
printf( " a =%d b =%d \n\n", a, b );

c = a + b; printf( "c = a + b c = %d\n", c);
c = a - b; printf( "c = a - b c = %d\n", c);
c = a * b; printf( "c = a * b c = %d\n", c);
c = a / b; printf( "c = a / b c = %d\n", c);
c = a % b; printf( "c = a % b c = %d\n", c);

printf( "\n\n");
}

*/


/*

比較演算子

値が等しいか「==」、値が等しくないか「!=」、値が大きいか「>」「>=」

値が小さいか「<=」「<」を調べます


比較演算子 例 意 味

< a < b aはbより小さい
<= a <= b aはb以下
> a > b aはbより大きい
>= a >= b aはb以上
== a == b aはbと同じ
!= a != b aとbは異なる

比較が成り立つ場合は「真」(1)が、成り立たない場合は「偽」(0)となります。

比較の「==」と代入の「=」を間違えないでください。

以前に私もこれを、間違えて長い間プログラムが正常に働きませんでした。

よく注意してください。

*/


/*

#include <stdio.h>

void main() {

int a, b, c;

printf( "\n\n");
printf("a の値を入力してください。");

scanf("%d", &a);

printf("b の値を入力してください。");

scanf("%d", &b);


printf( "\n\n");
printf( " a =%d b =%d \n\n", a, b );

c = a > b; printf( "c = a > b c = %x\n", c);
c = a >= b; printf( "c = a >= b c = %x\n", c);
c = a < b; printf( "c = a < b c = %x\n", c);
c = a <= b; printf( "c = a <= b c = %x\n", c);
c = a == b; printf( "c = a == b c = %x\n", c);
c = a != b; printf( "c = a != b c = %x\n", c);

printf( "\n\n");
}

*/


/*

論理演算子

例 意 味

&&    a && b AND(かつ)
||    a || b OR(または)
!    !b NOT(否定)

*/

/*

#include <stdio.h>

void main() {

int a, b, c;

printf( "\n\n");
printf("a の値を入力してください。");

scanf("%d", &a);

printf("b の値を入力してください。");

scanf("%d", &b);


printf( "\n\n");

printf( " a =%d b =%d \n\n", a, b );

c = a && b; printf( "c = a && b c = %x\n", c);

c = a || b; printf( "c = a || b c = %x\n", c);

c = !b; printf( "c = !b c = %x\n", c);

c = ( b==30 ) && ( a<b ); printf( "c = (b==30) && (a<b) c = %x\n", c );


// これら論理演算子、比較演算子は、分かりにくい組み合わせになることがあるので、

// 括弧をつけて見やすくします。

// 括弧を外すと c = b==30 && a<b となって、なんだかよくわかりませんね。


printf( "\n\n");

}

*/


/*
2012.07.03 ( 平成24年7月3日 )Seiki Minami

定数は、どのように表すのだろうか。


整数定数

整数定数には

10進数 100 255 -50

16進数 0x43 0xFF

8進数 0105 0373

文字 'C'


8進数を表すには、最初に「0」を、16進数を表すには「0x」をつけます。文字はASCII文字1バイトです。

整数定数と言うよりは、1文字の定数として扱うことがほとんどですが、整数として扱うこともできます。

C言語では、文字という概念はなく、その文字に対応するASCIIコードという数字で扱います。

小数定数

小数は、「1.234」、「-0.123」のように書きます。

このような書き方では200万や1000万分の一などを書きたい場合は、よくありません。

そこで「1.0e8」や「1.453E-6」のように、10の何乗かで書きます。

「e」と「E」はどちらでも構いません。

円周率は、「3.1415」ですが、「0.31415E1」、「3.1415E0」などとなります。


代入

宣言した変数に対して、定数を代入することができます。

int a, b; // 変数名「a, b」をint型で宣言

char ch_1, ch_2; // 変数名「ch_1」と「ch_2」をchar型で宣言

unsigned long lon_g; // 変数名「lon_g」をunsigned long型で宣言

float flo; // 変数名「flo」をfloat型で宣言

ch_1 = 'C';

ch_2 = 0x43; // 16進数で43を代入

lon_g = 'C'; // long型 lon_gに'C'のASCIIコード43Hを代入

flo = 3.1415;

a = b = 10000; // aとbに10000を代入

初期化

変数を宣言しても、その変数の内容(値)は不定です。

変数の宣言と同時にある値で初期化することもできます。


int a = 10000;

char ch = 'C';

int b = a = 10000; // aもbも10000になる

いままで説明したことを、C言語のプログラムを実行し、確かめてみましょう。

*/

/*
#include <stdio.h>

void main() {

int a, b; // 変数名「a, b」をint型で宣言

char ch_1, ch_2; // 変数名「ch_1」と「ch_2」をchar型で宣言

unsigned long lon_g; // 変数名「lon_g」をunsigned long型で宣言

float flo; // 変数名「flo」をfloat型で宣言

ch_1 = 'C';

ch_2 = 0x43; // 16進数で43を代入、10進数で67です。

lon_g = 'C'; // long型 lon_gに'C'のASCIIコード43Hを代入

flo = 3.1415; // float型 flo に 3.1415を代入

a = b = 10000; // aとbに10000を代入

printf( "\n\n");

printf("ch_1 = %d ch_2 = %d lon_g = %d flo = %f a = %d b = %d \n\n", ch_1, ch_2, lon_g,

flo, a, b);

printf("ch_1 = 0x%x ch_2 = %c lon_g = 0x%x flo = %f a = %d b = %d \n\n", ch_1, ch_2, lon_g,

flo, a, b);

// なにをやっているか、わかりますか。

printf( "\n\n");

}
*/

/*

構成

C言語の文法的な構成について、次に説明します。


語句の種類

C言語を構成する語句は「識別子」、「予約語」、「定数」、「文字列」、「演算子」、「区切子」、

「コメント」、「ブランク」があります。

識別子は、関数名、変数名のことです。変数には、単純変数、配列、ポインタの3種類があり、

さらにint型、char型などの型が存在します。

予約語は、プログラムの実行順序の制御や、変数の型など、決まっている語です。

定数はその名の通り、決まった値をもちます。文字列も定数(文字)の集まりで、

定数の1種と考えられます。

演算子は足し算、引き算などの「+」や「-」のことです。

区切子とは、文と文を区切ったりするものです。

コメントとは、プログラムとは関係ないが、プログラマーが自分あるいは、一緒に作っている仲間の

プログラマーに対してのメッセージです。

*/

// コメントの書き方は2種類あります。1つは 「//」の以降改行まで、2つ目は「/*」と「*/」の間です。

/* 後者は入れ子ができません。

ブランクとは、プログラムを見やすくするための改行や、タブ、スペースを言います。




上で説明した語句を組み合わせて式を構成します。

式には一次式と演算式(演算子を用いて一次式を組み合わせたもの)に分けることができます。

関数も式になります。何かを処理するための引数(パラメータ)を必要とし、その結果を返します。

その結果を戻り値と言います。




式1つもしくは複数の式から文を構成します。文の後には必ず1文の終わりを示す記号「;」がつきます。

1行の中に文が2つ以上あっても構いません。エディターで見た場合に1行の中に複数の文があっても、

コンパイラは各々を文として認識するからです。

*/


/*
文には「式の文」(上で言う「int c_language = 10;」など)、空文(「;」のみからなる文)、

制御文(「break;」、「return;」など)があります。


ブロック

文が0文、1文、あるいは複数の文からブロックが構成されます。

文をブロックを表す「{」と「}」で囲みます。ブロックは「1文と見なす単位」のことです。

条件分岐(「if」、「else」)や反復(「for」や「while」など)などは、基本的に1文しか実行できません。

しかし1文だけしか繰り返せないのでは不便です。そこでこのブロックで1文と見なすことで、

複数の文を反復することができるのです。

また、ブロックは入れ子にできるので、複数のブロックを1つのブロックとすることもできます。

*/