2010年1月25日月曜日

【よくわかる!実践Cプログラミング】のお勉強~第1部 Part 2 ~

じゃ、遅くなったがPart2を。
★「while 文」
#include
int main(void)
{
int sum, price;
printf("すでに使った金額は?\n"); // メッセージを出力し、
scanf("%d",&sum); // 変数sumに値を入力する
while( sum <= 300) // 繰り返しここから
{
printf("欲しい物の金額は?\n");
scanf("%d",&price);
sum += price;
} // 繰り返しここまで

printf("300円を超えています。\n");
return 0;
}

「sum += price; 」 は、sum と price の値を足したものになる。「sum = sum + price」
while文は実行する前に条件式を調べる。
do文は実行した後で条件式を調べる。
for文はあらかじめ回数が分かっている繰返しを記述するのに適している。

★「printf」の話
#include
int main(void)
{
printf("Hello World\n");
return 0;
}

Hello World の表示をする、プログラミングを勉強する時に1番初めに良く見るコード。
次の1行を入れて、「90%discount!」と表示させたい。
printf("大安売り!なんと90%disount!\n");
このままでは、「%d」と認識されてしまうので、「%%」と処理する。
printf("大安売り!なんと90%%discount!\n");
「%d」の本来の使い方は、
printf("計算結果は%dです\n",1+2);
と、2番目の引数として整数に置き換えられて出力する。「計算結果は3です」と表示される。
「%d」・・・整数型、10進数で出力
「%x」・・・整数型、16進数で出力
「%f」・・・浮動小数点型、実数
「%s」・・・文字列型、文字列、
「%c」・・・文字型、1文字
int a = 65;
printf("表示は、 %d %x %c %s です。", a, a, a, a);
「65 41 a a 」と表示させたかったが、”ハンドルされていない例外が発生”する・・・。本題から外れるので後回しにした。

■関連項目
sprintf関数:printf関数と同様の結果を、文字列として配列変数に入れます。
fprintf関数:fopenで開いたファイルなどにprintf関数と同様の出力を行います。

★「memset」配列をまとめてクリアする
memset( アドレス , バイト値 , サイズ);
※先頭に #include の追加

2010年1月14日木曜日

【よくわかる!実践Cプログラミング】のお勉強~第1部 Part 1 ~

前回はVisualStudio2008ExpressEdition をインストールしました。今回から少しずつ読んで、書いて、実行していこうと思います。 うすうす気付いていますが、きっとこのC言語の始め方は普通の入り方ではないと思います。しかし、どうしても飽きっぽい自分には、このような非常に面白い本から入れば3日坊主も7日坊主ぐらいになるかと思い、始めてみました。

~はじめてのC言語~「VC++でCプログラムを書く方法」
ホントは、テキストエディタで書いて、コンパイルし、実行の手順でやっていきたいのですが、とりあえず慣れるために IDEとしてVisualStudio、VC++を入れました。そして、C言語として作るには、少し手順があるので復習します。
1.プロジェクトの新規作成で、「Win32 コンソールアプリケーション」を選択し、プロジェクト名を入力する。
2.「Win32 アプリケーションウィザード」の画面で、「追加のオプション」の □空のプロジェクトにチェック☑をつける。
3.ソリューションエクスプローラの「ソースファイル」を右クリックし、「追加」→「新しい項目」を選び、C++テンプレートを選択し、ファイル名の末尾、拡張子を必ず「.c」にし、最後に「追加」をクリックする。
まずは「Hello World」からやりました。なんだか、JAVAでもやった気がします。

#include
int main(void)
{
  printf("Hello World");
  return 0;
}
と、ここがスタートになりました。
これをビルドして、デバッグしてみたのですが、正常に実行されたかわからないw ので、ブレークポイントを入れて、処理が途中で止まるようにしました。また、ステップインで1行ずつ実行できますね。。。

~C言語マイスターズ~「if文は畏怖すべき条件判断の冷徹宰相」
if文の書式 >> if( 条件式 ) 成立時に実行する文 else 不成立時に実行する文
えー、、、条件式に「0」が来たら、「成立」で、それ以外は「不成立」になるってことです。なので、
if( a ) printf("成立") else printf("不成立");
これの「a」に、「0」が入れば、「成立」と出ます。

●関連項目
switch文:複数の条件に分岐できる。
三項演算子:式に限定すれば、if文と同じ機能。   ・・・?

~ライブラリ紳士録~「ニャオ!猫の力で?文字列合体「strcat」
C言語では文字列を小さな整数(char型)の配列として扱う。(なるほど。。。)
puts関数だと、最後に「改行」が入るので、strcat関数で文字列をコピー追加する。
#include
#include
int main(void)
{
char name[19] = "よくわかる!";
char rank[] = "C言語";
strcat(name,rank);
puts(name);
return 0;
}
と、このようになるそうです。連結して全角9文字、18バイトですが、文字列の最後に「¥0」のnullが1バイトつくそうです。なので19バイトです。これは注意ですね。

●関連項目
strcpy関数:文字列を上書き。連結ではない。
strncat関数:追加バイト数を指定できるstrcat関数の派生形。
_mbscat関数:マルチバイト文字(シフトJISなど)の文字列を合体。
wcscat関数:ワイド文字(Unicodeなど)の文字列を合体。

~ライブラリ紳士録~「無駄に太るな,スリムに出力「puts」」
printf関数とputs関数で、似てるようだが違うので、使い分けもそうだし、メモリの消費も気をつけましょうといったことで、
puts関数とは・・・、引数の文字列と改行を標準出力に出力する。書き込みエラー発生時はEOFを返し、そうでない場合は負ではない値(←?)を返す。
と、実にシンプル・・・、負ではない値が気になるけど・・・。
printf関数のように、変数に入った整数を文字列に埋め込んで出力するような複雑な機能はありません・・・なるほど。そんなことができるのね。
puts関数の方が、より高速に処理できる、実行ファイルが小さい、必要メモリが少ない、そうです。実際に、比較してみました。VC++の設定は以下を変更しました。
・ビルドのターゲットをDebug からRelease に。
・構成プロパティを開き、コード生成 の ランタイムライブラリ を「マルチスレッド(/MT)」に。
・リビルドする。
すると、Release というフォルダに実行ファイルが生成されます。これをputs とpringf で書き換えて比較してみました。

●関連項目
fputs関数:fopenで開いたストリームなどに書き込みます。
gets関数:標準入力から1行入力します。

~C言語クイズ~「ifの迷宮」
リスト8から
#include
int main(void)
{
int a = 1, b = 0;
if( a ) if( b ) puts("Alfa") else puts("Bravo");
return 0;
}

これで、アルファとブラヴォのどちらが表示されるのか?
んー、1つ目のif が真で、2番目のif に行くけど、else に入ってBravo か?むむー、もしくは、、、つーか、1つ目と2つ目の見分けってするのか?うーん、疑問だ。

【よくわかる!実践Cプログラミング】のお勉強~プロローグ~

とりあえず、C言語を使うことになったので、お勉強を始めようと思うのだが、どれをとっても挫折しそうな予感がバリバリするので、ヨドバシで出会った面白そうなこの本をベースにお勉強を進めようと思う。実はタイピングが遅いので、また挑戦になるが、できるだけ素早くタイピングすることも心掛けてやっていこうと思う。

~この本の読み方~

とりあえず、(←口癖ですねw)どこからでも読み始めていいそうですが、まずはプロローグから読みましょう。「C言語はひとつ」の正体・・・これは、一番初めに策定された仕様からどんどん時代に合わせて標準化してきたが、ベースとなるものは変わっていない・・・当り前か。。。

無料のC言語開発ツールをインストールする
C言語でプログラムを書いて、動作させるためには主に2つのツールが必要となる。
1.テキストエディタ
2.C言語のコンパイラ
また、両方の機能を1つにまとめたIDE、統合開発環境と呼ばれるツールも使われる。

今回は、付録のDVD-ROMから「Visual Studio 2008 Express Editions with Service Pack 1」をインストールします。

DVD-ROMを入れ、セットアップの画面から「Visual C++ 2008 Express Edition」をクリックすると、インストールが開始されます。このVC++はC++言語での開発を想定して作られているので、C言語でのプログラミングに使うには、少し手順を踏む必要があるそうです。(それは次回)