数値1から10を格納し、数値1から10をprintf出力する場合 

アレサ 「さあ、順調な滑り出しで


数値1を格納し、printf出力表示した


素敵な4つの


       データ(数値、文字)のいれものである


変数

配列

構造体

構造体型の配列  

さん



今日のお題は・・・・・


      

   🍊数値1から10を格納しその数値1から10を🍊



   🍊コマンドプロンプト画面にprintf出力表示🍊



となります。



配列「さあ、たくさんの数値、こい、こい」



アレサ「配列さん、張り切っておられますね


それでは 


1人目の方 変数さん、お願いします。」


変数「それでは、いきま~す。」


#include <stdio.h>


int main(void)

{

int a=1;

int b=2;

int c=3;

int d=4;

int e=5;

int f=6;

int g=7;

int h=8;

int i=9;

int j=10;

printf("%d\n",a);

printf("%d\n",b);

printf("%d\n",c);

printf("%d\n",d);

printf("%d\n",e);

printf("%d\n",f);

printf("%d\n",g);

printf("%d\n",h);

printf("%d\n",i);

printf("%d\n",j);

return 0;

}


コンパイル結果

1

2

3

4

5

6

7

8

9

10


変数「ご利用いただきありがとう。\(^o^)/」


アレサ「変数さん、確実に数値1から10を格納、printf表示されました。😊」


アレサ「お次は


配列さ~ん、 お願いします。」



配列 「こい~~~こい~~~ 数値、数値」



#include <stdio.h>


int main(void)

{

int str[]={1,2,3,4,5,6,7,8,9,10};

int i=0;

for(i=0;i<10;i++)

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

return 0;

}


コンパイル結果

1

2

3

4

5

6

7

8

9

10



アレサ「さすがに


配列さんは

たくさんの数値を格納しての


printf出力表示は得意ですね


str[]の配列宣言、初期化


int str[]={1,2,3,4,5,6,7,8,9,10};


も簡単😊


printf表示もfor文を使って

int i=0;

for(i=0;i<10;i++)

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

簡単シンプルな命令文で記述されています。



配列「もっと 数値 こいこい~~~」



アレサ「配列さん(*^^*) お見事です


では、次の方


構造体さん お願いします。」


構造体「数値1から10を格納表示します


ぱくぱくっ


この 🍓パフェ おいしい」」


アレサ「まだまだたくさんございますの」


構造体「搾りたてくだものジュースください。」


アレサ「はい、です。どうぞ」


構造体「うぷぷ 搾りたてくだものジュース


飲めてうれしいなあ。


はっ いか~~~~~ん


ここからは真面目に


しきりなおしで


ちらし寿司もお願いします。」


アレサ 「手巻き寿司もいかがですか


押し寿司もございます。」


構造体 「こんなに格納できるなんて・・ここは天国なのお」


アレサ 「そんなに よろこんでいただけて 私もうれしいです・・の」


構造体 「それでは


数値1から10を格納して

コマンドプロンプト画面に printf出力表示します


#include <stdio.h>


typedef struct SubetenosuutiData{

int a;

int b;

int c;

int d;

int e;

int f;

int g;

int h;

int i;

int j;

}SubetenosuutiData;


int main(void){

SubetenosuutiData subetenosuutiData;

subetenosuutiData.a=1;

subetenosuutiData.b=2;

subetenosuutiData.c=3;

subetenosuutiData.d=4;

subetenosuutiData.e=5;

subetenosuutiData.f=6;

subetenosuutiData.g=7;

subetenosuutiData.h=8;

subetenosuutiData.i=9;

subetenosuutiData.j=10;


/*簡略化表現は

SubetenosuutiData subetenosuutiData={1,2,3,4,5,6,7,8,9,10};となります*/


printf ("%d\n",subetenosuutiData.a);

printf ("%d\n",subetenosuutiData.b);

printf ("%d\n",subetenosuutiData.c);

printf ("%d\n",subetenosuutiData.d);

printf ("%d\n",subetenosuutiData.e);

printf ("%d\n",subetenosuutiData.f);

printf ("%d\n",subetenosuutiData.g);

printf ("%d\n",subetenosuutiData.h);

printf ("%d\n",subetenosuutiData.i);

printf ("%d\n",subetenosuutiData.j);

return 0;

}

コンパイル結果

1

2

3

4

5

6

7

8

9

10


ソーラー「今度は

構造体SubetenosuutiDataに

変数宣言

int a;

int b;

int c;

int d;

int e;

int f;

int g;

int h;

int i;

int j;

を取り込んできんだね



このように


構造体 SubetenosuutiDataを作製した後


subetenosuutiDataの構造体変数宣言


SubetenosuutiData subetenosuutiData;


を行い


構造体変数subetenosuutiDataのメンバ変数


subetenosuutiData.a

subetenosuutiData.b

subetenosuutiData.c

subetenosuutiData.d

subetenosuutiData.e

subetenosuutiData.f

subetenosuutiData.g

subetenosuutiData.h

subetenosuutiData.i

subetenosuutiData.j


を作製して


数値


1

2

3

4

5

6

7

8

9

10


を格納するというのが


構造体をつかって数値を格納するときの流れだね。」


アレサ「そして


構造体変数subetenosuutiDataのメンバ変数


subetenosuutiData.a

subetenosuutiData.b

subetenosuutiData.c

subetenosuutiData.d

subetenosuutiData.e

subetenosuutiData.f

subetenosuutiData.g

subetenosuutiData.h

subetenosuutiData.i

subetenosuutiData.j

に格納された数値をprintf出力表示する


には


今のプログラムのように


printf ("%d\n",subetenosuutiData.a);

printf ("%d\n",subetenosuutiData.b);

printf ("%d\n",subetenosuutiData.c);

printf ("%d\n",subetenosuutiData.d);

printf ("%d\n",subetenosuutiData.e);

printf ("%d\n",subetenosuutiData.f);

printf ("%d\n",subetenosuutiData.g);

printf ("%d\n",subetenosuutiData.h);

printf ("%d\n",subetenosuutiData.i);

printf ("%d\n",subetenosuutiData.j);

構造体変数subetenosuutiDataのメンバ変数を


ひとつずつprintf文の第2引数に記述するしかないのです。


この10個のprintf文を


for文をつかってまとめて簡単に記述することはできません。」


ソーラー「配列を使った場合は for文をもちいて


一括printf出力表示できたのだけど・・・」



アレサ

「さきほどの配列のprintf出力表示方法は


int i=0;

for(i=0;i<10;i++)

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

となっており


配列変数は

str[i]と表記されています。


このように

strの配列宣言によって生成された


配列変数は


ある変数(この場合i)をもちいたstr[i]


のiに数値1から10を代入することによって


表現することができています。


構造体変数subetenosuutiDataのメンバ変数

suuti.a

suuti.b

suuti.c

suuti.d

suuti.e

suuti.f

suuti.g

suuti.h

suuti.i

suuti.j

ある変数alphabetをもちいて


suuti.[alphabet]を用い


alphabetにaからiまで格納してかわりとする


ということは


ちょっとできないですね。」


ソーラー「構造体では、メンバ変数名がsubetenosuutiData.aなどの

       

     「文字」 で記述されているので


for文をつかうことはできないんだね。」


アレサ「いいかえると


      🍓「 配列宣言int str[10];を行い 」🍓


str[0]

str[1]

str[2]

str[3]

str[4]

str[5]

str[6]

str[7]

str[8]

str[9]

str[10]

のように

複数の配列変数を生成して


数値データを格納するという方法をとれば


これらの配列変数を


str[i]のように


変数iに数値を代入して表す


という方式をとることができるので


int i=0;

for(i=0;i<10;i++)

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


のように


for文をもちいて


変数iに代入される数値を変更しながら


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


を行うことができるのですの。


つまり for文をもちいて 簡単に命令文を記述し


数値データを表示すること


ができるのですの」


🍎

構造体のメンバ変数に格納された数値をprintf出力表示するときは

🍎



🍎

for文を用いてprintf文の命令文をまとめて簡略化はできないのですね。

🍎」




ソーラー 「な~るほど


配列宣言を行い


配列変数をつくって数値を格納するのは


for文をもちいて簡単にprintf表示できるというメリットがあるんだね。」



アレサ「では お次は構造体型の配列さん、お願いします」


構造体の配列さん

「int型の配列宣言


int str[3];


により


整数値をおさめるint型の配列変数

str[0]

str[1]

str[2]

がつくられぇぇぇぇぇぇ


float型の配列宣言


float str[3];


により


実数値をおさめるfloat 型の配列変数

str[0]

str[1]

str[2]

がつくられるぅぅぅぅぅぅ。


そして


「構造体型の配列変数をたくさんつくるのが僕なのだ。


どうだー


構造体 SubetenosuutiDataの配列宣言

SubetenosuutiData str[3];により


構造体型の数値のいれもの

str[0]

str[1]

str[2]

がつくられるのだー。」


ソーラー「おおぅ 斬新~(*´▽`*)」


アレサ「綺麗な説明の仕方ですね。」


ソーラー「さりげに


int型、float型、構造体 SubetenosuutiDataの配列変数が


全部


str[0]

str[1]

str[2]

であらわされてるよね


かわいらしいなあ。ここはチャームポイントだね。」


アレサ「このように同じ名前の配列変数

str[0]

str[1]

str[2]

が生成されるのは


int型の配列宣言 int str[3];


float型の配列宣言float str[3];


Suutinoiremono型の配列宣言Suutinoiremono str[3];


において


配列名を


すべてstrにしているからですの。


もしプログラム内で


1度 配列名str で


int型配列をつくったなら


次に


float型配列を作るときは 配列名をstr1などのように


変更してください

もし

同じ 配列名str で


int型配列宣言

int str[10]; 

を行った後

float型配列宣言

float str[10];

をおこなったとしますと・・・


配列変数

str[0]

str[1]

str[2]

str[3]

str[4]

str[5]

str[6]

str[7]

str[8]

str[9]

に格納された数値をprintf出力表示しようとして


int i=0;

for(i=0;i<10;i++)

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


をおこなった場合


float型配列の配列変数

str[0]

str[1]

str[2]

str[3]

str[4]

str[5]

str[6]

str[7]

str[8]

str[9]

に格納された値がprintf出力表示されることになります。


以前につくられた


int型配列は無効になってしまいます。 ご注意ください。」



構造体の配列さん

「この場合は


構造体SubetenosuutiData型の配列変数を1つつくりますよ~


#include <stdio.h>


typedef struct SubetenosuutiData{

int a;

int b;

int c;

int d;

int e;

int f;

int g;

int h;

int i;

int j;

}SubetenosuutiData ;


int main(void)

{


SubetenosuutiData str[1];


/*構造体型の配列宣言

SubetenosuutiData str[1];

を行い

配列変数

str[0]を作製しました。


そしてstr[0]のメンバ変数

str[0].a

str[0].b

str[0].c

str[0].d

str[0].e

str[0].f

str[0].g

str[0].h

str[0].i

str[0].j


に数値

1

2

3

4

5

6

7

8

9

10


を格納していきます*/



str[0].a=1;

str[0].b=2;

str[0].c=3;

str[0].d=4;

str[0].e=5;

str[0].f=6;

str[0].g=7;

str[0].h=8;

str[0].i=9;

str[0].j=10;


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

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

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

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

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

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

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

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

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

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


return 0;

}


コンパイル結果

1

2

3

4

5

6

7

8

9

10


アレサ「構造体型の配列さんは


構造体型の配列宣言


SubetenosuutiData str[1];


により


str[0]を1つ作りだし


str[0]のなかの


各メンバ変数

str[0].a

str[0].b

str[0].c

str[0].d

str[0].e

str[0].f

str[0].g

str[0].h

str[0].i

str[0].j


に丁寧に


数値を代入、ひとつずつprintf表示されたのですね。


このメンバ変数に数値を格納する方法を簡略化すれば


さらに次のようにプログラムは短くなります。


#include <stdio.h>


typedef struct SubetenosuutiData {

int a;

int b;

int c;

int d;

int e;

int f;

int g;

int h;

int i;

int j;

}SubetenosuutiData ;


int main(void)

{


SubetenosuutiData str[]={1,2,3,4,5,6,7,8,9,10};


/*さきほどより もっと簡単に


構造体型の配列宣言、初期化をおこない


配列変数str[0]のメンバ変数に数値を格納していきます*/



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

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

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

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

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

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

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

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

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

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


return 0;

}


ソーラー「構造体型の配列変数


str[0]を1つだけつくったんだ。


この場合も


そのあと


str[0]の各メンバ変数に数値を代入したのち、


その各メンバ変数に代入された数値を


コマンドプロンプト画面にprintf出力表示するには


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

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

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

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

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

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

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

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

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

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


と ひとつずつ printf文を記述するしかないんだよ~ん


for文をつかってまとめて簡単表示はできません。」


アレサ「はいっ


構造体型の配列さんは まだ 本来の性能を発揮していません😊」



  

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

作者を応援しよう!

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

応援したユーザー

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