復習 breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・

Slides:



Advertisements
Similar presentations
プログラミング論 第八回数字の計算,整数の入出力. 本日の内容 前回の課題(続き) 前回の課題(続き) 数字の計算をする 数字の計算をする – 加減乗除を行う – インクリメント演算子とデクリメン ト演算子.
Advertisements

IT 入門 B2 ー 連立一次方程式( 2 ) ー. ガウスの消去法の問題点 – 浮動小数点数の特殊な値 – 数学関数 ピボット選択つきガウスの消去法 演習 授 業 内 容 授 業 内 容.
復習 配列変数の要素 5は配列の要素数 これらの変数をそれぞれ配列の要素と呼ぶ この数字を配列の添え字,またはインデックスと呼ぶ
復習 配列変数の要素 5は配列の要素数 これらの変数をそれぞれ配列の要素と呼ぶ この数字を配列の添え字,またはインデックスと呼ぶ
配列の宣言 配列要素の初期値 配列の上限 メモリ領域 多次元配列 配列の応用
復習 2次元配列 4列 j = 0 j = 1 j = 2 j = 3 i = 0 i = 1 i = 2 3行
復習 2次元配列 4列 j = 0 j = 1 j = 2 j = 3 i = 0 i = 1 i = 2 3行
ループで実行する文が一つならこれでもOK
プログラミング演習(1組) 第7回
関数(1) 第11回 [6月29日、H.16(‘04)] 今日のメニュー 1 前回の課題 2 前回の宿題 3 いろいろな関数の演習 4 課題
コンピュータープログラミング(C言語)(3) 1.関数と分割コンパイル (復習) 2.キーボード入力
初年次セミナー 第4回 整数と実数の取り扱い.
ファーストイヤー・セミナーⅡ 第8回 データの入力.
配列(2) 第10回[平成15年6月26日(木)]:PN03-10.ppt 今日の内容 1 素数を求める(教科書の例):復習
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
C言語 第2講 生物機能制御学講座 濱田 農学部7号館209室.
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
第6章 2重ループ&配列 2重ループと配列をやります.
配列の扱い、探索 有効範囲と記憶域期間 第12回 [7月10日、H.15(‘03)] 今日のメニュー 1 前回の課題の復習
精密工学科プログラミング基礎Ⅱ 第3回資料 今回の授業で習得してほしいこと: 2次元配列の使い方 (前回の1次元配列の復習もします.)
第7回 条件による繰り返し.
第2回 Microsoft Visual Studio C++ を使ってみよう
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
繰り返し計算 while文, for文.
関数と配列とポインタ 1次元配列 2次元配列 配列を使って結果を返す 演習問題
関数の定義.
プログラミング応用 printfと変数.
基本骨格 #include #include : int main(void) { 変数の宣言 実行すること return 0; } #include int main(void) { int i; printf(”Hello world!\n”);
プログラミング入門2 第2回 型と演算 条件分岐 篠埜 功.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
第7回 条件による繰り返し.
第9回関数Ⅰ (簡単な関数の定義と利用) 戻り値.
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
四則演算,変数 入力文,出力文,代入文, ライブラリ関数
復習 2次元配列 4列 j = 0 j = 1 j = 2 j = 3 i = 0 i = 1 i = 2 3行
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
岩村雅一 知能情報工学演習I 第12回(C言語第6回) 岩村雅一
復習 一定回数を繰り返す反復処理の考え方 「ループ」と呼ぶ false i < 3 true i をループ変数あるいはカウンタと呼ぶ
復習 前回の関数のまとめ(1) プログラムはmain()関数の先頭から実行される
C言語 はじめに 2016年 吉田研究室.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
プログラミング序論演習.
復習 2次元配列 4列 j = 0 j = 1 j = 2 j = 3 i = 0 i = 1 i = 2 3行
x y 復習 変数とその種類 変数とは何か? →データ(数値)を入れておく箱 変数名 変数名とは何か?
復習 breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・
復習 Cにおけるループからの脱出と制御 break ループを強制終了する.if文と組み合わせて利用するのが一般的. continue
復習 if ~ 選択制御文(条件分岐) カッコが必要 true 条件 false 真(true)なら この中が aを2倍する 実行される
精密工学科プログラミング基礎 第7回資料 (11/27実施)
プログラミング入門2 第2回 型と演算 条件分岐 篠埜 功.
プログラミング基礎演習 第4回.
ループだよ!難しいよ! 第5章 while(ループ);.
cp-3. 計算 (C プログラミング演習,Visual Studio 2019 対応)
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
岩村雅一 知能情報工学演習I 第12回(後半第6回) 岩村雅一
精密工学科プログラミング基礎Ⅱ 第2回資料 今回の授業で習得してほしいこと: 配列の使い方 (今回は1次元,次回は2次元をやります.)
モバイルプログラミング第2回 C言語の基礎 (1).
四則演算,変数 入力文,出力文,代入文, ライブラリ関数
プログラミング入門2 第5回 配列 変数宣言、初期化について
printf・scanf・変数・四則演算
知能情報工学演習I 第9回(後半第3回) 課題の回答
復習 いろいろな変数型(2) char 1バイト → 英数字1文字を入れるのにぴったり アスキーコード → 付録 int
知能情報工学演習I 第10回( C言語第4回) 課題の回答
プログラミング演習I 補講用課題
= 55 課題6-1 #define _CRT_SECURE_NO_WARNINGS
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
Presentation transcript:

復習 breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・ 処理1 i <= 100 true false i = 1 i の値を1増加 条件1 break 処理2 条件2 continue 処理3 printf(・・・) int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・ if (条件1) break; ・・・処理2・・・・ if (条件2) continue; ・・・ ・・・処理3・・・・ } printf(・・・); これ以下のループ内処理をスキップ ループから飛び出す

復習 この処理全体が3回実行される 内側と外側では別の ループ変数が必要 多重ループ 4回ループ j < 4 Yes No 何かの処理2 j < 4 Yes No j = 0 j の値を1増加 外側のループ 内側のループ i = 0 No i < 3 Yes 何かの処理 i の値を1増加 何かの処理2が3×4回実行される 「何かの処理」がループ処理の場合 → 多重ループ

復習 ここがi=1からi=5まで5回反復される 2重のループ(その2) *印で三角形を描く ここがj=1からj=iまでi回反復される int i, j; for (i = 1; i <= 5; i++) { for (j = 1; j <= i; j++) printf("*"); } printf("\n"); 外側のループ i = 1 i = 2 i = 3 i = 4 i = 5 * ** *** **** ***** j = 1 j = 1, 2 j = 1, 2, 3 j = 1, ~, 4 j = 1, ~, 5 内側のループ

プログラミング ≒ デバッグ 復習 デバッガの利用(1) 虫のこと プログラムのミス → バグ バグを見つけて修正すること → デバッグ → バグ バグを見つけて修正すること → デバッグ バグを発見する道具 → デバッガ どんな優秀なプログラマーでも、初めからバグのない完全なプログラムは作れない! ⇒ プログラムを完成させることはデバッグを完了すること! 自分で考え抜いてデバッグすることが重要 プログラミング ≠ プログラムを書く プログラミング ≒ デバッグ

復習 デバッガの利用(2) [A] ツールバーでデバッグを始める手順 ツールボタンで右クリックして,デバッグを選ぶ デバッグツールバーからボタンを選ぶ (1) (2) (3) (1)ステップオーバー 次の行を実行 (2) ステップイン 次の行を実行(今回は使わない) (3) デバッグの中止 デバッグをやめる [B] メニューでデバッグを始める手順 デバッグメニューで,ステップオーバーを選ぶ

xiという名前の変数とみなされる.そんな変数は宣言していないので,エラーとなり実行不能 何度もユーザーに入力させられない 配列変数 100個の整数値を入力し,それらを変数に入れて様々な処理を同時にするプログラム(平均する,最大最小を求める等) 書いていられないので省略 配列を使わない場合 int aa, bb, cc,… zz; scanf("%d", &aa); scanf("%d", &bb); scanf("%d", &cc); scanf("%d", &dd); : int i, x[100]; for (i = 0; i < 100; i++) { scanf("%d", &x[i]); } 配列を使うと・・・ これも書いていられない int i, x0, x1, x2, … x99; for (i = 0; i < 100; i++) { scanf("%d", &xi); } xiという名前の変数とみなされる.そんな変数は宣言していないので,エラーとなり実行不能

aa[0] aa[1] aa[2] aa[3] aa[4] aa[5] aa[6] 配列変数の宣言 x[0] x[1] x[2] x[3] x[4] 全部で5個のint型変数の宣言 int x[5]; double bb[3]; float aa[7]; bb[0] bb[1] bb[2] 全部で3個のdouble型変数の宣言 aa[0] aa[1] aa[2] aa[3] aa[4] aa[5] aa[6] 全部で7個のfloat型変数の宣言 aa[7]は存在しない 間違いやすい ポイント!

この数字を配列の添え字,またはインデックスと呼ぶ 配列変数の要素 5は配列の要素数 int x[5]; x[0] x[1] x[2] x[3] x[4] これらの変数をそれぞれ配列の要素と呼ぶ この数字を配列の添え字,またはインデックスと呼ぶ !重要! インデックスの最大値 = 要素数ー1 int x = 7; float aa[x]; int x = 7; float aa[7]; !重要! 配列宣言時の要素数は定数でなければならない

配列変数の使用例(1) 単なる変数として使用する例 ループで用いるのが一般的 int x[5]; double bb[3]; float aa[7]; // …… (略) x[0] = x[1] + x[2]; bb[1] = 3*aa[3] + bb[2]; aa[5] = bb[3] + aa[4]; !注意! 通常の変数と同様,配列変数の宣言直後はめちゃくちゃな値が入っている. !重要! x[1], x[2]などの配列変数の値を使う前に,必ずまず値の代入が必要 float aa[100]; for (i = 0; i < 100; i++) { printf("値を入力してください"); scanf("%f", &aa[i]); } ループで用いるのが一般的

配列変数の使用例(2) データの合計値を求める例 int i; float aa[10]; // 配列の宣言 // データの入力 for (i = 0; i < 10; i++) { printf("値を入力してください:"); scanf("%f", &aa[i]); } // データの合計を計算 float sum = 0; printf("%d番目のデータは%f\n", i, aa[i]); sum = sum + aa[i]; printf("合計値は%fである\n", sum); 値を入力してください:3.1 値を入力してください:1.4 値を入力してください:2.5 値を入力してください:9.9 値を入力してください:10.2 値を入力してください:1.3 値を入力してください:0.22 値を入力してください:5.3 値を入力してください:6.2 0番目のデータは3.100000 1番目のデータは1.400000 2番目のデータは2.500000 3番目のデータは9.900000 4番目のデータは10.200000 5番目のデータは1.300000 6番目のデータは1.400000 7番目のデータは0.220000 8番目のデータは5.300000 9番目のデータは6.200000 合計値は41.519997である 続行するには何か . . .

配列変数の初期化 変数の初期化 配列変数の初期化 これと同じ意味 int a = 1; float x = 10, y = 20; int b[5] = {10, 20, 25, 35, 40}; 配列変数の初期化 b[0] = 10; b[1] = 20; b[2] = 25; b[3] = 35; b[4] = 40; これと同じ意味

配列変数の初期化(2) 要素数の指定が無い! 自動的に設定される これと同じ意味 int c[] = {3, 4, 5, 100, 200, 300}; 要素数の指定が無い! 自動的に設定される int c[6] = {3, 4, 5, 100, 200, 300}; これと同じ意味 int b[5]; b[5] = {10, 20, 25, 35, 40}; int c[7]; c[] = {3, 4, 5, 8, 100, 200, 300}; 初期化は配列変数の宣言と同時でなければならない. 宣言文と代入文の二つの文に別れてはいけない

関数の利用 数学=mathematics 関数: 数式的表現では 数値計算用ライブラリ関数を利用する準備 プログラムでは 関数:  数式的表現では 数値計算用ライブラリ関数を利用する準備 プログラムでは #include <stdio.h> #include <math.h> int main(void) { double x, y; printf("実数値を入力してください:"); scanf("%lf", &x); y = sqrt(x); printf("%lfの平方根は%lfです\n", x, y); } 平方根=square root 平方根の計算    ⇓ y = sqrt(x) C言語には様々な関数が 組み込まれている  ⇒ ライブラリ関数 実数値を入力してください:2 2.000000の平方根は1.414214です

ライブラリ関数の例 ライブラリ関数 意味 sqrt(x) xの平方根を求める sin(x) 角度x [rad]に対してsin x を求める cos(x) 角度x [rad]に対してcos x を求める tan(x) 角度x [rad]に対してtan x を求める asin(x), acos(x), atan(x) sin-1x,cos-1x,tan-1x log(x) logex を求める log10(x) log10xを求める exp(x) exを求める これらの数値計算用ライブラリ関数を利用するには  #include <math.h> が必要. printf(…),scanf(…) ⇒ これらも実は関数!    関数については第10回で詳しく学習

ライブラリ関数の補足 sqrt()関数を用いて整数値の平方根を求めようとするとエラーになる場合がある. // コンパイルエラーが起きるソース このエラーはsqrt()関数が浮動小数点数(実数)の平方根を求めるように作られているため起きる(変数nが整数型であるため,そのままでは平方根を求められない) // コンパイルエラーが起きるソース int n = 10; double x; x = sqrt(n); c:\Temp\kisopro\test.cpp(6): error C2668: 'sqrt' : オーバーロード関数の呼び出しを解決することができません。 次のようにソースを書き換えることでコンパイルエラーを防ぐことができる. 1.0を乗算するという無意味な演算を入れると,整数型から浮動小数点型に変換されるため,このエラーが起きなくなる. // コンパイルエラーが起きないソース int n = 10; double x; x = sqrt(n * 1.0); // nに1.0を乗算する (整数型) * (浮動小数点型) ⇒ (浮動小数点型)  となる // コンパイルエラーが起きないソース(別の方法) x = sqrt(n / 1.0); // 1.0で割る x = sqrt((double) n); // キャスト(double)を用いる. キャストについては後で学習