情報処理演習 第1回hasegawa/pdf-files/1st.pdf · 1 情報処理演習 第1回...
Transcript of 情報処理演習 第1回hasegawa/pdf-files/1st.pdf · 1 情報処理演習 第1回...
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ページ
以降を参照して下さい.
課題解答提出方法