数値計算

Similar documents
数値計算

PowerPoint プレゼンテーション

kiso2-06.key

Microsoft PowerPoint - CproNt02.ppt [互換モード]

PowerPoint Presentation

ゲームエンジンの構成要素

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

ファイル入出力

講習No.12

プログラミング実習I

Microsoft Word - Cプログラミング演習(3)

cp-7. 配列

Microsoft Word - no11.docx

gengo1-10

スライド 1

gengo1-2

Java講座

/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){

ファイル入出力

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

kiso2-09.key

Prog1_10th

FORTRAN( と C) によるプログラミング 5 ファイル入出力 ここではファイルからデータを読みこんだり ファイルにデータを書き出したりするプログラムを作成してみます はじめに テキスト形式で書かれたデータファイルに書かれているデータを読みこんで配列に代入し 標準出力に書き出すプログラムを作り

Taro-ファイル処理(公開版).jtd

Microsoft PowerPoint - kougi6.ppt

関数の呼び出し ( 選択ソート ) 選択ソートのプログラム (findminvalue, findandreplace ができているとする ) #include <stdiu.h> #define InFile "data.txt" #define OutFile "surted.txt" #def

プログラミング基礎

1 return main() { main main C 1 戻り値の型 関数名 引数 関数ブロックをあらわす中括弧 main() 関数の定義 int main(void){ printf("hello World!!\n"); return 0; 戻り値 1: main() 2.2 C main

Cプログラミング1(再) 第2回

gengo1-11

本サンプル問題の著作権は日本商工会議所に帰属します また 本サンプル問題の無断転載 無断営利利用を厳禁します 本サンプル問題の内容や解答等に関するお問 い合わせは 受け付けておりませんので ご了承ください 日商プログラミング検定 STANDARD(C 言語 ) サンプル問題 知識科目 第 1 問 (

講習No.10

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

Microsoft Word - Cプログラミング演習(8)

Microsoft PowerPoint - 計算機言語 第7回.ppt

2009 I 2 II III 14, 15, α β α β l 0 l l l l γ (1) γ = αβ (2) α β n n cos 2k n n π sin 2k n π k=1 k=1 3. a 0, a 1,..., a n α a

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def

第9回 配列(array)型の変数

Microsoft PowerPoint - CproNt11.ppt [互換モード]

プログラミング基礎

4 月 東京都立蔵前工業高等学校平成 30 年度教科 ( 工業 ) 科目 ( プログラミング技術 ) 年間授業計画 教科 :( 工業 ) 科目 :( プログラミング技術 ) 単位数 : 2 単位 対象学年組 :( 第 3 学年電気科 ) 教科担当者 :( 高橋寛 三枝明夫 ) 使用教科書 :( プロ

memo

gengo1-12

Microsoft PowerPoint - ruby_instruction.ppt

スライド 1

関数の呼び出し ( 選択ソート ) 選択ソートのプログラム (findminvalue, findandreplace ができているとする ) #include <stdio.h> #define InFile "data.txt" #define OutFile "sorted.txt" #def

演習1

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

Microsoft Word - 18環設演付録0508.doc

Microsoft PowerPoint - C_Programming(3).pptx

Microsoft PowerPoint - lec10.ppt

Microsoft PowerPoint - lec4.ppt

プログラミングA

memo

fuga scanf("%lf%*c",&fuga); 改行文字を読み捨てる 10 進数の整数 おまじない取り込んだ値を代入する変数 scanf( %d%*c,&hoge); キーボードから取り込め という命令 1: scanf 1 1: int double scanf %d %lf printf

program7app.ppt

USB ID TA DUET 24:00 DUET XXX -YY.c ( ) XXX -YY.txt() XXX ID 3 YY ID 5 () #define StudentID 231

Microsoft PowerPoint - 13th.ppt [互換モード]

Taro-再帰関数Ⅱ(公開版).jtd

情報処理演習 B8クラス

プログラミング方法論 II 第 14,15 回 ( 担当 : 鈴木伸夫 ) 問題 17. x 座標と y 座標をメンバに持つ構造体 Point を作成せよ 但し座標 は double 型とする typedef struct{ (a) x; (b) y; } Point; 問題 18. 問題 17 の

計算機プログラミング

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

Microsoft Word - 3new.doc

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

2 1 Octave Octave Window M m.m Octave Window 1.2 octave:1> a = 1 a = 1 octave:2> b = 1.23 b = octave:3> c = 3; ; % octave:4> x = pi x =

break 文 switch ブロック内の実行中の処理を強制的に終了し ブロックから抜けます switch(i) 強制終了 ソースコード例ソースファイル名 :Sample7_1.java // 入力値の判定 import java.io.*; class Sample7_1 public stati

関数の動作 / printhw(); 7 printf(" n"); printhw(); printf("############ n"); 4 printhw(); 5 関数の作り方 ( 関数名 ) 戻り値 ( 後述 ) void である. 関数名 (

gengo1-12

PowerPoint プレゼンテーション

Microsoft PowerPoint - kougi7.ppt

memo

卒 業 研 究 報 告.PDF

Microsoft PowerPoint - prog05.ppt

コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol

問 2 ( 型変換 ) 次のプログラムを実行しても正しい結果が得られない 何が間違いかを指摘し 正しく修正せよ ただし int サイズが 2 バイト long サイズが 4 バイトの処理系での演算を仮定する #include <stdio.h> int main( void ) { int a =

プログラミングA

/* do-while */ #include <stdio.h> #include <math.h> int main(void) double val1, val2, arith_mean, geo_mean; printf( \n ); do printf( ); scanf( %lf, &v

Microsoft Word - report#8.docx

プログラミング実習I

‚æ2›ñ C„¾„ê‡Ìš|

計算機プログラミング

gengo1-12

第2回講義:まとめ

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

Microsoft PowerPoint - program.ppt [互換モード]

ポインタ変数

Microsoft PowerPoint - 説明2_演算と型(C_guide2)【2015新教材対応確認済み】.pptx

Microsoft PowerPoint - class04.ppt

Microsoft PowerPoint - C4(反復for).ppt

PowerPoint Presentation

Taro-再帰関数Ⅲ(公開版).jtd

Prog1_12th

Microsoft PowerPoint - prog04.ppt

関数 C 言語は関数の言語 関数とは 関数の定義 : f(x) = x * x ; 使うときは : y = f(x) 戻り値 引数

C.1 GLSL ES 言語リファレンス この付録は WebGL 用のシェーダをプログラムするために使われるGLSL ES 言語のリファレンスである GLSL ESの詳細は GLSL_ES_Specifi

02: 変数と標準入出力

02: 変数と標準入出力

gengo1-8

fx-260A_Users Guide_J

Transcription:

数値計算 垣谷公徳 17 号館 3 階電子メール : kimi@ee.ous.ac.jp プログラミング言語の一般論 データ型 ( 定数と変数 配列 ) 代入 基本演算 ( 四則演算 ) 入出力 分岐 繰返処理 関数 外部手続き 1 2 入力関数 入出力 getchar, getc, fgetc ; 一文字入力 gets, fgets, fread ; 文字列 ( データ列 ) 入力 scanf, fscanf, sscanf ; 書式付入力 出力関数 putchar, putc, fputc ; 一文字出力 puts, fputs, fwrite ; 文字列 ( データ列 ) 出力 printf, fprintf, sprintf; 書式付出力 Local Rule.3: 入力は行わず, データはプログラム中に直接書く. 出力は printf のみ. 3 printf 関数 int printf (const char *, 変数, 変数,...); 書式制御文字列リテラル %\" 以外はそのまま出力 "%+ 数字 + 文字 " %d 整数を出力 %f 固定小数点実数を出力 %e 浮動小数点実数を出力 "%%" % 自体を出力 その他 %i %o %u, %c, %s %x, %X %E, %g, %G 4 書式制御文字列 int n = 578; 書式制御文字列 double x = -57.89; printf("%d\n", n); 5 7 8 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 printf("%f\n", x); - 5 7. 8 9 0 0 0 0 printf("%8d\n", n); 5 7 8 printf("%08d\n", n); 0 0 0 0 0 5 7 8 printf("%2d\n", n); 5 7 8 printf("%9.3\n", x); - 5 7. 8 9 0 printf("%6.3d\n", x); - 5 7. 8 9 0 printf("%6.1d\n", x); - 5 7. 9 5 6

書式制御文字列 double x = -57.89; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 printf("%e\n", x); - 5. 7 8 9 0 0 0 e + 0 1 printf("%15.7e\n", x); - 5. 7 8 9 0 0 0 0 e + 0 1 printf("%10.1e\n", x); - 5. 8 e + 0 1 printf("%27.20e\n", x); 5.78900000000000005684e+01 printf 関数 int printf (const char *, 変数, 変数,...); 書式制御文字列リテラル Local Rule.4 原則 %d 整数 %f 実数 %15.7e 実数を使用する 7 8 c 言語の制御構造 単純 ( ブロック )if 文 単純 if 文 if-else 文 ( ブロック if 文 ) else-if 文 switch-case 文 while 文 do-while 文 for 文 if ( 式 ) { /* 例 a= a */ if (a < 0.) { a = -a; 処理 9 10 式 数値の大小関係の比較 a > b a > b a b a >= b a < b a < b a b a <= b n = m n == m n m n!= m Rule: 整数にしか使わない! 式 論理和 T1 T2, T1 T2 (T1) (T2) 論理積 T1 T2, T1 T2 (T1) && (T2) 論理否定 T! (T) 論理演算式 0 True ( 真 ) 式 = 0 False ( 偽 ) Local Rule: 式の値は使用しない 11 12

if 文 if-else 文 単純 if 文の例 double b, d; if (d >= 0.) b = -d; int i, j, n; if ((i - 1) < 0) j = i -1 + n; int k, l; double d, eps if ((k == l) && (d < eps)) return 0; ブロックif 文 /* 例 a= a */ if (a >= 0.) { a = a; else { a = -a; 処理 B 処理 A 13 14 else-if 文 if ( 式 1) { 処理 T1; else if ( 式 2) { 処理 T2;... else if ( 式 n) { 処理 Tn; else{ 処理 F; 1 1 n 処理 F 処理 T1 処理 T2 処理 Tn switch-case 文 swich ( 式 ) { case A: 処理 1; case B: 処理 2; 処理 3; break; case C: 処理 4; 処理 5; break; default: 処理 6; break; Local Rule: else-ifを使う 式 変数を分類 分類 A 分類 B 分類 C その他 処理 1 処理 2 処理 3 処理 4 処理 5 処理 6 15 16 while 文 前置型ループ while ( 式 ) { 処理 Local Rule: 無限ループを避けるため for 文を使用 do-while 文 後置型ループ do { 処理 while ( 式 ); Local Rule: 無限ループを避けるため for 文を使用 17 18

for 文 for( 前 式 ; 次処理 ){ 前 while ( 式 ){ 次 前処理 処理 次処理 for ループ 1+2+3+4+...+100 を計算する #define N 100 int i, s; s=0; for (i = 1; i <= N; i = i+1) s = s + i; Local rule: --, +=, /=, *= 等は使わない ++ のみ使う for (i=1, s=0; i<=n; i++) s+=i; s=0; for (i=1; i<=n; i++) s = s + i; 19 20 for ループ 整数型変数 Local Rule: for( 制御変数 = 1; 制御変数 <= 制御変数の上限 ; 制御変数 ++) { for( 配列の添字 = 0; 配列の添字 < 配列の大きさ ; 配列の添字 ++) { の形のforループのみを使用 for ループ 使用例 特定の処理をN 回繰り返す #define N 100 for (i=1; i<=n; i++){ printf("loop %6d\n", i); 21 22 for ループ for ループ使用上の注意 使用例 配列各要素について処理を行う #define N 100 double a[n]; printf("a(%3d)=%15.7f\n", i, a[i]); 制御変数増加型のループのみ使用 制御変数をループ内で変更しない 制御変数は整数型を用いる 初期値は0か1 増分は1のみ 処理は必ずブロックにする 23 24

配列の値を初期化する #define N 10 double a[n]; a[i]=1.0; 二次元配列に単位行列を代入する int i, j; double a[n][n]; for (j=0; j<n; j++){ if (i==j) { a[i][j]=1.0; else { a[i][j]=0.0; 25 26 配列に数列を代入する double a, r, c[n]; if (i==0) { c[i] = a; else { c[i] = r*c[i-1]; c { n = ar n c0 = a c n = rc n 1 配列の総和を求める double s, c[n], *p; s = 0.0; for (i=0; i<n; i++) { s = s + c[i]; S = N 1 c i i=0 for (p=c, i=0, s=0.0; i<n; i++, s+=*p++); 27 28 配列の最大要素を求める int i, imax; double vmax, val[n]; imax = 0; vmax = val[0]; for (i=1; i<n; i++){ if (val[i]>vmax) { imax = i; vmax = val[i]; ベクトルの内積の計算 a = (a 0, a 1,, a n 1 ) b = (b0, b 1,, b n 1 ) n 1 a b = a 0 b 0 + a 0 b 0 + a n 1 b n 1 = a i b i double c, a[n], b[n]; c = 0.0; c = c + a[i]*b[i]; i=0 29 30

N 1 行列の積の計算 C ij = A ik B kj int i, j, k; k=0 double a[n][n], b[n][n], c[n][n]; for (j=0; j<n; j++){ c[i][j] = 0.0; for (k=0; k<n; k++){ c[i][j] = c[i][j] + a[i][k]*b[k][j]; 周期境界を用いる int j, k ; double a[n], b[n], c[n]; for (k=0; k<n; k++){ c[k] = 0.0; for (j=0; j<n; j++){ c k = c[k] = c[k] + a[j]*b[j+k]; N 1 j=0 b k+n = b k a j b j+k 31 32 周期境界を用いる N 1 int j, k, jp; c k = a j b j+k double a[n], b[n], c[n]; j=0 for (k=0; k<n; k++){ b k+n = b k c[k] = 0.0; for (j=0; j<n; j++){ jp = j + k; if (jp >= N) jp = jp - N; c[k] = c[k] + a[j]*b[jp ]; 前処理 break と continue break; 前処理 continue; 次処理次処理 33 34 関数 標準ライブラリ関数 (ANSI/POSIX) 環境依存ライブラリ関数 (API) ユーザ定義関数 値を返す ( 数学関数など ) 値を返さない ( サブルーチン ) 標準数学関数 math.h に定義されている 使用するときには #include <math.h> 注意 : 全て, 引数も返り値も double 型 平方根 x sqrt(x) ただし x 0 指数関数 e x exp(x) 自然対数 ln x, loge x log(x) ただし x > 0 常用対数 log10 x log10(x) ただし x > 0 絶対値 x fabs(x) 35 36

標準数学関数 三角関数 逆三角関数 正弦 sin x sin(x) 余弦 cos x cos(x) 正接 tan x tan(x) 戻り値を z とおくと 逆正弦 arcsin x asin(x) x 1, π/2 z π/2 逆余弦 arccos x acos(x) x 1, 0 z π arctan x atan(x) π/2 z π/2 逆正接 arctan (x / y) atan2(x, y) π z π 標準数学関数 双曲線関数 sinh x = (e x e x )/2 cosh x = (e x + e x )/2 tanh x = sinh x/cosh x 切り捨て 切り上げ x sinh(x) cosh(x) tanh(x) floor (x) n 2 n 1 n n+1 ceil (x) floor (x) ceil (x) n+1 n n 1 n 2 ceil (x) x floor (x) 37 38 ユーザ定義関数 プロトタイプ宣言戻り値の型関数の名前 ( 引数の型, 引数の型,...); 関数の呼び出し変数 = 関数の名前 ( 引数, 引数,...); 関数の定義戻り値の型関数の名前 ( 引数の型仮引数,...) { return 戻り値 ; 値を返さない関数 プロトタイプ宣言 void 関数の名前 ( 引数の型, 引数の型,...); 関数の呼び出し関数の名前 ( 引数, 引数,...); 関数の定義 void 関数の名前 ( 引数の型仮引数,...) { FORTRANやPascalのサブルーチンに相当する 39 40 関数の例 単純な初等関数の組み合わせ f(x) = e x 1 double fnct(double); double fnct(double x){ double f; f = exp(-x) - 1.; return f; 関数の例 単純な初等関数の組み合わせ (2 変数 ) f(x, y) = x 6 y 3 double fnct(double, double); double fnct(double x, double y){ double x3, x6, y3, f; x3 = x*x*x; y3 = y*y*y; x6 = x3*x3; return (x6 - y3); 41 42

関数の例 配列の要素の最大値 double maxelement(double a[], int n) { double maxval; maxval = a[0]; for (i=1; i<n; i++) { if (a[i] > maxval) maxval = a[i]; return maxval; main.c #define N 3 int last(int*); int main(void){ int b, a[n]={1,2,3; b = last(a); printf( %d\n,b); return 0; function.c #define N 3 int last(int c[]){ return c[n-1]; 関数と配列 main.c #define N 3 int last(int*, int); int main(void){ int b, a[n]={1,2,3; b = last(a, N); printf( %d\n,b); return 0; function.c int last(int c[],int m){ return c[m-1]; 43 44 関数と配列 #define N 2 #define M 3 int last(int c[][m]); int main(void){ int b, a[n][m] = {{11, 12, 13, {21, 22, 23; b = last(a); printf( %d\n, b); return 0; int last(int c[][m]){ return c[n-1][m-1]; a[0][3]={11,12,13; a[1][3]={21,22,23; a[2] = {a[0], a[1] 45 関数と配列 Rocal Rule: 1 次元配列の大きさは明示するか関数に引数として渡す 2 次元配列の大きさは配列初期化や関数宣言, プロトタイプ宣言でも明示する 46 関数と引数 int main(void){ int a = 1; func(a); printf( %d\n,a); return 0; void func(int c){ printf( %d\n,c); c = c + 1; % a.out 1 1 % 47