Visual C++ 2005 Express または 端末室ＰＣの
Visual Studio .Net
Net で 既存のＣプログラムを利用して新たなCプログラムを作る。
（前回のprogram0 から program1 を作成する）

メニューでファイル ー 新規作成 ー プロジェクトを選択新しいプロジェクトを作成するダイアログが現れる。

プロジェクトの種類はWin32 プロジェクトを選択。

Win32 を選択。

（Win32プロジェクトの表示がなければWin32コンソ ルアプリケ ションを選択）
Win32コンソールアプリケーションを選択）（次のメニュー画面でWin32 プロジェクトに変更可能。）

Visual Studio .Net の場合

プロジェクトの種類は

Win32 プロジェクト

Visual C++ プロジェクトのプロジ クトのを選択。

Win32 を選択。

新しいプロジェクトの名前と保存ディレクトリを入力。

＜名前を入力してください＞という文を消去してう文を消去
プロジェクトの名前program1 を入力。

プロジェクトを保存するフォルダを選択。

アプリケーションの種類はWindows アプリケーションを選択。
を選択

追加のオプションはプ
空のプロジェクトを選択。
完了をクリックVisual Studio .Net の場合

アプリケーションの種類はWindows アプリケーション
プ ケ シを選択。
空のプロジェクトを選択。

ソリューション ー プログラム名の付いたフォルダ
ー ソースファイルフォルダ を選択して 右クリック。
右クリックメニューが現れるので、追加 ー 新しい項目 を選択。

新しい項目の追加 ダイアログ が現れる。

C++ ファイルを 選択。
C
コード を 選択。

＜名前を入力してください＞という文を消去してCプログラムファイル名program1.c を入力。
拡張子 .C を忘れないようにする。

右側のウィンドウにProgram1.c の内容がソースファイル フォルダにダ
Program1.c が追加される。

表示されている。
当然、最初は空白のみ。

program0.c の内容をコピーする。
前回作成した
前回作成したprogram00 フォルダ内のprogram0.vcproj
pg
p j ファイルをダブルクリックする。
をクリ クす 。

表示メニューは詳細 を選択。

program0.c の内容が表示されるので全文を選択してコピーする。
全文を選択してコピーするprogram1.c にprogram0.c をペーストする。

プログラム開発は、既に作成したものを編集、改良して作成する作業が通常の方法。
改良して作成する作業が通常の方法

program0.c のコードを編集してprogram1.c を作成する。

文字化け修正作業を行う。
文字化け修正作業を行う
Program1 を右クリックしてメニューを表示。
最下段にある プロパティ
プ パテ を選択。
を選択構成プロパティ ー 全般 を選択。 文字セットを変更する。
Ｕｎｉｃｏｄｅ文字セット になっているので、マルチバイト文字セットに変更。

program1 の実行。

ウィンドウの大きさが400x500 pixel にな ているなっている。

実行ボタン（緑三角印）をクリック。

端末室のＰＣでprogram1p gを実行する場合は、program1 のプロジェクトフォルダ内にヘッダファイル
ダフ イル HU.h
HU h をコピーして、を ピ して#include <HU.h> と記述されている部分を#include “HU.h” と修正する。と修 する
プロジェクトフォルダ内のヘッダファイルの読み込みは、#include < > ではなく#include “ ” と記述しないと読み込まない。と記述しないと読み込まない新たなプロジェクトフォルダを作るたびに、その中にヘッダファイルHU ｈをコピ するのが面倒な場合はヘッダファイルHU.ｈをコピーするのが面倒な場合は、C:¥Program Files ¥ Microsoft Visual Studio 9.0 ¥ VC
¥ include の フォルダ内に、ダ内HU.ｈをコピーすると、を ピ すると#include <HU.h> でOK。
で。

試しに、わざとバグ（誤り）を入れてみる。
printf() 関数を、print() と変更してコンパイルする。
下のウィンドウにビルドログが現れ、エラーを指摘する。
エラー文をダブルクリックす
文をダブ ク クす
るとバグを含む文に印が付く。
バグを含む文に印が付く

ウィンドウタイトル表示// Program1.c
Program1 c#i l d <HU.h>#include<HU h>void Main(void){
TextWindow(0,0,300,200);
Title("Program1");
printf("Hello, C. But I hate C.");}改行文字 ¥n// Program1.c
Program1 c#i l d <HU.h>#include<HU h>
void Main(void){
TextWindow(0,0,300,200);
Title("Program1");
printf("Hello, C. ¥nBut I hate C.");}改行文字 ¥n// Program1.c
Program1 c#include <HU.h>void Main(void){
TextWindow(0,0,300,200);
Title("Program1");
printf(“¥nHello, C. ¥n¥n¥nBut I hate C.");}空白文字// Program1.c
Program1 c#i l d <HU.h>#include<HU h>
void Main(void){
TextWindow(0,0,300,200);
Title(“Program1”);
printf(“¥n Hello, C. ¥n¥n¥n But I hate C.");}Title(“ ”) や printf（“”） などの “ と ” に挟まれた文字列を 文字列リテラ という文字列を、文字列リテラルという。
文字列リテラルには日本語などの２バイト文字もOK.
日本語を使 たときの注意点 全角空白文字の恐怖。
日本語を使ったときの注意点。
全角空白文字の恐怖
日本語入力（全角文字入力）モードの状態で、日本語入力（全角文字入力）モドの状態で、日本語を入れてはいけないところに空白文字を入れると、普通の半角スペースとは異なる文字なので、普通の半角スペースとは異なる文字なのでプログラムはエラーになります。
空白なので目で見ても間違いは見つかりません。
とても発見が困難なバグになります。
とても発見が困難なバグになります（バグ : bug = プログラム記述ミス）
以上の理由で、プログラム中は日本語を使わない方が無難。

// Program2.c

変数の宣言#include <HU.h>void Main(void){
int i;
TextWindow(0,0,300,300);()
Titl ("PTitle("Program2");2")
i 1i=1;
printf(" i = %d ", i);printf(}int i ;とは、４バイト整数（1バイトは256なので256x256x256x256個の整数 を れ れる変数を使う整数）を入れられる変数を使うことを宣言している。
を宣る
通常の変数宣言文は、main関数内の最初に書く。
変数の値は、次の範囲内の整数です。
char 型（１バイト）は、-128 ～ 127 の範囲（文字変数（半角英数文字））
short 型（２バイト）は、-32768 ～ 32767 の範囲
int 型（４バイト）は、-2147483648 ～ 2147483647 の範囲
float型は4バイトの実数型
double型は８バイトの実数型

i=1;とは、整数変数 i に、数字 １ を代入している。
C言語では、= は、等号ではなく、代入を意味する。
( C言語では、等号は、 == と書く。不等号は、!= と書く。)
A = B ； 変数AにBの値を代入。（Aの値をBと同じにする。）（A == B ； AとBが等しい。）（A != B ； AとBが異なる。）
i は aでも Bでも hensuu でもかまわない任意の変数名。
変数名は半角文字または半角文字列であれば何でもよいが、普通、C言語では、変数は小文字、定数は大文字で宣言する。

printf(“ i = %d”,i); とは、文字表示ウィンドウに、i = を表示し、次に整数を表示することを示している。
ｐrintf（）関数は、整数を表示することを%d と表現する。と表現する
文字変数を表示する場合は、%ｃ
文字変数を表示する場合は% と表現する。と表現する
実数を表示する場合は、%lf と表現する。
double x ; と宣言した場合は、宣
printf( “ x = %lf “, x ) ;表示したい数字を持つ変数を、の次に ,（カンマ）を書いてから変数名を書いて、” ”の次にカッコをとじる。

// Program2.c#include <HU.h>void Main(void){
inti;
double x ;TextWindow(0,0,300,300);
Title("Program2");
i=1; x = 3.14159;
printf("¥n i = %d ", i);printf("¥nprintf(¥n x = %lf%lf",, x);
printf("¥n");printf("¥n i = %lf ", i);printf("¥n x = %d ", x);}

誤った表示指定はテキストウィンドウに正しい数字を表示しない。
しかし文法エラーではないのでプログラムは動いてしまう。

// Program2.c

整数の２乗を表示する#incl de <HU.h>#include<HU h>
void Main(void){char yn;
inti;
TextWindow(0,0,300,300);( , ,,); Title("Program2");(g);
START:
printf("¥ni tf("¥ i = ");") scanf("%d",f("%d" &i);&i)printf("¥np(i*i = %d" , i*i););printf("¥n¥n Retry ? (no;n) "); scanf("%c",&yn);
if( yn != ‘n’ ) goto START;
exit(0);( );}printf(“¥n i = ”); scanf( “%d”, &i ) ;テキストウィンドウにテキストウ
ンドウに i = と表示し、その右側にと表示し その右側にキーボードで入力した整数値を、変数 i に入れる。
scanf()関数は、文字表示ウィンドウから、変数を入力できる関数。
入力できる関数“ %d ” は、printf()関数と同じく、整数を扱うことを示している。
p実数を扱う場合は、printf()関数と同じく、“%lf” と書く。
文字変数を扱う場合は、printf()関数と同じく、“%c” と書く。
数字を入力したい変数の型を、” ” の中に記述して、次に ,（カンマ）を書いてから変数のポインタを書いて、（カンマ）を書いてから変数のポインタを書いてカッコをとじる。

変数のポインタとは、変数のポインタとは変数が、コンピュータのメモリ内に置かれているアドレス（先頭番地）を示す。
アドレス（先頭番地）を示す
scanf()関数は、キーボードから入力された変数の型や メモリ内のどこに変数がいるかを変数の型や、メモリ内のどこに変数がいるかを知らないので、それを明記する必要がある。
変数名の頭に＆（アンパサンド）を書くと、変数のメモリ内に置かれているアドレス（番地）を示し、ポインタと呼ばれる。
ポインタと呼ばれる

printf("¥n¥n Retry ? (no;n) "); scanf("%c",&yn);
テキストウィンドウでテキストウ
ンドウで Retry
R t ? ((no;n)) と表示された右側にキーボードで入力された文字を、文字変数 yn に入れる。
if( yn != ‘n’ ) goto START;
文字変数 yn が 文字 n と違うとき、ラベルSTART： の所にプログラム実行部位を変更する 人が n と認識する所にプログラム実行部位を変更する。人が文字は、プログラム中では ‘n’ と記述する。
ＩＦ文

ｉｆ（ A ） B;

式Ａが正しければ、プログラム文Ｂを実行する。
式Ａが正しくなければ プログラム文Ｂを無視する
式Ａが正しくなければ、プログラム文Ｂを無視する。
実行文を複数記述したい場合は ｉｆ（ A ） { B; C; D; } と中括弧 { } で囲む。

ラベル名: ～ goto ラベル名;
ラベル（名札）はプログラム文ではないので、終端はセミコロンではなく、コロン: を記述する。
gotot ラベル名;
ラベル名 はプログラム文なので終端は ;
ラベル名は、適当な文字列を記述できるが、ベ 名
適 な 字 を 述 き が大文字で目立つように書くのが普通。
インデントを下げて見やすいようにする。
goto 文 が指すラベルまで プログラム文実行の順序を間単に変更でき便利だが 計算ループ中などに使うと間単に変更でき便利だが、計算ループ中などに使うと予期せぬ計算ミスの原因になりやすく、十分に注意して使用する必要がある。
使用する必要があるexit(0);( );プログラムを終了させるプログラム文。
プログラムを終了させるプログラム文
eｘｉｔ（）は、関数が出力する値を設定するものだが、main（）関数の出力は定義されていないので（void と宣言済み。 void Main(void) ）、便宜上 0 を出力すると記述している。
を出力すると記述る
カッコ内の数字が関数の出力値。
０でなくても構わないが、main関数の終了はexit(0);it(0) で記述するのが普通。
で記述するのが普通
Basic言語で使う End と同じはたらき。

// Program2.c#include <HU.h>

整数１からNまでの総和と平均を計算する
総和平均を計算する

voidid Main(void)
M i ( id){charyn;inti, N, sum;doublemean;

TextWindow(0,0,300,300);
Title("Program2");
Title("Program2")
START:
printf("¥nprintf(¥n N = ");); scanf(scanf("%d"%d , &N);

sum=0;f ( i=1;
for(i 1 i<=N;
i< N i++ ){sum += i;}mean = (double)sum / (double)N;
printf( ¥n Sum = %dprintf("¥n%d" , sum);printf("¥n Mean = %lf", mean);printf("¥n¥n Retry ? (no;n) "); scanf("%c",&yn);
if( yn != ‘n’ ) goto START;exit(0);
}

int

i, N, sum;

同 型 変数 、 ン , で区切って同じ型の変数は、コンマ,区切１行でまとめて宣言できる。
for( ii=1;
1; i<=N;i N; i++i ){}変数 i が 1 から N まで 1 ずつ増加しながら中括弧 { } 内のプログラム文を
グラ 文を N 回実行す回実行する。
。

For 文画像を扱うプログラムでは最も多く使われる構文

For（初期条件;（初期条件; 実行条件; 更新条件 ）{プログラム文；}
まず初期条件の状態でプログラム文が実行される。
次に更新条件の式が実行され、２回目のプログラム文実行が行われる。
実行条件が満たされている間、実行が繰返される。

sum=0;;for( i=1; i<=N; i++ ){sum += i;}
整数変数ｓｕｍに １＋２＋・・・＋Ｎ が入る。
が入る
Ｃ言語の特殊な計算式表記法。
i++ は i = i+1 と同じ。 ｉ の値が１づつ増加する。
sum += ｉ は sum = sum + i と 同じ。
（普通の表記法でも構わないが、慣れると便利。）

変数の型変換（キャスト
変数の型変換（キャト cast））
mean = (double)sum(d bl )/ (double)N;(d bl )N
総和sum と データ数 Ｎ は、ともに整数変数。
平均を入れる実数変数
平均を入れる実数変数meanには整数は入らない。には整数は入らない
総和／データ数 の値を代入するが、整数を整数で割った値は整数になり、誤差が多い。
そこで、変数の型変換を行う。（キャスト cast）（double） を整数変数の前に記述すると実数変数になる。

// Program2.c#include <HU.h>void Main(void){charintdouble

整数1からNまでの平均、標準偏差を計算

yn;i,i N,N sum;mean, v, sd;

T tWi d (0 0 300 300) Titl
TextWindow(0,0,300,300);
Title(("PProgram22"));
START:
printf("¥n N = "); scanf("%d", &N);
sum=0; v =0.0;
for(i=1; i<=N; i++ ){ sum += i; }mean = (double)sum / (double)N;for(i=1; i<=N; i++ ){v += (mean - (double)i) * (mean - (double)i);}v /= (double)N;// v = v/(double)N

sd = sqrt(v);// sqrt( ) 平方根を求める関数

printf(“¥n Sum= %d ”, sum );printf(“¥nf(“ Mean= %lf”,% f” mean);)printf(“¥n Variation = %lf”, v );printf(“¥ni tf(“¥ Deviation
D i ti = %lf”,%lf” sdd );
)

// 総和
// 平均
// 分散
// 標準偏差printf("¥n¥n Retry ? (no;n) "); scanf("%c",&yn);
if(yn!='n') goto START;
exit(0);}sum = 0 ; v = 0.0 ;sum, v ともに 総和を求めるために用意した変数なので、はじめは 数値 0 を代入しておく必要がある。
を代入しておく必要がある
変数を宣言したときに 初期値が０ とは保証されていない。
sum は int で宣言された整数変数。
ｖ は double で宣言された（倍精度）実数変数。
数字 0 は、数値 0 の 整数表記。
数字 0 は整数なので sum = 0 ; はは正しいプログラム文。
しグラ 文。
実数変数 v には 整数を代入できないので、数値 0 の実数表記 0.00 0 ( または 0.
0 ) を記述する。
を記述する
ｖ = 0.00 0 ; または v = 0.
0 ; と記述すると、と記述すると変数 ｖ に実数値の 0 が代入される。

for( i=1; i<=N; i++ ){v += ( mean - (double)i ) * (mean - (double)i );}変数 v に、平均との差の２乗を足していく forループ文。
mean は 実数変数なので、整数変数 i を直接引くことはできない。
できない（double）） を（を付けて、i、 を実数を実数にキャストしてから引く。
。
v += ( mean - (double)i ) * (mean - (double)i ); は、
v = v + ( mean - (double)i ) * (mean - (double)i ); と同じ。
変数 v に、差の２乗が次々と加算され、に 差の２乗が次々と加算されｖの値が増加していくことを理解して下さい。
記号 = は、等号ではなく、代入を示すことを理解する。

課題 20 からN までの、0.1刻みの実数 0.0, 0.1, 0.2, … N の総和、平均、分散、標準偏差を求めるプログラム
program3.ｃ を書いて、メールに添付してホームページの課題提出ボタンから今週中にメールを送って下さい。
課題提出ボタンから今週中にメールを送って下さいまたは chtgkato@.med.hokudai.ac.jp へ。
メールの件名には、学生番号、氏名、課題番号を明記。
可能なら 実行ウィン ウを Winshot な
可能ならば実行ウィンドウをなどのフリーウェア
リ ウ ア等を使ってｊｐｇファイル（300KB以下）にして添付。
さらに可能ならば、自分で好きなようにプログラムを改造して送って下さい。
改造して送って下さい