C言語入門
C言語で苦しんでいる人を対象に、Cプログラミングを学ぶ上で必要な最低限の事柄を収めた。説明を読んで、例題、練習問題をこなして行くうちに、自然にC言語がマスターできるようにしたつもりである。しかし、Cは言語である。皆さんも経験しているように、言語を習得する最良の方法は、“習うより慣れろ”だ。囲んであるプログラムはすべて自分で打ち込んで、実行してみよう。では、始めよう。まず、Cプログラムの形を見てみよう。
一般的なCのプログラムは次の形をしている。
/*************************************************************************** *Program name:fundamental.c *Author:Hisashi Yokota *Date:Dec 1,2000 *Purpose:introduce how to write C program ****************************************************************************/ 前処理句(例えば#include <stdio.h>)が1行目にくる プロトタイプ宣言(プログラムで使用する関数の型、名前、引数を書く) /*1行あける。/*から*/まではコメントとなる*/ int main( ) ( gcc for win32の場合 int main(void) または単にmain( )と書く) { /*main関数の始まり*/ 宣言部および定義 (これから用いる変数の型宣言をする) メインプログラム (重要な部分で、ここの書き方を学んでいく) } 関数型 関数名(仮引数) { 宣言部および定義 関数のプログラム } |
このテキスト内のプログラムには、紙面の都合上プログラムの最初にくるコメントは付けていないが、自分のプログラムには必ずコメントをつけるようにする。
実際にプログラムを書いて実行してみよう。使っているエディタやコンパイラにより作業ステップが異なるので、ここでは、gccとVisualC++での操作方法をあげる。
例題1.1 画面への出力
Hello world
初めてのC
と画面に表示してみよう。
実行例
考え方
C言語にはprintfという画面に表示するための標準関数が用意されている。使い方はprintf(“ “);でダブルクォート”内の文字はそのまま表示される。改行するには\nとダブルクォート内で書く。また、段落を取るには\tと書けばよい。
解答 Cで書くと次のようになる。
/*
hello.c*/ #include
<stdio.h> /* 標準ライブラリの情報を取り込む*/ void
main(void) /* 最初のvoidはこの関数は何も返さないことを意味し、voidは引数(他の関数に渡す値)がないことを意味する。voidとは英語で無*/ {
/* mainの文は大括弧で囲む*/ printf(“Hello
world\n\t初めてのC\n”); } |
このプログラムをエディタを使って書き、hello.cという名前を付けて保存する。次に、hello.cをコンパイルする。
gccの場合:コマンドプロンプトから次のように打ち込む
gcc hello.c –o hello.exe
Visual c++の場合:Visual c++を立ち上げ、ファイルを開くでhello.cを開き、ビルドの下にあるコンパイルをクリックする。
この操作により、hello.exeという実行ファイルができるので、実行させると画面に
Hello world
初めてのC
と表示されるはずである。
gcc hello.c -oの-oはオブジェクトファイルの生成を意味している。
UNIXのgccを用いている場合:ターミナルから次のように打ち込む
gcc hello.c –o hello
ここで、実行ファイルにpathが通っていれば、helloと打てば、
Hello world
初めてのC
と表示される。
pathが通っていない場合は、./helloと打てば、
Hello world
初めてのC
と表示される。
コンパイラによっては、ANSI
Cしか受け付けないものもあるので、一つのコンピュータで動いたからといって、他のコンピュータでもうまくいくとは限らない。特に、
void
main(void)は走らないコンパイラがある。
その場合は、
int
main()
を用いてみよう。Visual
C++でCをコンパイラしようとすると、int
main() ではエラーが出る。Visual C++はreturn 0;を含めなくてはいけない。
キャッチ Windowsを用いている場合、メモ帳を使って書くとhello.c.txtと保存されてしまうので対処が必要である。スタート(右クリック)→エクスプローラ→表示→フォルダオプション→ファイルタイプ→新規で拡張子の関連付けを行う |
hello.cの説明
#include <stdio.h>は標準入出力のヘッダーファイルを呼び込めという命令である。このヘッダーファイルは、printfという関数を用いるために必要となる。
void main(void)はmain関数の戻り値と引数が何もないことを表している。
{から}までがmain関数の中身である。
printfとは標準出力(ディスプレイ)へ出力させるための関数であり、ダブルクォート”から”までは、書いたものがそのまま出力される。
printf内の\nは行を変えろということを意味し、\tはタブを取れということを意味する。これらをエスケープシークエンス(escape sequence)といい、
ダブルクォート内からの脱出をいみする。よく使うエスケープシークエンスをあげると、
\nは改行、\tはタブ、\aはベル、\bはバックスペース、\”は”の表示、\’は ’の表示などがある。
キャッチ printfは必ず最後にセミコロン;をつける。 |
練習問題1.1 次のプログラムの説明およびプログラムを読んで、設問に答えよ。
「プログラムの説明」
次のプログラムを実行すると、以下のようになる。
<実行例>
Mainは最初に動く関数。
printfは表示するための関数。
「設問」プログラムの中の□を埋めて、プログラムを完成せよ。ただし、実行例の2行目の先頭文字は、水平タブのあとで表示されるものとする。
#include <stdio.h>
/* 1行あける*/
void main(void)
{
printf(“Mainは最初に動く関数。 printfは表示するための関数。\n”);
}
解答 改行してタブを設ければよいので、\n\tが□に入る。
定数
Cでは数値を実数と整数で区別する。もっと詳しくいうと、1/2と1/2.0ではまったく違う値になる。1/2は0になり、1/2.0は0.5になる。
練習問題1.2 以下の項目で、実数定数で表す必要のあるものはどれか。
解答群
ア 体重の平均を計算する。 イ 人数の合計をカウントする。 ウ 実行回数をカウントアップする。 |
解答 体重の平均は小数点を含むので実数定数
表記
Cでは10進数(decimal)、8進数(octagonal)、16進数(hexagonal)、指数の表記が可能である。8進数の表記には0を数字の前に付け、16進数では0xを付ける。例えば、10進数40を16進数に直すと
40 = 2×16+8
となるので0x28となる。
指数表記では1.2×1015を1.2e15と表す。
練習問題1.3 以下の空欄を埋めよ。
10進数 |
16進数 |
8進数 |
18 |
ア |
イ |
ウ |
0x25 |
エ |
オ |
カ |
012 |
8 |
キ |
ク |
解答 (ア)0x12 (イ)022 (ウ)37 (エ)045 (オ)10(カ)0xa (キ)0x8
(ク)010
18を16進数で表すと
18 = 1×16 + 2
より0x12. 8進数で表すと
18=2×8 + 2
より022.。
0x25を10進数で表すと
2×16+5=37
より37。37を8進数で表すと
37=4×8+5
より045。
012を10進数で表すと
1×8+2=10
より10。10を16進数であらわと0xa。
8を16進数で表すと
8 = 0×16 + 8
より0x8、8進数で表すと
8=1×8+0
より010となる。
表記方法に注意。数値の先頭に「0x」が付くと16進数、「0」が付くと8進数になる。 |
練習問題1.4 以下にC言語の記法で表した数字がある。同じ値のものどうしのグループに分けよ。
.25e2, 0x25, 25, 012, 37, 8, 1, e1, 8.e0
解答 .25e2=.25×1025 =25 0x25=37 012=1.e1 8=8.e0
実数は、「e2」「e1」のように、指数部をつけて表す。「E」でもよい。 |