C言語超入門⑥ 配列と文字列を使おう
複数の値をまとめる配列、添字、文字列、fgets、strlenの基本を短いコードで学びます。
第6回では、複数の値をまとめて扱う配列と、C言語での文字列の扱い方を学びます。
この回でできるようになること
- 配列を作って値を取り出す
- 繰り返しですべての要素を処理する
- charの配列で文字列を扱う
- fgetsで1行の入力を受け取る
配列を作る
同じ型の値を順番に並べたものが配列です。
int scores[5] = {72, 88, 95, 64, 81};
角かっこの5は、保存できる値の数です。配列の各場所には、0から始まる番号が付いています。この番号を添字と呼びます。
printf("最初の点数: %d\n", scores[0]);
printf("3番目の点数: %d\n", scores[2]);
5個の配列で使える添字は0から4までです。範囲の外へアクセスすると、正しく動かない原因になります。
for文で配列を読む
int scores[5] = {72, 88, 95, 64, 81};
int total = 0;
for (int i = 0; i < 5; i++) {
total += scores[i];
}
printf("合計: %d\n", total);
printf("平均: %.1f\n", total / 5.0);
total += scores[i]は、total = total + scores[i]を短く書いたものです。5.0で割ることで、小数の平均を求めています。
C言語の文字列
C言語に文字列専用の型はありません。文字を保存するcharの配列を使います。
char name[] = "Sora";
printf("%sさん、こんにちは\n", name);
%sは文字列を表示する書式指定子です。文字列の最後には、終わりを示す特殊な文字\0が自動で入ります。
fgetsで1行を入力する
#include <stdio.h>
int main(void) {
char name[50];
printf("名前を入力してください: ");
fgets(name, sizeof(name), stdin);
printf("こんにちは、%s", name);
return 0;
}
sizeof(name)は、nameへ入れられる大きさを調べています。fgetsは空白を含む1行を受け取れます。
入力の最後にある改行もnameへ入るため、この例のprintfには\nを付けていません。
文字列の長さを調べる
string.hを読み込むと、strlen関数を使えます。
#include <stdio.h>
#include <string.h>
int main(void) {
char word[] = "code";
printf("文字数: %zu\n", strlen(word));
return 0;
}
練習してみよう
5個の整数を配列へ入れ、最大の値をfor文で探してみましょう。
模範解答
#include <stdio.h>
int main(void) {
int numbers[5] = {12, 7, 24, 9, 18};
int maximum = numbers[0];
for (int i = 1; i < 5; i++) {
if (numbers[i] > maximum) {
maximum = numbers[i];
}
}
printf("最大値は%dです。\n", maximum);
return 0;
}
解説
最初の値を仮の最大値にして、2番目以降と順番に比べます。より大きい値が見つかったときだけmaximumを更新します。maximumを0から始めると、すべて負の数の配列で正しく判定できないため、最初の要素を使っています。
この回のまとめ
- 配列には同じ型の値を複数保存できる
- 配列の添字は0から始まる
- C言語の文字列はcharの配列
- fgetsは空白を含む1行を受け取れる