C言語 入門 小学生でもわかるC言語

十三日目 配列と文章

「わかりやすく!」がテーマです!

HOME/小学生でもわかるC言語 目次/十三日目 配列と文章/

広告

↓2016年02月29日発売↓

12歳からはじめる ゼロからのC言語 ゲームプログラミング教室

新品価格
¥2,462から
(2016/5/10 22:16時点)

もっと!C、C++言語本

目次へ戻る

?と思ったら

わからなそうな用語集

文字を並べる

配列に一文字を並べる事によって文章を書くことができます!

/*プログラム40*/
#include <stdio.h>

int main(){
	char moji_hairetu[6];

	moji_hairetu[0] = 'h';
	moji_hairetu[1] = 'e';
	moji_hairetu[2] = 'l';
	moji_hairetu[3] = 'l';
	moji_hairetu[4] = 'o';
	moji_hairetu[5] = 0;

	printf("%s\n",moji_hairetu);
	
	return 0;
}

■実行結果■

実行結果(b-13-1)

■説明■

配列にして一文字を並べる事によって文章を作る事ができました!

まずは文章の文字の数だけ配列を用意しましょう!

char moji_hairetu[6];

「文字数+ちょっと」多めに配列を用意しましょう!

printf("%s",moji_hairetu);

表示する時は「%s」を使います。お尻の「moji_hairetu」に配列番号はつけなくて大丈夫です!

一文字ずつ表示させたい時は

printf("%c",moji_hairetu[3]);

「%c」を使って配列番号を選んであげます。

「0」ってなんだ?

moji_hairetu[5] = 0;

お尻に余計な「0」がくっついてますね。これは文章を表示する時に使う「%s」に文章の終わりを教える目印になります。

前回に学んだ番兵と同じような仕組みですね!

多めな文字数というのは、この「0」の分になります。

文字数がオーバーして配列からはみ出してしまうとプログラムが暴走してしまうのでギリギリではなく多めに用意しましょう!

簡単に書きましょう!

/*プログラム41*/
#include <stdio.h>

int main(){
	char moji_hairetu[40] = "オムライスはケチャップ派です!";
	char moji_hairetu2[] = "目玉焼きはしょう油派です!";

	printf("%s",moji_hairetu);
	
	printf("\n");

	printf("%s",moji_hairetu2);

	printf("\n");

	return 0;
}

■実行結果■

実行結果(b-13-2)

■説明■

「"」で囲むことによって簡単に書くことができます!

char moji_hairetu[40] = "オムライスはケチャップ派です!";

一つずつ書かなくていいのでラクですね!

さらに配列番号を省略すると勝手に文字数分を用意してくれます!

char moji_hairetu2[] = "目玉焼きはしょう油派です!";

これでいちいち文字数を数える必要はありません。

全角文字(漢字やひらがな)は2つ分必要です!

全角文字っていうのは簡単に言うと漢字やひらがななどのでっかい文字です。

キーボード左上の「半角/全角」キーを押した時の文字ですね!

全角文字

「あいうえお・漢字・アイウエオ・ABCDE・abcde」

半角文字

「abcde・ABCDE・アイウエオ」

全角文字は言葉通りでっかいので2文字分用意する必要があります!

さきほどのプログラムのように配列番号を書かなければこの事を考える必要はないので大丈夫です。

文字コードのヒミツ

文字コードっていうのは漢字、ひらがな、英語などいろいろな文字が書いてある表になります。

文字一つ一つに番号が付いていてコンピューターはこの番号をもとに文字を表示したりしてます。

プログラムで文字コードを確認してみましょう!

/*プログラム42*/
#include <stdio.h>

int main(){

	char moji = 'A';

	printf("「A」の文字コードは%d番です!\n",moji);

	return 0;
}

■実行結果■

実行結果(b-13-3)

■説明■

printf("「A」の文字コードは%d番です!",moji);

文字を表示する時の「%c」を「%d」にかえる事によって文字コード番号を調べる事ができます。

「A」は65番と出ました。ちなみに「a」は97番になります。

このように同じ文字に見えてもコンピューターにとっては全く別のものという事を覚えてください。

文字コードもいろいろ

世界中の人が同じ言語のコンピューターを使うわけではないので、文字コードにも種類があります。アルファベットはだいたい世界共通なので文字コード番号も同じですが次にやる全角文字などは文字コード番号が同じでも違う文字になってる場合があります!

文字コードで遊ぼう!

文字コードの仕組みを使って遊びましょう!

/*プログラム43*/
#include <stdio.h>

int main(){
	char moji = 'a';

	printf("moji = %c\n",moji);
	
	printf("moji + 1 = %c\n",moji + 1);

	return 0;
}

■実行結果■

実行結果(b-13-4)

■説明■

printf("moji + 1 = %c\n",moji + 1);

変数「moji」に「+1」すると「b」になりました!

カンの良い方はわかるかと思いますが、文字コードはある程度規則正しく並んでいるので97番の隣の98番は「b」になるのです!

全角文字は難しい!

ひらがな・漢字などの全角文字は難しいのでやり方だけご紹介します。

/*プログラム44*/
#include <stdio.h>

int main(){
	printf("「あ」の文字コード = %x",'あ');

	printf("\n\n");
	printf("「あ」を表示→%c%c",0x82,0xa0);
	printf("\n");
	printf("「い」を表示→%c%c",0x82,0xa0 + 2);
	printf("\n");

	return 0;
}

■実行結果■

実行結果(b-13-5)

■説明■

まずは文字コードを調べるのに「%x」というのを使います。

printf("「あ」の文字コード = %x",'あ');

調べたい文字をお尻で「'」で囲みます。そしてでてきた「あ」の文字コードは

82a0

となってますね。数字とアルファベットが一緒になってます。

次にこれを「82」と「a0」の2つに分けます。

あとは表示する方法ですね!全角文字は2つ分使うといいました。なので表示する時もやっぱり2つ「%c」を並べます。

printf("「あ」を表示→%c%c",0x82,0xa0);

そしてお尻にさきほどの2つに分けた「82」と「a0」の先頭に「0x」を付けて間を「,」で区切って並べれば大丈夫です!

漢字も大丈夫です!

「%x」

16進数で表示する時はこれを使います。16進数っていうのは2進数なんかと同じ数の進み方です。16になるとケタが上がります。いつも使っているものは10進数といいます。10になるとケタが上がります。

10進数

123456789→10

16進数

123456789abcde→10(足りない「10〜15」までを「a〜f」にします。)

つまり16進数で「10」は10進数の「16」になります。

時計の13時が1時になるのと同じ感じです。

コンピューターは実は10進数を使うのが苦手なのです。16進数という謎の進み方のほうが使いやすいのです。

使う時はさきほどのように頭に「0x」をつけます。これでその数字はコンピューターが16進数なんだなと判断してくれます。

「%d」で試してみる

試しに「あ」の文字コードをいつもどおり「%d」で表示してみると

/*プログラム45*/
#include <stdio.h>

int main(){
	printf("%d",'あ');

	printf("\n");

	printf("%c%c\n",130,160);

	return 0;
}

■実行結果■

実行結果(b-13-6)

■説明■

少し結果が違うかもしれませんが謎の数字がでてきたと思います。

ちなみにこの数字をそのままお尻につけても正しく「あ」と表示されないと思います。

そのあとの

printf("%c%c",130,160);

これだと正しく表示されます。

この「130」と「160」っていうのはさきほど分けた「82」と「a0」を10進数に直したものになります。

そんなワケで突然16進数が登場したりわからない事だらけですが、まあ難しく考えずこういうものだと覚えてしまいましょう!

もう少し詳しく知りたい時は

わからなそうな用語集・さ行「進数」

こちらをご覧下さい!

文章の入力

「scanf」命令で受け取る変数を配列にすれば文章を受け取る事ができます!

/*プログラム46*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(){
	char moji_hairetu[40];

	printf("お名前を入力してください!");

	scanf("%s",moji_hairetu);

	printf("あなたの名前は%sさんですね!\n",moji_hairetu);

	return 0;
}

■実行結果■

実行結果(b-13-7)

■説明■

文章を受け取るのでやっぱり「%s」を使います。

scanf("%s",moji_hairetu);

使い方もほとんど変わらないので大丈夫ですね!「moji_hairetu」に配列番号はつきません。

「&」もついてないですね!

決めた文字数をオーバーしないように注意しましょう!

古いタイプのコマンドプロンプトで日本語入力をしたい時は「alt + 半角/全角」キーを押してみてください。

配列と文章まとめ

/*プログラム47*/
#include <stdio.h>

int main(){
	char moji_hairetu[20] = "thank you!";
	char moji_hairetu2[20] = "あいうえお";

	int suji;

	for(suji=0;suji<10;suji++){
		printf("[%c]",moji_hairetu[suji]);
		printf(" ");
		printf("[%x]",moji_hairetu2[suji]);
		printf("\n");
	}
}

■実行結果■

実行結果(b-13-8)

■説明■

最後に文章を入れた配列の中身をのぞいてみましょう!

実行結果をスペースの都合上、縦に配置しております。見づらいのですいませんです。

char moji_hairetu[20] = "thank you!";
char moji_hairetu2[20] = "あいうえお";

この2つの配列の中身を配列番号10まで表示してます。

左側が「thank you!」、右側が「あいうえお」の16進数です。

左側は一つずつ「thank you!」と確認できますね!

全角文字の場合は一文字につき2つ分必要でしたね!

右側を見てみると、配列を2つ使って「あ」の「82a0」2つに分けて保存しているのが確認できると思います。

先頭の[ffffff]は今は気にしないでください!

次回はいよいよ自分で簡単な命令を作っていきます。

次回

最終日 関数(かんすう)

□ページの先頭へ□

□目次へ戻る□

広告

↓2014年06月20日発売↓

14歳からはじめるC言語わくわくゲームプログラミング教室 Visual Studio 2013編

新品価格
¥2,500から
(2016/5/10 22:17時点)

↓2014年10月25日発売↓

超本格! サンプルで覚えるC言語 3Dゲームプログラミング教室

新品価格
¥3,110から
(2016/5/10 22:18時点)

↓2013年07月25日発売↓

小学生からはじめるわくわくプログラミング

新品価格
¥2,052から
(2016/5/10 22:21時点)

↓2016年05月13日発売↓

小学生からはじめるわくわくプログラミング2

新品価格
¥2,052から
(2016/5/10 22:22時点)

もっと!C、C++言語本

□ページの先頭へ□

□HOME□