C言語
前回、C言語での配列を学びました。
配列が作れるようになると次にやりたくなるのは、その配列から一つずつ要素を取得するということ。
つまりは繰り返し文を学びたくなります。
Pythonでもそうですが、この繰り返し文が使えるようになると何度も同じ処理をすることができるようになるため、一気にプログラムらしくなってきます。
Pythonの場合は繰り返し文としては繰り返し回数を指定して繰り返す「for文」と繰り返し回数を指定せずに繰り返す「while文」があります。
色々みているとどうやらC言語にも「for文」と「while文」があるようです。
今回はPythonでよく使っている「for文」を学んでみます。
Pythonでのfor文
まずはPythonでのfor文を見ていきましょう。
こんな感じでリストの要素を一つずつ取得するというのが基本でしょうか。
num_list = [1, 2, 3, 4, 5]
for n in num_list:
print(n)
実行結果
1
2
3
4
5
最初の例では数字(int型)でしたが、もちろん文字列(str型)のリストでも同じようにして一つずつ取得することができます。
str_list = ['str1', 'str2', 'str3', 'str4', 'str5']
for s in str_list:
print(s)
実行結果
str1
str2
str3
str4
str5
またif文と組み合わせて、途中でスキップ(continue)したり、途中でfor文の繰り返しから抜ける(break)ことも可能です。
num_list = [1, 2, 3, 4, 5]
for n in num_list:
if n == 2:
continue
elif n == 4:
print('end')
break
else:
print(n)
実行結果
1
3
end
この場合、n=2の時に「continue」、つまり処理をスキップしています。
そしてn=4の時にendをprint関数で表示したのち、「break」でfor文の繰り返しから抜け、処理を終えています。
つまり最後の5は繰り返しとしての処理がされていないということです。
Pythonでのfor文はこんな感じでしょうか。
C言語でのfor文の基本形
それではC言語でのfor文を見てみましょう。
基本としては「for(初期値; 継続条件; 値の変化){処理}」です。
なかなかPythonをやっている側からすると理解が難しいので、とりあえず動かしてみましょう。
#include <stdio.h>
int main(void)
{
int i;
for(i = 0; i < 5; i++){
printf("%d\n", i);
}
}
実行結果
0
1
2
3
4
まずfor文に注目します。
「for(i = 0; i < 5; i++)」なので、初期値が「i=0」、継続条件が「i < 5」、値の変化が「i++」です。
つまり「 i が0から始まって、5より小さい間は繰り返す。一回繰り返す毎に i に1を足す」ということです。
このように「数値 i」を使うため、プログラムの最初の方に「int i;」で i を定義しています。
ちなみに継続条件や値の変化を間違えると永遠と繰り返されてしまうので注意です。
Python使いからするとここで一つ疑問が浮かび上がります。
このように初期値、継続条件、値の変化を最初に指定しなければいけないということは、必ず数値(int型なのかfloat型なのかは別として)を使わなければいけないだろうということ。
先ほどPythonでやったようにリストの要素を”直接”一つずつ取ってくるということはできないのだと考えられます(まだ学び始めたばかりなので自信はないですが…)。
リストの要素の取得
ではどうやってリストの要素を一つずつ取得するか。
リストのインデックスは0から要素の数-1までなので、そのインデックス(つまりは数値)をfor文で繰り返す、そしてそのインデックスを使ってリストから要素を一つずつ取得するということをします。
つまりこんな感じ。
#include <stdio.h>
int main(void)
{
int num_list[5] = {10, 20, 30, 40, 50};
int i;
for(i = 0; i < sizeof(num_list)/sizeof(num_list[0]); i++){
printf("%d %d\n",i, num_list[i]);
}
}
実行結果
0 10
1 20
2 30
3 40
4 50
実行結果としては、最初にインデックス数を次にリストから取得した値を表示してみました。
この方法を使えばもちろん文字列(char型)のリストでも要素を一つずつ取得することができます。
#include <stdio.h>
int main(void)
{
char str_list[5][5] = {"str1", "str2", "str3", "str4", "str5"};
int i;
for(i = 0; i < sizeof(str_list)/sizeof(str_list[0]); i++){
printf("%d %s\n",i, str_list[i]);
}
}
実行結果
0 str1
1 str2
2 str3
3 str4
4 str5
ちなみに説明を飛ばしましたが、要素数を取得するのに「sizeof(str_list)/sizeof(str_list[0])」としていますが、これはまた別の機会に解説したいと思います。
今回は要素数を取得するには「sizeof(str_list)/sizeof(str_list[0])」とするんだくらいに思っていてください。
C言語でのcontinue、break
それではC言語でのcontinue、breakを見てみましょう。
#include <stdio.h>
int main(void)
{
int i;
for(i = 0; i < 5; i++){
if(i == 1){
continue;
}
else if(i == 3){
printf("end");
break;
}
else{
printf("%d\n", i);
}
}
}
実行結果
0
2
end
C言語にもcontinue、breakはそのままの形であり、使い方もPythonと同じです。
ここではC言語でのif文が出てきていますが、こちらも解説はまたの機会にしましょう。
これでC言語でのfor文の基本が大体分かりました。
次回は同じく繰り返し文である「while文」を勉強していきましょう。
ではでは今回はこんな感じで。
コメント