• 検索結果がありません。

Microsoft PowerPoint - 説柔5_間勊+C_guide5ï¼›2015ã•’2015æŒ°æŁŽæš’å¯¾å¿œç¢ºèª“æ¸‹ã†¿ã•‚.pptx

N/A
N/A
Protected

Academic year: 2021

シェア "Microsoft PowerPoint - 説柔5_間勊+C_guide5ï¼›2015ã•’2015æŒ°æŁŽæš’å¯¾å¿œç¢ºèª“æ¸‹ã†¿ã•‚.pptx"

Copied!
22
0
0

読み込み中.... (全文を見る)

全文

(1)

情報ネットワーク導入ユニットⅠ

C言語

(2)

5章:配列

同じ型(

int, doubleなど)の変数の集まりを「番号(添字)」で

管理する変数

#include <stdio.h> int main(void){ int vc[5]; //要素数が5の配列 vc[0] = 1; vc[1] = 2; vc[2] = 3; vc[3] = 4; vc[4] = 5; printf("vc[0] = %d¥n", vc[0] ); printf("vc[1] = %d¥n", vc[1] ); printf("vc[2] = %d¥n", vc[2] ); printf("vc[3] = %d¥n", vc[3] ); printf("vc[4] = %d¥n", vc[4] ); return(0); } vc[0] = 1 vc[1] = 2 vc[2] = 3 vc[3] = 4 実行結果 #include <stdio.h> int main(void){ int i; int vc[5]; //要素数が5の配列

for( i=0 ; i<5 ; i++ ) {

vc[i] = i+1; }

for( i=0 ; i<5 ; i++ ) {

printf("vc[%d] = %d¥n", i, vc[i] ); }

return(0); }

(3)

5章:配列

同じ型(

int, doubleなど)の変数の集まりを「番号(添字)」で

管理する変数

#include <stdio.h> int main(void){ int vc0, vc1, vc2, vc3, vc4; vc0 = 1; vc1 = 2; vc2 = 3; vc3 = 4; vc4 = 5; printf("vc[0] = %d¥n", vc0 ); printf("vc[1] = %d¥n", vc1 ); printf("vc[2] = %d¥n", vc2 ); printf("vc[3] = %d¥n", vc3 ); printf("vc[4] = %d¥n", vc4 ); return(0); } #include <stdio.h> int main(void){ int vc[5]; //要素数が5の配列 vc[0] = 1; vc[1] = 2; vc[2] = 3; vc[3] = 4; vc[4] = 5; printf("vc[0] = %d¥n", vc[0] ); printf("vc[1] = %d¥n", vc[1] ); printf("vc[2] = %d¥n", vc[2] ); printf("vc[3] = %d¥n", vc[3] ); printf("vc[4] = %d¥n", vc[4] ); return(0); }

5

つの変数

1つの配列変数

普通の変数だと・・

配列だと・・

(4)

5章:配列

#include <stdio.h> int main(void){ int vc0, vc1, vc2, vc3, vc4; vc0 = 1; vc1 = 2; vc2 = 3; vc3 = 4; vc4 = 5; printf("vc[0] = %d¥n", vc0 ); printf("vc[1] = %d¥n", vc1 ); printf("vc[2] = %d¥n", vc2 ); printf("vc[3] = %d¥n", vc3 ); printf("vc[4] = %d¥n", vc4 ); return(0); #include <stdio.h> int main(void){ int i; int vc[5]; //要素数が5の配列

for( i=0 ; i<5 ; i++ ) {

vc[i] = i+1; }

for( i=0 ; i<5 ; i++ ) {

printf("vc[%d] = %d¥n", i, vc[i] ); } return(0); }

各データの処理が似て

いれば,

for

文で短く,

すっきり書ける

別々の変数なので,

処理をまとめられない

番号(添字)で操作

同じ型(

int, doubleなど)の変数の集まりを「番号(添字)」で

管理する変数

普通の変数だと・・

配列だと・・

(5)

5章:配列

同じ型(

int, doubleなど)の変数の集まりを「番号(添字)」で

管理する変数

#include <stdio.h> int main(void){ int i; int vc[100]; //要素数が100の配列

for( i=0 ; i<100 ; i++ ) { vc[i] = i+1;

}

for( i=0 ; i<100 ; i++ ) {

printf("vc[%d] = %d¥n", i, vc[i] ); } return(0); } #include <stdio.h> int main(void){ int i; int vc[5]; //要素数が5の配列

for( i=0 ; i<5 ; i++ ) { vc[i] = i+1;

}

for( i=0 ; i<5 ; i++ ) {

printf("vc[%d] = %d¥n", i, vc[i] ); } return(0); }

少しの変更で,より大きなデー

タ用のプログラムにできる

5個(5名)用

100個(100名)用

(6)

5章:配列

同じ型(

int, doubleなど)の変数の集まりを「番号(添字)」で

管理する変数

#include <stdio.h> #define NUM 100 //要素数 int main(void){ int i; int vc[NUM]; //配列

for( i=0 ; i<NUM ; i++ ) { vc[i] = i+1;

}

for( i=0 ; i<NUM ; i++ ) {

printf("vc[%d] = %d¥n", i, vc[i] ); } return(0); #include <stdio.h> #define NUM 5 //要素数 int main(void){ int i; int vc[NUM]; //配列

for( i=0 ; i<NUM ; i++ ) { vc[i] = i+1;

}

for( i=0 ; i<NUM ; i++ ) {

printf("vc[%d] = %d¥n", i, vc[i] ); }

return(0);

こんな簡単に個数(人数)の変更

ができる (

#define

の利用)

(7)

5章:配列

0 1 2 3 4

vc

■配列変数の宣言

int

vc

[

5

]

; // int

型の5つの要素からなる配列

vc

名前

要素数

]

5つのデータ用領域が

連続して作成される

添え字は

0

から始まることに注意!

vc[0] vc[1] vc[2] vc[3] vc[4]

■配列データへのアクセス

vc[1]

・・・

2

つ目のデータ

名前

添え字

]

添え字

vc[2] = 10; // 2

番のデータ(

3

つ目のデータ)に

10

を代入

printf("

結果

= %d¥n", vc[0] ); //0

番のデータ(先頭のデータ)を表示

scanf("%d", &vc[4] ); //4

番のデータ(

5

つ目のデータ)に読み込んだ値を代入する

(8)

配列と

for文

0 1 2 3 4

vc

vc[0] vc[1] vc[2] vc[3] vc[4] 添え字 #include <stdio.h> int main(void){ int i; int vc[5]; //要素数が5の配列 vc[0] = 1; vc[1] = 2; : vc[4] = 5; printf("vc[0] =%d¥n", vc[0] ); printf("vc[1] =%d¥n", vc[1] ); : printf("vc[2] =%d¥n", vc[4] ); return(0);

配列はfor文と組み合わせて処理する場合が多い.

→ 似たような処理を繰返す

List5-2(p.112)

1

2

3

4

5

← for

文を使わない場合

・似たような処理を連続して記述

(要素数分)

(9)

配列と

for文

0 1 2 3 4

vc

vc[0] vc[1] vc[2] vc[3] vc[4] 添え字 #include <stdio.h> int main(void){ int i; int vc[5]; //要素数が5の配列

for( i=0 ; i<5 ; i++ ) { vc[i] = i+1;

}

for( i=0 ; i<5 ; i++ ) {

printf("vc[%d] = %d¥n", i, vc[i] ); } return(0); }

配列は

for文と組み合わせて処理する場合が多い.

→ 似たような処理を繰返す

for( i=0 ; i<5 ; i++ ) {

vc[ i ] = i+1;

}

0

<

要素数

i

が添え字(番号)に

対応する

i

List5-3(p.112)

1

2

3

4

5

(10)

配列と

for文

#include <stdio.h> int main(void){ int i; double xv[100]; //要素数100 double sum = 0.0;

for( i=0 ; i<100 ; i++ ) {

printf("%d番目のデータ=", i); scanf("%lf", &xv[i] );

}

for( i=0 ; i<100 ; i++ ) {

printf("%d番目 = %7.2f¥n", i, xv[i]); }

for( i=0 ; i<100 ; i++ ) { sum += xv[ i ]; } printf("合計=%7.2f¥n", sum ); return(0); 0 1 2 3 99

xv

xv[0] xv[1] xv[2] xv[3] xv[99] 添え字

i

for( i=0 ; i<100 ; i++ ) {

printf("%d番目のデータ=", i);

scanf("%lf", &xv[i] );

}

0

<

要素数

i

が添え字(番号)に

対応する

100個のデータを代入する

(11)

配列の初期化

#include <stdio.h>

int main(void){

int i;

int vc[5] = { 5, 4, 3, 2, 1 }; //初期化

for( i=0 ; i<5 ; i++ ) {

printf("vc[%d] = %d¥n", i, vc[i]); } return(0); }

5

4

3

2

1

vc

vc[0] vc[1] vc[2] vc[3] vc[4] #include <stdio.h> int main(void){ int i; int vc[5]; vc[0] = 5; vc[1] = 4; vc[2] = 3; vc[3] = 2; vc[1] = 1;

for( i=0 ; i<5 ; i++ ) {

printf("vc[%d] = %d¥n", i, vc[i]); }

return(0); }

(12)

配列のコピー

#include <stdio.h> int main(void){ int i; int va[5] = { 15, 20, 30, 0, 0 }; //初期化 int vb[5]; vb = va; //配列を全体をコピー printf(" va vb ¥n"); for( i=0 ; i<5 ; i++ ) {

printf("%3d%3d¥n", va[i], vb[i]); } return(0); }

List5-6(p.115)

配列のコピー

vb = va;

のように配列全体をいっぺんに

コピーすることはできない.

一つずつコピーするプログラムにする

15

20

30

0

0

15

20

30

0

0

va

va[0]

va[1]

va[2]

va[3]

va[4]

vb

vb[0]

vb[1]

vb[2]

vb[3]

vb[4]

(13)

配列のコピー

#include <stdio.h> int main(void){ int i; int va[5] = { 15, 20, 30, 0, 0 }; //初期化 int vb[5];

for( i=0 ; i<5 ; i++ ) {

vb[i] = va[i]; //要素毎にコピー }

printf(" va vb ¥n"); for( i=0 ; i<5 ; i++ ) {

printf("%3d%3d¥n", va[i], vb[i]); } return(0); }

List5-6(p.115)

配列のコピー

vb = va;

のように配列全体をいっぺんに

コピーすることはできない.

左のプログラムのように一つずつ

コピーするプログラムにする

15

20

30

0

0

15

20

30

0

0

va

va[0]

va[1]

va[2]

va[3]

va[4]

vb

vb[0]

vb[1]

vb[2]

vb[3]

vb[4]

(14)

配列の要素に値を読込む

#include <stdio.h>

int main(void){

int i;

int vx[5]; //要素数5の整数型の配列

for( i=0 ; i<5 ; i++ ) {

printf("vx[%d]

", i);

scanf("%d", &vx[i] );

}

for( i=0 ; i<5 ; i++ ) {

printf("vx[%d] = %d¥n", i, vx[i]); } return(0); }

List5-7(p.116)

scanf("%d", &vx[i] );

キーボードから読み込んだ整数を

vx

の要素

i

番目に代入する

&

を忘れない

!

vx

vx[0]

vx[1]

vx[2]

vx[3]

vx[4]

a

配列

普通の変数

scanf("%d", &a );

vx[0] : 17 vx[1] : 38 vx[2] : 52 vx[3] : 41 vx[4] : 63 vx[0] = 17 vx[1] = 38 vx[2] = 52 vx[3] = 41

(15)

マクロ命令:

#define

#include <stdio.h> int main(void){ int i; int tensu[5]; int sum = 0; printf("点数を入力:¥n"); for( i=0 ; i<5 ; i++ ) {

printf("%2d番: ", i+1 ); scanf("%d", &tensu[i] ); sum += tensu[i]; } printf("合計点:%5d¥n", sum ); printf("平均点:%5.1f¥n", (double)sum/5 ); return(0); }

List5-9, 5-10(p.118-119)

#include <stdio.h> int main(void){ int i; int tensu[100]; int sum = 0; printf("点数を入力:¥n"); for( i=0 ; i<100 ; i++ ) {

printf("%2d番: ", i+1 ); scanf("%d", &tensu[i] ); sum += tensu[i]; } printf("合計点:%5d¥n", sum ); printf("平均点:%5.1f¥n", (double)sum/100 ); return(0); }

100

名用に変更

3箇所を変更

変更を忘れる

可能性あり

5名の点数を読み込んで

合計と平均を計算・表示

100

名用に

変更

(16)

マクロ命令:

#define

#include <stdio.h> int main(void){ int i; int tensu[5]; int sum = 0; printf("点数を入力:¥n"); for( i=0 ; i<5 ; i++ ) {

printf("%2d番: ", i+1 ); scanf("%d", &tensu[i] ); sum += tensu[i]; } printf("合計点:%5d¥n", sum ); printf("平均点:%5.1f¥n", (double)sum/5 ); return(0);

List5-9, 5-10(p.118-119)

#include <stdio.h> #define NUMBER 5 //人数 int main(void){ int i;

int tensu[NUMBER]; int sum = 0;

printf("点数を入力:¥n");

for( i=0 ; i<NUMBER ; i++ ) { printf("%2d番: ", i+1 ); scanf("%d", &tensu[i] ); sum += tensu[i]; } printf("合計点:%5d¥n", sum ); printf("平均点:%5.1f¥n", (double)sum/NUMBER ); return(0); }

定数を言葉(文字列)で表現する

#define

で定義された言葉は

ビルドの時に数字に置き換わる

(17)

マクロ命令:

#define

List5-9, 5-10(p.118-119)

#include <stdio.h> #define NUMBER 100 //人数 int main(void){ int i;

int tensu[NUMBER]; int sum = 0;

printf("点数を入力:¥n");

for( i=0 ; i<NUMBER ; i++ ) { printf("%2d番: ", i+1 ); scanf("%d", &tensu[i] ); sum += tensu[i]; } printf("合計点:%5d¥n", sum ); printf("平均点:%5.1f¥n", (double)sum/NUMBER ); return(0); } #include <stdio.h> #define NUMBER 5 //人数 int main(void){ int i;

int tensu[NUMBER]; int sum = 0;

printf("点数を入力:¥n");

for( i=0 ; i<NUMBER ; i++ ) { printf("%2d番: ", i+1 ); scanf("%d", &tensu[i] ); sum += tensu[i]; } printf("合計点:%5d¥n", sum ); printf("平均点:%5.1f¥n", (double)sum/NUMBER ); return(0); }

100

名用に変更

1

箇所を変更

変更を忘れる

可能性なし

100

名用に

変更

定数を言葉(文字列)で表現する

#define

で定義された言葉は

ビルドの時に数字に置き換わる

(18)

配列を用いたデータ処理:

(1)合計・平均値を求める

演習問題集の

29ページ

int i, data[NUM], sum; double avg;

sum=0; ①

for( i=0 ; i<NUM ; i++ ){ ②

sum += data[i]; ③ } avg = (double)sum/NUM; ④ ①合計を保存する変数sumを0で初期化する. (sumが0とは限らないので) ②forループで,データすべて(データ数NUM) を回るようにする. ③i番目のデータを,それまでのsumに加算する. ④合計値をデータ数で割って平均値を出す.

右の文章を見て、プログラムを作ってみましょう。

実行するためには何かが不足しています。

わからない場合は写しても

OK。

(19)

配列を用いたデータ処理:

(2)最大値(または最小値)を求める

演習問題集の

29ページ

(例)NUM個のデータの中の,最大値 とその要素番号を求める.

int i, data[NUM], max, max_no;

max=data[0]; max_no=0; ①

for( i=1 ; i<NUM ; i++ ){ ②

if( data[i] > max ) { ③

max = data[i]; ③’ max_no = i; } } ①0番のデータをとりあえず最大値とする. ②forループで,残りのデータ(1~NUM-1番)を 回り,大きな値が無いかをチェックする. ③i番のデータが,それまでの最大値(max) よりも大きいかをチェック. ③’大きい場合は,そのデータを新しい最大値 としてmaxに代入する.同時にその要素番号も 記録する(max_no).

右の文章を見て、プログラムを作ってみましょう。

実行するためには何かが不足しています。

わからない場合は写しても

OK。

(20)

配列を用いたデータ処理:

(3)条件にあうデータを探す

演習問題集の

29ページ

(例)60以上のデータの数を数えて, またそのデータを表示する.

int i, data[NUM], count;

count=0; ①

for( i=0 ; i<NUM ; i++ ) { ②

if( data[i] >= 60 ) { ③ count++; ③’ printf("%d番:%d¥n", i+1, data[i]); ③'' } } ①条件にあるデータの数を保存する 変数countを0で初期化する. ②forループで,データすべて(データ数NUM) を回るようにする. ③i番のデータが条件にあっているかをチェック. ③’条件に合っていれば,countを1増やす. ③''また,そのデータを表示する. (配列の要素番号は0から始まるので,

(21)

2次元配列

例題 1

学生5名の

3

科目の成績は表

1

のとおりである.

2

次元配列を用いて,各学

生の合計点を表示するプログラムを作成せよ.

表1.各学生の得点 科目1 科目2 科目3 学生1 80 60 70 学生2 90 90 85 学生3 30 50 30 学生4 60 80 70 学生5 50 90 40 2 次元配列 int ten[5][3]; 科目1 科目2 科目3

学生1 ten[0][0] ten[0][1] ten[0][2] 学生2 ten[1][0] ten[1][1] ten[1][2] 学生3 ten[2][0] ten[2][1] ten[2][2] 学生4 ten[3][0] ten[3][1] ten[3][2] 学生5 ten[4][0] ten[4][1] ten[4][2]

2

次元配列・・・

2

つの数字でデータを管理

int ten[5][

3

];

・・・ 整数

3

つのデータ群が,

5

つ集まったもの

ten[1][2] = 85; // 1

2

列(

2

行目

3

番目)のデータに

85

を代入

printf("%d ¥n", ten[3][1] ); // 3

1

列(

4

行目

2

番目)のデータ

80

を表示

scanf("%d", &ten[4][0] ); // 4

0

列(

5

行目

1

番目)に読み込んだデータを代入

演習問題集の

31ページ

(22)

2次元配列

例題 1

学生5名の

3

科目の成績は表

1

のとおりである.

2

次元配列を用いて,各学

生の合計点を表示するプログラムを作成せよ.

#include <stdio.h> #define GAKUSEI 5 /*学生数*/ #define KAMOKU 3 /*科目数*/ int main(void){ int ten[GAKUSEI][KAMOKU]= { { 80, 60, 70 }, { 90, 90, 85 }, { 30, 50, 30 }, { 60, 80, 70 }, { 50, 90, 40 } }; int sum[GAKUSEI]; /*学生合計用*/ int g, k; // 各学生の合計得点を計算 for( g=0 ; g<GAKUSEI ; g++ ) { sum[g] = 0; //学生gの合計初期値0 for( k=0 ; k<KAMOKU ; k++ ) { sum[g] += ten[g][k]; //gさん各科目得点 } } // 結果の表示 printf("---¥n"); for( g=0 ; g<GAKUSEI ; g++ ) { printf("学生%dの合計得点:%3d¥n", (g+1), sum[g] ); } return(0); }

参照

関連したドキュメント

注意:

 複雑性・多様性を有する健康問題の解決を図り、保健師の使命を全うするに は、地域の人々や関係者・関係機関との

7) CDC: Cleaning and Disinfection for Community Facilities (Interim Recommendations for U.S. Community Facilities with Suspected/Confirmed Coronavirus Disease 2019), 1 April, 2020

[r]

地方自治法施行令第 167 条の 16 及び大崎市契約規則第 35 条により,落札者は,契約締結までに請負代金の 100 分の

[r]

③ 新産業ビジョン岸和田本編の 24 ページ、25 ページについて、説明文の最終段落に経営 者の年齢別に分析した説明があり、本件が今回の新ビジョンの中で謳うデジタル化の

7.法第 25 条第 10 項の規定により準用する第 24 条の2第4項に定めた施設設置管理