プログラミング入門
- 6-1. プログラミングのための基礎知識
- 6-2. C 言語入門(1)
プログラミングに必要な知識
- 要求仕様
- 言語仕様
- OS の提供するインタフェイス、ライブラリ
- アルゴリズム(計算方法)
- データ構造
プログラムとはなにか
CPU にコンピュータの動作を指示する指示書。
ノイマン型コンピュータでは CPU の理解できる命令が順番に書かれている。
(「機械語」と呼ばれる)
- 理想論:
- コンピュータは人間が使用する。人間が指示することを考えると、人間の思考に近い方法で指示できる方が良い。
- 方法論:
-
- 機械語に人間が理解しやすいような言葉を割当て、その言葉を機械語に変換する(アセンブラ)
- 人間が指示しやすいような記述を、機械語に変換すれば良い(コンパイラ)
- 人間が指示しやすいような記述を解釈するプログラムを機械語で作る(インタプリタ)
プログラミング言語: 言葉を使用してコンピュータへの指示を記述する。機械語に対して抽象度が高い言語を高級言語と言う。
指示の方法
例題: 駅への行き方
- 何もかも順に記述する
- 右足を動かす。
左足を動かす。
右足を動かす。
左足を動かす。
右足を動かす。
左足を動かす。
右足を動かす。
左足を動かす。
右足を動かす。
左足を動かす。
...
- 繰り返しを指定する
-
(右足を動かし、左足を動かし)を 381 回繰り返し、左足を動かし、(右足を動かし、左足を動かし)を 258 回繰り返す。
-
動作に名前をつけ、抽象的な量を扱う
- 173m 歩き、右に92.3度曲り、138m 歩く。
-
条件判断、繰り返し
-
コンビニの角まで歩き続ける。
右に曲る。
まっすぐ歩くと駅に着く。
言語の種類
- アセンブリ言語:
- 機械語に人間が覚えやすい言葉(ニーモニック mnemonic) を割当て、ニーモニックで書かれたプログラムのニーモニックを後で機械語に戻す。
- マクロ言語:
- ひとまとまりの命令を、意味のある一つの言葉として使用し、あとでその言葉をひとまとまりの命令として変換する。
- 手続き型言語:
- マクロ言語より多少抽象度が高い。(実数でも整数でも同じ「+」記号を使用するなど)。特定のプログラムの部分だけで使用できる変数なども使用できるようになっている。
- 構造化言語:
- プログラムの部品を考える。部品は呼出されると、ある仕事をして終了する。
そのような部品を順次、条件、繰り返しの三つの制御だけを利用して書く。
その他
高級プログラミング言語の機能
- 型:
- 扱えるデータの種類が整数だけでなく、文字列や、実数なども利用できる。
(通常の整数型は、 0 から 65535 までなど区間が定められている。
実数も区間が定められており、さらに有効桁数が 8 桁など、無限の精度は得られない
例: 1/3*3=1 とはならない。)
- 名前:
- 型名、変数名、関数名
- プログラミング上の制限の強制
(異常の検出、プログラムの可読性の向上)
- 例:
型が違う変数に値を入れられない。(数の変数に文字列を代入できない)
プログラムの流れを自由に変更できない
ブロックに階層をもうけ、ブロックの内部の状態を参照できなくする。
- オペレーティングシステムの機能の利用
-
- 直接キーボードや画面を制御する必要のない、入出力関数の提供
- ファイルの操作
- 時刻の読み出し
- ライブラリの提供
- 三角関数などの数学関数などの提供
演習1
- 高校の後輩に対して、「大学に合格するにはどうすればよいか?」書きなさい。
- 上記を書いた時に、読み易くするために気を付けた、文章の構成方法を書き出しなさい。
(例)
- 箇条書きにした。
- 主語を統一した。
- 一つ一つの文章を短くした。
- 段落の中身は一つのことを記述し、次の段落の内容とは異なるようにした。
- 全ての文章に接続詞をつけた。
- 見出しをつけた。
本講義では
構造型言語 C を使用してプログラミング演習を行う。
- 本講義で行うこと
-
- C 言語の入門
- 実数型、整数型、文字型の利用
- 繰り返し、条件判断
- 関数
- プリプロセッサの利用
- OS とのやりとり
- プログラム開発の基本的な手法
- 本講義で行わないこと
-
- C 言語以外(C++, Java, Perl など)の入門
- C 言語の構造型、ポインタ、再帰処理を利用したプログラミング
- 複雑なデータ構造
プログラミング言語 C
C コンパイラ gcc をインストールする。
- gcc を授業用サーバーからダウンロードする
- 実行ファイルを実行すると、インストールが始まる。
- 指定通りに進むと c:\gcc-2.95.2 にインストールされる。
(ドキュメント(英語)もインストールすべし)
gcc の使い方
- MS-DOS プロンプトで使用する。
- 使用する前に一回だけc:\gcc-2.95.2\mingw32
を入力し、環境変数(シェルに渡す情報)をセットする
(確認方法:
set を入力し、表示に gcc が含まれる項目があれば OK)
- 利用できるコマンド(c:\gcc-2.95.2\bin )
- gcc:
- C コンパイラ(構造型言語)
- g++,c++:
- C++ コンパイラ(オブジェクト指向言語)
- g77:
- FORTRAN コンパイラ(手続き型言語)
- as:
- アセンブラ
- make:
- プログラムの開発支援ソフトウェア
- gdb:
- デバッガ
演習2
次のプログラムを読んで、このプログラムが何をするか調べなさい。
そして、プログラムを実行するとどのような動作になるか書きなさい。
/* This program prints "Hello World!". */
#include <stdio.h>
main(){
printf("Hello World!\n");
}
- stdio.h
- printf 関数を利用するとき、指定が必要
- 「\n」
- 改行記号
演習3
このプログラムを実際に実行する。
(3-1)まず、作業ディレクトリを作る
- MS-DOS プロンプト画面を開く
- cd \
- ren d home
ren は rename コマンド。先日作成したディレクトリ d を home という名前に書き換える。
以後、ディレクトリ名、ファイル名は英数字で表す。
日本語を使用すると、非常に不便で不都合が起きるので注意。
(3-2)下準備
- c:\gcc-2.95.2\mingw32
- cd home
- edit hello.c
- ブラウザでこの授業の資料を開く。
- プログラム部分をドラッグし、Ctrl-Cでコピー
- MS-DOS 画面のメニューバーの貼り付けボタンでペースト
- ファイルを保存する。
exit
で終了する。
(3-3)コンパイル
- gcc hello.c
(コンパイルしてできた実行ファイルは a.exe という名前になる)
(3-5)実行
- .\a.exe
演習4
このプログラムを改造して、「Hello New World!」を画面に出しなさい。
演習5
次のプログラムを読んで、このプログラムが何をするか調べなさい。
そして、プログラムを実行するとどのような動作になるか書きなさい。
/* program 1*/
#include <stdio.h>
#include <math.h>
main()
{
float a,b,c,d,kai1,kai2,zitsubu,kyobu;
a=2.0; b=3.0; c=1.0;
printf(" %f x^2 + %f x + %f = 0\n",a,b,c);
d=b*b-4*a*c;
if(d==0){
kai1 = -b/2/a;
printf("root = %f\n", kai1);
}else{
if( d>0 ){
kai1 = (-b + sqrt(d))/2/a; kai2 = (-b - sqrt(d))/2/a;
printf("root1= %f, root2= %f\n",kai1,kai2);
}else{
zitsubu= -b/2/a; kyobu = sqrt(d)/2/a;
printf("kai = %f +- %fi\n",zitsubu,kyobu);
}
}
}
演習6
このプログラムをコンパイルし実行しなさい。
(注意)
コンパイルする時、
gcc Cのファイル名 -lm
と、「-lm」を指定する必要がある。
坂本直志 sakamoto@c.dendai.ac.jp