2017年度 プログラミング演習A
2017年4月28日
第
2回
第2回の内容
• VisualStudio2017のコンソールアプリ
ケーションを作る
– プロジェクトの作成方法
– コンパイルと実行
– デバッグ方法
• C/C++のHelloWorld
– 文字列を出力
– ファイル出力
• 課題の提出方法
Visual Studio 2017
プロジェクトの作成
• Visual Studioでプログラミングをするときは,はじめに「
プロジェクト
」を作
成する必要があります.
• はじめに下記の要領で
プロジェクトを新規作成
します.
– 「ファイル」→「新規作成」→「プロジェクト」を選択 ここを選択プロジェクトの作成
• 「新しいプロジェクト」というウィンドウが出てくるので「Win32コンソールア
プリケーション」を選択する.
• 「名前」に好きなプロジェクト名を記入する
ここを選択 プロジェクト名を記載 :日本語名はつけないこと! ここはプロジェクト名に合わせて変化する 最後に OKを押すプロジェクトの作成
• 保存場所はデフォルトで「c:¥User¥ユーザー名¥Documents¥Visual
Studio 2017¥Projects」が指定されており,プロジェクト名のフォルダが作
成される.
• 「Win32アプリケーションウィザード」というウィンドウが現れるたら「次へ」
を押して下記の画面にする.
• 「追加のオプション」の「空のプロジェクト」にチェックを入れる.
• 「完了」をクリックして新規プロジェクトの作成完了
ここにチェックを入れる 完了を押して完成新規ファイルの作り方
• プロジェクト立ち上げ直後はファイルが一つも存在しない.
• 左側にある「ソリューションエクスプローラー」中のプロジェクト名の下にあ
る「ソースファイル」を右クリックして出てくるリストから「追加」
→「新しい項
目」を選択
「ソースファイル」を右クリックして 「追加」→「新しい項目」 プロジェクト立ち上げ直後の画面新規ファイルの作り方
• 「新しい項目の追加」ウィンドウが出たら作成したいファイルの種類を選
択しファイル名を記述したら追加ボタンを押す.
• C/C++のプログラムをするので「C++ファイル(.cpp)」を選択
• 「名前」に好きなファイル名をつける
ここを選択 ファイル名を記載 最後に追加 を押す C++の拡張子は .cppとなる新規ファイルの作り方
• 例として「source.cpp」を作成した結果を示す.
追加された ファイル プログラムを書く スペースC++のプログラミングとコンパイル
• 作成したcppファイルに下記のコードを記載する.
#include
<iostream>
using namespace
std;
int
main(){
cout << "Hello C++ World" << endl;
}
エディタに記載した例 ストリームのライブラリ (とりあえず書く) 名前空間の指定 (とりあえず書く)C++のプログラミングとコンパイル
• コンパイルするときは,上部メニューの「ビルド」→「ソリューションのビル
ド」を選択
C++プログラムの実行
• コンパイルしたプログラムの実行は,上部メニューの「デバッグ」→「デ
バッグなしで開始
ここを選択 実行結果 ウィンドウが現れて 「Hello C++ World」と表示されるC++プログラムの実行
• プログラムのコンパイルや実行にはショートカットボタンを利用できる
– コンパイル:F7 – デバッグ:F5 – デバッグなしで実行:Ctrl+F5• 「デバッグ」や「デバッグなしで実行」を行ったときに
プログラムが以前実
行したプログラムから変更があった場合は,プログラム実行前に自動で
コンパイルしてくれる
.
• 「デバッグ」でプログラムを実行した時は,プログラム終了時に実行結果
が表示されるウィンドウも閉じられてしまう.
• 「デバッグ」はウィンドウ上部にあるショートカットアイコンを押すことでも
実行可能.
このアイコンを 押すだけで コンパイル+実行 してくれるC言語とC++言語
• C言語で出来ることはC++言語で全て実行可能
• 下記サンプルは同じ実行結果となる.
• C言語
• C++言語
• 上記の2つのプログラムは.cppファイル上で書き換えてあげると双方とも
コンパイル・実行できる.
#include <stdio.h> int main(void){ printf("Hellow World ¥n"); } #include <iostream> using namespace std; int main(){cout << "Hello World" << endl;
} コンソールへ 改行を表す 出力する
• C++ではコメント文を「/* */」で囲む方法以外に「//」と記載すること
以降の文字をコメント文にすることができる
• 選択箇所の一括コメントアウトが可能
コメント文
コメント文になった箇所は色が変わる C++でprintfを使える ドラッグしてコメントアウト したいところを選択 コメントアウトのアイコンを押すと選択箇所が一括して コメントアウトされる.隣はコメント解除アイコンサンプルプログラム1
• 下記のプログラムを記載してみる(
バグ(間違い)があり実行できません
)
#include <iostream>
using namespace std;
void output(){ //output関数
int i=0;
cout <<"func_output "<< i << endl;
i++;
}
int main(){
while(1) outputt(); //無限ループ
}
右のプログラムを コンパイルしてみる エラー発生 コンパイルできないプログラムのデバッグ
• プログラム記述中に「予約語」は色付きでわかりやすく表示してくれる.
• プログラム中に先に定義した内容もマウスを変数上に置くと示してくれる.
• 関数や変数の上にマウスポイ
ンタを置き,右クリックをすると
メニューが開き,「定義へ移動」
を選択すると関数や変数を定
義した場所にジャンプしてくれ
る.
マウスポインタを上に載せると 下に変数の説明が出る 定義関数は色付きで表示 右クリックでメニューが開く カーソルがジャンプするプログラムのデバッグ
• プログラムのコンパイルに失敗した時は,間違えた箇所が「出力」ウィンド
ウに表示される
• プログラム記入中にもリアルタイムに変数や関数の判定をしてくれるので
プログラムミスがわかりやすくなっている
エラー内容 関数名が間違っていて参照できていない.コンパイル前でも 下に赤く波線がでているときもプログラムミスの可能性が高いプログラムのデバッグ
• エラー表示をしてくれるが,わかりにくい場合がある.
– 文法間違いではなく定義が間違っている場合が多い.• わかりにくいエラーの例
エラー内容? ここでエラー? ここで変数の定義が間違っているため コンパイルできないプログラムのデバッグ
• プログラムが実行できるように修正したプログラムを下記に示す.
• ただし,出力結果は...
#include <iostream> using namespace std;void output(){ //output関数 int i=0;
cout <<"func_output "<< i << endl; i++; } int main(){ while(1) output(); //無限ループ } output関数を呼んだ数だけ i をカウントアップさせたかったが 「0」しか出力されない どこが原因か探りたい!!
プログラムのデバッグ
• デバッグツールの機能を使う
– プログラム実行時に「デバッグ」(F5)で実行する. – 1行毎にプログラムの実行内容を確認できる. – 変数のデータを観察できる• まず,プログラムを実行する前にブレークポイントを指定する.
– プログラムを記載するスペースの左横にある列をクリックするとブレークポイ ントを指定できる. プログラムを一時停止させたい 行をクリックして指定 ブレークポイントのマーク 外すときはマークをクリックプログラムのデバッグ
• 「デバッグ」(F5)を実行する.
• ブレークポイントを指定したところでプログラムが一時停止する.
– 黄色い矢印がブレークポイント上に現れる. – ブレークポイントで一時停止しない場合は,プログラムが指定したブレークポ イントに辿り着く前に何らかの処理を続けるプログラムになっているはず. 黄色い矢印がここで止まるプログラムのデバッグ
• 上部にあるアイコンで,プログラムを1つづつ実行できる.
– 「続行」:プログラムを次のブレークポイントが出現する箇所まで実行する – 「ステップイン」:関数がある場合は,関数の中にプログラムの実行を進める – 「ステップオーバー」:関数があっても,その中に入らず次の行まで実行 – 「ステップアウト」:現在の関数から抜ける 続行 ステップイン ステップオーバー ステップアウト ステップイン ステップオーバー ステップイン ステップオーバー ステップアウト ステップイン 1行進む 関数の中 に入る ステップアウト whileは抜けられないので全て実行後に戻る whileの先頭に戻る ステップオーバー/ステップインで最後の行に到達,or ステップアウト coutを実行するところで ステップインを押してしまうと 標準関数に移動してしまう 抜け出したいときはステップアウト を実行すれば良い リスタート デバッグ中止プログラムのデバッグ
• デバッグ中に
変数の値がどのように変化しているか観察したい
ときは,ブ
レークポイントなどでプログラムの実行が一時停止している状態(黄色い
矢印が止まっている状態)のときに,対象となる変数を右クリックした時に
現れるメニューの
「ウォッチ式の追加」
を選択する.
変数を右クリックして 現れるメニュー ウォッチ式の追加を 選択する ソースコードを記載しているウィンド ウの下に「ウォッチ」ウィンドウが現 れ,追加した変数がリストに表示さ れる. 現在代入されている値が 表示されるプログラムのデバッグ
• ウォッチ式に追加した値は16進数でも確認することができる.
– ウォッチウィンドウに追加した変数の行を右クリック – 出てきたメニューから「16進数で表示」を選択
ファイルの削除
• プロジェクトからファイルを削除したいとき
は,削除したいファイルを選択
後に右クリックし,メニューから「削除」を選択(もしくは「
Del」ボタン)
• ポップアップウィンドウに現れる「クリア」を押すとプロジェクトから該当す
るファイルが除かれる.(ファイルは消されていない)
• ポップアップウィンドウに現れる
「削除」を押すとファイルがゴミ箱に移動
し
てしまう.
プロジェクトから外したいとき ファイルを完全に削除したいとき既存ファイルの追加
• すでに記載してある.cppファイルをプロジェクトに追加したいときは,新規
ファイルを追加する方法と同様に左側のソリューションエクスプローラの
「ソースファイル」を右クリックして出てくるメニューから「追加」
→「既存の
項目」を選択する
• ポップアップウィンドウで該当する
ファイルを選択して追加する
追加したい ファイルを 選択プロジェクトのフォルダ構成
• 「c:¥User¥ユーザー名¥Documents¥Visual Studio 2012¥Projects」に
プロジェクト名のフォルダが生成されている
– 下記の例では「ensyu1」というプロジェクトを作成時のフォルダ構成例 – プロジェクト名と同じ名前の「ensyu1」フォルダに.cppファイルや.hファイ ルが保存される – 「Debug」フォルダの中にはコンパイルした実行ファイルensyu1.exeが保 存されている.実行ファイルをダブルクリックしてもプログラム実行できる – プロジェクト名.slnというソリューションファイルをダブルクリックしてプロ ジェクトを開くことができる プロジェクトのソ リューションファ イル プロジェクトを開き直 したいときに指定する ファイルプロジェクトの登録ファイルの注意点
• プロジェクトには複数の.cppファイルが登録できる
• 複数ある.cppファイルのうち,main()関数を含む.cppファイルは1つのみ
にすること
– 複数の.cppファイルにmain()関数があるとコンパイルできない プロジェクトにはファイルを複数登録可 main関数はプロジェクト に1つだけ 両方のファイルにmain関数を書くと... エラー発生.コンパイルできない. 対処法:いらないファイルをプロジェクトから削除. どちらかのファイルだけmain関数を書く課題の提出方法
• プロジェクトのフォルダ名と同じフォルダ名の中のファイルを電子メールに添 付して提出 – 提出したファイルは,プロジェクトに登録されているファイルのみにすること – 課題を提出前に,添付ファイルを使ったプログラムが実行可能であることを確認 すること • 上記の方法以外の課題提出は受け取らない. フォルダ中にあ るプロジェクトに 登録されている ファイルを提出 する課題の提出方法
• メール提出の時は,下記のアドレスに添付メールで課題のプログラムを
提出する
– [email protected]• メールではタイトルと本文をきちんと書くこと
– タイトル:「プログラミング演習A第*回目課題」(*は授業回数に合わせる) メールの記載例 メールタイトル: プログラミング演習A第1回目課題 本文: 電気情報工学科 田窪先生 学籍番号A16TN000の田窪です。 プログラミング演習II第1回目課題のプログラムを 添付ファイルで提出いたします。 添付ファイル:ensyu1.zip よろしくお願いいたします。 ---大阪市立大学 工学部 電子情報工学科 1回生 学籍番号 A16TN000 田窪 朋仁---C言語の基本
• C言語の形式
– ヘッダファイル • 「#include ファイル名」で記載 • ファイルの先頭に書く • #include(取り込む)で指定されたファイルは ヘッダファイルという • ヘッダファイルには,構造体などの定義が記載されている • ライブラリ関数を使用するときは,対応するファイルを指定 • 自分専用のヘッダファイルを作成することも可能 – 小文字を使用 • 原則として,英小文字を利用する • 大文字は,特殊な定数名などに使用されるときがある – コメント(注釈) • C言語のコメントは,「/*」で始まり,「*/」で終わる • コメントは複数行になってもよい – 括弧({, })の使用 • 処理のまとまりを表すために全体を 「 { 」, 「 }」 で囲む • 括弧の対があっていないとコンパイルできない #include ファイル名 ・・・ #include ファイル名 int main(void) { 変数などの定義 処理内容 } その他の関数の定義 C言語の全体の形式 int main(void) { ←この括弧は改行してもよい ・・・ }C言語の基本
– セミコロン • 複数の式や文からなる各文の最後にセミコロン(;)をつけなければならない – 識別子 • 変数や配列名,関数名を使用する場合,それらに名前を付けて識別できるように する • この名前を識別子と呼ぶ • 識別子は,英字,数字,下線記号を組み合わせて指定 • 先頭は数字にしてはいけない – 定数表現 • 整数は,10進数のほかに,8進数,16進数が使用できる • 8進数は,先頭に 0 をつける • 16進数は,先頭に 0xをつける: ex. 0xffff (16進数のFFFF) • 文字定数は,一重の引用符( ‘ )で囲んで表す – Ex.: ‘a’ , ‘b’ – 改行コード: ‘¥n’ – すべてのビットが0 (null文字) : ‘¥0’ • 文字列は,二重の引用符( “ )で囲んで表す – 文字列の最後には必ず,ヌル(null)文字がついている – Ex: “ab” ・・・’a’, ‘b’, ’¥0’ の3つの文字が含まれているデータ型と変数の定義
• 変数定義の一般系
– データ型名を記載後にスペース(半角)を空けて変数名を宣言 • データ型名 変数名; – 同じデータ型の変数を複数定義するときは,データ型名のあとに,コンマ「, 」 で区切ってならべる • データ型名 変数名1, 変数名2, ・・・, 変数名n ; – データ型名の例 • 文字型 char • 単精度型 short • 整数型 int • 長精度型 long • 浮動小数点型 float • 倍精度浮動小数点型 double – 記載例 • int i, n, test; • char a;変数の利用
• 変数とは,何らかの値を入れることのできる入れ物
• 変数は,宣言してから使う
• 変数へは,「=」を使って値を入れる
• 変数名を書けば変数に入っている値の代わりになる
例1: #include <stdio.h> int main(void) { int a; a = 0; printf(“%d ¥n”, a); a = 5; printf(“%d ¥n”, a); } 実行結果 ーーーー 0 5 「=」 を使って「5」を代入 「=」 を使って「0」を代入 例2: #include <stdio.h> int main(void) { int a = 0; printf(“%d ¥n”); } 変数宣言時に同時に値を入れることもできるコンソールにデータを出力する
• printf を用いてコンソールにデータを出力する
– 文字列「hello」を表示するとき • printf(“hello”); – 「hello」の後に改行をいれたいとき,改行コード「¥n」を記載 • printf(“hello¥n”); – int型の変数 a に入っている数字を表示するとき • printf(“%d”, a); • %dは,書式制御文字列と呼び,変数 a を10進数(decimal)で表示する意味 – 文字と数値を混ぜて表示 • printf(“goukei = %d”, a); – 二重引用符「”」で囲まれた文字列を書式制御文字列と呼ぶ – 書式制御文字列の後に「 , 」で区切って並べた変数を引数と呼ぶ – 書式制御文字列中の文字は,そのままコンソールに表示される – 書式制御文字列中の「%」に続く文字はコンソールに表示されない変数を交えた演算
• 変数の値を変えるには,「+=」,「++」などの演算子を使う
• 「-=」,「--」の演算子は引き算に置き換えて考える
• 「+=」や「-=」は,
記号を反対にして書かない
こと
– 「=+」,「=-」は,挙動が全く違うことに注意!! • ex: a =- 1; は変数aに「-1」を代入していることになる. 例: #include <stdio.h> int main() { int a =0; a +=2; printf(“%d ¥n”, a); ++a; //a++でも良い printf(“%d ¥n”, a); } 「a += 2」は,a+2の計算結果を aに代入する操作 「a = a + 2;」と記載可能 実行結果 ---2 3 「++a」は,a+1の計算結果を aに代入する操作 「a = a + 1;」と記載可能 スペースは なくてもよいコンソールからの値の入力
1/2
• scanf関数を使ってコンソール画面から値を入力する
• キーボードからint型の変数aに整数値データを入力したいとき
scanf(“%d”,&a); – scanf関数は,printf関数と似ている – 「”」で囲まれた書式制御文字列は,printfと同じルール – 変数aの前に「&」記号がつくことに注意(&がなくてもコンパイルエラーが出 ないので注意!結果が完全に望んでいたものとは異なります) – 「&」がつく理由は後程説明するのでとりあえずそのまま覚えておく /* Example 1 */ #include <stdio.h> int main() { int a; scanf(“%d”, &a); /*コンソールからの入力*/ printf(“%d”, a); /*コンソールに表示*/ } 実行例 5を入力して「エンター」キーを押す 5が表示されて終了コンソールからの値の入力
2/2
• a, bの2つの変数を同時に入力したいとき
scanf(“%d %d”, &a, &b);
– %dと%dの間に空白は必要ないがわかりやすくするためにつけておく – コンソールから入力するときは,スペース区切りで値を入力
– もしくは,改行して2回入力 scanf(“%d,%d”, &a, &b);
– 「, 」(カンマ)区切りで入力したいときは%dと%dの間にカンマを記載する /* Example 2 */
#include <stdio.h> int main() {
int a, b;
scanf(“%d %d”, &a, &b); printf(“%d%d¥n”, a, b); printf(“%d %d”, a, b); } スペースがないとき スペースがあるとき 実行結果 スペースがないと数字がつながって表示される スペース区切りで入力 スペースが入っている. 改行がないので真横に プログラム終了時の文字が表示される
まとめ
• Visual Studioのプロジェクト作成方法を解説
– 空のプロジェクトにチェックを入れる – SDLのチェックを外す!• 課題の提出方法
– メールでプログラム送付 – 必ず実行可能であることを確認してから送付• C言語の基本定義について少し復習
– データの型 – 変数について• printf関数を使ったコンソール画面への文字出力
– 書式制御文字列• scanf関数を使ったコンソール画面からの入力
本日の課題
下記の2つのプログラムを別々のプロジェクトで作成し,実行結果を確認せよ.作成したプログラムを電子メールに添付して提出し,電子 メールには実行結果の説明を記載せよ. 1.下記のように数字を入れると出力結果に2が4回加算されたようすを逐次各行に表示されるプログラムを作成せよ. プログラムファイル名は「proga1.cpp」で提出 1 (1を入力してエンター) --以下出力結果---3 5 7 9 2.下記のプログラムは間違っていて実行できない.実行できるように修正して出力結果を示せ.「proga2.cpp」で提出 ---proga2.cpp---#include <stdio.h> int main(void) {int hensu, num; int teisuu = 1 hensu=10; printf("変数 = %d¥n", hensu); printf("定数 = %d¥n", teisuu); hensu++; printf("変数 = %d¥n", hensuu); printf("足したい数字を入力して下さい : "); scanf("%d", num); hensu+=num; printf(" 結果 = %d", hensu); }