プログラミング実習(C言語)

プログラミング実習(C言語)
ハードウェアとソフトウェアとの関係
の理解のためのプログラミング体験
講師:坂口利裕
横浜市立大学・国際総合科学研究院
自己紹介

氏名


本務先


横浜市立大学
専門分野


坂口利裕
社会工学(都市・地域計画,都市解析)
その他は...

後ほどホームページで
2008.08.07~08
プログラミング実習(C言語)
2
テキストp.15
「プログラミング実習」で学ぶこと

コンピュータそのものの理解



ハードウェアとソフトウェアの違いと関係
情報の内部表現・データの抽象化
ソフトウェアの働きを理解するためのプログラ
ミング体験


アルゴリズム
プログラミング環境
2008.08.07~08
プログラミング実習(C言語)
3
成績評価について

原則



全時限出席(実習なので当然(^^))
受講レポート(アンケート形式の自己診断表)
の提出
欠席は1時限まで

出席3時限以下の場合は不合格となります
2008.08.07~08
プログラミング実習(C言語)
4
第1日の目標




ハードウェアとソフトウェアの違いと関連を確認
プログラミングに必要な概念・用語の学習
プログラミングツールを使ったプログラミング体験
プログラミング内容は




データの表示のさせ方
データの記憶のさせ方
計算の表現
条件判断の表現
(テキストp.38あたりまで)
2008.08.07~08
プログラミング実習(C言語)
5
テキストp.17~19
コンピュータの概念的構造
本体

概念的装置

制御装置
5大機能
演算装置
入力装置
主記憶装置
マイクロ
プロセッサ
(MPU)
出力装置
補助記憶装置
周辺装置
2008.08.07~08
プログラミング実習(C言語)
6
テキストp.17~19
ノイマン型コンピュータの要件

電子回路による動作



二進数による演算



物的動作(歯車や電磁石)を伴わずに純粋に電子の
力で動作
速度の向上、耐久性
回路の簡素化
データの信頼性
プログラムの(主記憶装置への)内蔵

プログラムの変更の容易さ、汎用性の向上
2008.08.07~08
プログラミング実習(C言語)
7
テキストp.17~19
ハードウエアとの関係
ワープロ/表計算
電子メール
Windows
MacOS
Linux

基本ソフトはハード
ウェアの制御を担当し、
応用ソフトウェアから
要求される機能を同じ
水準で実現する
DOS/Vマシン
Apple系マシン
スーパーコンピュータ
携帯電話
2008.08.07~08
プログラミング実習(C言語)
8
テキストp.17~19
電子計算機

初の電子計算機


動作方式



ENIAC
十進数
ワイヤードプログラム
特徴


軍事目的
超巨大
2008.08.07~08
プログラミング実習(C言語)
9
テキストp.17~19
マイクロプロセッサ




2008.08.07~08
コンピュータの心臓部
半導体の集積技術の
高度化による単体化
パソコン用のプロセッ
サでは,1秒あたりの
処理回数→数百万回
~数億回
10年前のスーパーコ
ンピュータなみ
プログラミング実習(C言語)
10
テキストp.17~19
ハードウェアとソフトウェアの関係(まとめ)

ハードウェアの特徴




概念的には5つの装置から構成される
制御・演算装置の仕組みは想像するよりも単純である
複雑な処理を、適切な順序の単純処理の組合せで表
現することで、ハードウェアの能力を補うことができる
→プログラム
プログラムも記憶装置上のデータとして電子化されて
いる
2008.08.07~08
プログラミング実習(C言語)
11
(休憩)

休憩後に本日分の出欠をとります

やむを得ず2時限目を欠席される方は個別に
申し出てください(1時限目終了時)
2008.08.07~08
プログラミング実習(C言語)
12
テキストp.19~21
低水準言語(低級言語)

プログラム(ソフトウェア)




ハードウェアが理解可能→2進数
メインメモリに記憶されているものだけが有効
1つ1つの動作は,ハードウェア(マイクロプロ
セッサ)に依存しておりシンプル
プログラムの表現の工夫

2進数のままでは,操作が難しい


記号的表現の導入
抽象的表現の導入
2008.08.07~08
プログラミング実習(C言語)
13
テキストp.19~21
高水準言語(高級言語)

CPUの働きをより人間の言葉(英語風の
文法)に近い表現で制御する




変数(英数字の記号によるデータの表現)
(予約された、使用目的の定められた)キー
ワード(予約語)
(条件判断や反復処理のような)制御構造
副手続き(サブルーチン・プロシジャ・関数)の
定義による構造化(処理の分担)
2008.08.07~08
プログラミング実習(C言語)
14
テキストp.19~21
プログラミング言語の種類

高級言語(高水準言語)の種類

汎用言語


Fortran,Cobol,PL/I,BASIC,Pascal,
C,C++,Lisp,Prolog,
Java,AWK,Perl,Tcl など
特定目的のための専用言語

SAS,TSP,S,Mathematica,
DYNAMO,
TeX,HTML,PostScript
など
2008.08.07~08
プログラミング実習(C言語)
15
テキストp.21~22
プログラミングツールの役割

高級言語によって表現されたプログラムの
実行



そのままでは,CPUは理解不能
(その言語専用の)翻訳ソフトウェア=プログ
ラミングツールを用いてCPUが理解可能な状
態に翻訳する
いったん翻訳されたものは,繰り返して実行可
能
2008.08.07~08
プログラミング実習(C言語)
16
テキストp.23~24
実習(1)-その1

Windowsへのログオン


ユーザ名とパスワードが必要
Webブラウザを使って教材をセットアップ
→この作業は1回きりでよい


補足資料p.2~3
セットアッププログラムを「実行」
プログラミングツールの起動

Visual Studio を起動
2008.08.07~08
プログラミング実習(C言語)
17
テキストp.25
実習(1)-その2

既存ファイルの読込み




補足資料p.4~9
Win32プロジェクトを新規作成(内容は空に)
既存ファイルを項目として追加
[ソースファイル]からダブルクリックで読込み
コンパイルと実行




[ビルド]メニューから[~のビルド]
エラーがないことを確認
[デバッグ]メニューから[デバッグなしで実行]
実行後は,Enterキーを押下して復帰
2008.08.07~08
プログラミング実習(C言語)
18
テキストp.25~26,91~92
プログラムの観察-C言語の文法

予約語



文字列の表記のルール


役割が決まっているもの
変えてはならないキーワード
ダブルクォート「”」で両端をくくる
注釈の書き方

覚え書き→コンパイルには影響なし
/*
注釈の開始
何を書いてもよい
*/
2008.08.07~08
注釈の終了
プログラミング実習(C言語)
19
テキストp.26,98
出力関数printf()の使い方(1)


printf:print in formatting(書式付けて出力)
一般形式


引数の与え方


printf(引数[ひきすう,argument]【,第2の引数…】) ;
複数の場合はコンマ「,」で区切る
引数は最低ひとつ。2つ目以降は必要に応じて
表現しておく


第1引数は,書式の内容を示す文字列
第2引数以降は,出力する内容(数値,変数,式)
2008.08.07~08
プログラミング実習(C言語)
20
テキストp.26,98
出力関数printf()の使い方(2)

書式の表し方-データがない場合

英数字・漢字は、そのまま出力される


printf(“Enter Height  (within 3digits) “) ;
\■のパターンは特殊文字を示す

printf (“Hello!\n How are you ?”) ;
2008.08.07~08
プログラミング実習(C言語)
21
テキストp.26~27,98
実習(1)-その3

プログラムの改変の手順


修正→実行の反復練習
コンパイルエラー(文法的間違い)への対処


ワープロ感覚で編集
改変部分が実行結果にどう影響するかを観察


補足資料p.8
意図的にエラーを発生させて操作手順を確認
手順が納得できたら休憩
2008.08.07~08
プログラミング実習(C言語)
22
(休憩)

(頭と体を十分リラックスさせましょう)
2008.08.07~08
プログラミング実習(C言語)
23
テキストp.29
実習(2)-その1

作成中のプログラムの閉じ方



補足資料p.10
[ファイル]メニューから
[ソリューションを閉じる]
いったん終了して,Visual Studioを再起動して
もよい
別のプログラムの開き方


Visual Studio起動後に開く場合と同じ
プロジェクト名などは読み替える
2008.08.07~08
プログラミング実習(C言語)
24
テキストp.29~31,93~96
データ表現の基本

問題の抽象化



変数によるデータ表現





プログラム=与えられたデータに対する加工(計算)手順の指示
具体的数値でなく抽象的記号(変数)による記述
アルファベットと数字の組合せ
最初はアルファベット
単一文字でもよい(が,見直す時に不便)
英単語は(予約語と同じになる場合があるので)避けローマ字で
数式


+-*/や()によって表現。
結果を記憶させる変数を左にして,=を挟み,式を記述。
2008.08.07~08
プログラミング実習(C言語)
25
テキストp.31,95~96
データの記憶と抽象化-変数

データ表現


基本の型(type)-属
性




実数(小数以下を持
つ)と整数(小数以下な
し)
一定の記憶量で「実用
的に」まかなえる範囲
データの性質に応じて
使い分け
float(実数)またはint
(整数)で宣言
2008.08.07~08
値を記憶させるには代
入を使用
float x;
x=3.1;
x=4.5;
3.1
4.5
プログラミング実習(C言語)
変数x
3.1
4.5
3.1
26
テキストp.31~32,98
出力関数printf()の使い方(3)

書式の表し方-データを表示する場合

データを埋める場所には,%■のパターンを
記述

printf(“Square = %g \n“, menseki ) ;

実数の場合
printf(“Your answer is %d\n Is it OK?”,ans) ;
整数の場合
2008.08.07~08
プログラミング実習(C言語)
27
テキストp.31~32,98
出力関数printf()の使い方(4)

データの与え方




printf("Pi Number = %g\n", 3.14159) ; 定数
printf(“Answer = %g [km/h]\n”,jisoku) ; 変数
printf("Square = %g\n", takasa*teihen/2) ; 式
printf(“Vector=(%g %g %g)\n”,x,y,z) ; 複数
2008.08.07~08
プログラミング実習(C言語)
28
テキストp.32
実習(2)-その2

3.3.1 の練習内容に即して


データの変更と結果の確認
内容の作り変え




式は考えましょう!(中学レベル)
順序も大事!
代入の形は常に 変数=式; !
できた(と思う)方から一休み
2008.08.07~08
プログラミング実習(C言語)
29
テキストp.33~34,99
実習(2)-その3

任意のデータを外部から入力できるように,
プログラムsample2.cを改良

代入文によるデータ設定



手軽な設定で,固定値の場合は十分
別の値に対する結果を得るには再コンパイルが必
要
外部からのデータ入力

プログラミング言語には必ずある機能
2008.08.07~08
プログラミング実習(C言語)
30
テキストp.33~34,99
入力関数scanf()の使い方(1)


scanf:scan in formatting(書式付けて入力)
一般形式


引数の与え方


scanf(引数[ひきすう,argument]【,&第2の引数…】) ;
複数の場合はコンマ「,」で区切る
引数は最低ひとつ。2つ目以降は必要に応じて表現して
おく


第1引数は,書式の内容を示す文字列
第2引数以降は,入力した内容を覚える変数(のアドレス)
2008.08.07~08
プログラミング実習(C言語)
31
テキストp.33~34,99
入力関数scanf()の使い方(2)

書式の表し方

データを受け取る場所に,%■のパターンを記述



scanf(“%g“, &takasa ) ; 実数の場合
scanf(“%d”, &n) ; 整数
複数のデータの与え方

scanf(“%g %g”, &x, &y ) ;
2008.08.07~08
プログラミング実習(C言語)
32
テキストp.34~37,93~94,97
条件式の表現

数値的な比較のみ可能



式の結果は真偽のみ


1 == 0
1 と0は等しいかどうか
x != 3
x(にこの時点で記憶されているデータ)が3と異なっているかどう
か
0→偽,0以外(通常は1)→真と扱われる
複数の条件は論理和(~または(or)~)および論理積(~
かつ(and)~)を用いて結合可能


or
and
2008.08.07~08
→ ||
(縦バーを間にスペースを置かずに2つ)
→ && (&を間にスペースを置かずに2つ)
プログラミング実習(C言語)
33
テキストp.35~37
実習(2)-その4

プログラム sample3.c の実行と内容の観察



条件式の使い方・組合わせ方の確認
フローチャートの見方
改変



角度も考慮した種別判定へ
表4.1(p.36)をうまく埋める
フローチャートを考えましょう


1度の判断で2つに区分できるのだから,7種の判定を行うに
はいくつの判断(if構文)が必要か?
時間内に考えつけなかった方は宿題!
2008.08.07~08
プログラミング実習(C言語)
34
テキストp.37~38
実習(2)-その5


補足資料p.10
Visual Studioの終了
Windowsの終了と電源切断
2008.08.07~08
プログラミング実習(C言語)
35
(1日目終了!)

お疲れ様でした...

今夜は無理をせず明日に備えましょう(^_^)
2008.08.07~08
プログラミング実習(C言語)
36