情報処理演習 第1回hasegawa/pdf-files/1st.pdf · 1 情報処理演習 第1回...

31
1 情報処理演習 第1回 2010年10月7日 工学部6・7・8・9・10組(奇数学籍番号) 担当: 長谷川英之

Transcript of 情報処理演習 第1回hasegawa/pdf-files/1st.pdf · 1 情報処理演習 第1回...

1

情報処理演習第1回

2010年10月7日

工学部6・7・8・9・10組(奇数学籍番号) 担当: 長谷川英之

2

教員准教授 長谷川英之所属: 医工学研究科電話: 795-7079e-mail: [email protected]講義資料URL:

http://www.ecei.tohoku.ac.jp/hasegawa/

TA (Teaching Assistant)医工D2 池下和樹医工D2 本庄泰徳医工M1 志田 光医工M1 本江和恵

教科書「Cによる情報処理入門」 昭晃堂 (著者: 阿曽他)

担当者・教科書

3

1. 概要と基本演習

2. 一定回数の繰り返し

3. 判断と分岐

4. 配列

5. ポインタ

6. 関数定義と関数参照,変数の有効範囲,再帰呼び出し

7. 手続き,値呼び出しと参照呼び出し

8. データの型,構造体・共用体

9. ファイル入出力

以上,教科書の第4章~12章(第12章はまとめ)

※項目の番号は,必ずしも授業回とは一致しません.

第4章

第5章

第6章

第7章

第11.1節

第8.1,8.2節

第8.3,8.4節

第9章

第10章

シラバス

4

目標

・C言語の文法を理解し,簡単なプログラムを作成することができる.

・UNIX(本講義ではLinux使用)環境下でプログラムの作成から実行までができる.

(Linux環境の使用方法は,書籍Digital Campus 2010の25ページ以降にも記載)

成績

・レポート,出席状況等から総合的に評価(出席,遅刻,欠席状況は自動集計)

・提出品がコピー品の場合,マイナス点と評価

・提出が期限より遅れた場合は減点

ひとこと

・是非,自分の能力を向上させるんだ,という意識で臨んで頂きたい.

今後C言語を使うことが仮にないとしても,1つの言語を知っていれば他の言語

の習得の助けになります.

・習得のためには自分で理解し,自分で手を動かして演習することが絶対必要です.

自分で使わないと英語がしゃべれるようにならないのと同じ.

注意

使用可能容量は200 MB,印刷可能枚数は240枚/人です.

講義受講に際して

5

自分の声の周波数を調べてみよう

自分の音声波形を記録,フーリエ変換を使用して

周波数(声の高さ)を調べる.

画像ファイルを編集してみよう

普通は他人が作ったソフトウエアを使用しないと

編集できない画像ファイル.自分で作成したソフ

トウエアで画像を編集してみる.

この講義で行ってもらう課題

白黒化

時間(秒)振幅

(音

の大

きさ

周波数分析

時間(秒)

振幅

(音

の大

きさ

音声波形

い う えお

6

Linuxを起動,ログインする

ユーザ名に利用者番号を入力.パスワードが必要.

※パスワードの算出方法を忘れてしまった人は,マルチメディア教育研究棟5階

事務室窓口でもらえるそうです.

Webブラウザ(Mozilla)を起動

ブックマーク中の授業支援システムを選択

授業支援システムにログイン

USER-IDに利用者番号を入力,

パスワードも必要(Linuxへのログインと同じ).

※授業支援システムの使用方法は,書籍Digital Campus 2010の149ページ

以降にも書いてあります.

受講登録(1/2) ※授業中のみ可

7

② Confirm course registrationで登録の確認

下記のようにリストにこの講義が含まれていればOK

※Course registrationを終えてから確認して下さい.

① Course registrationで登録

ボタンを押すとこの講義を受講するか聞かれるので

受講する場合はYesを選択

受講登録(2/2) ※授業中のみ可

8

【プログラム作成・実行の流れ】

ソースプログラムの作成(本資料9~11ページ)

エディタ(emacs)で人間がC言語のルールに則って記述

ソースプログラムのコンパイル(本資料12ページ)

Cコンパイラにより,人間が書いたソースプログラムを計算機が理解

できる言語に翻訳(Cコンパイラはいわば翻訳器)

コンパイル後のプログラムを実行し計算機を動作させる(本資料12ページ)

コンパイルしたプログラムは計算機が理解できるので,計算機に指示

を与えることができる.

※はじめから計算機が理解できる言語で書けば良いのでは?

→ C言語より記述ははるかに難しい

第4章 プログラムの基本

9

ソースプログラムを記述するための道具

・本講義ではエディタとしてemacsを用いる.

・エディタとして有名なのはWindowsのメモ帳など.

・UNIX環境下でのC言語の記述にemacsは使いやすい.

※エディタという言葉を使うと難しく思えますが,難しく考えずに,

単にテキストを打ち込むための道具と考えて差し支えありません.

テキスト(文字)を打ち込んでファイル名を付けて保存するだけ.

ソースプログラムの作成(1/3)

10

1. コンソールを起動

画面左上のアイコン“ターミナル”をダブルクリック

2. emacsを起動

(使用方法は書籍Digital Campus 2010の61ページ以降にも書いてあります)

コンソールに下記のように入力するとemacsのウインドウが表示される.

emacs (ファイル名).c ←C言語のファイルの拡張子は通常cとする.

例) [xxx]$ emacs h01.c

これはプロンプトを呼ばれる.コンソールにあらかじめ表示

されている.

(emacsでh01.cというファイルを作成.xxxの部分は人により異なる)

3. 入力内容の保存

キーボードでC-x,C-sとキーを押せば上書き保存される.emacsのウインドウ

がアクティブになっている必要があります.

※C-xの意味: CtrlキーとXキーを同時に押す.上記3の場合,CtrlキーとXキー

を同時に押した後,CtrlキーとSキーを同時に押す.

ソースプログラムの作成(2/3): emacsの使い方

11

#include <stdio.h>

main()

{

/* この記号間はコメント */

}

最小のプログラムh01.c

/* と */ の間はコメントになる.(エディタ上でヒトがみることはできるが,コンパイル時には/* と */の間は何も書 いていないものとみなされる)

要点

・1文字も間違えてはいけない(例: #includeの前の#を忘れるだけで動作しない).

・C言語のソースプログラムは関数の集まり.mainは絶対に必要な関数.

main以外の関数は,好きな名前を付けて良い (もちろん重複は不可).

関数の書き方: main(今は何も書かない){ 行いたい処理 }

・ソースプログラムを新規作成したり,修正した場合は,必ずemacsで上書き保存

を行う.そうしないとプログラム実行時に編集結果が反映されない.

この波括弧{ と末尾の波括弧 }との間に実行したい処理を書く.

C言語でプログラムを書くのに必要な定義ファイル stdio.h を読込

mainという関数が以下に書く.()の間に何も書いてないのは今は気にしない.

※空行は無くとも良い.

ソースプログラムの作成(3/3): 最小のプログラム

12

コンソールで下記を実行するだけ(コンソールをもう1つ起動しましょう)!

コンパイル

[xxx]$ cc h01.c

実行

[xxx]$ a.out

[xxx]$ ← 何もしないので,実行後コマンド入力モードに戻るだけ.

要点

・ソースプログラムをコンパイルすると,a.outという計算機で実行可能な

ファイルが作られる.

・a.outは実行可能なので,emacsやccなどと同様に,コンソールでのコマ

ンドになり得る.逆に,これまでエディタで作成したソースプログラムは,

計算機は理解できず,コンソールで実行はできない.例えばコンソールで

[xxx]$ h01.c

としてもエラーが出るだけ.

ソースプログラムのコンパイルと実行

13

#include <stdio.h>

main()

{

printf(”Hello!¥n”);

}

プログラムh01.cを編集

””で囲まれた文字列をコンソールに出力.行末の ; は文章の終わりを示す.

要点

・printfの文法は上記の通りなので,1文字も誤りがないように注意する.・行末の ; は,C言語では1つの文章の終わりを示すことになっており,

大変重要です.忘れずに付けて下さい.

・編集後は上書き保存(C-x,C-s)を忘れずに.

コンソールに文字を出力するプログラムに改造

14

コンパイル

[xxx]$ cc h01.c

※再度コンパイルするとそれまでの a.out は上書きされる.

実行

[xxx]$ a.outHello![xxx]$

←加えた動作により文字列が出力される.

←更新された a.out を実行

←コマンド入力モードに戻る.

計算機による情報処理の第1歩を踏み出しました!

ソースプログラムのコンパイルと実行

15

13ページにおける使用例

printf(”Hello!¥n”);

printf文は,” ”で囲まれた部分の

内容をコンソールに表示(上の例で,¥nはそのまま表示されないのは,

“¥と1英文字”でコード(命令といっても良い)

を表すというルールになっているから)

¥n は,改行を示す.

文末を示す ; も忘れずに.

¥nを入れない場合

[xxx]$ a.outHello![xxx]$

¥nを入れた場合

[xxx]$ a.outHello![xxx]$

実行結果

※ ” ”で囲まれた部分を「書式」という.

printf文による変数の内容の出力

16

#include <stdio.h>main(){

int x,y,z;

x=3;y=4;z=x+y;

printf(”%d”,z); }

プログラムh01.cを再度編集

変数を使用するには宣言が必要.この例では,x,y,z という3つの変数を使う.

要点・上の例では x,y,z とも整数(小数は扱えない)として宣言.小数を扱い

たいときは int の代わりに float(実数)で宣言する.

・演算記号には,加 +,減 -,乗*,除 /,などがある.

・printf 文の中の %d 記号は,変数の内容を表示することを示す.

詳しくは次ページ参照.

xの値を3に設定(xに3を代入)

yの値を3に設定(yに3を代入)

xとyの和を計算し,zに代入

zの値をコンソールに表示

計算結果をコンソールに出力するプログラムに改造

17

前ページの使用例

printf(”%d”,z);

” ”内は表示の書式を示す.

%d は整数型の変数を表示させることを

示す.実数型(float)の場合は %f.

直前の””中の%dの場所に表示させる変数

”%d”の後の , を忘れずに.

文末を示す ; も忘れずに.

printf文による変数の内容の出力

18

変数の型とprintf文における書式

zを整数型として定義した場合

printf(”%d”,z);

zを浮動小数点型(実数)として定義した場合

printf(”%f”,z);

int z; と定義した場合: zは整数型の変数

float z; と定義した場合: zは浮動小数点型(実数)の変数

変数の型とprintf文における書式

19

コンパイル

[xxx]$ cc h01.c※再度コンパイルするとそれまでの a.out は上書きされる.

実行

[xxx]$ a.out7[xxx]$ ←計算結果が出力され,コマンド入力モードに戻る.

ただし,表示が7だけなので何の値か分かりにくい.

←更新された a.out を実行

プログラミングらしくなってきました.

ソースプログラムのコンパイルと実行

20

#include <stdio.h>main(){

int x,y,z;

x=3;y=4;z=x+y;

printf(”z=%d¥n”,z); }

プログラムh01.cを再度編集

変数を使用するには宣言が必要.この例では,x,y,zという3つの変数を使う.

要点・printf 文の” ”中に z= および改行コード ¥n を追加.

xの値を3に設定(xに3を代入)

yの値を3に設定(yに3を代入)

xとyの和を計算し,zに代入

zの値をコンソールに表示

計算結果の表示を工夫する

21

前ページの使用例

printf(”z=%d¥n”,z);

printf文の” ”中に書いた文字は,% や ¥ が前に付かない限りそのまま

表示される.つまり,上記の例では表示結果は z=(変数の内容)となる.

printf文による変数の内容の出力

22

コンパイル

[xxx]$ cc h01.c※再度コンパイルするとそれまでの a.out は上書きされる.

実行

[xxx]$ a.outz=7[xxx]$

←計算結果が出力される.z= の付加により表示結果の意味が分かり易くなった.

←更新された a.out を実行

他の演算(減算-, 乗算*, 除算/)も試してみて下さい.

ソースプログラムのコンパイルと実行

23

#include <stdio.h>main(){

int x,y,z;

scanf(”%d”,&x);y=4;z=x+y;

printf(”z=%d¥n”,z); }

プログラムh01.cを再度編集

要点scanf 文の中の %d 記号は,変数の中身を表示することを示す.

printf のときと同様.scanfの詳細は次ページ参照.

整数値をキーボード入力して x に代入

xの値をキーボード入力するプログラムに改造

24

前ページの使用例

scanf(”%d”,&x);

%d は整数型の変数を入力することを示す.

実数型(float)の場合は %f.

キーボード入力した値を代入する変数を記述.

変数の前に&が必要(今はルールとして憶えて下さい).

scanf文によるキーボード入力

25

コンパイル

[xxx]$ cc h01.c※再度コンパイルするとそれまでの a.out は上書きされる.

実行

[xxx]$ a.out3z=7[xxx]$

←計算結果が出力される.

←更新された a.out を実行

←コマンド入力モードに戻る.

←xの値を入力

ソースプログラムのコンパイルと実行

26

#include <stdio.h>main(){

int x,y,z;

printf(”Please input 2 integers.¥n”);

scanf(”%d %d”,&x,&y);

z=x+y;

printf(”x, y, z=%d, %d, %d¥n”,x,y,z); }

プログラムh01.cを再度編集

要点

次ページ参照.

xとyの値をキーボード入力

x,y,zの値を表示

↑2つの整数を入力するよう操作者に促す.

多変数を入出力するプログラムに改造

27

printf(”x, y, z=%d, %d, %d¥n”,x,y,z);

Cコンパイラは,%が来たらその後の1文字で表示する変数の

型を判断する.つまり,この場合%の後のdだけで変数の判断

が行われる.それ以外の場所にある文字はそのまま表示される.したがって,%dのあとのカンマ,はあってもなくても良い.

カンマ,で区切って複数の変数を書ける.

前ページの使用例

scanf(”%d %d”,&x,&y);

スペースを空けて2つの整数をキーボード入力することによりxとyにそれらの値が格納される.

カンマ,で区切って複数の変数を書ける

printf, scanf文による多変数の入出力

28

1. emacsを用いたソースプログラムの作成

2. プログラムの基本構造#include<stdio.h>main(){}

3. プログラムのコンパイルと実行

4. printf文による文字列のコンソールへの表示

5. 変数(整数型int,浮動小数点型float)の宣言

6. 変数への値の代入,四則演算

7. scanf文によるキーボード入力

本講義のポイント

29

Q1-20101007a

自分の学籍番号の下4桁をコンソールから入力し,その入力結果を使って,

自分の氏名と学籍番号(どちらも半角英数字)をコンソールに表示するプログ

ラムを作成し,TAの確認を受けてから提出して下さい.氏名と学籍番号は

別の行に表示されるようにして下さい.(提出ファイル名: q01a.c)

※できる人は自分の名前もキーボード入力するようにして下さい.

/* 学籍番号 氏名

[工夫した点]1. ○○を○○するようにした。

2. ○○を○○するようにした。*/#include <stdio.h>main(){

(各自が作成した内容)

}

提出用プログラム→の書式

課題1(Q1-20101007a)

30

Q1-20101007b

1から5までの整数を加算し,その結果をコンソールに表示するプログラム

を作成して下さい.作成したら,TAの確認を受けてから提出して下さい.

(提出ファイル名: q01b.c)

課題2(Q1-20101007b)

・授業支援システムにログイン直後のメニューの Assignment ボタンで

レポート提出モードに入れます.

・レポートの提出方法の詳細は,書籍Digital Campus 2010の153ページ

以降を参照して下さい.

課題解答提出方法

31

S1-20101007

任意の実数をコンソールから入力してfloat型変数に格納する.その実数の

値を,int型変数に代入した場合,小数点以下がどのように処理されるのか

(四捨五入?切り上げ?切り捨て?)、を確認できるプログラムを作成して

下さい.(提出ファイル名: s01.c)

余裕がある人への課題(S1-20101007)