構造体型の配列の簡単な初期化法と格納した数値データを効率よくprintf出力表示する方法について考察してみます   

アレサ

「構造体型の配列宣言を行い


複数(今の場合2つ)の構造体変数のメンバ変数に


格納されている数値データを

構造体型の配列に格納することができました。」



ソーラー 「やった、アレサ 


ようやく理解できた。


さきほどのエピソードタイトル



格納した数値データを効率よくprintf表示する 

構造体型の配列宣言を行い 構造体の配列を作製して

複数の構造体変数のメンバ変数に格納された数値を

構造体型の配列に格納する方法




意味fm明だったから あせったよ



アレサ「ソーラーさん、まだまだこれからです。(*´▽`*)



先程のプログラム⇩は


#include <stdio.h>


typedef struct Cube{

int no;

float tate;

float yoko;

float takasa;

}Cube;


int main(void)

{


Cube str[2];


str[0].no=1;

str[0].tate=2.0;

str[0].yoko=3.0;

str[0].takasa=4.0;

str[1].no=2;

str[1].tate=4.0;

str[1].yoko=5.0;

str[1].takasa=6.0;


printf("%d\n" ,str[0].no);

printf("%f\n" ,str[0].tate);

printf("%f\n" ,str[0].yoko);

printf("%f\n" ,str[0].takasa);

printf("%d\n" ,str[1].no);

printf("%f\n" ,str[1].tate);

printf("%f\n" ,str[1].yoko);

printf("%f\n" ,str[1].takasa);


return 0;

}

コンパイル結果

1

2.000000

3.000000

4.000000

2

4.000000

5.000000

6.000000



           🍊for文を用いて🍊


#include <stdio.h>


typedef struct Cube{

int no;

float tate;

float yoko;

float takasa;

}Cube;


int main(void)

{


Cube str[2];


str[0].no=1;

str[0].tate=2.0;

str[0].yoko=3.0;

str[0].takasa=4.0;

str[1].no=2;

str[1].tate=4.0;

str[1].yoko=5.0;

str[1].takasa=6.0;

int i;

for(i=0;i<2;i++){

printf("%d\n" ,str[i].no);

printf("%f\n" ,str[i].tate);

printf("%f\n" ,str[i].yoko);

printf("%f\n" ,str[i].takasa);

/*ここの部分ですね

for文を用いてprintf表示の命令文の簡略化に成功しました。*/


}

return 0;

}

コンパイル結果

1

2.000000

3.000000

4.000000

2

4.000000

5.000000

6.000000



      🍓printf出力表示の命令文を簡略化することができました 🍓


ソーラー「


str[0].no=1;

str[0].tate=2.0;

str[0].yoko=3.0;

str[0].takasa=4.0;

str[1].no=2;

str[1].tate=4.0;

str[1].yoko=5.0;

str[1].takasa=6.0;


この部分は簡略化できないかな?」


アレサ「確かに


str[0].no=1;

str[0].tate=2.0;

str[0].yoko=3.0;

str[0].takasa=4.0;

str[1].no=2;

str[1].tate=4.0;

str[1].yoko=5.0;

str[1].takasa=6.0;


のように

立方体cube1の数値データ


NO 1

縦 2.0

横 3.0

高さ 4.0


立方体cube2の数値データ

NO 2

縦 4.0

横 5.0

高さ 6.0を格納していくのは

手間ですね


そうなんです。簡略化表記する方法はあるのです。


Cube str[2];


str[0].no=1;

str[0].tate=2.0;

str[0].yoko=3.0;

str[0].takasa=4.0;

str[1].no=2;

str[1].tate=4.0;

str[1].yoko=5.0;

str[1].takasa=6.0;


の部分を


簡略化して


Cube str[2]={{1,2.0,3.0,4.0},{2,4.0,5.0,6.0}};

と表記することができます。


Cube str[2]により


生成される

配列変数

str[0].no

str[0].tate

str[0].yoko

str[0].takasa

str[1].no

str[1].tate

str[1].yoko

str[1].takasa


にデータを格納することができます。               

そして

{1,2.0,3.0,4.0}は

str[0]のメンバ変数


str[0].no

str[0].tate

str[0].yoko

str[0].takasa


に格納され


{2,4.0,5.0,6.0}は

str[1]のメンバ変数

str[1].no

str[1].tate

str[1].yoko

str[1].takasa

に格納されます。


さらに


構造体型の配列


Cube str[2]の[]のなかの要素数2は省略して


Cube str[]={{1,2.0,3.0,4.0},{2,4.0,5.0,6.0}};


と表記することができます。

{{1,2.0,3.0,4.0},{2,4.0,5.0,6.0}}のなかの

{1,2.0,3.0,4.0}

{2,4.0,5.0,6.0}

にあわせて

str[]の要素数は2と設定されます。


この表記法をもちいてプログラムをシンプルに書き換えると


#include <stdio.h>


typedef struct Cube{

int no;

float tate;

float yoko;

float takasa;

}Cube;


int main(void)

{


Cube str[]={{1,2.0,3.0,4.0},{2,4.0,5.0,6.0}};

int i;

for(i=0;i<2;i++){

printf("%d\n" ,str[i].no);

printf("%f\n" ,str[i].tate);

printf("%f\n" ,str[i].yoko);

printf("%f\n" ,str[i].takasa);


}

return 0;

}

コンパイル結果

1

2.000000

3.000000

4.000000

2

4.000000

5.000000

6.000000


ソーラー 「めっちゃ😺、プログラムが短くなった。」


アレサ「ほんとうですね。


この構造体型の配列に数値データを格納する方法は


大変重宝するとおもわれますの。


では


再びfor文の部分にもどります。


格納した全てのデータを

int i;

for(i=0;i<2;i++){

printf("%d\n" ,str[i].no);

printf("%f\n" ,str[i].tate);

printf("%f\n" ,str[i].yoko);

printf("%f\n" ,str[i].takasa);


この7行で表示できるのは


大変効率がよいのです。


立方体が


cube1

cube2

cube3

.

.

.

.

.

cube1000000


と1000000個あっても

全ての立方体の


NO

高さ

のデータを表示するのに


次の命令文 

int i;

for(i=0;i<100000;i++){

printf("%d\n" ,str[i].no);

printf("%f\n" ,str[i].tate);

printf("%f\n" ,str[i].yoko);

printf("%f\n" ,str[i].takasa);


7行で済んでしまうのです。



          🍒このように


     🍓簡単に多種類の数値データを格納し🍓


    🍊簡単に格納された数値データをprintf表示できる🍊


これこそが さきのエピソードでものべましたように


(*´▽`*)😊(*´▽`*)😊(*´▽`*)😊(*´▽`*)😊(*´▽`*)😊

構造体型の配列宣言を行い

構造体の配列を作製して

複数の構造体変数のメンバ変数に格納された数値を

構造体型の配列に格納する  

(*´▽`*)😊(*´▽`*)😊(*´▽`*)😊(*´▽`*)😊(*´▽`*)😊


理由なのです。🍒



構造体の配列をつかえば


コンピュータに格納された


市の 'すべての住人' の生年月日などの数値データも


わずかな命令文ですべて表示することができます。」







  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます