1.プログラミングに入る前の予備知識


コンピュータとは?

コンピュータは、人間よりも遥かに早いスピードで計算処理をさせるために登場しました。コンピュータは和名で電子計算機と言
います。パソコンはパーソナルコンピュータの略で、家庭で使うような小型のコンピュータを総称してそのように呼びます。実は、パソ
コンはコンピュータの分野では分類上、極一部に過ぎないのです。世の中には、業務用の何億円もする大型のコンピュータから、電
卓といった超小型のものまで様々なものが存在します。テレビや炊飯器などにもコンピュータは入りこんでいます。しかし、それがど
んな形であれ、コンピュータが実際に行っている処理は計算のみです。そして、扱うのは数値のみです。膨大な量の数値が集まっ
て画像になったり音になったりして私達の目の前に形(結果)となって現れます。何らかの情報を与え、それを加工して結
果が得られるまでの過程をアルゴリズムと言います。数学を例にとって考えてみましょう。

今、半径 r (cm)の円があったとします。この円の面積(S)を求めるには

S = 0.5 × π × r × r

という公式を用います。この公式がこの円の面積を求める際のアルゴリズムとなります。

では、ビデオで録画をする時はどうしますか?(笑)

(1)新聞を見る
(2)録画したい番組の開始時間、終了時間を調べる
(3)リモコンで、チャンネルをまず設定する
(4)開始時刻を設定する
(5)終了時刻を設定する
(6)等速/3倍速のモードの切り替えをする
(7)リモコンで設定した内容をビデオデッキに送信する

録画一つにとっても、上のような処理の流れがあります。「アルゴリズム」は数学的には計算の手順のことを指しますが、一般的に
は問題解決(目的達成)のための段階的手法のことを指します。よって、後者的な考え方だとビデオの録画の手順も一種のアルゴ
リズムだと言うことが出来ます。アルゴリズムが大体どういうものかは分かっていただけたでしょうか?
また、録画の例ですが、Gコードを使えば(3)〜(5)が一つにまとめられます。こういった風に、一つの目的を達成するには何通りも
の手順が考えられるのが普通です。一般的にはアルゴリズムは考える人により無限の方法が考えられます。よって、これからお話
しますが、プログラムを作成する素質がある人は簡潔な無駄の無いアルゴリズムが頭にすぐに思い浮かんでくる人だということが言
えます。



プログラムとはアルゴリズムをコンピュータが理解出来るように表現したものである

コンピュータは所詮計算機です。最近は技術も進歩し、計算するだけの機械なのに画像を扱えたり音を扱えたり通信できたりと、ま
すます魅力的なものに変わりつつあります。しかし、先程も述べましたが、これは複雑な計算のたまものです。私達がコンピュータ
を利用して何かを得たい時は、その結果を得るまでのアルゴリズムをコンピュータに教えてあげなくてはなりません。コンピュータは
教えられたアルゴリズム通りに計算を行い、結果を教えてくれます。この、アルゴリズムをコンピュータが理解出来るように表現した
ものがプログラムなのです。言い換えれば、人間の思考をそのままコンピュータの分かる言葉で書き写したものがプログラムだと言
えます。そして、このプログラムを書く作業をプログラミングと言います。

 プログラムといっても、その記述方法は世界にたくさんあります。ここでいう記述方法と言うのは、人間の言語(日本語、英語、ドイ
ツ語、・・・・)のような、体系的な違いです。そういった言語をコンピュータの世界ではプログラミング言語と呼びます。たくさんのプロ
グラミング言語が歴史的に出来た背景には様々な要因があります。それぞれの言語にはそれぞれの特徴があり、長所・短所を兼
ね揃えています。しかし、歴史的に見て、ここ10数年来、実質コンピュータ界の主導権を握ってきたのがC言語と呼ばれる言語
です。この言語は他の言語に比べ、アルゴリズムをプログラムとして表現しやすいという点からも(つまり、人間にも理解しやすいプ
ログラミング言語)重宝されてきました。



コンピュータとプログラム

 コンピュータは、電源スイッチやフロッピーディスク・ドライブ,CD−ROMドライブなどのついた(箱状のいわゆる)本体とキーボードやディスプレィ,マウスなどを含めた物理的(電子的)な装置です。コンピュータの主要部分であるCPU(中央演算処理装置)とメモリー(主記憶装置)は、本体の内部に格納されています。
 また,この装置は,それに載せるソフトウェア(プログラム)次第で,色々なマシンに変身します.例えば,ワープロや表計算などのソフトウェアを載せれば事務機になり,インターネットのソフトウェアを載せれば,通信装置に,また,ゲームソフトを載せれば,ゲームマシンになります.
 ソフトウェアに対し,先に述べた物理装置としてのコンピュータを,ハードウェアと呼びます.
コンピュータで何らかの目的を実現するには,ハードウェアとソフトウェアが必要となります.ハードウェアとソフトウェアを一体として、コンピュータシステムと呼びます。

ふだん、私たちはプログラムのことをソフトウェアと呼んでいますが、専門的には、ソフトウェアとプログラムは同じ意味ではありません。プログラムはソフトウェアの1部です。



ソフトウェアの種類 その1 オペレーティングシステム

 みなさんが,コンピュータ実習室へ行けば,コンピュータはスイッチONの状態で,ディスプレィには必ず何かが表示されています.そのような状態は,何もソフトが稼働していない状態だと思っているかもしれませんが,実は,もっとも基本的なソフトウェアが稼働している状態なのです.

 例えば,UNIX教室では,UNIXという基本ソフトが,情報処理実習室ではWindowsと呼ばれる基本ソフトが,ハードウェアに載って働いている状態なのです.このような基本となるソフトウェアをオペレーティング・システム(OS)と呼びます.
 個人でPCを所有している人は,よくわかると思いますが,PCの電源をONにすると.コンピュータは自動的にPCのOSであるWindowsを読み込みます.基本ソフトウェアが載ってないとPCは,何もできません.

ところで,Windowsは,PCの電源がONになるまで,何処に保存されているのか知っていますか.実は,外からは見えませんが,PC本体の中にハードディスク(固定ディスク、HD)という磁気的にソフトウェアを記憶する装置があってその中に記憶されているのです.磁気で記憶していますので、電源を切っても消えることはありません。

また,ソフトウェアが本体へ読み込まれたとは,どの様な状態なのでしょうか.
本体では,主記憶装置(或いは,単にメモリー)と呼ばれる電子的な記憶装置に保存されます.とりあえず,ここに,ソフトウェアが記憶されることが,ソフトウェアが稼働している状態だと思って下さい.



ソフトウェアの種類 その2 アプリケーション・ソフトウェア

 PCを例に説明しますが,PCの電源をONにすると自動的にWindowsが読み込まれ稼働します.Windowsの主記憶への読み込みが終了すると,ディスプレィ上に,アイコンと呼ばれる四角形のマークが表示されます.
これらは,ワープロ,表計算ソフト,ゲームソフト,インターネット関連ソフト,…を絵で表現したものです.もし,PCをワープロとして機能させようと思えば,ワープロのアイコンをクリックすれば,Windowsはハードディスクに保存されたワープロソフトを捜し出して,メモリーに載せ稼働させてくれます.
 ここで,注意して欲しいのは,ワープロソフトのアイコンをクリックすることで,「ワープロソフトを使いたいから起動させてくれ」と基本ソフトであるWindowsに頼んでいることになるということです.表計算ソフト,ゲームソフトなどを起動するにも,アイコンをとおしてWindowsへ依頼しなければなりません.また,これらのソフトウェアを終了するときも、実はWindowsに依頼しているのです.

 ワープロソフト,表計算ソフト,インターネット関連ソフト,ゲームソフトなどは,Windowsの管理下で動作するように作られています.これらをWindowsのアプリケーションソフトウェア(或いは,単にアプリケーション)とよびます.

したがって、私たちがコンピュータを利用するときは、OSとアプリケーションの少なくとも2種のプログラムが、コンピュータ上でで走っていることになるのです。私たちが、通常プログラムを作成するというのは、アプリケーションを作成することを意味します。
 

ここまでに、述べたことを簡単に図で示すと、次のように表現できます。

電源OFFの状態   電源をONにすると    アプリケーションを
           OSが読み込まれます.  立ち上げる.
 CPU 
 
 CPU 
 
 CPU 
         
メモリー
  
  
 
Windows
  or
 UNIX

 
 
 
 

 

 
Windows
  or
 UNIX
アプリケーション
 



CPUとメモリーとプログラム

 コンピュータの主要部分は、箱の中に収まっていて、外部からは見えないCPUメモリーです。
たとえで,CPUとメモリー,プログラムの関係を説明しましょう.
私たちが,他人に何らかの作業を依頼するとします.その仕事を遂行するには,手順があって,どこから始めてもよいという作業ではないものとします.ただし,その人に,直接会って作業の内容や手順を説明することはなく,まず,これをやって,次に...をして,さらに...をしてということを,1段ずつ1枚のカードに書き,作業順序のとおりならべて,カード立てにいれて渡すものとします.
 それを,受け取った人は,カード立ての先頭のカードから最後のカードまで,順に取り出し内容を理解し,書かれた通りの作業を実行すれば,作業を完成させることができます.
 ここで,
   仕事を依頼される人・・・CPU
   仕事の内容を手順にしたがって並べたカード・・・プログラム
   カード立て・・・メモリー
   私たち・・・プログラマー
ということになります.
 これを漫画的に表現すれば次の図のようになります.
 

ここに図を挿入
 

よく、Pentiumt2、とか3とか聞くと思いますが、PCのCPUのことです。コンピュータの性能は、CPUの処理速度(プログラムを実行する速さ)に大きく依存します。
 



メモリーとアドレス
 上では、おおざっぱなメモリーの図を示しましたが、もうちょっと詳細にみると、下図のように、分割され、番号が付けられています。この番号のことをアドレス(番地)と呼びます。必ず覚えておいて下さい!
ここでは、図中の「プログラムを記憶するところ」と書いたところは、メモリーの容量の単位で1バイトのサイズだとします。1バイトは、アルファベットの文字1個を記憶することができます。

アドレス 
 
0000 プログラムを記憶するところ
0001 プログラムを記憶するところ
0002 プログラムを記憶するところ
0003 プログラムを記憶するところ
0004 プログラムを記憶するところ
... 。。。
1000 プログラムを記憶するところ
1001 プログラムを記憶するところ
1002 プログラムを記憶するところ
1003 プログラムを記憶するところ
1004 プログラムを記憶するところ
1005 プログラムを記憶するところ
1006 プログラムを記憶するところ
1007 プログラムを記憶するところ
... 。。。



プログラミングに必要なもの

 プログラムを作成するには,プログラムを作成するためのソフトを使います.
それを、コンパイラーとよびます。

ここは、後日、もっと詳細な説明を載せます。しばらく、おまち下さい。

 



2.簡単なプログラムの作成

Cのプログラムの構造

 ディスプレイに文字を表示するプログラムは,次のように書きます.
 
               
 #include <stdio.h>

 void main(void){
   printf(“ABC\n”);        
    printf(“abc\n”);
    printf(“!#%&\n”);
 }

 このプログラムを実行させるとディスプレィ上に次のように文字が表示されます。

   ABC
   abc
   !#%&

このプログラムで、コンピュータに、文字を表示させる部分は、
   printf(“ABC\n”);
    printf(“abc\n”);
    printf(“!#%&\n”);

の3行だろうということは、読めば、すぐに予想できるとおもいます。ここに書いたprintf()は、文字や数値を表示するために使われます。printf()の後ろにはセミコロンがついていますが、これは、1行の終わりを示します。上のプログラムは3行の文からなります。
 

 ここで、プログラムをもう一度見てください。文字を表示する部分が、printf(“…”)の3行だけだとすると、他の部分は不要ではないかと思うかも知れません。しかし、C言語には、C言語でプログラムを書くためのルールが決められています。これを、C言語の文法と呼びますが、上記3行以外の部分も絶対に必要なのです。C言語を修得すると言うことは、C言語の文法を知るということなのです。(「文法を知っている」=「プログラムが作れる」ではありません。しかし、文法を知らなければプログラムは作れません。)

 それでは、上のプログラムをとおして、まず、最初に覚えなければならないCの文法を説明しましょう。

 Cのプログラムでは,実行したい内容を,

  void main(void){ }

の{}中に書きます。この部分は、main関数と呼ばれます。通常、C言語は、関数という単位でプログラムを構成します。一般的な関数の説明は後述しますが、Cのプログラムには、main関数と呼ばれる関数が必ず1つ存在しなければなりません。

 main()関数の上方は、ヘッダー部と呼ばれ、C言語ではここに、コンパイラーへの指示を記述します。
この例では、

  #include <stdio.h>

と書いてありますが、これは、コンパイラーに、「このプログラムをコンパイルするとき,この位置に,stdio.hというファイルを組込んでから、コンパイルして下さい」ということを指示します.このファイルは,コンパイラーに付属しているもので,私たちが準備する必要はありません.printf()関数を使うときは必ず必要となります.

 また、文字を表示するときは、printf("")関数を使い、表示したい文字を””の間に書くというのも文法の1つです。



printf("")関数について

printf は print function(関数) の略だと覚えておいてください。
基本的な構造は

printf(                          );

です。( )で囲まれた部分に出力したいものを持ってきます。
ここで、一つ決まり事があります。
文字を ” ” で囲まないといけないという点です。
では、「こんにちは!」の後に「ようこそ」と表示させてみましょう。

表の右が実行結果です。
 
#include<stdio.h> 

void main( void ) 

     printf("こんにちは!"); 
     printf("ようこそ"); 

 

こんにちは!ようこそ

あれ?命令を二つ使ったのに画面では同じ一行に続けて表示されましたね。これには理由があります。実は、画面の文字の出力位置をいちいちプログラマーが変えてやる必要があるのです。次の行に移ることを「改行(かいぎょう)」と言います。ワープロを使ったことがある人ならおなじみだと思います。この改行の命令は ¥n です。この命令を printf の ” ” の中の希望する箇所に挿入します。

次の例を見てください。
 
#include<stdio.h> 

void main( void ) 

     printf("こんにちは!\n"); 
     printf("ようこそ"); 

 

こんにちは!
ようこそ

赤色で強調したところに注目してください。¥n を挿入した次の文字で改行されています。では、少し遊んでみましょう。
 
#include<stdio.h> 

void main( void ) 

     printf("こ\nんに\tちは!"); 
     printf("\nよ\nう\nこそ"); 
}


んに    ちは!


こそ

結果を見れば効果のほどがわかると思います。
ここで ¥t という命令が出てきました。これは、タブといって、文字いくつか分程のスペースを空けてくれます。これには実際には深い意味があって、画面出力時の位置揃えをしてくれる重要な命令です。しかし、今はそこまで意識して使う必要は無いでしょう。
これ以外も、¥の付く命令は画面上で出力位置を調整する命令として広く使われます。これをエスケープ シーケンスと言います。紹介したもの以外の代表的なものを以下に紹介しておきます。
 
\a  ビープ音 (アラート)
\b バックスペース
\v 垂直タブ
\’ シングル クォーテーション
\" ダブル クォーテーション
\\ 円記号
\? クェスチョン マーク (文字)


ここまでの文法のまとめ

プログラムの枠組みです。
 
#include<stdio.h> 

void main( void ) 
{  

    ・ 
    ・ 
    ・ 
 ここにプログラムを書く 
    ・ 
    ・ 
    ・
}

表中、白色の部分は今のところ変更しないものだと思っておいてください。薄黄色の部分に書きたいプログラムを上から順番に書いていきます。
C言語でプログラムを書く際の重要な注意事項があります。それは、一つの命令が終われば ; (セミコロン)を忘れずに付けるということです。これは、何回同じことを言っても良く忘れるものです。



算術演算

 CPUにできるのは,算術演算(さんすうのけいさん)です.三角関数、対数、積分、微分のような数学の計算をする機能はありません。
 このような計算をしようと思えば、すべて、算術演算に置き換えて計算させます。数値計算法という科目がありますが、このような方法を学習する科目です。
2数の和と差を求め表示するプログラムを次に示します。
 

 #include <stdio.h>

 void main(void){
   int a, b, c, d;
   a = 20;
   b = 30;
   printf(“a=%d b=%d\n”,a,b);
   c= a + b;
   d= a - b;
   printf(“和=%d 差=%d\n”, c, d);
 }
                     

 このプログラムも各行が何を意味するかは、読めば予想できるとおもいます。計算を実行するときは,通常,変数に数値を代入して(記憶させて)実行します.プログラム中 a=20 や b=30 は,それぞれ,変数a, bに20,30を代入する(記憶させる)という意味です.=のことを代入演算子と呼びます。また, c=a+b, d=a-b は,それぞれaとbの和,差を変数c,dに代入するという意味です.+や−は、算術演算子とよばれます。この=(イコール)は数学で言う「等号」ではありません!あくまで「代入」です!!ちなみに、等号の場合は「==」とイコールを2つつなげた記号で表わしますが、まだ覚えなくて結構です。
イメージ的には
  A ← A × 2
といった感じでしょうか。
 

 この例で、わかりにくい部分は、
  int a, b, c, d;
の部分だとおもいます。この行の記述は、変数宣言とよばれ、以下で使用する変数の名前と型とを宣言します。文中intは、変数a,b,c,dが整数値(Integer)を記憶する整数型変数であることを意味します。

宣言の仕方ですが、いくつかのルールがあります。

float a,b,c;

このように複数の同じ型の変数を一度に宣言できます。また、

unsigned long  mode =  0 , point = 10;

のように、変数の初期値を指定することが出来ます。

次に、ここでもprintf()関数が使われていますが、今度は、変数に代入された数値を表示するのに使われています。ただ単に、文字を表示する場合と比べ、少々面倒な記述が必要になります。変数a,bの内容
を表示する

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

では、””の中に、%dが2個あります。これらは、変数a,bに対応しています。その働きは、変数の内容の表示のしかた(これを書式とよぶ)を指定し、書式指定子と呼ばれます。%dは整数値を表示することを意味します。



実数の算術演算

参考のため,2個の実数の和を求めるプログラム例を挙げます。
変数宣言や書式指定子を整数の計算の場合と比較してみて下さい。
 
 
 #include <stdio.h>

 void main(void){
   float a, b, c, d;
   a = 2.32;
   b = 3.46;
   printf(“a=%f b=%f\n”,a,b);
   c= a + b;
   d= a - b;
   printf(“和=%f 差=%f\n”, c, d);
 } 
                    



関連することがら

変数名
 2つの算術演算のプログラムを紹介しましたが、変数名をa,b,c,dの4つ使っています。
 変数名は、アルファベット、数字、_(アンダースコア)を組みあわせて、勝手に作ってかまいません。
 そこで、通常は、プログラムを読んだとき、その変数が何を記憶する変数であるかすぐわかるように工夫します。 
 例えば、次のように変数名を作ることができます。
   wa = a+b、  kinngaku = tanka * suryo、   mennseki = tate * yoko
 ただし,先頭の文字はアルファベットでなければなりません.
 

型宣言子
 int    整数型変数を意味する
 long    int型の倍の桁を記憶する整数型変数を宣言する
 float   実数型変数を宣言する
 double  桁数がfloat型の倍の実数を記憶する実数型変数を宣言する。通常、科学技術的な計算を
      するときはfloatよりdoubleを使う方が常識的です。
 char   文字を記憶する変数を宣言する
 …    他にも多数あります。文法の本で調べてみて下さい.
 

算術演算子
 +  和を求める
 ―  差を求める
 *  積を求める
 /  商を求める
 %  剰余を求める(整数を整数で割った時の余りを求める)
 

代入演算子
 =  変数に値を代入する
 

書式指定子
 整数の場合
  %d  
  %5d   整数を5桁使って表示する。ただし、実際の桁数が5桁に満たないときは、5桁のうち左側は
      空白を表示します。(5はここで仮に決めたもの、必要に応じて値を指定すればよい)
 実数の場合
  %f  
  %7.3f  実数を符号や小数点などを含めて7桁で表示し、そのうち小数部を3桁で表示する
      (7.3fの7.3はここで仮にそのような値に設定しただけ、必要に応じて指定すればよい)
  %e   実数を10のn乗形式で表示する。
  %g   %eか%fのいづれかの形式で表示、判断はprintf()関数にまかせる。
 

※注意

長い数式の場合、和・差・商・積の計算順番が変わることで答えが変わることがあります。
例えば、

X = 4 + 6 * 4 − 8 / 2 + 6;

こういう、見た目にもややこしい数式には区切り毎にカッコをつけてあげましょう。

(例) X = (4 + ( 6 * (4 − 8)) / 2 ) + 6;
 
当たり前ですが、( と ) の数は等しくなるようにしないといけません。



変数とメモリー

C言語でプログラムを組むときは、変数がどのようにメモリー中で、配置されるかということをイメージできる必要があります。整数の算術演算プログラムを例に、プログラムが実行される過程で、メモリーがどのように使われるかを説明します。
 先に「メモリーとアドレス」のところで説明をしたように、メモリーは、1バイト単位で区切られ、アドレスがつけられています(とします)。
 プログラムを主記憶に載せると、下図に示すように、一連のメモリー領域にプログラムが記憶されます。この領域をコード領域とよびます。CPUは、その先頭から順にプログラムを読み込んで解読、実行することになります。CPUがa=20(すなわち、変数aに20を代入せよ)の文を実行すると、CPUはメモリーのあいているところに、変数aという名前をつけます。そしてその領域に数値20を記憶させます。b、c、dに遭遇したときも同様な作業をします。各変数とも4つの番地を占めていますが、これは、int型変数が4バイトのサイズをもつ、言い換えれれば、整数は4バイトで表現すると決められているからです。
 コード領域に対し、変数を集めた領域をメモリーのデータ領域とよびます。

コード領域、あるいは、データ領域をメモリーの何処のどこに作るかはOSが決めます。OSは、
コンピュータを管理するプログラムなのです。
 
  番地 
省略 
  
a = 20;
b = 30;
printf(“a=%d b=%d\n”,a,b); 
c= a + b;
d= a - b;
printf(“和=%d 差=%d\n”, c, d);
変数a 2000  20
2001
2002
2003
変数b 2004  30
2005
2006
2007
変数c 2008  50
2009
2010
2011
変数d 2012 −10
2013
2014
2015
  2016  



変数型と変数のサイズ

 数値を記憶するスペースは、変数の型で決められています。ただし、例外もあります。

int型変数   4バイト
long型変数   4バイト
float型変数  4バイト
double型変数  8バイト

しかし、何の為にこのようなスペースの違いが必要なのでしょうか?それは、コンピュータの物理的な構造に関係しています。変数とは数学的に言えば元々数値の入れ物です。変数にはあらゆる数値を入れることが出来ます。コンピュータに限って言えば、変数に文字だって入れることが出来る、万能の入れ物なのです。この入れ物をどのように確保するのか?コンピュータにはメモリーという、文具ではノートに相当する、書きこんだり消去したりすることが可能な部分があります。変数を利用する際は、必要なスペースをここから確保して、その変数専用のスペースにしてしまいます。普段、私達が数学で使う変数は、計算が進むに従って整数になったり小数になったり、無理数になったり複素数になったり、中にいれるものが刻々と変化します。中に何をいれるかによって必要な入れ物の大きさが変わってきます。コンピュータの持つメモリーというスペースは容量が限られています。少ない資源をたくさんの変数やプログラムで共有しなければなりません。よって、そういうメモリー使用上の無駄を省くために変数型という概念が生まれました。変数の扱える値の種類、範囲の上限をあらかじめ決めておくことで、無駄な領域を確保してしまうことを防ぐことが出来ます。何十桁もの大きな数字を扱うときはそれなりの大きなスペースが必要です。また、ある変数が一桁の数値しか扱わないとしたらほんの少しのスペースしか利用しません。これらに同じだけのスペースを与えていたのではメモリーの無駄遣いになってしまいます。この無駄を省くために変数を使う前に「この変数はどういう数値を扱い、その値の下限(最小値)・上限(最大値)はいくらであるか」ということを宣言しておく必要があるのです。この宣言を変数宣言といいます。変数を使いたい場合は必ず使用前に宣言する必要があります。

変数の型と扱える数値の範囲の一覧です。
 
変数の型 扱う数値の種類 扱う値の範囲
int 整数 システムに依存
unsigned int 整数 システムに依存
char 文字 -128 から 127
unsigned char 文字 0 から 255
short 整数 -32,768 から 32,767
unsigned short 整数 0 から 65,535
long 整数 -2,147,483,648 から 2,147,483,647
unsigned long 整数 0 から 4,294,967,295
float 実数(浮動小数点) 3.4E +/- 38 (有効数値7 桁)
double 実数(浮動小数点) 1.7E +/- 308 (有効数値15 桁)
long double 実数(浮動小数点) 1.2E +/- 4932 (有効数値19 桁)

unsigned とは正負のうち負の数が存在しないことを意味します。
「システムに依存」とは、使用するコンピュータの種類によって範囲が変わるので一概には言えないという意味です。
「有効数値」とは別の言い方だと「精度」という事になります。変数自体は何十桁も扱えるのですが、そのうち上位何桁が正確な数値であるかを(微妙には少し違いますが(笑))意味します。

浮動小数点とは、コンピュータで小数点を含む数値を扱うときに用いる独特の方式で、例えば

423.51 という数学的な数値は

4.2351×(10の2乗)

という表記法で置き換えます(物理学の分野では標準で使う方式です)。さらにコンピュータ式に表現すると

4.2351E+2

となります。この(E+2)意味は、10の(+2)乗を表わしています。つまり、

0.00059

5.9E−4

(10の−4乗)となります。



割り算のときの注意点

次のような整数同士の割り算の場合注意する必要があります。

 int x,y;
 float z;
 x = 10;
 y = 3;
 z = x / y;

この場合、z = 3.0000000000・・・ となってしまいます。あれ、どうして3.3333333333・・・とならないのでしょうか?
それは、x と y に原因があります。この2変数は共に整数型です!よって、割り算の結果、小数点以下は切り捨てられ、「整数」にされてしまいます!この問題の回避法には二種類考えられます。一つは割り算が出てくるんだから最初から float や double 型で宣言する。もう一つは、途中で型を変更する。後者のことを「型キャスト」もしくは「型変換」と言います。途中で変換する場合は変換したい変数の前にカッコでくくった型名を記載します。

(例)
y = (float)a;

これで、変数 a は float 型に変換されます。これを割り算に応用すると先程の例では
 

 z = (float) x / y;

となります。この場合、x と y のどちらを変換してもOKです。両方変換しても大丈夫です。また、

 Z = 10 / 3; これは整数型とみなされます。
 Z = 10.0 / 3.0; これは浮動小数点型とみなされます。  

このように、数値に小数点を入れるか入れないかで型が決まってしまいますので注意してください。



数学関数を使った計算

 先に、CPUには、三角関数や対数計算をする機能はないと説明しましたが、これを四則演算で計算するのは面倒です。そこで、それらをコンパイラーメーカーが作成し、ライブラリーファイルというファイルに保存、プログラムを作るとき、簡単に利用できるようにしています。これらの関数は数学関数と呼ばれます。
 

 #include <stdio.h> 
 #include <math.h> 

 void main(void){ 
   double x, y; 

   x=3.141/4.; 
   y=sin(x); 
   printf("角度%f(ラジアン)のとき、サインの値は%fです。",x,y);   

   x=1000.; 
   y=log(x); 
   printf("%fの対数は、%fです。",x,y); 

   x=12.0.; 
   y=sqrt(x); 
   printf("%fの平方根は%fです。",x,y); 
}

数学関数を使うときは、ヘッダー部に次のような記述が必要です。
   #include <math.h>
また,多くの数学関数の記述のしかたは、次のようになります。
   y = sin(x)
   y = log(x)
   y = sqrt(x)
すなわち、
   x を与え、関数の値を計算させ y で受け取ります。
このとき、xを引数(ひきすう)、yで受け取る関数の計算結果を戻り値よびます。数学関数の引数も、戻り値もdouble型の数値として定義されています。

コンパイラーメーカーが作ってライブラリーファイルに納めた関数のことをライブラリー関数とよびます。実は、これまで使ってきたprintf()関数も実は、ライブラリー関数の1つなのです。ただ、この場合は、よくみると,私たちが数学でいう関数と形は似ていますが、その機能は、計算することではないので、ピンとこないと思います。



主な数学関数

 使用頻度の多い数学関数の例を以下に列挙します。他は、文法書で調べてみて下さい
三角関数
  sin( )
  cos( )
  tan( )
指数関数と対数関数
  log( )     自然対数を求める
  exp( )     自然対数の底eのx乗を求める
  logn( )     常用対数を求める
指数計算 
  sqrt( x )     xの平方根を求める
  pow( x , y )    xのy乗を計算する
 



プログラムを書くとき便利なその他の基礎的文法

 次のプログラムは,上記の数学関数を紹介するプログラムを,ちょっと変更してみたものです.
記述が,増えていますが,プログラムとしての内容は,まったく同じです.
 
  
 /*数学関数の使い方を紹介するプログラム その2*/ 

 #include <stdio.h> 
 #include <math.h> 

 #define  PI  3.1415 

 void main(void){ 
   double x, y; 

   /*三角関数の例 */ 
   x = PI/4. ;  /*角度はラジアン単位*/ 
   y=sin(x); 
   printf("角度%f(rad)のとき、sinの値は%fです。", x, y);   

   /*対数関数の例 */ 
   x=1000.; 
   y=log(x); 
   printf("%fの対数は、%fです。",x,y); 

   /*平方根を求める関数 */ 
   x=12.0; 
   y=sqrt(x); 
   printf("%fの平方根は%fです。",x,y); 
}

 /*・・・・*/の部分は,注釈行とよばれ,コンパイラーが,プログラムをコンパイルするとき,この部分は,プログラムの部分とはみなさず,無視されます.何のためにあるかというと,プログラムを作成する人がプログラムを読みやすくするため,注釈(コメント)を書くのに使います.
 もう一カ所の追加行は,次の記述です.
   #define  PI  3.1415
これは,プログラム中のPI(パイと読んで下さい)という文字を3.1415と定義しますと言う意味です.このように定義された文字PIを記号定数とよびます.プログラム中にPIが現れると,コンパイラーは,それを3.1415に置き換えてからコンパイルします.普通記号定数は,目立つように大文字だけでつづります.



○この章を終わるにあたって

この章で説明したことを理解すれば、私たちが、電卓を使ってする程度の計算は、ほとんど、プログラムを作って計算できます!

     試してみて下さい!