p.128 配列の要素数
・C/C++/C#/Javaの配列は(基本的に)宣言において指定した要素数を変更できない ・よって、C言語の場合「多めに取っておく」のが基本 ・ただし、メモリの消費量の増大に注意
p.128 list0512.cpp & p.129 演習5-7&5-8
・自由参加課題とします
p.129 演習5-6 ヒント
①データ数の上限を大き目にとっておく(例:128)
②データ数の上限を要素数とする配列を定義
③データ数を入力し、その数の回数だけカウンタiを用いて下記を繰返す
・カウンタ+1と「番:」を表示(改行しない)
・配列[i]にコンソールから入力
④「{」を表示(改行しない)
⑤データ数の回数-1だけカウンタiを用いて下記を繰返す(つまり最後の要素の1個前まで)
・配列[i]と「,」を表示(改行しない)
⑥配列[データ数-1](つまり最後の要素)と「}」を表示して改行
作成例
//p.129 演習5-6
#include <stdio.h>
#define NUMBER 128 //要素数
int main(void)
{
int x[NUMBER]; //配列の宣言(※ x[num]とはできない)
int num; //データ数
printf("データ数:"); scanf("%d", &num);
for (int i = 0; i < num; i++) { //データ数だけ繰返す
printf("%d番:", i + 1); //添字を表示
scanf("%d", &x[i]); //要素x[i]に読み込む
}
putchar('{'); //「{」を表示
for (int i = 0; i < num - 1; i++) { //データ数-1だけ繰返す
printf("%d, ", x[i]);
}
printf("%d}\n", x[num - 1]); //最後の値と「}」を表示
return 0;
}
p.130 演習5-9 ヒント
・list0513.cppのアレンジ演習になっている ・ついでに、2つの配列の要素数をマクロNUMBERで与えるようにしよう ・そして「b[i] = a[i];」を「b[i] = a[NUMBER - i - 1];」とすれば良い
作成例
//p.129 演習5-9
#include <stdio.h>
#define NUMBER 5 //要素数
int main(void)
{
int a[NUMBER]; //コピー元の配列の宣言
int b[NUMBER]; //コピー先の配列の宣言
for (int i = 0; i < NUMBER; i++) { //要素数だけ繰返す
printf("a[%d]:", i); //添字を表示
scanf("%d", &a[i]); //コピー元の配列の要素に読み込む
}
for (int i = 0; i < NUMBER; i++) { //要素数だけ繰返す
b[i] = a[NUMBER - i - 1]; //逆順に代入
}
puts(" a b");
puts("---------");
for (int i = 0; i < NUMBER; i++) { //要素数だけ繰返す
printf("%4d%4d\n", a[i], b[i]);
}
return 0;
}
アレンジ演習:p.131 list0514.cpp
・配列aの全要素のうちa[0]以上である要素の値のみを配列bに代入するようにしよう
・ついでに、2つの配列の要素数をマクロNUMBERで与えるようにしよう
・また、繰返しとその内部の「{}」を省略しないようにしよう
作成例
//アレンジ演習 p.131 list0514.cpp
#include <stdio.h>
#define NUMBER 5 //要素数
int main(void)
{
int a[NUMBER]; //コピー元の配列の宣言
int b[NUMBER]; //コピー先の配列の宣言
for (int i = 0; i < NUMBER; i++) { //要素数だけ繰返す
printf("a[%d] : ", i); //添字を表示
scanf("%d", &a[i]); //コピー元の配列の要素に読み込む
}
int counter = 0; //コピーした要素数(カウンタ)
for (int i = 0; i < NUMBER; i++) { //要素数だけ繰返す
if (a[i] >= a[0]) { //先頭要素値以上?
b[counter++] = a[i]; //コピーしてからカウントアップ
}
}
for (int i = 0; i < counter; i++) { //コピーした要素数だけ繰返す
printf("b[%d] = %d\n", i, b[i]);
}
return 0;
}