4: 2011-06-27 (月) 21:13:53 yoshida | 5: 2011-06-28 (火) 14:38:17 yoshida | ||
---|---|---|---|
Line 125: | Line 125: | ||
#html{{ | #html{{ | ||
<pre class="brush: c"> | <pre class="brush: c"> | ||
- | #include <fd.h> | ||
- | void main (void) { | ||
int a, b = 3; | int a, b = 3; | ||
- | fd_Wait (2000); | ||
a = &b; | a = &b; | ||
- | printf ("a=%d\n", a); | ||
- | } | ||
</pre> | </pre> | ||
}} | }} | ||
- | a=2103864 | ||
aには3ではなく、bのアドレスの値が入ります。~ | aには3ではなく、bのアドレスの値が入ります。~ | ||
Line 160: | Line 154: | ||
char a[5] = { 'B', 'E', 'S', 'T', NULL }; | char a[5] = { 'B', 'E', 'S', 'T', NULL }; | ||
と同じです。~ | と同じです。~ | ||
- | このため、配列として扱い、インデックスを使用することで、文字の取得が可能です。 | + | このため、配列として扱い、インデックスを使用することで、文字の取得が可能です。以下はbに'E'を代入します。~ |
#html{{ | #html{{ | ||
<pre class="brush: c"> | <pre class="brush: c"> | ||
Line 167: | Line 162: | ||
</pre> | </pre> | ||
}} | }} | ||
- | bにはEが代入されます。~ | + | ポインタを使用して文字の取得を行う場合は以下の通りです。~ |
- | ポインタを使用して文字の取得を行うことも可能です。~ | + | |
#html{{ | #html{{ | ||
<pre class="brush: c"> | <pre class="brush: c"> | ||
Line 177: | Line 171: | ||
</pre> | </pre> | ||
}} | }} | ||
- | 配列として扱った時と同じように、bにはEが代入されます。~ | + | **制御文 [#j38a6a23] |
+ | ***if文 [#c6144380] | ||
+ | if文は「もし○○だったら△△する。それ以外だったら□□する」というような、条件によって実行を分岐する時に使います。 | ||
+ | #ref(if1.png,100%) | ||
+ | 「もし○○だったら△△する」というif文です。~ | ||
+ | |||
+ | ()内の条件が成り立っている時は{}内の処理を実行します。成り立っていない時は実行しません。 | ||
+ | #html{{ | ||
+ | <pre class="brush: c"> | ||
+ | main() { | ||
+ | int a =10; | ||
+ | if (a > 5) { | ||
+ | a = a - 1; | ||
+ | } | ||
+ | } | ||
+ | </pre> | ||
+ | }} | ||
+ | もし変数aが5より大きかったらaから1を引くというプログラムです。aは10なのでa>5が成り立っており、aから1が引かれます。 | ||
+ | ---- | ||
+ | #ref(if2.png,100%) | ||
+ | 「もし○○だったら△△する。それ以外だったら□□する」というif文です。~ | ||
+ | |||
+ | ()内の条件が成り立っている時はその直後の{}内の処理を実行し、成り立っていない時はelse後の{}内の処理を実行します。 | ||
+ | #html{{ | ||
+ | <pre class="brush: c"> | ||
+ | main() { | ||
+ | int a =3; | ||
+ | if (a > 5) { | ||
+ | a = a - 1; | ||
+ | } | ||
+ | else { | ||
+ | a = a + 1; | ||
+ | } | ||
+ | } | ||
+ | </pre> | ||
+ | }} | ||
+ | もし変数aが5より大きかったらaから1を引いて、それ以外(aが5以下)なら1を足すというプログラムです。aは3なのでa>5は成り立たずelse内のaに1を足すが実行されます。 | ||
+ | ---- | ||
+ | #ref(if3.png,100%) | ||
+ | 「もし○○だったら△△する、それ以外でもし●●だったら□□する、更にそれ以外は■■する」というif文です。~ | ||
+ | |||
+ | 最初のifの()内の条件が成り立っている時はその直後の{}内の処理を実行し、成り立っていない時は次のelse ifへ行きます。else ifの()内の条件が成り立っている時はその直後の{}内の処理を実行し、成り立っていない時はelse後の{}内の処理を実行します。~ | ||
+ | else ifは複数書くことができます。 | ||
+ | #html{{ | ||
+ | <pre class="brush: c"> | ||
+ | main() { | ||
+ | int a = -3; | ||
+ | if (a > 5) { | ||
+ | a = a - 1; | ||
+ | } | ||
+ | else if (a < 0) { | ||
+ | a = 0; | ||
+ | } | ||
+ | else { | ||
+ | a = a + 1; | ||
+ | } | ||
+ | } | ||
+ | </pre> | ||
+ | }} | ||
+ | もし変数aが5より大きかったらaから1を引いて、それ以外(aが5以下)でかつaが0より小さかったらaに0を代入して、更にそれ以外(aは0以上,5以下)なら a に1を足すというプログラムです。~ | ||
+ | aは-3なのでa>5は成り立たず、else ifのa<0が成り立ち、aは0になります。 | ||
+ | ***for文 [#jea34346] | ||
+ | 同じ処理を繰り返す時に使います。通常はカウンタ(何回繰り返したかをカウントする変数)を使って繰り返す回数を決めます。 | ||
+ | #ref(for1.png,100%) | ||
+ | 「iの初期値を0とし、iが5より小さい間は処理を繰り返す。ただし処理を1回行ったらiを1増やす。」というfor文です。~ | ||
+ | |||
+ | 事前にカウンタを変数として宣言しておきます。 | ||
+ | 処理を行うごとにカウンタが0,1,2,3,4と増え5になったら繰返しを止めます。つまり5回同じ処理を繰り返します。~ | ||
+ | i++はi=i+1と同じ意味です。 | ||
+ | #html{{ | ||
+ | <pre class="brush: c"> | ||
+ | main() { | ||
+ | int i, a = 1; | ||
+ | for (i = 0; i < 5; i++) { | ||
+ | a = a * 3; | ||
+ | } | ||
+ | } | ||
+ | </pre> | ||
+ | }} | ||
+ | a×3を5回繰り返す(3の5乗を計算する)プログラムです。 | ||
+ | |||
+ | ***while文 [#o8733fa9] | ||
+ | 同じ処理を繰り返す時に使います。for文との違いは、繰り返す回数が定かではない時に使うということです。 | ||
+ | #ref(while1.png,100%) | ||
+ | () 内の条件が成り立っている間は処理を繰り返し実行し、条件が成り立たなくなったら繰返しを止めます。 | ||
+ | #html{{ | ||
+ | <pre class="brush: c"> | ||
+ | main() { | ||
+ | int i = 1; | ||
+ | while (i < 1000) { | ||
+ | i = i * 2; | ||
+ | } | ||
+ | } | ||
+ | </pre> | ||
+ | }} | ||
+ | i×2をiに代入する処理を繰り返し、iが1000より少ない状態でなくなったら(1000以上になったら)繰り返しを止めるというプログラムです。 | ||
+ | ***switch文 [#p5f7a116] | ||
+ | 変数や式の値によって処理を分けるときに使用します。 | ||
+ | #ref(switch1.png,100%) | ||
+ | 「変数・式が値1なら処理Aを実行、値2なら処理Bを実行、どれにも当てはまらなければ処理Cを実行する」というswitch文です。~ | ||
+ | |||
+ | switch文の () 内の変数又は式の値がcaseの値と同じならその直後の処理を行います。~ | ||
+ | 処理後はbreak;を書きます。忘れるとそのまま次の処理も行ってしまいます。~ | ||
+ | defaultはどれにも当てはまらない場合です。 | ||
+ | #html{{ | ||
+ | <pre class="brush: c"> | ||
+ | main() { | ||
+ | char c = '+'; | ||
+ | int a, m = 5, n = 3; | ||
+ | switch(c) { | ||
+ | case '+': | ||
+ | a = m + n; | ||
+ | break; | ||
+ | case '-': | ||
+ | a = m - n; | ||
+ | break; | ||
+ | default: | ||
+ | a = 0; | ||
+ | } | ||
+ | } | ||
+ | </pre> | ||
+ | }} | ||
+ | cが+ならmとnをたしてaに代入、cが-ならmからnを引いてaに代入、それ以外ならaに0を代入するというプログラムです。~ | ||
+ | cは+なのでaはm+nになります。~ | ||
+ | **関数 [#p52f0f17] | ||
+ | 関数とは、パラメータを入れると何かしらの処理を行って結果を吐き出す箱です。~ | ||
+ | ***FREEDOMライブラリの関数 [#i0705fce] | ||
+ | FREEDOMライブラリの関数は予め箱が用意されているので、箱の中身を気にせずに使う事ができます。~ | ||
+ | |||
+ | #ref(function1.png,100%) | ||
+ | |||
+ | パラメータは引数、結果は戻り値と言います。引数や戻り値がない関数もあります。~ | ||
+ | 例としてfd_printf文を紹介します。 | ||
+ | |||
+ | ***fd_printf文 [#k44284d5] | ||
+ | 文字や変数の値などを[[Chapter1.2>FDIIICHAPTER1.2]]でインストールしたSIMPLE TERM上で表示する時に使います。~ | ||
+ | |||
+ | 通常のC言語ではprintfと書きますが、FREEDOMライブラリではfd_printfと書きます。 | ||
+ | #ref(printf1.png,100%) | ||
+ | fd_printfの () 内の " で挟まれた文字をそのまま表示しています。 | ||
+ | ---- | ||
+ | #ref(printf2.png,100%) | ||
+ | aという変数の値を表示しています。変数の値をどのように表示するかは " " 内の%dの部分で指定します。%dの部分に何を表示するかを " " の後に , で区切って書きます。~ | ||
+ | fd_printf文で使用できる書式は以下の通りです。~ | ||
+ | | 書式指定 | 意味 | 例 | | ||
+ | | %d | 整数を10進数で表示 | 5, -17 など | | ||
+ | | %c | 文字 | 単一の'G' など | | ||
+ | | %s | 文字列 | "Hello" など | | ||
+ | | %o | 整数を8進数で表示 | 12, 23 など | | ||
+ | | %b | 整数を2進数で表示 | 10, 1011 など | | ||
+ | | %u | 整数を符号なし10進数で表示 | 37, 2093 など | | ||
+ | | %x | 整数を16進数で表示 | 1A, B89E など | | ||
+ | |||
+ | ---- | ||
+ | #ref(printf3.png,100%) | ||
+ | %とdの間に入る数値は桁数を表します。空いている桁にはスペースが入ります。~ | ||
+ | さらに数値の前に0を付けると空いている桁には0が入ります。~ | ||
+ | |||
+ | \n | ||
+ | は改行です。その他に | ||
+ | \r | ||
+ | と書くと復帰(同じ行の頭から再び表示する)になります。 | ||
+ | |||
+ | |CENTER:BGCOLOR(red):||c | ||
+ | | :idea:|お使いのブラウザ(Internet Explorer、Firefox、Safariなど)によっては、文中の¥(円記号)が\(バックスラッシュ)で表示される場合がありますが、GCC Developer Liteでは¥で表示されます。&br;また本文中のプログラムコード(プログラムを書いたもの)をGCC Developer Liteへコピーして貼り付けた場合、\は¥になりますので問題ありません。&br;※説明のためここでは¥と\を全角で書いていますが、実際には半角です。| | ||
+ | [[こちら>FDIIILIB]]でFDIII-HCで使用できる関数を紹介しています。~ | ||
+ | |||
+ | **プログラムの書き方 [#s49216c9] | ||
+ | プログラムは唯でさえ英語が並んで読みにくいものです。暫くたって読み返す時や他人に見せる時に分かりやすいように書く必要があります。~ | ||
+ | 自分で書き方を統一して書くとより分かりやすくなります。 | ||
+ | ***インデント(字下げ) [#x04982a4] | ||
+ | #html{{ | ||
+ | <pre class="brush: c"> | ||
+ | #include <fd.h> | ||
+ | void main (void) { | ||
+ | int i; | ||
+ | for (i = 0, i < 5; i++) { | ||
+ | if (i > 3) { | ||
+ | fd_printf ("%d\n", i); | ||
+ | } | ||
+ | } | ||
+ | while (i++ < 10) { | ||
+ | fd_putc ('.'); | ||
+ | } | ||
+ | } | ||
+ | </pre> | ||
+ | }} | ||
+ | 各関数内にインデントを付け、階層化することで、それぞれの関数の開始位置と終了位置が分かりやすくなります。 | ||
+ | |||
+ | [[FDIII-HC Learning Guide]]に戻る |