<?xml version="1.0" encoding="UTF-8" ?><rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="ja">
  <channel rdf:about="http://w.atwiki.jp/vsaturn/">
    <title>サターンWiki</title>
    <link>http://w.atwiki.jp/vsaturn/</link>
    <atom:link href="https://w.atwiki.jp/vsaturn/rss10.xml" rel="self" type="application/rss+xml" />
    <atom:link rel="hub" href="https://pubsubhubbub.appspot.com" />
    <description>サターンWiki</description>

    <dc:language>ja</dc:language>
    <dc:date>2013-01-10T15:42:05+09:00</dc:date>
    <utime>1357800125</utime>

    <items>
      <rdf:Seq>
                <rdf:li rdf:resource="https://w.atwiki.jp/vsaturn/pages/38.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/vsaturn/pages/37.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/vsaturn/pages/36.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/vsaturn/pages/35.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/vsaturn/pages/34.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/vsaturn/pages/33.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/vsaturn/pages/32.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/vsaturn/pages/31.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/vsaturn/pages/30.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/vsaturn/pages/29.html" />
              </rdf:Seq>
    </items>
	
		
    
  </channel>
    <item rdf:about="https://w.atwiki.jp/vsaturn/pages/38.html">
    <title>役立つ小ネタ集その２</title>
    <link>https://w.atwiki.jp/vsaturn/pages/38.html</link>
    <description>
      **第２回覚えておくと便利な小ネタ
***文字を入れる型
　今まで変数の型はint型等の数値を格納する型ばかり扱って来ましたが、
文字を格納する型もあるんです。それがchar型です。読み方はキャラ型と読みます。
変数１つにつき半角１文字を格納する事ができます。配列にすれば複数の文字が扱えます。

char型
#highlight(cpp){{
char c = &#039;a&#039;;
}}

***#includeの意味
　今までなんとなく使っていた#includeはどの様な意味を持っているのかという疑問を解決しましょう。
これは「あるファイルをこの場所にインクルード（取り込む）しなさい」という命令をコンパイラに対して行なっているのです。
#includeの後に記述する&lt; stdio.h &gt;はstdioヘッダーファイルを読み込みなさいという命令だったんですね。


***C言語での文字
　先ほど文字を扱う型をやりましたが、実はC言語ではその文字に与えられた文字コードと呼ばれる整数値なんです。
もちろん型の代入でも文字コードで指定することも可能です。文字コードはJISコードやASCIIコードなどが使用されています。

***有効範囲（スコープ）
　｛　｝内で宣言された変数はその｛　｝内でしか使えません。これをスコープといいます。
他の関数等で呼ぶような記述をするとエラーになります。

例
#highlight(cpp){{
int main( void )
{
 {
   int n;
   n = 0;
 }

   n =10;  /* エラーになる */

   return 0;
}
}}
　この｛　｝でくくられている部分をブロックと呼びます。変数はそれそれのブロック内のみ有効です。
違うブロックならば同じ変数名で変数が作成されてもエラーになりません。仮引数宣言も同様です。
ブロック内で宣言された変数をローカル変数と呼びます。

***プロトタイプ宣言
　これは予めコンパイラに対して関数の情報を与える宣言文です。
書き方は関数を書く前にmain関数より前に関数頭部のみを記述するだけです。
あくまで情報を与えるだけで関数と実態は別で書きます。

例
#highlight(cpp)    </description>
    <dc:date>2013-01-10T15:42:05+09:00</dc:date>
    <utime>1357800125</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/vsaturn/pages/37.html">
    <title>関数を作ろう</title>
    <link>https://w.atwiki.jp/vsaturn/pages/37.html</link>
    <description>
      **mainも関数だった！

***今まで使っていた関数について
　今回から少し深いところに入っていきます。
この項では関数について詳しく話そうと思います。
今までprintfやscanfなどのもともと用意されていた関数は使っていましたね。これらをライブラリ関数といいます。
しかし、すべての機能がライブラリ関数になっているわけではありません。関数を自分で作成していかなければなりません。
実はすでに今までのコーディングで関数を作成していたのですよ。それがmain関数です。
　main関数について少し説明すると、C言語では１つmain関数がないとエラーになります。
また、コンピュータがmainを呼ぶことで処理が実行されます。

***関数定義
　関数はどのように定義するのか見てみましょう。

#ref(func1.png)

 このような要素で構成されています。１つずつ見ていきましょう。
戻り値型（返却値型）:　関数の処理が終了したときにこの関数が返す値の型を指定します。
関数名 : 関数を呼び出すときの名前
仮引数 : 関数呼び出し時に渡される。実引数を受け取るための変数を指定します。
関数の本体には実際の処理を記述します。それでは実際のソースコードを見てみましょう。

関数サンプル
#highlight(cpp){{
/* 関数の計算結果を表示させる */

#include&lt;stdio.h&gt;

int func( int X )
{
	X *= 10;

	return X;
}

/* メイン関数 */
int main( void )
{
	int na;	// 戻り値格納用
	na = func( 5 );

	/* 結果表示 */
	printf( &quot;%d\n&quot;, na );

	return(0);
}
}}

　今回はmainに加えて自作のfuncという関数を用意しました。
コメントにある通りfunc関数に数値を渡して計算結果を戻り値としてもらって来ています。
詳しい説明は後ほど図解で行います。結果は以下のように計算結果が表示されます。

実行結果
#ref(func2.png)
　
　自作した関数もライブラリ関数と同じように呼び出して引数を与    </description>
    <dc:date>2013-01-10T00:14:01+09:00</dc:date>
    <utime>1357744441</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/vsaturn/pages/36.html">
    <title>多次元配列</title>
    <link>https://w.atwiki.jp/vsaturn/pages/36.html</link>
    <description>
      **列と行

配列
#highlight(cpp){{
型　　配列名[要素数];
int   vc[5];
}}

　前回説明した配列は以上の様に要素数が１つだけでした。これを1次元配列と言います。
実は、配列の要素数は複数定義できるんです。それが、多次元配列です。わかりやすくイメージを図にしたので御覧ください。

#ref(多次元1.png)

　図を見るとListAとListBがあります。ListAが１次元配列ですね。要素数が１つ列数のみを定義している形になります。
一方のListBは２次元配列です列数に加えて行数も定義する形になります。
要素数は右から順に見ていきます。言葉で言い表すとListBは要素３の配列が２つあるということですね。
この多次元配列は３次元、４次元と増やしていくことが可能です。用途に合わせた配列を使いましょう。

多次元配列の初期化
#highlight(cpp){{
int list[ 2 ][ 3 ] = 
{
  { 10, 20, 30 },
  { 40, 50, 60 }
};

/*  １番左の要素は略せる  */
int list[  ][ 3 ] = 
{
  { 10, 20, 30 },
  { 40, 50, 60 }
};

}
}}
　
　初期化は以上の様に行います。１番左の要素は省略することができます。
代入などは前回の配列と変わりません。


----    </description>
    <dc:date>2013-01-04T22:24:15+09:00</dc:date>
    <utime>1357305855</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/vsaturn/pages/35.html">
    <title>配列</title>
    <link>https://w.atwiki.jp/vsaturn/pages/35.html</link>
    <description>
      **大量なデータ管理に便利！
　今回は配列です。配列と言ってもまだピンと来ないと思います。
まず、配列はどのような場面で必要になってくるのかということを考えましょう。

　例えばあなたがゲームのキャラクターデータ管理プログラムを任されたとします。
変数にキャラクターの体力を入れていくことにしました。しかし、キャラクターは多数の種類があり、
キャラクター数の分だけ変数宣言していたら日が暮れてしまいますし、めんどうですよね。
そんな時に配列を使うとスッキリします。配列とは同じ型の変数の集まりを番号で管理しているものです。
書き方を見てみましょう。

配列
#highlight(cpp){{
型　　配列名[要素数];
int   vc[5];
}}

　型は変数と同じ意味ですね。配列名も変数と同じく任意の名前を設定してください。
要素数は値を格納するとが出来る変数の数です。要素数は必ず定数で指定してください。
例ではint型５つ分の要素を宣言していますので５つのデータが格納できます。

　配列も変数と同じく宣言時に初期化が行えます。書き方以下のとおりです。
初期値は順番に設定してください。要素数より多いとエラーになります。
要素数は省略できその場合は初期値の数が要素数として認識されます。

配列の初期化
#highlight(cpp){{
int   vc[5] = { 1,2,3,4,5 };
int   vc[] = { 1,2,3,4,5 };  // 省略
}}
　
　変数のように個別に代入したりすることもできます。
要素番号を要素数の代わりに指定するのです。この値を添え字と呼びます。
添え字は０から開始されます。今回は要素数が５なので添え字は０～４になります。

配列に代入
#highlight(cpp){{
vc[ 0 ] = 10;
vc[ 1 ] = 20;
vc[ 2 ] = 30;
vc[ 3 ] = 40;
vc[ 4 ] = 50;
}}

　もちろん、配列の代入も可能です。配列のコピーなどに用います。
下記の例では、配列vaの１番目の要素にに配列vbの１番目の要素をコピーしています。

配列同士の代入
#highlight(cpp){{
va[ 0 ]    </description>
    <dc:date>2012-11-04T18:13:34+09:00</dc:date>
    <utime>1352020414</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/vsaturn/pages/34.html">
    <title>ループ文その３</title>
    <link>https://w.atwiki.jp/vsaturn/pages/34.html</link>
    <description>
      **ループ回数が決まっているならfor文！
　以前にもループ文をいくつか紹介しましたが、もう１つ便利なループ文があるんです。
それがfor文です。f特徴は、ループ回数などループの条件式の他にループ毎で実行される式を定義することができます。
文章で説明するよりまずは実際に見てもらいましょう。書き方は以下のようになります。

for文
#highlight(cpp){{
for( 式1; 式2; 式3 ) 文;

}}

　最短で書くとこのような形になります。式1は1番最初に一度だけ実行されます。用途は初期化です。
式2にはループの継続条件が入ります。ここはwhile文の式と同様です。
式3はループカウンタ等の変数の増減を行う後処理の式が入ります。書かなければ省略されます。
まだわかりづらいと思うので、図にして見て行きましょう。

#ref(for.png)
　
　これでだいぶわかりやすくなったと思います。次は実際にコードを記述して理解していきましょう。
その前に綺麗に見やすくする記述法を提案したいと思います。
下の図の様にスペースやインデントを入れて見やすい様に書いておくと、後々見返した時などわかりやすいでしょう。

#ref(for2.png)


　では今回もサンプルを用意しましたので実行してみましょう。

for文サンプル
#highlight(cpp){{
/*
　読み込んだ整数値を０までカウントアップ
*/
#include&lt;stdio.h&gt;

int main( void )
{
	int no;	// 入力格納変数

	/* 値の入力 */
	printf( &quot;整数を入力：&quot; );
	scanf( &quot;%d&quot;, &amp;no );

	/* ループ */
	for( int i = 0 ; i &lt;= no ; i++ )
	{
		/* 表示 */
		printf( &quot;%d\n&quot;,i );
	}

	return( 0 );	
}
}}

　実行すると入力された数値までカウントアップされます。
#ref(forサンプル.png)

for文では変数を使ってループさせていますが、式３以外の部分({}内など)で変数を書き換える処理を行うのはご法度です。    </description>
    <dc:date>2013-01-06T16:41:45+09:00</dc:date>
    <utime>1357458105</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/vsaturn/pages/33.html">
    <title>役立つ小ネタ集その１</title>
    <link>https://w.atwiki.jp/vsaturn/pages/33.html</link>
    <description>
      **覚えておくと便利な小ネタ
***初期化子
　変数を宣言するときに同時に初期値を代入できるのです。
初期値は型名と同じ形式なのが決まりです。

初期化子
#highlight(cpp){{
int num = 5;

int numx = 10, numy = 20;
}}

***複合代入演算子
　代入と演算を同時にやってしまいます。
例えば num += 5; だったとすると、変数numの値に５を加算した値を代入します。
ただし、num += 3 * 4 のように複数の演算を行なっている場合は使用出来ません。

複合代入演算子
#highlight(cpp){{
num += 5; 
num -= 5; 
num /= 5; 
num *= 5;
num %= 5;  
}}

***増分演算子（インクリメント）減分演算子（デクリメント）
　主にインクリメント、デクリメントと呼ぶ方が多いと思います。
インクリメントは変数の値を１増やします。対してデクリメントは変数の値を１減らします。
書き方は２種類あり、前置と後置で演算されるタイミングが異なります。
前置は変数の実行前に加算または減算されます。後置は実行後に加算または減算されます。

増分演算子（インクリメント）減分演算子（デクリメント）
#highlight(cpp){{
// 前置
++num;
--num;

// 後置
num++;
num--;
}}

***文字定数
　文字定数は半角１文字をシングルクォーテーション「&#039;&#039;」で囲んだものです。
これは拡張表記も含まれ、拡張表記の場合は \n のように２文字で１文字です。
文字コードの取得などに使用します。

文字定数
#highlight(cpp){{
&#039;a&#039;
}}

***putchar関数
　文字コードで指定された半角１文字を表示します。
文字定数で指定します。

putchar関数
#highlight(cpp){{
putchar( &#039;a&#039; );
}}

***break文
　switch文で使用しているbreakと同じものですが、単体で使うことができます。
ループ文内で使用すると処理を終了しループを抜けます。
    </description>
    <dc:date>2013-01-06T18:09:23+09:00</dc:date>
    <utime>1357463363</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/vsaturn/pages/32.html">
    <title>ループ文その２</title>
    <link>https://w.atwiki.jp/vsaturn/pages/32.html</link>
    <description>
      **ループ文で効率的なプログラムを書こう
　今回もループ文です。２つめは、while単体で使うwhile文です。
書き方はdo while文と違い先頭にwhileを書きます。

wｈile文
#highlight(cpp){{
while( 式 )
{
  文;
}
}}

　まず、継続条件を式に記述します。次に繰り替えしたい処理を文の部分に記述します。
それでは詳しく実行順序を見てみましょう。
#ref(while.png)
　
　while文は前判定なので、必ずしも文が実行されるわけでありません。
式が０であれば１回も実行されないのです。
サンプルを作ってみましたのでお試しください。

wｈile文サンプル
#highlight(cpp){{
/*
　読み込んだ整数値を０までカウントダウン
*/
#include&lt;stdio.h&gt;

int main( void )
{
	int no;	// 入力格納変数

	/* 値の入力 */
	printf( &quot;整数を入力：&quot; );
	scanf( &quot;%d&quot;, &amp;no );

	/* ループ */
	while( no &gt;= 0 )
	{
		/* 表示 */
		printf( &quot;%d\n&quot;,no );
		no = no - 1; // 毎ループ１引く
	}

	return( 0 );	
}
}}

　実行すると入力された数値が０になるまでカウントダウンされます。
#ref(whileサンプル.png)


----    </description>
    <dc:date>2012-05-27T22:11:26+09:00</dc:date>
    <utime>1338124286</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/vsaturn/pages/31.html">
    <title>ループ文その１</title>
    <link>https://w.atwiki.jp/vsaturn/pages/31.html</link>
    <description>
      **ループ文で効率的なプログラムを書こう
　今回は新しいタイプの文を紹介します。
プログラムでは同じ動作を繰り返す処理を記述する場合があります。
そんな時に回数分だけ同じ文を記述するのは効率的ではないですよね？
そのような場面で使うのがループ文です。
この項ではループ文の一つdo while文を解説します。書き方は下のように簡単です。

do wｈile文
#highlight(cpp){{
do
{
  文;
}while( 式 );
}}

　繰り替えしたい処理を文の部分に記述します。そして、継続条件を式に記述します。
詳しく実行順序を見てみましょう。
#ref(do.png)
　
　do while文は式の内容に関わらず必ず１回は文が実行されます。
なぜかとwhileの部分で判定している後判定のためです。
サンプルを作ってみましたのでお試しください。

do wｈile文サンプル
#highlight(cpp){{
/*
　読み込んだ整数が偶数か奇数か
*/
#include&lt;stdio.h&gt;

int main( void )
{
	int count;	// ループカウンタ

	/* ループ */
	do
	{
		int no;	// 入力格納変数

		/* 値の入力 */
		printf( &quot;整数を入力：&quot; );
		scanf( &quot;%d&quot;, &amp;no );

		/*  偶数か奇数か */
		if( no % 2 )
			puts( &quot;入力された値は奇数&quot; );
		else
			puts( &quot;入力された値は偶数&quot; );

		/* 継続するか */
		printf( &quot;もう一度する？【yes...0 / no...9】:&quot; );
		scanf( &quot;%d&quot;,&amp;count );

	}while( count == 0 );	// ０が入力されたら終了

	return( 0 );	
}
}}

　実行すると偶数か奇数かを判定します。０を入力すると処理を繰り返します。
#ref(doサンプル.png)


----    </description>
    <dc:date>2012-05-26T21:40:46+09:00</dc:date>
    <utime>1338036046</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/vsaturn/pages/30.html">
    <title>switch文で複数分岐！</title>
    <link>https://w.atwiki.jp/vsaturn/pages/30.html</link>
    <description>
      **if文と違って複数の分岐が出来る！
　条件分岐を記述するときif文は２つにしか分岐できないので何度も
ifとelseを書かなければならなくて面倒ですよね。そんな時にはswitch文です。
書き方は以下のとおりです。

&amp;&amp;と||の複合式
#highlight(cpp){{
switch( 式 )
{
 case 値: 
　　　文;
      文;
      break;
 default:
      文;
      文;
      break;
}
}}

　まだわかりづらいので実行順序を書いてみましょう。
#ref(switch.png)
　
　switch文がわかってきたでしょうか？
breakにぶつかるまで処理してしまうので書き忘れに注意してください。
ちなみに式には整数型しか設定できないので注意してください。


----    </description>
    <dc:date>2012-05-25T22:25:28+09:00</dc:date>
    <utime>1337952328</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/vsaturn/pages/29.html">
    <title>論理演算子その３</title>
    <link>https://w.atwiki.jp/vsaturn/pages/29.html</link>
    <description>
      **複雑な演算もできる！
　前項までで２つの論理演算子を解説しましたね。
今回は２つの演算子で少し複雑な条件式を作ってみます。
下のような＆＆と｜｜が１つの式にあった場合はどうなるのでしょうか？

&amp;&amp;と||の複合式
#highlight(){
式１ &amp;&amp; 式２ || 式３
}

　正解はこの図のように演算されます。
#ref(複合式.png)
　
　論理演算子の優先順位は&amp;&amp;の方が高いので&amp;&amp;から演算していきます。
ですので図のような演算順序になります。
ですが、OR演算を先にやらないと意図した結果が得られない場合もあります。
そんな時は、数学のように優先したい式を（）でくくりましょう。
そうすれば（）の部分から演算されます。

ORを先に演算させる
#highlight(){
式１ &amp;&amp; ( 式２ || 式３ )
}
 
　（）は優先順位以外にも式を見やすくする意図もあります。
今まで解説した演算子や関数でサンプルを作ってみしたので試してみてください。

#highlight(cpp){
/*
　読み込んだ月の季節を表示
*/
#include &lt;stdio.h&gt;

 /* メイン関数 */
 int main( void )
 {
    int month; // 入力記憶用

	printf( &quot;何月ですか：&quot;);
	scanf( &quot;%d&quot;, &amp;month );		// 入力

	/* 判定する */
	if( month &gt;= 3 &amp;&amp; month &lt;= 5 )
		puts( &quot;春です&quot; );
	else if( month &gt;= 6 &amp;&amp; month &lt;= 8 )
		puts( &quot;夏です&quot; );
	else if( month &gt;= 9 &amp;&amp; month &lt;= 11 )
		puts( &quot;秋です&quot; );
	else if( month == 1 || month == 2 || month == 12 )
		puts( &quot;冬です。&quot; );
	else
		puts( &quot;そんな月はありません&quot; );

	return(0);
 }
}

　実行すると入力された月の数値に合わせてメッセージが表示されます。
#ref(WS000000.B    </description>
    <dc:date>2012-05-25T21:28:18+09:00</dc:date>
    <utime>1337948898</utime>
  </item>
  </rdf:RDF>
