数値データ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のメンバ変数
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のメンバ変数
subetenosuutiData.a
subetenosuutiData.b
subetenosuutiData.c
subetenosuutiData.d
subetenosuutiData.e
subetenosuutiData.f
subetenosuutiData.g
subetenosuutiData.h
subetenosuutiData.i
subetenosuutiData.j
を
ある変数alphabetをもちいて
subetenosuutiData.[alphabet]を用い
alphabetにaからiまで格納してかわりとする
つまり
int alphabet;
for(alphabet=a;alphabet<=i;alphabet++){
printf("%d\n",subetenosuutiData.[alphabet]);
}
を実行するということは
ちょっとできないですね。」
ソーラー「構造体では、メンバ変数名が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表示する出力表示すること
ができるのですの」
🍎
構造体のメンバ変数に格納された数値データを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];
をおこなったとしますと・・・
(EAZY IDECの場合)
配列変数
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型配列は無効になってしまいます。 ご注意ください。」
Visual Studioの場合は同じ配列名をもちいて
複数の配列宣言をおこなうことはできません
ですので
ビルドエラーが表示されます
構造体型の配列さん
「この場合は
構造体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文をつかってまとめて簡単表示はできません。」
アレサ「はいっ
構造体型の配列さんは まだ 本来の性能を発揮していません😊」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます