プログラミング作法と デバッグ ― VC++ 編 ―.

Slides:



Advertisements
Similar presentations
1 第5回 配列. 2 今回の目標 マクロ定義の効果を理解する。 1次元配列を理解する。 2次元配列を理解する。 ☆2 × 2の行列の行列式を求めるプログラ ムを作成する.
Advertisements

情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
初年次セミナー 第8回 データの入力.
応用理工学情報処理 第1回(2015年10月 5日) 月曜日担当 前島展也 Manaba
ループで実行する文が一つならこれでもOK
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第4回 配列(2) 情報・知能工学系 山本一公
初年次セミナー 第4回 整数と実数の取り扱い.
第2章 数値の入力と変数 scanfと変数をやります.
配列(2) 第10回[平成15年6月26日(木)]:PN03-10.ppt 今日の内容 1 素数を求める(教科書の例):復習
リダイレクト パイプ 標準入出力プログラム コマンド行引数 関数 system()
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
基礎プログラミングおよび演習 第9回
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
C言語 第2講 生物機能制御学講座 濱田 農学部7号館209室.
第6章 2重ループ&配列 2重ループと配列をやります.
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
第10回 プログラミングⅡ 第10回
第7回 条件による繰り返し.
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
情報工学科 3年生対象 専門科目 システムプログラミング 第5回、第6回 ヒアドキュメント レポート課題 情報工学科 篠埜 功.
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
関数の定義.
プログラミング応用 printfと変数.
第10回関数 Ⅱ (ローカル変数とスコープ).
アルゴリズムとプログラミング (Algorithms and Programming)
リダイレクト パイプ 標準入出力プログラム コマンド行引数 関数 system()
プログラミング序論 2. n人のインディアン.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
プログラミング入門2 第11回 情報工学科 篠埜 功.
indentについて forやifの「中身」を右に寄せる. forやifの「外枠」は右に寄せない. int x; x = 3;
第7回 条件による繰り返し.
第9回関数Ⅰ (簡単な関数の定義と利用) 戻り値.
第7回 プログラミングⅡ 第7回
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
Cの実行モデル.
プログラミング基礎B 文字列の扱い.
プログラムの制御構造 配列・繰り返し.
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
岩村雅一 知能情報工学演習I 第12回(C言語第6回) 岩村雅一
復習 一定回数を繰り返す反復処理の考え方 「ループ」と呼ぶ false i < 3 true i をループ変数あるいはカウンタと呼ぶ
実数列を生成する際の注意 数学関数の利用 Excel によるリサージュ図形描画 Excel による対数グラフ描画
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
C言語 はじめに 2016年 吉田研究室.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
復習 breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・
復習 Cにおけるループからの脱出と制御 break ループを強制終了する.if文と組み合わせて利用するのが一般的. continue
C言語復習 来週もこの資料を持参してください.
復習 if ~ 選択制御文(条件分岐) カッコが必要 true 条件 false 真(true)なら この中が aを2倍する 実行される
C言語講座 制御(選択) 2006年 計算技術研究会.
復習 breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・
岩村雅一 知能情報工学演習I 第12回(後半第6回) 岩村雅一
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
情報処理Ⅱ 第2回 2004年10月12日(火).
情報処理Ⅱ 第9回:2003年12月16日(火).
プログラミング入門2 第5回 配列 変数宣言、初期化について
第4回 配列.
printf・scanf・変数・四則演算
第14章 ファイル操作 14.1 ファイルへの書き込み 14.2 ファイルからの読み込み 14.3 ファイルへの追加書き込み
第2章 数値の入力と変数 scanfと変数をやります.
復習 いろいろな変数型(2) char 1バイト → 英数字1文字を入れるのにぴったり アスキーコード → 付録 int
情報処理Ⅱ 第3回 2004年10月19日(火).
第5回 配列.
知能情報工学演習I 第10回( C言語第4回) 課題の回答
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
= 55 課題6-1 #define _CRT_SECURE_NO_WARNINGS
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
Presentation transcript:

プログラミング作法と デバッグ ― VC++ 編 ―

プログラミング作法 字下げ(インデント) 注釈(コメント) 初心者 名前のつけ方 モジュラー化 非対話化 配列の動的確保 注釈(コメント)           初心者 名前のつけ方 モジュラー化 非対話化 フィルタ(リダイレクト、パイプ)   中級者 コマンドラインオプション 配列の動的確保

字下げ(インデント) 対等な関係にある文は同じ桁位置に 制御文(if文, case文, while文, do文, for文)の内部の単文は字下げ(2文字分) { と } の内部も字下げ(2文字分) Tabキーは使わない(タブ数=8に) オートインデントは使わない 他のエディタでの印刷時に不揃いの可能性

注釈(コメント) // は一行コメントに /* … */ は複数行コメントに → 無効化 日本語(または英語)でわかりやすく /* … */ は複数行コメントに  → 無効化 日本語(または英語)でわかりやすく プログラムや関数のはじめに 目的、内容、参考文献 前提条件、制限事項 作成日時、作成者 プログラムや関数の最後に //プログラム名、//関数名 「今日の自分は、明日の他人」

名前のつけ方 役割を反映する簡潔な名前をつける ローマ字は避け、英語にする 広範囲に使う名前は長く、局所で使う名前は短く 長い名前を短くする方法 最初の数個の文字 int, str, info, sci, com 母音を省略     msg, ctrl, cnt, chg, ltd

名前のつけ方(その2) 大文字と小文字をうまく使い分ける 2つ以上の単語の区切りは明確化 型によって使う文字を決める ユーザ定義定数は大文字で始める   Pi, Epsilon ユーザ定義データ型は大文字で始める Point, Vector 汎用変数は小文字で始める 2つ以上の単語の区切りは明確化 threeWordName 型によって使う文字を決める 整数型の添え字は i, j, k,… 整数型の定数は N, M, L を含める MaxN 状態(論理変数)はis+大文字始まり isEven, isPrime

デバッグのコツ コンパイラ・メッセージの利用 ランタイム・エラーとその原因 よくやるミス 見つけにくいバグ

コンパイラ・メッセージ コンパイル情報 ファイル名(行, 桁): メッセージコード: 内容 コンパイル結果情報 error: エラー warning: 警告 コンパイル結果情報 /out:???.exe: 実行形式ファイル ???.obj:   オブジェクトファイル

頻度の高いエラー・メッセージ 以下のエラーの意味をよく理解しておく 構文エラー 定義されていない識別子です。 文字 ‘0x81’ は認識できません。 再定義されています。 関数には戻り値が必要です。 実引数が少なすぎます。 互換性のない型が含まれています。

ランタイム・エラー 制限オーバー スタック・オーバーフロー ハングアップ → [Ctrl-c] で強制終了 対策: 途中経過を報告させる 0で除算、負の平方根・対数 オーバーフロー、アンダーフロー スタック・オーバーフロー 再帰的定義など ハングアップ  → [Ctrl-c] で強制終了 無限ループなど 対策: 途中経過を報告させる どこまで正常に終わったかを出力 あやしい変数の値を出力

よくやるミス スペルミス 変数の宣言忘れ カッコのとじ忘れ セミコロンのつけ忘れ 文字列のシングルクォートとコンマ 予約語、宣言済み名前との競合 ソースファイル名の異常 コンパイル時の自動保存による失敗

見つけにくいバグ セミコロン 2バイト(全角)文字の混入 コメントの入れ子 while (式); 文; スペース(空白) コンマ、カッコ、 、 、 … コメントの入れ子 /* /* */ */  →  /* //  */ ; : ’

字下げとフォントの設定 devenv(Visual Studio のエディタ)において「ツール」→「オプション」→「テキストエディタ」→「C/C++」で「タブサイズ」、「インデントサイズ」をおのおの4にセットし、「空白の挿入」欄をチェックする。 Tabキーを時々、使いながらプログラムソースを入力。 ファイル名を ???.c として保存する。 Word(Notepad)で表示(印刷)してインデントの乱れがないか、確認する。 Wordの場合はMS ゴシックなどの等幅フォントを指定する。MS PゴシックなどPがつくフォントにはしないこと。 欧文フォントでは Courier New を用いるとよい。

デバッグの練習1 /* while の無限ループの練習 */ int main(void) { int a; printf("整数を入力 > "); scanf("%d", &a); while (a > 0); a = a - 1; printf("%4d\n", a); } } // while.c

デバッグの練習2 /* ランタイム・エラーの練習 */ #include <stdio.h> #define PI 3.141592 int main(void) { double x; x = sqrt(PI); printf("sqrt(PI) = %f\n", x); x = sqrt(-PI); printf("sqrt(-PI) = %f\n", x); } // sqrt.c

オプション問題 以下のプログラムを実行し、整数を入力したら、途中停止せずに終わってしまった。どこを直せばよいか。 /* 途中停止の練習 */ int main(void) { int i; char c; printf("整数を入力 > "); scanf("%d", &i); printf("i = %d\n", i); printf("リターンキーを押してください."); c = getchar(); }