プログラミング実習

プログラミング論
第二回
まずは動かしてみよう
本日の内容



出席メールの送信
実習1 ~とりあえず動かしてみよう~
言語の学習としてのプログラミング
– 単語,文法,文型,用例


実習2 ~プログラミングの流れを理解し
よう~
Cプログラムの構成
出席メールの送信




宛先
[email protected]
CC
自分のメールアドレス
件名
EK**** 氏名
注意:学番,氏名以外は書かないこと!
本文 なし
出席の確認




自動的に確認メールが返信されます。
同時に多人数が送信した場合,確認メールの
送信が対応できない場合があります。次回の
講義で出席受付名簿を公開しますので確認し
てください。
確認メールが届かないからといって,何度も出
席メールを送信することは止めてください。
「出したのに出席登録されていない」場合は,
CCのメールにてメールを出したこと(出席したこ
と)を確認した上で出席登録します。CCで自分
に届いたメールは,出席を確認するまで削除し
ないようにお願いします。
実習1
~とりあえず動かしてみよう~


Cプログラムのコンパイル,実行をやって
みましょう。
ensyu1.cを使います。プリントの指示に
従ってやっていきましょう。
ボーランドCコンパイラ



以下のサイトからダウンロードできます。
http://www.codegear.com/jp/downloads/free/cppbui
lder
インストールはちょっと面倒です。他の大学のサイトです
が,参考になります↓
http://www.setsunan.ac.jp/~center/kyositu/freec/bo
rland.html
または以下のサイトから環境設定用のソフトをダウン
ロードできます。
http://www.vector.co.jp/soft/win95/prog/se149182.
html
言語の学習としてのプログラミング

単語を覚えよう
– main, printf, int, void, return, include ・・・

文法を覚えよう
– printf(‘Hello, world\n’); ではだめなの?

基本文型を覚えよう
– 英語には「基本5文型」があります。
– プログラミング言語に基本文型はあるのでしょうか?

用例を積極的に利用しよう
– 単語や文法を覚えても英作文は出来ない。。
– 誰かが書いた英文を利用しよう!
– プログラミングも同じです!
言語の学習としてのプログラミング

単語を覚えよう
– 識別子

プログラム作成時,変数などに付ける名前
– キーワード(予約語)


C言語にあらかじめ用意されている名前
int, double, if, for, while, ・・・・
– 定数

100や23.456など,値が決まっていて変わる事のない数
– 文字列


2文字以上の連続した文字定数。エスケープ文字を利用可
詳しくは来週。
– 演算子


計算や処理のための記号
+, -, /, *, <, >, <=, >=, ==, !, &&, ||, ++, --, など
– 区切子

文や関数,副文の区切りを表す。 { } , ; の記号
言語の学習としてのプログラミング

用語を覚えよう
– 変数

数値や文字などデータを入れておくための箱の働きをするもの
– コメント


プログラムの注釈。コンパイル時には無視される。
//で始まる行,または/* */で囲まれた部分
– データ型


整数や実数など性質が異なるデータは,コンピュータ内では異なる扱
いをしなければならない。
整数型(int型)のデータは整数を表現出来る
– 配列

– 式



同じ性質の変数をたくさん並べたもの。数列,行列に相当する。
定数や変数を演算子で結合したもの a=b+5
関数の呼び出し printf(“Hello, world\n”)
; (セミコロン)をつけると「文」になる。一つの文は一つの処理を表す。
言語の学習としてのプログラミング

用語を覚えよう
– 制御文



プログラムの実行の流れを制御する文
分岐や繰り返しなど
if, for, whileなどの予約語は制御文を書くための単語。
– 関数


あるデータを渡すと,何かの仕事をして,答えを戻してくれるプ
ログラム要素。名前を指定するだけで一連の処理を実行可能。
printf(“Hello, world\n”);は, Hello, world\n という文字列
データを受け取って,「画面に表示する」という仕事(処理)をす
る関数。
– メモリ番地とアドレス,ポインタ

コンピュータ内のデータの置き場所(メモリ)につけられた住所
– MPUとCPU

コンピュータ内部で実際に演算処理を行っている場所。
言語の学習としてのプログラミング

文法を覚えよう
– printf(‘Hello, world\n’); ではだめなの?
– だめです(実際に試してみましょう)
– 英語なら,多少文法が違っていても相手に通
じるかも知れませんが,プログラミング言語の
場合は通じません!
言語の学習としてのプログラミング

基本文型を覚えよう
– 英語には「基本5文型」があります。
S+V
 S+V+C
 S+V+O
 S+V+O+O
 S+V+O+C

– プログラミング言語に基本文型はあるのでしょ
うか?

あります!
言語の学習としてのプログラミング

基本文型を覚えよう
– 「制御構造」とも呼ばれます。文(処理)の並べ方の決ま
りです。次の3つです。

順次構造
– 順番に処理を実行していく構造。

選択構造
– もしAならば処理Bを実行し,そうでない場合処理Cを実行する。

繰り返し構造
– Aが成り立っている間,処理Bを繰り返し実行する。
– 全てのプログラムは,この3つの構造で書かれています
– では,どうやって「与えられた問題をこれら3つの構造で
表現する」のでしょうか?
言語の学習としてのプログラミング

用例を積極的に利用しよう
– 以前書いたプログラム,参考書に書いてあるプログラ
ム例などをよく理解し,積極的に利用,応用しよう!
– 注意:人のものを写せ,ということではありません。

適当な用例が見つからない場合は
– プログラムの骨組み=アルゴリズムを自分自身で考え
なければなりません。
– これが出来ないと,単語や文法だけを知っていてもプ
ログラムが書けません。
実習2
~プログラミングの流れを理解しよう~




ensyu2.cのプログラムをコピーして,「メ
モ帳」で開いてください。
もう一つ,メモ帳を起動してください。
ensyu2.cを見ながら,実際に自分自身の
手で同じプログラムを入力,コンパイル,
実行を行ってみましょう。
決して「コピー&貼り付け」などしないこ
と!
Cプログラムの構成

Cプログラムの構成
– プリプロセッサ

前処理。#include <stdio.h>がある部分。
– main関数

どのプログラムにも必ずあり,最初に実行される部分
– その他の関数(サブ関数,サブルーチン)


必要に応じて追加される。
関数の構成
– 変数宣言部

その関数内で利用する変数名とその型を宣言する
– 処理部


3つの制御構造に従って処理が記述される
多くは「入力処理」「演算処理」「出力処理」の順番になる。
Cプログラムの構成
#include <stdio.h>
プリプロセッサ
return 0;
}
*サブ関数は無い
main
int main(void)
*変数宣言部は無い
{
/* 画面に出力する */
printf("さぁ");
printf("C言語を");
処理部
printf("勉強しよう!!\n");
(順次構造)
printf("Hello,\n\n c \nworld\n");
関
数
とりあえず入力して動かしてみよう
ensyu3.c
#include <stdio.h>
int
{
main(void)
printf("How are you?\n");
return 0;
}
Cプログラムの構成-1
#include <stdio.h>
とりあえず,これ。
int
{
main(void)
printf("How are
return 0;
}
これは,「関数」と呼ばれる
処理の単位です。
関数の範囲は,{ }で囲み
you?\n");
ます。この中に,実行する文
を書きます。
‘main’は「関数名」といいます。
さて,では’int’や’void’は何で
しょう?
intをvoidにしてみたら?
#include <stdio.h>
void
main(void)
{
printf("How are you?\n");
return 0;
}
こんな警告が出ます
void 関数は値を返してはならない(関数 main )
はぁ?
何のこと?
こうやってみよう
#include <stdio.h>
void
main(void)
{
printf("How are you?\n");
return 0;
}
return 0を消します
あれっ?
警告が消えた。。。。。
?
これがキーワード




関数が値を返す
– 関数というのは,「ある値を受け取って,何か処理を行って,その
結果を出力する」ものです。この,「関数が結果を出力する」ことを
「関数が値を返す」といいます。必ず一つの結果を返します。
戻り値
– 関数の結果として出力されるデータ,つまり,「関数を実行したと
ころへ返す値」のことを「戻り値」といいます。ちなみに,実行時に
関数が受け取る値のことを「引数」といいます。
戻り値の型
– プログラムでは,戻り値が数値とは限りません。無いかもしれま
せん。数値としても,整数か実数か指定しなければなりません。
プログラムでは,どのようなタイプの戻り値なのかを指定する必
要があるのです。
return
– 関数の中で処理を実行すると,いろいろな結果が得られます。関
数は,その結果として一つの結果だけを出力するので,いったい
どの結果が関数の結果なのかを指定する必要があります。
returnは,「関数の結果はこれだよ」と指定してくれるものです。
というわけで。
#include <stdio.h>
int
{
main(void)
‘void’は,「この関数には引数
はありません」つまり,「関数
の処理を行うとき,何も値は
もらいません」という意味を表
しています。数学の関数,f(x)
と同じ考え方です。
printf("How are you?\n");
return 0;
}
‘return 0’は,「この関数の
結果として戻る値は,整数
値の0です」という意味です。
‘int’は,「この関数は,int型,
つまり整数の数値を結果とし
て出力します(戻します)」と
いう意味を表しています。ここ
に’void’があると,「関数の結
果は何も戻りません」という
意味になります。
それでは,考えてみましょう。


void main(void) と書いたとき,どうして
あのような警告が出たのでしょうか?
「関数の結果は何も戻ってこない」とvoid
で指定しているにも関わらず,return 0と
いう表現で,「関数の結果として0を戻しま
す(returnする)」と指定しているためです。
main関数





実行したい処理や,何か画面に表示したい処理な
どは,すべて「関数」の中に記述します。
関数は,ある役割を持った処理の集まりです。つま
り,プログラムの処理実行中に,同じ処理が何度も
出てくる場合は,いちいちその処理を全て書くので
はなく,関数の名前を指定して呼び出せばよい事
になります。
では,最初に実行する関数はどうやって指定すれ
ば良いのでしょうか?
それがmain関数です。
main関数は,全てのプログラムに一つだけある特
別な関数で,最初に実行される関数です。
では,もう一度見てみましょう
関数の戻り値
#include <stdio.h>
の型を指定
関数名
関数へ与える引数
int
関数の開始 {
main(void)
printf("How are you?\n"); 実行される処理
return 0; main関数の戻り値の指定
関数の終了 }
*空行は無視されて何も処理されません。
*大文字と小文字は区別されます。注意しましょう。
画面への出力
printfについて考えましょう

printf(“How are you?\n”)は,main(void)と同
様に考えると,
– 関数名 printf
– 引数 “How are you?\n”
と考えられますね。
 そう,printfは,「メッセージを出力するための関
数」なのです。
 “ “で囲まれた文字や数値などいろんな形式
の出力が出来ます。
もう一度,実行結果に注目。
ensyu3.c
How are you?
Z:\C>
printf(“How are you?\n”)
これはどこ?何?
それでは,これを実行してみましょう
#include <stdio.h>
int
{
main(void)
printf("How are you?");
return 0;
}
実行結果はどうなりましたか?
How are you?
Z:\C>
比較してみましょう
How are you?
Z:\C>
実行結果はどうなりましたか?
How are you?
Z:\C>
ここでリターン,つまり改行しているんですね
行間が空いて
いるということは
How are you?
Z:\C>
つまり, \n は「改行」の意味になります
次の実行結果を確認しましょう
problem-1:
printf("How ");
printf("are ");
printf("you?\n");
problem-2:
printf("ABC\nDEF\nGHI\n");
problem-3:
printf("ABC\n\nDEF\nGHI\n");
\で始まる記号について




\nなど,\で始まる記号は「エスケープ文
字列(エスケープシーケンス)」と呼ばれ
ます。
「本来の文字の意味を離れて(エスケー
プ)」別の意味を表すため,そう呼ばれま
す。
printfの中で, \a と \t というエスケープ
シーケンスを試してみましょう。
\や”そのものを画面に表示したいときは
どうすればよいでしょうか?
演習

次のように表示されるプログラムを作成し
てください。
<問題1>
私の名前は
「自分の名前」です。
<問題2>
私は
プログラミング論
を履修しています。
Z:\C>
Z:\C>