C++ド初心者がC++をやってみる奴

C++について気づいたことや学んだことをつらつらと

二次元配列

二次元配列について解説します。

二次元配列とは、表計算のような処理を行いたい場合に便利なようです。
gorilland-k.hatenablog.com
c-lang.sevendays-study.com

#include<stdio.h>

void main() {
	/*
	変数の初期化
	*/
	int d[3][5] = {
		{10,20,30,40,50},//[0][0]~[0][4]までの値
		{10,15,20,25,30,},//[1][0]~[1][4]までの値
		{20,30,40,50,60},//[2][0]~[2][4]までの値
	};
	int m, n;

	/*
	成分の表示
	*/
	for (m = 0; m < 3; m++) {
		for (n = 0; n < 5; n++) {
			printf("%d ", d[m][n]);
		}
		printf("\n");
	}
}


配列に値を代入します。
配列には複数の添え字をつけることが出来ます。
ⅾの後ろに[3]と[5]の添え字がついてるので、これが二次元配列というものです。

#include<stdio.h>

void main() {
	/*
	変数の初期化
	*/
	int d[3][5] = {
		{10,20,30,40,50},//[0][0]~[0][4]までの値
		{10,15,20,25,30,},//[1][0]~[1][4]までの値
		{20,30,40,50,60},//[2][0]~[2][4]までの値
	};
	int m, n;


配列の値をループ処理で表示します。

	/*
	成分の表示
	*/
	for (m = 0; m < 3; m++) {
		for (n = 0; n < 5; n++) {
			printf("%d ", d[m][n]);
		}
		printf("\n");
	}
}


実行すると、以下のようになります。
f:id:Free_Gamer:20210325084620p:plain

イメージ的にはこんな感じです。
f:id:Free_Gamer:20210325084646p:plain


終わりー


それではまた^^ノシ

文字列と配列で、つまずいた点


文字列と配列で、文字を表示する処理です。

#include<stdio.h>

void main() {
	/*
	配列の初期化
	*/
	char t[30];//char型の変数

	/*
	文字の入力
	*/
	printf("文字を入力:");
	scanf_s("%30s", t, 30);

	/*
	入力した文字の表示
	*/
	printf("¥n");
	printf("%s¥n", t);
}


char型の配列変数tを宣言します。
配列のサイズは30です。

#include<stdio.h>

void main() {
	/*
	配列の初期化
	*/
	char t[30];//char型の変数


scanf_sで文字入力を行います。

	/*
	文字の入力
	*/
	printf("文字を入力:");
	scanf_s("%30s", t, 30);


入力した文字を表示します。

	/*
	入力した文字の表示
	*/
	printf("¥n");
	printf("%s¥n", t);
}


実行結果は以下のようになります。
MyNameIsDANTEと入力してみました。
f:id:Free_Gamer:20210317223719p:plain


ちなみにscanf_sの部分を以下のように変えて実行すると・・・

	/*
	文字の入力
	*/
	printf("文字を入力:");
	scanf_s("%30s", t);


以下のようにエラーが出ます。
f:id:Free_Gamer:20210317224733p:plain


tの後ろに、配列のサイズを入れてないとエラーが出てしまうようです。
scanf_s("%30",t)ではなく、scanf_s("%30s",t,30)とすればエラーが出ません。

scanf_sでの注意点は、以下のサイトを見てみるといいです。
qiita.com


終わりー


それではまたー^^ノシ

ループで、指定した数、☆を表示する

ループを使って、指定した数、☆を表示する方法を紹介します。

#include<stdio.h>

void main() {
	/*
	変数の宣言
	*/
	int i, j;

	while (1) {
		/*
		数値を入力
		*/
		printf("最小値を入力:");
		scanf_s("%d", &i);
		printf("最大値を入力:");
		scanf_s("%d", &j);

		/*
		最小値が最大値以下かを判定
		*/
		if (i <= j) {
			/*
			☆を指定した数表示
			*/
			while (i <= j) {
				printf("☆");
				i++;
			}
			printf("¥n¥n");
		/*
		ループから抜ける
		*/
		}
		else {
			printf("終了¥n");
			printf("¥n");
			break;
		}
	}
}


変数の宣言。

#include<stdio.h>

void main() {
	/*
	変数の宣言
	*/
	int i, j;


ループの最小値と最大値を入力します。

	while (1) {
		/*
		数値を入力
		*/
		printf("最小値を入力:");
		scanf_s("%d", &i);
		printf("最大値を入力:");
		scanf_s("%d", &j);


ifで、最小値が最大値以下かを判定します。
Trueの場合、Whileループで、指定した数、☆を表示します。
Falseの場合、breakでループから抜けます。

		/*
		最小値が最大値以下かを判定
		*/
		if (i <= j) {
			/*
			☆を指定した数表示
			*/
			while (i <= j) {
				printf("☆");
				i++;
			}
			printf("¥n¥n");
		/*
		ループから抜ける
		*/
		}
		else {
			printf("終了¥n");
			printf("¥n");
			break;
		}
	}
}


実行すると、以下のようになります。
f:id:Free_Gamer:20210316080102p:plain
最小値を1、最大値を5にしてEnterを押すと、星が5つ表示されます。

最小値を、最大値より大きくすると・・・
f:id:Free_Gamer:20210316080309p:plain
終了と表示され、ループから抜けます。


おわりー


それではまたー^^ノシ

変数の型の変換

今回は、変数の型を変換する方法を紹介します。
整数の値を実数の値(小数点含める値)に、実数の値を整数の値に変換する方法です。

#include<stdio.h>

void main() {
	/*
	変数の初期化
	*/
	int a1, b1;
	double a2, b2;
	a1 = 5;
	a2 = 3.9;
	
	/*
	キャストして代入
	*/
	b1 = (int)a2;
	b2 = (double)a1;

	printf("a2の値(%f)をintに変換:%d¥n", a2,b1);
	printf("a1の値(%d)をdoubleに変換:%f¥n", a1, b2);
}


変数の初期化を行います。
a1(整数)、a2(実数)に値を代入しています。

#include<stdio.h>

void main() {
	/*
	変数の初期化
	*/
	int a1, b1;
	double a2, b2;
	a1 = 5;
	a2 = 3.9;


整数型の変数b1に実数型の変数a2の値をintに変換して代入
実数型の変数b2に整数型の変数a1の値をdoubleに変換して代入します。
このような型の変換をキャストと言います。
intに変換したい場合は(int)
doubleに変換したい場合(double)と記述します。

        /*
	キャストして代入
	*/
	b1 = (int)a2;
	b2 = (double)a1;

	printf("a2の値(%f)をintに変換:%d¥n", a2,b1);
	printf("a1の値(%d)をdoubleに変換:%f¥n", a1, b2);
}


実行すると以下のようになります。
a2の値3.9が、int型の値に変換されて小数点以下が切り捨てられています。
a1の値5が、double型の値に変換されて小数点以下の数値がついています。
f:id:Free_Gamer:20210313081721p:plain


おわりー

それではまた^^ノシ

変数を用いた文字の表示

変数を用いた文字の表示方法を紹介します。
僕の誕生日を表示してみます。

#include<stdio.h>

void main() {
	/*
	変数の宣言と初期化
	*/
	int y, m, d;
	y = 1995;//YEAR(年)
	m = 8;//MONTH(月)
	d = 28;//DAY(日)

	/*
	変数を用いた文字の表示
	*/
	printf("俺の誕生日は、%d%d%d日です!¥n", y, m, d);
}


変数の宣言と初期化です。
int y,m,dで、y、m、ⅾという名の変数を宣言しています。
宣言した変数に値を入れることを、代入と言います。
変数を宣言した時に行う代入を、初期化と言います。

#include<stdio.h>

void main() {
	/*
	変数の宣言と初期化
	*/
	int y, m, d;
	y = 1995;//YEAR(年)
	m = 8;//MONTH(月)
	d = 28;//DAY(日)


文字を表示します。

        /*
	変数を用いた文字の表示
	*/
	printf("俺の誕生日は、%d%d%d日です!¥n", y, m, d);
}


これで実行するとこうなります。
f:id:Free_Gamer:20210312211200p:plain


~まとめ~
代入・・・変数に値を入れること。
初期化・・・変数宣言時、最初に行う代入の事。


おわりー


それではまたー^^ノシ

配列変数の宣言と初期化を同時に行う

配列の宣言と初期化を同時に行う方法を紹介します。

#include<stdio.h>

void main() {
	/*
	変数の宣言と初期化
	・配列の宣言と初期化
	・ループ回数
	*/
	int n[] = { 5,4,3,2,1 };
	int i;

	/*
	ループ処理
	*/
	for (i = 0; i < 5; i++) {
		printf("n[%d]=%d ", i, n[i]);//配列の値を表示
	}
	printf("¥n");
}


以下の記事では配列変数の宣言と初期化を別々に行っていました。
free-gamer.hateblo.jp
ですが、宣言と初期化を同時に行うことが出来ます。
そうする事で、コードの記述が更に短くなり、見やすくなるかと思います。

#include<stdio.h>

void main() {
	/*
	変数の宣言と初期化
	・配列の宣言と初期化
	・ループ回数
	*/
	int n[] = { 5,4,3,2,1 };
	int i;

[]の横にある{}の中が、配列の要素です。
この場合、{5,4,3,2,1}は
ⅾ[0]=5;
ⅾ[1]=4;
d[2]=3;
d[3]=2;
d[4]=1;
という意味になります。


ループ処理を行います。

        /*
	ループ処理
	*/
	for (i = 0; i < 5; i++) {
		printf("n[%d]=%d ", i, n[i]);//配列の値を表示
	}
	printf("¥n");
}


実行すると、このようになります。
f:id:Free_Gamer:20210308094739p:plain

終わりー
それではまたー^^ノシ

配列とForループを使った計算

配列とForループを使って
合計値と平均値を求める計算を紹介します。

#include<stdio.h>

void main() {
	/*
	変数の宣言
	・配列
	・合計値、平均値
	・ループ回数
	*/
	double d[3];//[]内は、配列のサイズ
	double sum, avg;//合計値、平均値
	int i;//ループ回数値
	
	/*
	配列に値を代入
	*/
	d[0] = 1.65;
	d[1] = 3.24;
	d[2] = 0.9;
	
	/*
	sumの初期化
	*/
	sum = 0.0;
	
	/*
	ループ処理
	*/
	for (i = 0; i < 3; i++) {
		printf("%f¥n", d[i]);//配列の値を表示
		sum += d[i];
	}
	
	/*
	スペース
	*/
	printf("¥n");
	
	/*
	平均値の計算
	*/
	avg = sum / 3.0;
	
	/*
	合計値と平均値の表示
	*/
	printf("合計値:%f¥n", sum);
	printf("平均値:%f¥n", avg);
}


各変数の宣言。
配列変数の[]内の数字は添字(そえじ)と言います。
配列のサイズを表しています。
[3]になっているので、ⅾは3つの値を格納できます。

#include<stdio.h>

void main() {
	/*
	変数の宣言
	・配列
	・合計値、平均値
	・ループ回数
	*/
	double d[3];//[]内は、配列のサイズ
	double sum, avg;//合計値、平均値
	int i;//ループ回数値


配列に値を代入。

        /*
	配列に値を代入
	*/
	d[0] = 1.65;
	d[1] = 3.24;
	d[2] = 0.9;


合計値を示す変数sumの初期化。

        /*
	sumの初期化
	*/
	sum = 0.0;  


ループ処理。
3回ループを行います。
配列変数ⅾのサイズにiを割り当てています。
配列の値を表示後、sumに配列の値を加算し代入。
ループ内では、
ループ1回目・・・d[0]→1.65

sum(0)+=1.65

ループ2回目・・・ⅾ[1]→3.24

sum(1.65)+=3.24

ループ3回目・・・d[2]→0.9

sum(4.89)+=0.9

        /*
	ループ処理
	*/
	for (i = 0; i < 3; i++) {
		printf("%f¥n", d[i]);//配列の値を表示
		sum += d[i];
	}


平均値の計算。
合計値の変数sumを3で割った値を、avgに代入。

        /*
	スペース
	*/
	printf("¥n");
	
	/*
	平均値の計算
	*/
	avg = sum / 3.0;


合計値と平均値の表示。

        /*
	合計値と平均値の表示
	*/
	printf("合計値:%f¥n", sum);
	printf("平均値:%f¥n", avg);
}


実行すると以下のようになります。
f:id:Free_Gamer:20210307184935p:plain


終わりー
それではまたー^^ノシ