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

Similar documents
C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

PowerPoint プレゼンテーション

cp-7. 配列

Microsoft PowerPoint - C4(反復for).ppt

Microsoft PowerPoint - 説明2_演算と型(C_guide2)【2015新教材対応確認済み】.pptx

Microsoft Word - no103.docx

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

Prog1_6th

PowerPoint Presentation

PowerPoint プレゼンテーション

gengo1-8

Microsoft PowerPoint - å®�æ−•è©¦é¨fi3ㆮ対ç�Œ.pptx

Microsoft PowerPoint - 説明3_if文switch文(C_guide3)【2015新教材対応確認済み】.pptx

kiso2-09.key

演算増幅器

第9回 配列(array)型の変数

新版明解C言語入門編

問 2 ( 型変換 ) 次のプログラムを実行しても正しい結果が得られない 何が間違いかを指摘し 正しく修正せよ ただし int サイズが 2 バイト long サイズが 4 バイトの処理系での演算を仮定する #include <stdio.h> int main( void ) { int a =

Microsoft PowerPoint - program.ppt [互換モード]

JavaプログラミングⅠ

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

Microsoft PowerPoint - 第3回目.ppt [互換モード]

講習No.8

Java プログラミング Ⅰ 11 回目多次元配列 2 次元配列 2 次元配列配列要素が直線上に並ぶ一次元配列に対して 平面上に並ぶ配列要素をもつ配列 直観的には 2 次元配列の準備配列変数の宣言は型と識別子を指定して次のように行う 型識別子 [ ][ ]; または 型 [ ][ ] 識別子 ; 配

4 分岐処理と繰返し処理 ( 教科書 P.32) プログラムの基本的処理は三つある. (1) 順次処理 : 上から下に順番に処理する ぶんきそろ (2) 分岐処理 : 条件が揃えば, 処理する はんぷく (3) 反復処理 : 条件が揃うまで処理を繰り返す 全てのプログラムは (1) から (3) の

プログラミング実習I

Microsoft Word - no202.docx

Microsoft PowerPoint - 5Chap15.ppt

Prog1_10th

PowerPoint Presentation

Microsoft Word - 3new.doc

プログラミング方法論 II 第 14,15 回 ( 担当 : 鈴木伸夫 ) 問題 17. x 座標と y 座標をメンバに持つ構造体 Point を作成せよ 但し座標 は double 型とする typedef struct{ (a) x; (b) y; } Point; 問題 18. 問題 17 の

Microsoft PowerPoint - C1(演算と変数).ppt

PowerPoint プレゼンテーション

Microsoft Word - no15.docx

Microsoft PowerPoint - 12.ppt [互換モード]

講習No.9

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

P06.ppt

今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順 ) になるよう 並び替えること

Microsoft PowerPoint - 12Chap16.ppt

PowerPoint Presentation

Microsoft Word - no13.docx

Microsoft PowerPoint - 11.pptx

1. 関数 scanf() 関数 printf() は変数の値を画面に表示しますが それに対し関数 scanf() はキーボードで入力した値を変数に代入します この関数を活用することで対話式 ( ユーザーの操作に応じて処理を行う ) プログラムを作ることができるようになります 整数の和

Microsoft Word - no11.docx

/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){

4-4 while 文 for 文と同様 ある処理を繰り返し実行するためのものだが for 文と違うのは while 文で指定するのは 継続条件のみであるということ for 文で書かれた左のプログラムを while 文で書き換えると右のようになる /* 読込んだ正の整数値までカウントアップ (for

gengo1-11

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

Taro-リストⅠ(公開版).jtd

プログラミングA

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

情報処理演習 B8クラス

Microsoft PowerPoint - kougi7.ppt

C言語7

Microsoft PowerPoint - class04.ppt

2006年10月5日(木)実施

Microsoft PowerPoint - 計算機言語 第7回.ppt

PowerPoint Presentation

今までの復習 プログラムで最低限必要なもの 入力 ( キーボードから ファイルから ) 出力 ( 画面へ ファイルへ ) 条件分岐 : 条件の成立 不成立により 異なる動作をする 繰り返し : 一定の回数の繰返し 条件成立の間の繰返し 関数の定義 関数の呼び出し C ではそれ以外に ポインタ データ

情報処理Ⅰ

プログラミングA

Microsoft Word - Cプログラミング演習(3)

Prog1_12th

コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol

情報処理概論(第二日目)

pp2018-pp9base

Microsoft PowerPoint - 12.ppt [互換モード]

目次

(2) 構造体変数の宣言 文法は次のとおり. struct 構造体タグ名構造体変数名 ; (1) と (2) は同時に行える. struct 構造体タグ名 { データ型変数 1; データ型変数 2;... 構造体変数名 ; 例 : struct STUDENT{ stdata; int id; do

4 月 東京都立蔵前工業高等学校平成 30 年度教科 ( 工業 ) 科目 ( プログラミング技術 ) 年間授業計画 教科 :( 工業 ) 科目 :( プログラミング技術 ) 単位数 : 2 単位 対象学年組 :( 第 3 学年電気科 ) 教科担当者 :( 高橋寛 三枝明夫 ) 使用教科書 :( プロ

Microsoft Word - Cプログラミング演習(8)

Microsoft Word - Cプログラミング演習(12)

2

問題1 以下に示すプログラムは、次の処理をするプログラムである

初歩のC言語ターミナル_2014_May.pages

Java講座

Microsoft PowerPoint - lec10.ppt

情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤

P02.ppt

Microsoft PowerPoint - lec4.ppt

Microsoft PowerPoint - kougi6.ppt

6 関数 6-1 関数とは少し長いプログラムを作るようになると 同じ処理を何度も行う場面が出てくる そのたびに処 理を書いていたのでは明らかに無駄であるし プログラム全体の見通しも悪くなる そこで登場す るのが 関数 である 関数を使うことを 関数を呼び出す ともいう どのように使うのか 実際に見て

Microsoft Word - Training10_プリプロセッサ.docx

講習No.12

C言語講座 ~ファイル入出力編~

プログラミング基礎

program7app.ppt

memo

2

講習No.10

memo

Prog2_15th

Microsoft PowerPoint - CproNt02.ppt [互換モード]

<4D F736F F D2091E63589F182628CBE8CEA8D758DC08E9197BF2E646F6378>

Microsoft Word - no12.doc

DVIOUT

目次

Transcription:

情報ネットワーク導入ユニット Ⅰ C 言語 配列

5 章 : 配列同じ型 (int, double など ) の変数の集まりを 番号 ( 添字 ) で管理する変数 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] ); int vc[5]; // 要素数が5の配列 vc[i] = i+1; printf("vc[%d] = %d n", i, vc[i] ); 実行結果 vc[0] = 1 vc[1] = 2 vc[2] = 3 vc[3] = 4 vc[4] = 5

5 章 : 配列同じ型 (int, double など ) の変数の集まりを 番号 ( 添字 ) で管理する変数 普通の変数だと 配列だと int vc0, vc1, vc2, vc3, vc4; int vc[5]; // 要素数が 5 の配列 vc0 = 1; vc1 = 2; vc2 = 3; vc3 = 4; vc4 = 5; vc[0] = 1; vc[1] = 2; vc[2] = 3; vc[3] = 4; vc[4] = 5; 5 つの変数 1 つの配列変数 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 ); 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] );

5 章 : 配列 同じ型 (int, double など ) の変数の集まりを 番号 ( 添字 ) で管理する変数 普通の変数だと 配列だと 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 ); 別々の変数なので, 処理をまとめられない int vc[5]; // 要素数が5の配列 vc[i] = i+1; 番号 ( 添字 ) で操作 printf("vc[%d] = %d n", i, vc[i] ); 各データの処理が似ていれば,for 文で短く, すっきり書ける

5 章 : 配列同じ型 (int, double など ) の変数の集まりを 番号 ( 添字 ) で管理する変数 少しの変更で, より大きなデータ用のプログラムにできる int vc[5]; // 要素数が5の配列 int vc[100]; // 要素数が100の配列 vc[i] = i+1; for( i=0 ; i<100 ; i++ ) { vc[i] = i+1; printf("vc[%d] = %d n", i, vc[i] ); for( i=0 ; i<100 ; i++ ) { printf("vc[%d] = %d n", i, vc[i] ); 5 個 (5 名 ) 用 100 個 (100 名 ) 用

5 章 : 配列同じ型 (int, double など ) の変数の集まりを 番号 ( 添字 ) で 管理する変数 こんな簡単に個数 ( 人数 ) の変更ができる (#defineの利用) #define NUM 5 // 要素数 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] ); #define NUM 100 // 要素数 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] );

5 章 : 配列 配列変数の宣言 vc int vc[ 5 ]; // int 型の 5 つの要素からなる配列 vc 型名前 [ 要素数 ]; 添え字 0 1 2 3 4 vc[0] vc[1] vc[2] vc[3] vc[4] 5 つのデータ用領域が連続して作成される 配列データへのアクセス vc[1] 2つ目のデータ 名前 [ 添え字 ]; 添え字は 0 から始まることに注意! vc[2] = 10; // 2 番のデータ (3つ目のデータ) に10を代入 printf(" 結果 = %d n", vc[0] ); //0 番のデータ ( 先頭のデータ ) を表示 scanf("%d", &vc[4] ); //4 番のデータ (5つ目のデータ) に読み込んだ値を代入する

配列と for 文 配列は for 文と組み合わせて処理する場合が多い. 似たような処理を繰返す List5-2(p.112) 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] ); for 文を使わない場合 似たような処理を連続して記述 ( 要素数分 ) 添え字 vc 0 1 2 3 4 1 2 3 4 5 vc[0] vc[1] vc[2] vc[3] vc[4]

配列と for 文 配列は for 文と組み合わせて処理する場合が多い. 似たような処理を繰返す List5-3(p.112) int vc[5]; // 要素数が5の配列 vc[i] = i+1; printf("vc[%d] = %d n", i, vc[i] ); 添え字 vc vc[ i ] = i+1; i 0 < 要素数 i が添え字 ( 番号 ) に対応する 0 1 2 3 4 1 2 3 4 5 vc[0] vc[1] vc[2] vc[3] vc[4]

double xv[100]; // 要素数 100 double sum = 0.0; for( i=0 ; i<100 ; i++ ) { printf("%d 番目のデータ =", i); scanf("%lf", &xv[i] ); 配列と for 文 100 個のデータを代入する 0 < 要素数 for( i=0 ; i<100 ; i++ ) { printf("%d 番目のデータ =", i); scanf("%lf", &xv[i] ); 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 ); 添え字 0 1 2 3 99 xv i xv[0] xv[1] xv[2] xv[3] xv[99]

List5-5(p.114) 配列の初期化 int vc[5] = { 5, 4, 3, 2, 1 ; // 初期化 int vc[5]; printf("vc[%d] = %d n", i, vc[i]); vc 5 4 3 2 1 vc[0] vc[1] vc[2] vc[3] vc[4] vc[0] = 5; vc[1] = 4; vc[2] = 3; vc[3] = 2; vc[1] = 1; printf("vc[%d] = %d n", i, vc[i]);

List5-6(p.115) int va[5] = { 15, 20, 30, 0, 0 ; // 初期化 int vb[5]; vb = va; // 配列を全体をコピー 配列のコピー 配列のコピー vb = va; のように配列全体をいっぺんにコピーすることはできない. 一つずつコピーするプログラムにする vb va printf(" va vb n"); printf("%3d%3d n", va[i], vb[i]); vb[0] vb[1] vb[2] vb[3] vb[4] 15 20 30 0 0 15 20 30 0 0 va[0] va[1] va[2] va[3] va[4]

List5-6(p.115) int va[5] = { 15, 20, 30, 0, 0 ; // 初期化 int vb[5]; 配列のコピー 配列のコピー vb = va; のように配列全体をいっぺんにコピーすることはできない. 左のプログラムのように一つずつコピーするプログラムにする vb[i] = va[i]; // 要素毎にコピー printf(" va vb n"); printf("%3d%3d n", va[i], vb[i]); vb[0] vb[1] vb[2] vb[3] vb[4] vb 15 20 30 0 0 va 15 20 30 0 0 va[0] va[1] va[2] va[3] va[4]

List5-7(p.116) int vx[5]; // 要素数 5の整数型の配列 配列の要素に値を読込む scanf("%d", &vx[i] ); & を忘れない! キーボードから読み込んだ整数を vx の要素 i 番目に代入する printf("vx[%d]:", i); scanf("%d", &vx[i] ); printf("vx[%d] = %d n", i, vx[i]); 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 vx[4] = 63 vx[0] vx[1] vx[2] vx[3] vx[4] scanf("%d", &a ); vx a 普通の変数配列

List5-9, 5-10(p.118-119) マクロ命令 : #define int tensu[5]; int sum = 0; 5 名の点数を読み込んで合計と平均を計算 表示 100 名用に変更 int tensu[100]; int sum = 0; 100 名用に変更 3 箇所を変更 変更を忘れる可能性あり printf(" 点数を入力 : n"); printf("%2d 番 : ", i+1 ); scanf("%d", &tensu[i] ); sum += tensu[i]; printf(" 合計点 :%5d n", sum ); printf(" 平均点 :%5.1f n", (double)sum/5 ); 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 );

マクロ命令 : #define List5-9, 5-10(p.118-119) 定数を言葉 ( 文字列 ) で表現する #define で定義された言葉はビルドの時に数字に置き換わる #define NUMBER 5 // 人数 int tensu[5]; int sum = 0; int tensu[number]; int sum = 0; printf(" 点数を入力 : n"); printf("%2d 番 : ", i+1 ); scanf("%d", &tensu[i] ); sum += tensu[i]; printf(" 合計点 :%5d n", sum ); printf(" 平均点 :%5.1f n", (double)sum/5 ); 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 );

マクロ命令 : #define List5-9, 5-10(p.118-119) 定数を言葉 ( 文字列 ) で表現する #define で定義された言葉はビルドの時に数字に置き換わる #define NUMBER 5 // 人数 int tensu[number]; int sum = 0; 100 名用に変更 #define NUMBER 100 // 人数 int tensu[number]; int sum = 0; 100 名用に変更 1 箇所を変更 変更を忘れる可能性なし 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 ); 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 );

配列を用いたデータ処理 :(1) 合計 平均値を求める演習問題集の 29 ページ int i, data[num], sum; double avg; sum=0; 1 1 合計を保存する変数 sum を 0 で初期化する. (sum が 0 とは限らないので ) for( i=0 ; i<num ; i++ ){ 2 2for ループで, データすべて ( データ数 NUM) を回るようにする. sum += data[i]; 3 3i 番目のデータを, それまでの sum に加算する. avg = (double)sum/num; 4 4 合計値をデータ数で割って平均値を出す. 右の文章を見て プログラムを作ってみましょう 実行するためには何かが不足しています わからない場合は写しても OK

配列を用いたデータ処理 : (2) 最大値 ( または最小値 ) を求める 演習問題集の 29 ページ ( 例 )NUM 個のデータの中の, 最大値 とその要素番号を求める. int i, data[num], max, max_no; max=data[0]; max_no=0; 1 10 番のデータをとりあえず最大値とする. for( i=1 ; i<num ; i++ ){ if( data[i] > max ) { 2 3 max = data[i]; 3 max_no = i; 2for ループで, 残りのデータ (1~NUM-1 番 ) を 回り, 大きな値が無いかをチェックする. 3i 番のデータが, それまでの最大値 (max) よりも大きいかをチェック. 3 大きい場合は, そのデータを新しい最大値 として max に代入する. 同時にその要素番号も 記録する (max_no). 右の文章を見て プログラムを作ってみましょう 実行するためには何かが不足しています わからない場合は写しても OK

配列を用いたデータ処理 : (3) 条件にあうデータを探す演習問題集の 29 ページ ( 例 )60 以上のデータの数を数えて, またそのデータを表示する. int i, data[num], count; count=0; for( i=0 ; i<num ; i++ ) { if( data[i] >= 60 ) { 1 2 3 1 条件にあるデータの数を保存する変数 countを0で初期化する. 2forループで, データすべて ( データ数 NUM) を回るようにする. 3i 番のデータが条件にあっているかをチェック. count++; 3 3 条件に合っていれば,count を 1 増やす. printf("%d 番 :%d n", i+1, data[i]); 3'' 3'' また, そのデータを表示する. ( 配列の要素番号は 0 から始まるので, 1 から始まる番号に直すために i+1 とする )

2 次元配列 演習問題集の 31 ページ 例題 1 学生 5 名の 3 科目の成績は表 1 のとおりである.2 次元配列を用いて, 各学生の合計点を表示するプログラムを作成せよ. 2 次元配列 2 つの数字でデータを管理 int ten[5][3]; 整数 3 つのデータ群が,5 つ集まったもの 表 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] ten[1][2] = 85; printf("%d n", ten[3][1] ); scanf("%d", &ten[4][0] ); // 1 行 2 列 (2 行目 3 番目 ) のデータに85を代入 // 3 行 1 列 (4 行目 2 番目 ) のデータ80を表示 // 4 行 0 列 (5 行目 1 番目 ) に読み込んだデータを代入

2 次元配列 例題 1 学生 5 名の 3 科目の成績は表 1 のとおりである.2 次元配列を用いて, 各学生の合計点を表示するプログラムを作成せよ. #define GAKUSEI 5 /* 学生数 */ #define KAMOKU 3 /* 科目数 */ 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] );