「配列の宣言の仕方について知りたい!」
「配列の初期化について学びたい!」
そんな方に向けて、イメージ図を使いながら簡単にわかりやすくまとめました!
大学や本で学んだことを理解しやすいように、プログラムを紹介しつつ解説しています!
配列とは?
まずは実行
まずは以下のプログラムを実行してみましょう。
#include<stdio.h>
int main (void)
{
int a[10]={12,7,11,12,-3,2,102,19,6,-7}; /*配列の中の数値*/
int i;
for(i=0;i<10;i++){
printf("%d番目の内容は%dです\n",9-i,a[9-i]); /*逆に表示していく*/
}
return 0;
}
このプログラムは、配列の内容を添字番号の大きいものから順に印字するものです。
配列の宣言の仕方は、以下のように書きます。
要素の型 変数名 [要素数];
先ほどのプログラムで言うと、
要素の型は、「int」
変数名は、「a」
要素数は、「10」
となります。
配列を使うメリット
先ほどのプログラムを実行してわかったように、これまで変数を一つずつ宣言していた時と比べると、コードを書く量が明らかに減っていて、とても見やすくなっていると思います。
配列では同じ変数を扱う要素を集めて使います。
そのため変数名を一つずつ決める必要がなく、扱うときには変数名[指定するものが入っている添字]を書くだけで、中に入っている内容を使えます。
例えば、添字が二番目の値を使いたい場合は、a[2]と書くだけで良いのです。
また、配列はwhile,for文などの繰り返し処理と相性が良いです。
先ほどのプログラムでも、以下のように書くだけでそれぞれの内容を表示させることができました。
for(i=0;i<10;i++){
printf("%d番目の内容は%dです\n",9-i,a[9-i]); /*逆に表示していく*/
}
このように配列の指定する添字の値を変えていくことで、表示させる値を簡単に変えることができるのも強みとなっています。
配列の初期化(代入のやり方)
配列の初期化をする際には基本的に2つの方法があります。
1つ目は、{}を使う方法です。
先ほどのプログラムではこの方法で行っていました。
要素の型 変数名 [要素数]={添字0の値,添字1の値,添字2の値};
2つ目の方法は、while,for文の繰り返し処理を使う方法です。
要素の型 変数名;
n=要素数;
for(I=0:i<n:i++){
変数名 [i]=iに入れる値;
}
問題(発展)
今回学んだことを活かして以下の問題を解いてみましょう。
「キーボードから正の整数を複数個読み込み、0が入力されると小さい順に表示するプログラム」
答えは以下になります。
#include <stdio.h>
#define MAX 100
int main(void) {
int a[MAX];
int k,t,i,s=0;
printf("正整数:"); scanf("%d",&t);/*数字を読みこむ*/
a[0]=t;
while(t>0 || t<0){ /*読み込んだ数字が0以外のとき繰り返す*/
printf("正整数:"); scanf("%d",&t);
if(t==0){
a[s+1]=0;
break;
}
for(i=s;i>=0;i--){ /*これまでに読み込んだ小さいものから順に比較していき、入力した数字がそれまでに読み込んだ数字より小さい場合そこまでの数字を一つずつずらして間に入れる*/
if(a[i]>t){
for(k=s;k>i;k--){
a[k+1]=a[k];
}
a[i+1]=t;
break;
}
}
if(a[0]<t){/*これまでに入力したものより大きい場合今までのものを一つずつずらす*/
for(k=s+1;k>=0;k--){
a[k]=a[k-1];
}
a[0]=t;
}
s++;
}
printf("入力された整数は小さい順に"); /*入力された数字を表示する*/
for(t=(s+1);t>=0;t--){
printf(" %d,",a[t]);
}
printf("です\n");
return 0;
}
発展問題のような難しいものとなっていますので、作れたら凄いくらいに思ってください。
もちろん書き方は人によって変わるので、似たような結果になれば大丈夫です!
まとめ
今回は配列(1次元)について、メリットや初期化の方法を学びました!
配列は、同じ型を扱う変数をまとめることでたくさんの要素を簡単に扱うことができます。
次回は、配列の多次元配列について解説しますので、良ければ以下もご覧ください!
また、1次元配列とポインタを使ったプログラムとして整数を並び替えるものを紹介しています!
こちらもぜひ見ていってください。