第3-4回(10月16日,23日)

プログラミングⅡ
第3回
http://www.fit.ac.jp/~matsuki/lecture.html
今日の内容
• 前回の課題説明
• 配列
– 配列の宣言
– 配列要素
– 添字(そえじ)
– 配列の初期化
– マクロ
– 多次元配列
– 文字列と配列
前回の課題
• 10月9日の課題(No.4 – No.5)
前回の課題
• 課題No.4
下の実行例に示すように,整数値を読み込んで
,その整数値以下のである正の偶数を昇順に
表示するプログラムを作成せよ.なお,負の値
が入力された場合は,何も表示しない
整数を入力してください:17
2 4 6 8 10 12 14 16
前回の課題
問題5:
下の実行例に示すように,1から50までの整数
値を各行に5個ずつ表示するプログラムを作成
せよ.
1
6
11
16
21
26
31
36
41
46
2
7
12
17
22
27
32
37
42
47
3
8
13
18
23
28
33
38
43
48
4
9
14
19
24
29
34
39
44
49
5
10
15
20
25
30
35
40
45
50
配列の基本
配列とは
• 40人分のテストの点数を記録して,平均値を
求めるプログラムを作る
int test1 = 85;
int test2 = 60;
int test3 = 73;
・・・
40個もの変数を定義するのは面倒
同じ型の値を複数まとめて記憶する
配列
• 配列(array):同じ型のデータの集合
• 要素(element):配列中のハコ
この配列は,3つの要素(ハコ)から成る
配列の宣言方法
配列を使うときも,普通の変数と同様に宣言する必要がある
大括弧
始まり
• 宣言方法:
型名 配列名[ 要素数 ];
• 例:
int test[5];
double x[10];
大括弧
終わり
//int型で要素数が5
//double型で要素数が10
配列
int test[5];
//int型で要素(ハコ)数が5
配列名
int
test[5];
型名
要素の数
(全部でいくつのハ
コを用意するか?)
test[0]
test[1]
test[2]
test[3]
test[4]
test[4]が値を格納できる最後の要素
(test[5]は存在しない)
添字
(そえじ)
配列の利用
• 配列要素に値を代入
int test[5];
test[0] =
test[1] =
test[2] =
test[3] =
test[4] =
100;
200;
400;
500;
800;
要素数5のint型の配列を宣言
各要素に値を代入
配列名[添字]で,配列要素を参照することができる
配列の利用
• 配列要素の値を出力
int test[5]; //配列の宣言
test[0] = 85;
test[1] = 60;
test[2] = 73;
test[3] = 90;
test[4] = 53;
配列要素に値を代入
繰返し文を使って,
配列要素を出力
for (i=0;i<5;i++)
printf(“%d番目の人の成績%d\n”, i+1, test[i]);
• 実行結果
1番目の人の成績85
2番目の人の成績60
3番目の人の成績73
4番目の人の成績90
5番目の人の成績53
配列の利用
• キーボードから入力
int test[5]; //配列の宣言
繰返し文を使って,配
列要素をキーボード
から入力
printf(“5人の点数を入力してください\n”);
for (i=0;i<5;i++)
{
printf(“%d番目の人の成績は?”);
scanf(“%d”,&test[i]);
}
&test[0]
&test[1]
&test[2]
・・・
配列の利用
• 添え字の間違い
int test[5]; //配列の宣言
test[10] = 50;
誤り!
int test[5]
test[0] test[1] test[2] test[3] test[4]
?
test[10]
配列の初期化
配列を初期化する
初期化子
• 初期化の方法:
型名 配列名[ 要素数 ] = {値0, 値1, ・・・};
5つの配列要素を
初期化
• 例:
int test[5] = {85, 60, 73, 90, 53};
int test[] = {85, 60, 73, 90, 53};
5つの配列要素が自動的に用意される
要素数が省略された場合,初期化子の数だけ
自動的に要素(ハコ)が準備される
配列を初期化する
• 初期化子が少ない場合
• 例:
int test[5] = {85, 60, 73};
80
60
73
0
0
test[0] test[1] test[2] test[3] test[4]
初期化子が少ない場合には,残りの要素に0が格納される
マクロ
Ctrl+fを体験
マクロ
• ソースコード中の特定の識別子を置き換える(置換)
#define NUM 5
main()
{
}
main()
{
int test[NUM];
int i;
int test[5];
int i;
for (i=0;i<NUM;i++)
test[i] = i*10;
for (i=0;i<5;i++)
test[i] = i*10;
}
マクロ
• マクロの定義方法
#define マクロ名 置き換える文字列
半角のスペースを入れる
• 例:
#define NUM 50
ソースコード中の「NUM」と
いう文字列をすべて「50」と
いう文字で置き換える
多次元配列
多次元配列の例
• 一次元配列:
1教科のテストの点数(番号)
• 二次元配列:
複数の科目のテストの点数(番号×科目)
• 三次元配列:
学期ごと、科目ごとのテスト点数(番号×科目×学期)
一次配列
二次配列
番号
点数
番号
1
80
2
75
3
・・・
点数
英語
数学
物理
1
80
65
54
90
2
75
70
100
・・・
3
90
77
88
・・・
・・・
・・・
・・・
三次配列
・・・
番号
点数
英語
数学
物理
前期
後期
前期
後期
前期
後期
1
80
73
65
89
54
64
2
75
55
70
90
100
88
3
90
69
77
55
88
92
・・・
・・・
・・・
・・・
・・・
・・・
・・・
多次元配列の使い方
• 定義方法
型名 配列名[要素数][要素数];
• 例:
int test[2][5];
二次元配列を宣言
2×5=10個のint型データを記憶することが可能
多次元配列
• 2科目×5人の点数を管理する場合、
#define KAMOKU 2
#define NUM 5
main()
{
int test[KAMOKU][NUM];
test[0][0] = 80;
test[0][1] = 75;
test[0][2] = 90;
test[0][3] = 50;
test[0][4] = 60;
test[0][5] = 70;
test[1][0] = 65;
test[1][1] = 70;
test[1][2] = 77;
test[1][3] = 85;
test[1][4] = 73;
}
test[0][▲]は英語
test[1][0]
test[0][0]
test[1][1]
test[0][1]
test[1][2]
test[0][2]
test[1][▲]は数学
test[1][3]
test[0][3]
test[1][4]
test[0][4]
多次元配列の使い方
• 初期化の方法
int test[2][5] = {
{80, 60, 22, 50, 75},
{90, 55, 68, 72, 58}
};
文字列と配列
文字列と配列
• C言語には「文字列型」という型はない。
• 文字列=文字型(char型)の集まりとして扱う
文字列 = char型の配列
文字列と配列
char str[6];
str[0] = ‘H’;
str[1] = ‘e’;
str[2] = ‘l’;
str[3] = ‘l’;
str[4] = ‘o’;
str[5] = ‘\0’;
//char型の配列宣言
1つずつ文字を代入
(5文字分)
最後に’\0’(NULL文字)をつける
文字列配列の最後は必ずNULL文字を入れる
文字列と配列
• 文字列配列を初期化
• 例(4つの例は、すべて同じ初期化処理):
char str[6] = {‘H’, ‘e’, ‘l’, ‘l’, ‘o’, ‘\0’ };
char str[] = {‘H’, ‘e’, ‘l’, ‘l’, ‘o’, ‘\0’ };
char str[6] = “Hello”;
char str[] = “Hello”;
NULL記号は
自動的に付
加される
“”で囲んで初期化
する方法
文字列と配列
• 初期化の間違い例:
“”で初期化はOK
char str[6] = “Hello”;
str = “Bye!”;
代入することはできない
文字列配列に直接代入をする方法は、7回目の講義で説明する予定です
文字列と配列
• 文字列の出力方法
#include <stdio.h>
main()
{
char str[6];
str[0] = ‘H’;
str[1] = ‘e’;
str[2] = ‘l’;
str[3] = ‘l’;
str[4] = ‘o’;
str[5] = ‘\0’;
文字列は%sで表示
printf(“表示文字列は%sです\n”, str);
}
文字列と配列
• 文字列の出力方法
#include <stdio.h>
main()
{
char str[6] = “Hello”;
文字列表示の場
合、配列名を渡す
printf(“表示文字列は%sです\n”, str);
}
文字列は%sで表示
文字列と配列
• 文字列の入力方法
#include <stdio.h>
main()
{
char str[100];
十分に大きな配列を用
意(99文字までOK)
printf(“文字列を入力してください\n”); 文字列を入
scanf(“%s”, str);
力させる場合、
「&」は不要
文字列を入力させる
printf(“入力された文字列は%sです”, str);
}