配列(2) 第10回[平成15年6月26日(木)]:PN03-10.ppt 今日の内容 1 素数を求める(教科書の例):復習

Slides:



Advertisements
Similar presentations
プログラミング演習( 2 組) 第 9 回
Advertisements

配列の宣言 配列要素の初期値 配列の上限 メモリ領域 多次元配列 配列の応用
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
7/10 if 文課題 力作が多くて感心! 演習1:キーボードから2つの整数を入力し、小さい方の数字を 表示せよ。
演算、整数型と浮動小数点型 第3回目 [4月27日、H.16(‘04)] 本日のメニュー 1)前回の課題・宿題 2)ファイルサーバの利用
配列(2) 第10回目 [6月22日、H.16(‘04)] 本日のメニュー 1)前回の課題について 2)前回の宿題について 3)課題
関数(1) 第11回 [6月29日、H.16(‘04)] 今日のメニュー 1 前回の課題 2 前回の宿題 3 いろいろな関数の演習 4 課題
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第4回 配列(2) 情報・知能工学系 山本一公
プログラミング入門2 第4回 配列 for文 変数宣言 初期化
ファーストイヤー・セミナーⅡ 第8回 データの入力.
6/19 前回復習 for文による繰り返し計算 演習1:1から10まで足して画面に結果を表示する 提出者: 1人
6/26 前回復習 for文、while文による繰り返し計算
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
演算、整数型と浮動小数点型 第3回[平成16年4月27日(火)]:PN04ー03.ppt 今日の内容 1 復習 2 加減・乗除演算子
基礎プログラミングおよび演習 第9回
プログラミング演習Ⅱ 第12回 文字列とポインタ(1)
最終回 総合演習 第13回目 [7月17日、H.15(‘03)] 本日のメニュー 1)総合演習課題 2)過去の試験問題 3)試験について
問題提起その 1 一文字ずつ文字(数字)を読み込み、それぞれの文字が何回入力されたかを数えて出力するプログラム。
多重ループ 繰り返し構造:補足事項 第8回目 [6月8日、H.16(‘04)] 本日のメニュー 1)前回の課題について
多重ループ 繰り返し構造:補足事項 第8回目 [6月12日、H.15(‘03)] 本日のメニュー 1)前回の課題について
C言語 配列 2016年 吉田研究室.
プログラミング実習 1・2 クラス 第 1 週目 担当教員:  渡邊 直樹.
第6章 2重ループ&配列 2重ループと配列をやります.
配列の扱い、探索 有効範囲と記憶域期間 第12回 [7月10日、H.15(‘03)] 今日のメニュー 1 前回の課題の復習
配列の扱い、探索 有効範囲と記憶域期間 第12回 [7月6日、H.16(‘04)] 今日のメニュー 1 前回の課題の復習
プログラミング入門2 第3回 繰り返し文 芝浦工業大学情報工学科 青木 義満
配列(1) 第9回目 [6月15日、H.16(‘04)] 本日のメニュー 1)前回の課題について 2)前回の宿題について 3)配列 4)課題
精密工学科プログラミング基礎Ⅱ 第3回資料 今回の授業で習得してほしいこと: 2次元配列の使い方 (前回の1次元配列の復習もします.)
第7回 条件による繰り返し.
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
高度プログラミング演習 (03).
第7回 条件による繰り返し.
第7回 プログラミングⅡ 第7回
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
第11回 プログラミングⅡ 第11回
プログラムの制御構造 配列・繰り返し.
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
配列変数とポインタ 静的確保と動的確保 ポインタ配列 2次元配列 時間計測 第1回レポートの課題
プログラミング序論演習.
知能情報工学演習I 第11回( C言語第5回) 課題の回答
プログラミングⅡ 第2回.
復習 breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・
復習 Cにおけるループからの脱出と制御 break ループを強制終了する.if文と組み合わせて利用するのが一般的. continue
情報基礎演習B 後半第2回 担当 岩村 TA 谷本君.
地域情報学 C言語プログラミング 第4回 while文、do~while文、switch文、 2次元配列、ポインタ 2017年11月10日
復習 if ~ 選択制御文(条件分岐) カッコが必要 true 条件 false 真(true)なら この中が aを2倍する 実行される
復習 breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・
第5章 まだまだ続く反復処理!! ~繰り返しその2 for~
プログラミング入門2 第5回 配列 for文 変数宣言 初期化
プログラミング基礎演習 第4回.
ループだよ!難しいよ! 第5章 while(ループ);.
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
第7章 そろそろ int 以外も使ってみよう! ~データ型 double , bool~
モバイルプログラミング第2回 C言語の基礎 (1).
プログラミング1 プログラミング演習I 第2回.
プログラミング序論演習.
プログラミング入門2 第5回 配列 変数宣言、初期化について
第4回 配列.
プログラミング入門2 第3回 条件分岐(2) 繰り返し文 篠埜 功.
知能情報工学演習I 第11回(後半第5回) 課題の回答
C言語講座 四則演算  if ,  switch 制御文.
岩村雅一 知能情報工学演習I 第13回(後半第7回) 岩村雅一
第5回 配列.
知能情報工学演習I 第10回( C言語第4回) 課題の回答
プログラミング演習I 補講用課題
= 55 課題6-1 #define _CRT_SECURE_NO_WARNINGS
変数と代入・読込と表示 第2回[平成15年4月24日(木)]:PN03ー02.ppt 今日の内容 1 プログラムの構造(復習)
Presentation transcript:

配列(2) 第10回[平成15年6月26日(木)]:PN03-10.ppt 今日の内容 1 素数を求める(教科書の例):復習 プログラミング入門('03) 2017/3/10 第10回[平成15年6月26日(木)]:PN03-10.ppt 配列(2) 今日の内容 1 素数を求める(教科書の例):復習 2 素数を求める(エラトステネスの方法) 3 代入式とコンマ演算子 4 二次元配列とは 5 二次元配列の入力・出力と計算 6 二次元配列を用いた計算 PN03-10.ppt

unsigned は符号なし 第3回目pptファイルを参照 復習 素数(その1:p.104-111) unsigned は符号なし 第3回目pptファイルを参照 int i, no; unsigned long cnt=0; for ( no=2; no<=1000; no++) { for ( i=2; i<no; i++) { cnt++; if ( no % i == 0 ) break; } if (no==i) printf("%d\n",no); printf("乗除回数: %d\n",cnt); List 5-15

復習 ・・・・ for ( no=2; no<=1000; no++ ) { for ( i=2; i<no; i++ ) { cnt++; if ( no % i == 0 ) break; } if (no==i) printf("%d\n",no); printf("乗除回数: %d\n",cnt); /* 偶数をはじめから除く */ no = 2; printf("%d\n",no++); /* 奇数のみを調べる */ no は 3 no+=2 i=3 i+=2 List 5-16,-17

復習 int prime[500]; int ptr=0; ・・・・ prime[ptr++] = 2; /* 既得素数を配列に保存 */ for ( no=5; no<=1000; no+=2) { for ( i=1; i<ptr; i++) { cnt++; if(no % prime[i] == 0) break; } if (ptr==i) prime[ptr++]=no; List 5-18

prime[ptr++]=2; prime[ptr++]=3; for ( no=5; no<=1000; no+=2) { int flag = 0; for ( i=1; cnt++,prime[i]*prime[i]<=no; i++) { cnt++; if(no % prime[i] == 0) { flag = 1; break; } } if ( !flag ) prime[ptr++]=no; } List 5-19

コンマ演算子(p.110) op1,op2,・・,opn →左から順に評価 (op1、op2、..、opnの順に評価する) b = 5; a = ( a=3, b+=a, c=b*5); a b c 5 for ( i=10, j=0; i>j; i--, j++) (注)a= a=3, b+=a, c=b*5; 違う結果!

代入式(p.98) k = a + b k = 代入式→変数へ値を代入する式(p.23) int k; double a=1.1, b=2.2; k = a + b; k = a + b k = k a b a=k=b=3.14 代入式; → 式文

前回の課題 次の式の値、各変数の値を求めよ。ただし、変数は全て整数型とする。 a=5; a+2; a=b=a+1; a=b=5; c=( a+2, b+3); a=2; if( a=1 ) b=a; else b=a; a=1; if( a==1, a==2) b=1; else b=0; a=2; if( a==1, a==2) b=1; else b=0; a=1; if( a++, (a==2)-(a=1)) b=1; else b=0; 提出用紙に授業への意見・感想・提案も書いて下さい

素数(その2) エラトステネスの篩(ふるい)のアルゴリズムを用いて、1000以下の素数をすべて求め、1行に10個ずつ出力せよ。 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17… 2の倍数を除く 2 3 - 5 - 7 - 9 - 11 - 13 - 15 - 17 - … 3の倍数を除く → 9(=3*3) から始める 2 3 - 5 - 7 - = - 11 - 13 - = - 17 - 19… 5の倍数を除く → 25(=5*5)から始める 2 3 - 5 - 7 - - - 11 - 13 - - - 17 - 19…

#include <stdio.h> #define MAXN 1000 /* 上限値 */ int main (void) { int a[1001],i,k,cnt; /*配列の初期化,a[0],a[1]は使わない 配列の全要素を true(1) とする */ for (i=2; i<=MAXN; i++) a[i]=1; /* 素数でない値を添字に持つ配列要素 */ /* を false(0) にしていく */ /* (篩にかけていく) */ /* 結果の出力へ続く

/* 篩の部分 */ for (i=2; i<=MAXN; i++) if ( a[i] ) for (j=2*i; j<=MAXN; j=j+i) a[j] = 0; 偶数もすべて調べている for文に無駄 → 3以上の偶数は調べ る必要がない ・偶数は最初に除くようにする ・while文 又は do-while文 で書き替えよう 演習

/* 4以上の偶数の要素はすべて false */ for ( ; i<=MAXN; ) a[i] = 0; /* 3以上の奇数についてチェックする */ i = 3; while ( i <= MAXN ) { if ( a[i] ) { ; while ( j <= MAXN ) { ; } } }

/* これより、結果出力 */ /* a[i] が true(1) の要素を出力 */ /* 1行に10個ずつ出力 */ cnt = 0; for ( i=2; i<=MAXN; i++) if ( ) { printf("%4d ",i); ; if ( ) printf("\n"); }

演習 エラトステネスの篩のプログラムの以下の部分を for文 を使って書き替えよ i = 3; while ( i <= MAXN ) if ( a[i] ) { j = i*i; while ( j <= MAXN ) { a[j] = 0; j = j + i; } } i = i + 2; }

二次元配列とは 要素を二つの整数の組で指定する配列 int d[10]; int a[6][10]; 第2添字・列 integer [0][1]・・・[8][9] 第 1 添 字 ・ 行 d[0] [0] [1] : [4] [5] ・・・・ ・・・ d[1] d[2] a[4][1] : : d[9]

宣言により、連続した 記憶場所が確保される int a[6][10]; 宣言により、連続した 記憶場所が確保される a[0][0] a[0][1] : a[0][9] 初 期 値 も こ の 順 に 記 録 さ れ る 第2添字・列 a[1][0] a[1][1] : a[1][9] ・・・・ ・・・ [0][1]・・・[8][9] [0] [1] : [4] [5] a[4][1] 第 1 添 字 ・ 行 : a[5][0] a[5][1] : a[5][9]

二次元配列の初期化 int a[3][2]={ a [0][1] {1,2}, {3,4}, [0] {5,6}, }; [1] [2]

演習(二次元配列の初期化) int d[4][3]= {1,2,3,4,5,6,7,8,9,10,11,12}; プログラミング入門('03) 2017/3/10 演習(二次元配列の初期化) int d[4][3]= {1,2,3,4,5,6,7,8,9,10,11,12}; のとき、次の要素の値はいくつか? d[0][0] → d[3][2] → d[2][2] → d[1][1] → d[0][3] → d [0][1][2] [0] [1] [2] [3] PN03-10.ppt

二次元配列への入力 a [0][1] [0] int a[3][2]; [1] 添字を指定して、変数のように入力する [2] scanf("%d",&a[0][0]); scanf("%d %d",&a[1][0],&a[2][0]); i=1; scanf("%d %d %d", &a[0][i],&a[1][i],&a[2][i]); for (i=0; i<3; i++) scanf("%d %d",&a[i][0],&a[i][1]);

二次元配列への入力 for ( i=0; i<10; i++) scanf("%d %d", &a[i][0], &a[i][1]); int a[10][2]; for ( i=0; i<10; i++) scanf("%d %d", &a[i][0], &a[i][1]); int a[10][5]; for ( i=0; i<10; i++) for ( j=0; j<5; j++) scanf("%d", &a[i][j]);

演習(二次元配列への入力) 10人分の学籍番号、英語、数学の点数を順番に配列に入力する以下の部分を完成せよ。 for文を利用して添字を指定する int d[ ][ ], i, j; for (i= ; i< ; i++) for (j= ; j< ; j++) scanf("%d",&d ); 続いて、入力、出力の全体を書いてみよう。

二次元配列への入力 int a[10][3], i; printf("番号、英語、数学の入力\n"); for (i=0; i<10; i++) scanf("%d %d %d", &a[i][0],&a[i][1],&a[i][2]"); printf("入力データは"); printf("%-8d %6d %6d\n", a[i][0],a[i][1],a[i][2]);

二次元配列を用いた計算 各学生の合計得点の計算 a[0][3] = a[0][1]+a[0][2]; a[1][3]  : [8] [9] [10] a[0][3] = a[0][1]+a[0][2]; a[1][3] = a[1][1]+a[1][2]; : : for (i=0;i<10;i++) a[i][3] = a[i][1]+a[i][2]; 番号 英語 数学 合計

二次元配列を用いた計算 各科目の平均点の計算 j=1; //英語について a[10][j] = 0; [0] [1] [2]  : [8] [9] [10] j=1; //英語について a[10][j] = 0; for (i=0;i<10;i++) a[10][j] =a[10][j]+a[i][j]; =a[10][j]/10; j=2; //数学について : : 科目と合計の平均 番号 英語 数学

二次元配列を用いた計算 int a[11][4], i; // 入力処理 for (i=0; i<10; i++) a[i][3]=a[i][1]+a[i][2]; for (j=1; j<=3; j++) { a[10][j]=0; a[10][j]=a[10][j]+a[i][j]; a[10][j]=a[10][j]/10; } //出力処理

演習(二次元配列を用いた計算) 前の頁の例で、入力された各学生の番号と各得点と合計得点、各科目の平均得点・合計の平均得点を順に出力するプログラムの部分を完成せよ。 printf(" 番号  英語  数学  合計 \n"); for( i=0; i<10; i++) printf("%d, %d, %d, %d\n", a[ ][ ],a[ ][ ],a[ ][ ],a[ ][ ]); printf("平均得点:") printf("数学=%d,英語=%d,合計=%d\n", a[ ][ ],a[ ][ ],a[ ][ ]); 提出用紙に授業への意見・感想・提案も書いて下さい

P入門(第10回)は 終了です。 次回(第11回)は 7月3日 プログラミング入門('03) 2017/3/10 P入門(第10回)は 終了です。 次回(第11回)は 7月3日 続いて、P演習に入ります。 では、しばらく休憩します。 PN03-10.ppt