• 検索結果がありません。

Microsoft PowerPoint - 第1回目復習_pdf用.ppt [互換モード]

N/A
N/A
Protected

Academic year: 2021

シェア "Microsoft PowerPoint - 第1回目復習_pdf用.ppt [互換モード]"

Copied!
28
0
0

読み込み中.... (全文を見る)

全文

(1)

第1回 プログラミング応用(担当 三輪)

数値計算の基本的なアルゴリズムを学修し、C言語に

よるプログラムを作成して実行することにより、数値計

算の考え方を習得する。

C言語プログラミングのための各種ツールの使い方

や簡単なグラフィックス・プログラミング、デバッグの方

法も学習し、ある程度実用的なプログラムが作成でき

る技量を身につける。

講義の目標

この講義の前半部分のHPは三輪研HPにある

http://www.el.gunma-u.ac.jp/~miwalab/c_prog

(2)

授業の概要

C言語の初級者を対象とする。

プログラミング基礎

を履修し、

Unixの基本(ファイル操作)、エディタの使い方、C言語プログ

ラムのコンパイルと実行方法、for文,if文,printf関数などを理解

していること

授業内容のレベル

総合情報メディアセンターの演習室の端末を利用する。

最初に30分程度の説明を行った後、一人一台づつのPCを用いて、

実際にプログラミングを行う。

毎回、課題を提出

する。

中間と最後に

総合的な課題

を行う。

(3)

評価法

毎回の課題提出(5点)

中間課題(20点)

最終課題(20点)

の合計点により評価する。

配列や入出力、関数などを用いた簡単なプログラ ムを作成することができる。 数値計算の基本的なアルゴリズムを用いた簡単 なプログラムを作成することができる。

60点以上を合格

60~69点をC

70~79点をB

80点以上をA

90点以上の上位5パーセント程度をSとする。

(4)

授業の展開

第1回 おさらい(数値表現、for文、if 文)

第2回 配列変数の取り扱い

第3回 ファイル入出力

第4回 gnuplotによるグラフ化の方法

第5回 関数 の取り扱い

第6回 最小二乗法によるフィッティング(1)

第7回 【中間課題】 最小二乗法によるフィッティング(2)

第8回 非線形方程式

第9回 常微分方程式

第10回 数理計画法

第11回 数値積分

第12回 モンテカルロ法

第13回 連立一次方程式

第14回 【最終課題】最小二乗法によるフィッティング(多変数)

第15回 〃

(5)

シェル( gnome ターミナル) コマンドを受け付け、入力を解釈してOSに指令を出す GUI (グラフィカルユーザインターフェイス) マウスの動きを判断してOSに指令を出す

OS

基本的な処理プログラムの集合 機械語プログラム実行の交通整理 例)画面表示 ハードディスクに保存

コンピュータの構造

CPUは機械語(01の羅列)のみ理解可能

入力装置

CPU

主記憶装置

キーボード、

マウス

演算

(内部記憶装置)

半導体メモリ

出力装置

ディスプレイ

補助記憶装置

(外部記憶装置)

ハードディスク

CD-ROM

判断

機械語の処理

(6)

コンパイル

CPUはメモリから機械語プログラムを取り出し、その手順に

従って

数値データを処理

することしかできない

C言語ソースファイル C言語、柔軟性高い、OS 内部まで操作 機械語の生成 実行可能ファイル CPUに直接命令、最も低 級な言語、理解困難 CPU

演算

判断

プログラムの実行

内部記憶装置 データ 変数記憶領域 プログラム格納領域 機械語プログラム

画面出力 ファイル出力 数値データの やり取り プログラム

(7)

コンパイルの手順

エディタ

により

C言語のソース

ファイルを作成

ccコマンド

により

ソースファイルの

コンパイル

機械語で書かれた

実行可能ファイル

の作成

コンパイルエラーが出れば再編集

ディレクトリの作成の準備 (gnome ターミナル上で)

> mkdir src

> ls

> cd src

ディレクトリの作成 (作成は一度だけ)

ディレクトリの確認

ディレクトリの移動

(8)

ソースファイルの作成

> emacs ソースファイル名 &

ファイルの編集

注意1)コマンド最終行の

&

は命令をバックグラウンドで起動することを意味

する。ここでは、emacsがコマンドウインドウの裏でも動くため、コマンド受付

とファイル編集を同時に操作できる。

注意2)ファイル名は末尾の拡張子に.cをつけるのが慣習である。

#include <stdio.h> int main() { int i; i=10; printf(“i=%d n”,i); i=i+100; printf(“i=%d n”,i); return 0; }

sample.c

(9)

Cソースファイルのコンパイル、実行

> cc ソースファイル名

コンパイルの実行

コンパイルが成功すれば

a.out

という名前の

実行可能ファイル

が生成される。

入力に誤りがあれば、エラーメッセージがでてコンパイルに失敗する。このとき、 emacsに戻って編集し直す。コンパイルが成功するまで繰り返す。

> cc

-o 実行可能ファイル名

ソースファイル名

注意)-o オプションにより

任意の名前の実行可能ファイル

が生成できる。

>

./

a.out

または

>

./

実行可能ファイル名

プログラムの実行

i = 10

i = 110

プログラムの実行により、例のプログラムでは以下のような結果が出力される。

cc

というunixコマンドを使用する

ピリオドスラッシュの後に実行可能ファイル名を指定

(10)

#include <stdio.h> int main() { int i; i=10; printf(“i=%d n”,i); i=i+100; printf(“i=%d n”,i); return 0; }

C言語の特徴

sample.c

#include <stdio.h> プリプロセッサ指令 コンパイルの前処理としてさまざまな処理を 実行する. #include命令は<~.h>のようなヘッダー ファイルを読み込んである特定の機能をも つ関数群を使用できるようにする. stdio.h は標準入出力用の関数群であり, ほとんどのプログラムに使用する main 関数 どのプログラムも必ず一つのmain関数を 持つ.プログラムの最初に実行される 左中括弧 { で始まり } で終了する { } 命令文 {}で囲まれた文は命令文と呼ばれる. 命令文は単文と { } で囲まれた複文で構成される. 単文は ;(セミコロン)で終了する. 命令文には右の要素を含む int i; i=10; printf(“i=%d n”,i); i=i+100; printf(“i=%d n”,i); return 0; 5.変数宣言 6.代入文 7.関数 8.リターン文

(11)

ビットとバイト

・計算機の中ではCPUは0と1のみを判断できる. ・ 0か1を表す最小単位を1ビット呼ぶ. ・メモリにはプログラムやデータが格納されるがビット毎に並んでいるわけではない 1ビットの足し算 0+0=0 0+1=1 1+0=1 1+1=10 (次の桁に1繰り上がる) 10進数 2進数 0 0000 1 0001 2 0010 3 0011 4 0100 00100101101001000000010100101101 ・メモリには均等に番号(アドレス)が割り当てられている. 1バイトのデータでは1,0の組み合わせで,256の範囲の整数を表せる 8個のビットデータの集まりを1バイトと呼ぶ. 各アドレスは1バイトの整数倍(CPUによって異なる) を基本単位とするビットデータが格納される アドレス 番号 データ 217 218 219 220

(12)

C言語で扱えるデータ型(1)

ビットの羅列の数や,ビット情報を何に対応させるかで扱えるデータの種類が異なる 整数型 (ビットの羅列を符号付の二進数で表される整数と見る) short 16ビット(2バイト)長 -32,768~32,767 long 32ビット(4バイト)長 -2,147,483,648~2,147,483,647 long long 64ビット(8バイト)長 -9,223,372,036,854,775,808 ~9,223,372,036,854,775,807 int システムによって異なる 整数型には int 型を指定することが多い。 char 8ビット(1バイト)長 -128~127 char型は数値ではなく文字を表すときにも使用 これらの型に unsigned が付くとビットの羅列を符号なしの二進数で表される整数 と見る.すなわち,下限が0で,符号付きの場合の上限の二倍+1が上限となる.

ビット長に比例して有効桁数が増加する

(13)

C言語で扱えるデータ型(2)

実数型 (ビットの羅列をIEEE浮動小数点で表される実数と見る)

float 32ビット長 1.1e-38 ~3.4e+38 単精度浮動小数点型

double 64ビット長 2.2e-308 ~1.7e+308 倍精度浮動小数点型

long double 96ビット長 1.1e-4932 ~3.3e+4932 拡張精度浮動小数点型

符号ビット 指数部 8 ビット 仮数部 23 ビット 単精度のIEEE浮動小数点形式( 32ビット ) 値=(-1)符号ビット×2 ×(1+c)a-127 指数部を符号なし 二進数としたとき の整数値 = a 各ビット列をb(n)としたとき

23 1

2

)

(

n n

n

b

c

ビット長に対して指数関数的に有効桁数が増加する

(14)

変数の型宣言

int main() {

型名 変数名;

メイン関数の命令文の先頭で指定

short seisuu; 変数 seisuu を16ビットの符号付整数型として宣言

float jissuu1, jissuu2; 単精度の浮動小数点型として変数 jissuu1 と

jissuu2 をコンマで区切って同時に宣言

char i=10; 宣言文と代入文を組み合わせて,

初期値を設定可能

hensuu

jissuu1

jissuu2

i

10

seisuu

メモリ内に割り当てられた変数の様子(箱の大きさが8bitの場合)

変数名と、 領域の先頭番号,占有バイト数,データの種類(整数?実数?)は対応 プログラマは変数名を取り扱う、CPUにとっては、先頭アドレスから定められた範囲にある bitの羅列を数値に変換して取り扱う。

(15)

標準入出力関数

printf ( “ 出力文字列 および 変換文字 “, 変数名1 , 変数名2 , ・ ・ ・)

文字や数値を変換文字(フォーマット指定子)で示された表示法で表示

scanf ( “変換文字 “, &変数名1 , &変数名2 , ・ ・ ・)

変換文字で示された書式で,キーボードからの入力を変数に代入する関数

変換文字の書式指定が重要

端末画面に文字を表示する関数

(16)

printf関数

printf(“出力文字列 および 変換文字“,数値もしくは変数名, ・ ・ ・,・ ・ ・)

printf(”Hello”); Hello printf(”i=%ddd”,i); i=10dd

printf(”i=%d : j=%d”,i,j); i=10 : j=5 printf(”%d %d %d”,1,2,3); 1 2 3

printf(”abc ndef”); abc def

改行文字 バックスラッシュ(もしくは ¥マーク) n

int i=10, j=5; float a=3.141592; ・第一引数の変換文字と代入する変数のデータ型は一致させる ・第二引数以降は数値を指定する.変数で表される数値でもよい

改行文字を入れない限り、最後に表示された位置の右に書かれていくので注意

(17)

フォーマット指定子

データの種類 変換文字 浮動小数点数 %f 浮動小数点数(指数表示) %e 文字 %c 文字列 %s データの種類 10進数 8進数 16進数 int型 %d %o %x short型 %hd %ho %hx long型 %ld %lo %lx long long型 %Ld %Lo %Lx

printf(”%5d”,i); 表示桁数の指定 10 printf(”%f”,a); 浮動小数点表示 3.141592

printf(”%5.3f”,a); 書式付浮動小数点表示 3.142

%小数点も含む総文字数.小数点以下の桁数f

printf(”%e”,a*100); 浮動小数点指数表示 3.141592e+02 printf(”%d”,a); データ型を間違えた場合 -57999238

表示する数値をフォーマット指定子を使って、表示形式を変えられる

(18)

scanf関数

scanf ( “変換文字“, &変数名1 , &変数名2 , ・ ・ ・)

標準入力関数 scanf は変換文字で示された書式で,キーボードからの入力 を変数に代入する関数である. ・第一引数の変換文字には printf 関数と同じものを用いる ・変換文字と代入する変数のデータ型は一致させる ・第二引数以降の変数には変数名の前に & をつける. &変数名は,その変数が格納されているメモリ内のアドレス番号を関数に渡すことになる 引数に変数名のみを指定すれば,変数が今現在持っている数値を関数に渡すことにな る.この場合アドレス番号10番にデータを入力しようとする。そうすると実行時に「セグメ ンテーションエラー」が出てプログラムは停止する。

i

10

(19)

アドレスに変数型に対 応するバイト数分の データを格納

scanf関数の働き

int i; scanf(”%d”,&i); 変数が格納されたアドレスを示す数値が入る 1 2 入力を受け付ける 12をint型として変換 00000000000000000000000000001100

i

10

変数 i が格納される 先頭のアドレスを受 け取る 214 215 216 217 218 219 220 221 222 223 224

i

(20)

プログラムの流れの制御

条件式

によって流れを変える

start end 処理1 処理2 処理3 上から下のみの流れ 条件に対してYes か Noで 処理を2分岐 start 処理2’ end 処理1 処理2 処理3 条件成立? ある処理からジャンプ Yes No No

流れの順序を変える

流れを枝分かれ

Yes 処理2 end 処理3 start 処理1 条件成立?

(21)

条件式

条件式が真(YES)か偽(No)かの結果を出力する

関係演算子 == != > < >= <= 等しい 異なる より大きい より小さい 以上 以下 a==0 a!=0 a>0 a<0 a>=0 a<=0 && || ! 論理積(AND) 論理和(OR) 論理否定(NOT) (a==0) && (b==0) (a==0)||(b=0) !(a==0) a=0 かつ b=0か? a=0 または b=0か? a=0 でないか? aが0と等しいか? a が0以外か? a が0より大きいか? a が0より小さいか? a が0以上か? a が0以下か? 論理演算子

複数の条件を組み合わせた条件を表現可能

記号 意味 例 例の意味 記号 意味 例 例の意味

(22)

NO

文1

条件式1を判断

YES

文3

対応するif文の条件式に当てはまらないときelse 以降の中括弧を実行。 一つのif文に対してelse文は一つ。なくてもよい

文2

if 文

if(条件式1) 条件式は括弧( )でくくる 条件式が真のときだけ条件式以降の中括弧{ }でくく られた文を実行 else {文2;} 文3; {文1;}

(23)

if 文の入れ子

if(条件式1) {文1;} else 中括弧は必ず1対1に対応させないといけない

NO

文1

条件式1を判断

YES

文4

条件式2を判断

文2

文3

NO

YES

文4; else if(条件式2) {文2;} … else {文3;} else の処理文が条件文のみのとき else if 文を使うとスマートに書ける else ifは複数記述できる。

(24)

while 文

While文は繰り返しの回数がわからないとき便利な構造である while(条件式){ 文1; } 条件式が満たされている間,文1を繰り返す No 文1 条件式の判定 Yes 文2

if文

ある条件を満たすとき1回だけ文1を実行

While 文

繰り返す ある条件を満たす間文1を繰り返す 文1で条件を変更させることが必要 文1 条件式の判定 No Yes 文2 if(条件式){文1;} 文2; while(条件式){文1;} 文2;

(25)

文1 条件の判定 No Yes

for 文

カウンタ変数のみを条件式とする カウンタの初期化 カウンタの更新

for 文

決められた回数だけ同じ処理を繰り返す カウンタの初期化 繰り返し回数を数えるため の変数(カウンタ)を初期化 for(カウンタの初期化 ; 継続条件式 ; カウンタの更新方法){ 文1; } 継続の条件 繰り返しを継続するかを判定 するための カウンタ変数に対する条件式 カウンタの更新方法 カウンタ変数の値を更新す るための数式

(26)

for 文の例

for(i=0; i<5; i++){

printf(“i=%d ”,i); }

i = 0, 1, 2, 3, 4 と繰り返す

for(i=5; i>=1; i--){printf(“i=%d ”,i);} i = 5, 4, 3, 2, 1 と繰り返す

for(i=0;i<10;i=i+2){printf(“i=%d ”,i);} i = 0, 2, 4, 6, 8 と繰り返す

i=0 i=1 i=2 i=3 i=4

for(i=0; i<2; i++){ }

二重ループ.内側のループが先に繰り返される

for(j=0; j<2; j++){printf(“[i=%d j=%d] ”,i,j);}

[i=0 j=0] [i=0 j=1] [i=1 j=0] [i=1 j=1] i=5 i=4 i=3 i=2 i=1

(27)

課題 1

1. for 文と printf 文を使って10個の異なる数値を表示するプログラムを作成する

2. cc コマンドによりコンパイルを行う。

3. 実行結果をscriptコマンドでファイルに出力する。

提出物 : Cソースファイル、及び、コンパイル後に実行した実行結果(scriptコマンド の出力ファイル)をメールに添付して送る 課題締め切り : 次回講義開始日の12:00まで #include <stdio.h> int main() { int i; for(i= ){ printf( ); } return 0; }

kadai1.c

(28)

> script result_2_09305024 スクリプトを開始しました、ファイルは result_1_09305024.txt です > cc kadai1.c > ./a.out i=10 > exit exit スクリプトを終了しました、ファイルは result_1_09305024.txt です ./a.out

実行結果確認ファイルの作り方

cc kadai1.c exit 課題のように、ソースファイル[kadai1.c] をコンパイルし、実行結果の様子をファイ ル名[result_ 課題番号(半角)_学籍番号(半角).txt]として保存する場合 scriptコマンドが実行されてからexitが入力されるまでに、端末画面へ 出力される文字を指定したファイルにも書き込むUnixコマンド >cat ファイル名 でファイル内容を確認してみよ。 script result_1_09305024.txt > script > script ファイル名 typescriptという名前のファイル名で保存 指定したファイル名で保存

参照

関連したドキュメント

We also realize the configurations in question as formal toric schemes and compute their formal Gromov–Witten invariants using the mathematical and physical theories of the

Tkachov; Doubly nonlocal Fisher-KPP equation: Speeds and uniqueness of traveling waves.. Tkachov; Doubly nonlocal Fisher-KPP equation:

ホーム &gt; 政策について &gt; 分野別の政策一覧 &gt; 健康・医療 &gt; 食品 &gt; 輸入食品監視業務 &gt;

ホーム &gt;政策について &gt;分野別の政策一覧 &gt;福祉・介護 &gt;介護・高齢者福祉

Joshi; Existence and nonexistence of solutions of sublinear problems with prescribed num- ber of zeros on exterior domains, Electronic Journal of Differential Equations, 2017 No..

Thus, Fujita’s result says that there are no global, nontrivial solutions of (1.3) whenever the blow up rate for y(t) is not smaller than the decay rate for w(x, t) while there are

&lt; &gt;内は、30cm角 角穴1ヶ所に必要量 セメント:2.5(5)&lt;9&gt;kg以上 砂 :4.5(9)&lt;16&gt;l以上 砂利 :6 (12)&lt;21&gt; l

Section 3 discusses the connection to automorphic forms, states the needed form of the Langlands conjecture, and gives the reduction of Theorem 1.6 to showing the non-existence