二次元配列
二次元配列について解説します。
二次元配列とは、表計算のような処理を行いたい場合に便利なようです。
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"); } }
実行すると、以下のようになります。
イメージ的にはこんな感じです。
終わりー
それではまた^^ノシ
文字列と配列で、つまずいた点
文字列と配列で、文字を表示する処理です。
#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と入力してみました。
ちなみにscanf_sの部分を以下のように変えて実行すると・・・
/* 文字の入力 */ printf("文字を入力:"); scanf_s("%30s", t);
以下のようにエラーが出ます。
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; } } }
実行すると、以下のようになります。
最小値を1、最大値を5にしてEnterを押すと、星が5つ表示されます。
最小値を、最大値より大きくすると・・・
終了と表示され、ループから抜けます。
おわりー
それではまたー^^ノシ
変数の型の変換
今回は、変数の型を変換する方法を紹介します。
整数の値を実数の値(小数点含める値)に、実数の値を整数の値に変換する方法です。
#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型の値に変換されて小数点以下の数値がついています。
おわりー
それではまた^^ノシ
変数を用いた文字の表示
変数を用いた文字の表示方法を紹介します。
僕の誕生日を表示してみます。
#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); }
これで実行するとこうなります。
~まとめ~
代入・・・変数に値を入れること。
初期化・・・変数宣言時、最初に行う代入の事。
おわりー
それではまたー^^ノシ
配列変数の宣言と初期化を同時に行う
配列の宣言と初期化を同時に行う方法を紹介します。
#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"); }
実行すると、このようになります。
終わりー
それではまたー^^ノシ
配列と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); }
実行すると以下のようになります。
終わりー
それではまたー^^ノシ