1 / 32

例題 ex2a, ex2b, ex2c

例題 ex2a, ex2b, ex2c. 科学科プログラミング 2005 年 10 月 14 日. レポート全体について. プログラムのコメント コメントは重要ですので. 必ず 記入してください 今後は,プログラムの先頭に,「プルグラムのファイル名,プログラムの概要,作成者,作成日」 も記入するとよい 例: /* days2.c * * M 月 D 日から M` 月 D` 日までの日数を求めるプログラム *

Download Presentation

例題 ex2a, ex2b, ex2c

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 例題ex2a, ex2b, ex2c 科学科プログラミング 2005年10月14日

  2. レポート全体について • プログラムのコメント • コメントは重要ですので.必ず記入してください • 今後は,プログラムの先頭に,「プルグラムのファイル名,プログラムの概要,作成者,作成日」 も記入するとよい 例: /* days2.c * * M月D日からM`月D`日までの日数を求めるプログラム * * 作成者:浜 奈子 / 作成日:2004年10月7日 */

  3. レポート全体について • プログラムのインデント • インデントをそろえることでプログラムの可読性が向上する • 特にrp2 以降は条件分岐や繰り返しが入ってくるので,気をつけること • プログラムを入力するときに1行ごとに Tab キーを押す癖をつけること (Meadow)

  4. Cygwin のコマンド: pwd • プログラムのコンパイルをしたところ $ gcc ex2a.c -o ex2a gcc: ex2a.c: No such file or directry gcc: No input files とでた • pwd を使って現在いるディレクトリの確認をする • ○: /cygdrive/c/home/prog • ×: /cygdrive/c/home/

  5. Cygwin のコマンド: pwd • lsを使って現在いるディレクトリのファイルの一覧を確認をする $ ls [Enter] prog ex2a.c がない $ cd c:/home/prog [Enter] $ ls [Enter] hello.c ex1b.c ex2a.c ○

  6. Meadow のファイルについて • 例題ex2a ステップ3のように,あるプログラムをすでに入力していて,そのプログラムを別ファイルとして追加修正をしたい場合 • Cygwin 上でファイルのコピー $ cp [元ファイル名] [別名ファイル名] • Meadow 上でファイルの別名保存 CapsLock + x CapsLock + w のあと,別名ファイルの指定

  7. if 文の使い方 • if ……必須 • else if …… if のあと0個以上 • else ……if (else if がある場合は最後の else if) のあとに1個か0個

  8. ○:正解 if (year == 2004){ printf(“thisyear\n”); } ×:間違い if (year = 2004){ printf(“thisyear\n”); } 条件の書き方の注意 • 例:year が 2004 だったら thisyear と表示する

  9. ○:正解 if (year == 2004){ printf(“thisyear\n”); } 何も表示されない ×:間違い if (year = 2004){ printf(“thisyear\n”); } 表示される 条件の書き方の注意 • もし year が 2003だったら?

  10. if 文の使い方 • 一番単純な使い方 if (mode==1){ printf("Hello\n"); } /* 4 の時は何も表示されない */ • 変数 modeが 1以上の時に限り print("Hello\n");が実行される 考えられる状況 1.画面に Hello と表示される 2.何も起きない

  11. if 文の使い方 • if と else の使い方 if (mode==1){ printf("Hello\n"); } else { printf("ByeBye\n"); }/* Hello と ByeBye のどちらかが必ず */ • 変数 modeが 1 の時に print("Hello\n"); それ以外の時に printf("ByeBye\n"); 考えられる状況 1.画面に Hello と表示される 2.画面に ByeBye と表示される

  12. if 文の使い方 • if と else if の使い方 if (mode>=1){ printf("Hello\n"); } else if (mode>=-1){ printf("Oh No!\n"); } /* たとえば -2 では 何も実行されない*/ 考えられる状況 1.画面に Hello と表示される 2.画面に Oh No! と表示される 3.何も表示されない

  13. if 文の使い方 • if と else if の使い方 if (mode>=1){ printf("Hello\n"); } else if (mode>=-1){ printf("Oh No!\n"); }else if (mode>=-3){ printf("Too small…\n"); }/* たとえば -6 では 何も実行されない*/ 考えられる状況 1.画面に Hello と表示される 2.画面に Oh No! と表示される 3.画面に Too small…と表示される 4.何も表示されない

  14. if 文の使い方 • if と else if と else の使い方 if (mode==1){ printf("Hello\n"); } else if (mode==2){ printf("Byebye\n"); }else { printf("Oh No!\n"); }/* 3つのうちどれかが必ず表示される */ 考えられる状況 1.画面に Hello と表示される 2.画面に ByeBye と表示される 3.画面に Oh No! と表示される

  15. 例題: ex2a • 以下の4項目について学習 • ステップ0:コメント,日本語の入力 • ステップ1:if (等号, else) • ステップ2:if (不等号, else) • ステップ3:else if • http://edu.cs.inf.shizuoka.ac.jp/2005/から,例題ex2a を開いて演習開始

  16. 整数型と浮動小数点数 • 整数型同士の演算結果は整数 • 1+1 は 2 3 – 4 は -1 • 3 * 4 は 12 4 / 5 は 0 (0.8 や 1 ではない) • 整数型と浮動小数点数の演算結果は浮動小数点数 • 1 + 2.3 は 3.3 3 – 4.4 は -1.4 • 2 * 3.14 は 6.28 2 / 0.25 は8.0 (8ではない) • 整数型と浮動小数点数の演算結果は浮動小数点数 • 1.3 + 2 は 3.3 3.4 – 4 は -0.6 • 3.14 * 2 は 6.28 4.3 / 2 は2.15 • 浮動小数点数同士の演算結果は浮動小数点数 • 1.3 + 2.1 は 3.4 3.4 – 4.4 は -1.0 (-1ではない) • 3.14 * 2.0 は 6.28 4.3 / 0.5 は 8.6

  17. 整数型と浮動小数点数 • 整数型と浮動小数点数が混在する場合は? 入力された整数型 in を二分の一した結果を浮動小数点数 fl に代入するには? in には 21 が入っているとする. • fl = in / 2 の場合 • まず, in / 2 を計算する.整数型÷整数型 は 整数型なので,10 となる • 整数型 10 を 浮動小数点数 fl に代入するので,10.0 が fl に代入される • fl = in / 2.0 の場合 • まず, in / 2.0 を計算する.整数型÷浮動小数点数 は 浮動小数点数なので,10.5 となる • 浮動小数点数 10.5 を 浮動小数点数 fl に代入するので,10.5 が fl に代入される

  18. 浮動小数点数の表示 • 浮動小数点数の表示 printf("radius = %f", radius); radius = 53.6759 • 小数点以下の桁数を指定する printf("radius = %.2f", radius); radius = 53.68

  19. 初期化 • 初期化について • 初期化とは,『その変数を使う前にその変数にデフォルト値(標準値)を代入すること』 • 変数は宣言時には何が入っているかわからない • 初期化をしておかないと予期しない動作をすることがある

  20. 初期化 • 1から100の総和を求めるプログラム(間違い) #include <stdio.h> int main(void){ int i; /* ループ用 */ int sum; /* 合計用 */ i = 1; /* 1から */ while(i<101){ /* 100までループ */ sum = sum + i; i = i + 1; } /* 結果の表示 */ printf("1+2+..+99+100=%d\n", sum); return 0; }

  21. 初期化 • 1から100の総和を求めるプログラム(間違い) $ ./sum.exe 1+2+..+99+100=1627511018 • なぜ,5050にならないのか? • 変数 sum の初期化を忘れているから • この場合は,sum を 0 で初期化する必要がある

  22. 初期化 • 1から100の総和を求めるプログラム(正解) $ ./sum.exe 1+2+..+99+100=5050 • 初期化するときの値は,その変数をどのように用いるかで変わる • i は,1から100 まで変化させるから,1 で初期化 • sum は合計を入れる変数なので 0 で初期化

  23. 初期化 • 1から100の総和を求めるプログラム(正解) #include <stdio.h> int main(void){ int i; /* ループ用 */ int sum; /* 合計用 */ i = 1; /* 初期化 */ sum = 0; /* 合計の初期化 */ while(i<101){ /* 100までループ */ sum = sum + i; i = i + 1; } /* 結果の表示 */ printf("1+2+..+99+100=%d\n", sum); return 0; }

  24. 初期化 (宣言と同時バージョン) • 1から100の総和を求めるプログラム(正解) #include <stdio.h> int main(void){ int i = 1; /* ループ用 */ int sum = 0; /* 合計用 */ while(i<101){ /* 100までループ */ sum = sum + i; i = i + 1; } /* 結果の表示 */ printf("1+2+..+99+100=%d\n", sum); return 0; }

  25. 例題: ex2b • 以下の3項目について学習 • ステップ1:while • ステップ2:while と sscanf の合わせ技if • ステップ3:while と変数の最大値 • http://edu.cs.inf.shizuoka.ac.jp/2005/から,例題ex2b を開いて演習開始

  26. 型キャスト • 例えば,総得点 score と,科目数 num の両方が整数型で,平均点 ave を浮動小数点数で求めたいとき (仮に score = 648, num = 7) float ave; . ave = score / num; printf("ave = %f", ave); ave = 92.0000 あれ? 割り切れないはず

  27. 型キャスト • 例えば,総得点 score と,科目数 num の両方が整数型で,平均点 ave を浮動小数点数で求めたいとき (仮に score = 648, num = 7) float ave; . ave = (float)score / num; printf("ave = %f", ave); ave = 92.5714 今度は正解

  28. 型キャスト • 例えば,総得点 score と,科目数 num の両方が整数型で,平均点 ave を浮動小数点数で求めたいとき (仮に score = 648, num = 7) float ave; . ave = (float)score / num; printf("ave = %.1f", ave); ave = 92.6 表示桁数を1桁にしてみた

  29. 型キャスト • 例えば,総得点 score と,科目数 num の両方が整数型で,平均点 ave を浮動小数点数で求めたいとき (仮に score = 648, num = 7) ave = (float)score / num; printf("ave = %f", ave); 下のでも同じ score / (float)num (float) score / (float) num

  30. 複数の変数の表示について • 浮動小数点数を2つ同時に表示 float square; float length; square = 3.14159; length = 6.28310; printf(“squ. = %f , leng. = %f \n”, square, length); squ. = 3.14159, leng. = 6.28310 • 最初の%fには,squareの値が,2番目の%fにはlengthの値が入る

  31. 複数の変数の表示について • 整数と浮動小数点数を2つ同時に表示 int number; float ave; number = 4; ave = 84.34; printf(“[%d]ave. = %f \n”, number, ave); [4]ave. = 84.3400 • 最初の%dには,numberの値が,2番目の%fにはaveの値が入る

  32. 例題: ex2c • 以下の3項目について学習 • ステップ1:int と float • ステップ2:変数の型のキャスト • ステップ3:while の使い方2 • http://edu.cs.inf.shizuoka.ac.jp/2005/から,例題ex2c を開いて演習開始

More Related