A 30 A A ( ) 2 C C (, machine language) C (C compiler) ( ) Mac Apple Xcode Clan

Similar documents
[1] #include<stdio.h> main() { printf("hello, world."); return 0; } (G1) int long int float ± ±

C 2 / 21 1 y = x 1.1 lagrange.c 1 / Laglange / 2 #include <stdio.h> 3 #include <math.h> 4 int main() 5 { 6 float x[10], y[10]; 7 float xx, pn, p; 8 in

kiso2-06.key

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

C , C++ C C++ C++ C cpprefjp - C++ 1 C CUI 2.1 donothing.cpp 1

新版明解C言語 実践編

2 P.S.P.T. P.S.P.T. wiki 26

3.1 stdio.h iostream List.2 using namespace std C printf ( ) %d %f %s %d C++ cout cout List.2 Hello World! cout << float a = 1.2f; int b = 3; cout <<

ex14.dvi

kiso2-09.key

1 C STL(1) C C C libc C C C++ STL(Standard Template Library ) libc libc C++ C STL libc STL iostream Algorithm libc STL string vector l

1 4 2 EP) (EP) (EP)

卒 業 研 究 報 告.PDF

18 C ( ) hello world.c 1 #include <stdio.h> 2 3 main() 4 { 5 printf("hello World\n"); 6 } [ ] [ ] #include <stdio.h> % cc hello_world.c %./a.o

θ (t) ω cos θ(t) = ( : θ, θ. ( ) ( ) ( 5) l () θ (t) = ω sin θ(t). ω := g l.. () θ (t) θ (t)θ (t) + ω θ (t) sin θ(t) =. [ ] d dt θ (t) ω cos θ(t

joho09.ppt

P02.ppt

C

/* 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

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

Original : Hello World! (0x0xbfab85e0) Copy : Hello World! (0x0x804a050) fgets mstrcpy malloc mstrcpy (main ) mstrcpy malloc free fgets stream 1 ( \n

x h = (b a)/n [x i, x i+1 ] = [a+i h, a+ (i + 1) h] A(x i ) A(x i ) = h 2 {f(x i) + f(x i+1 ) = h {f(a + i h) + f(a + (i + 1) h), (2) 2 a b n A(x i )

新版明解C言語入門編

P05.ppt

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

num2.dvi

A/B (2018/10/19) Ver kurino/2018/soft/soft.html A/B

mstrcpy char *mstrcpy(const char *src); mstrcpy malloc (main free ) stdio.h fgets char *fgets(char *s, int size, FILE *stream); s size ( )

: CR (0x0d) LF (0x0a) line separator CR Mac LF UNIX CR+LF MS-DOS WINDOWS Japan Advanced Institute of Science and Technology


数値計算

C による数値計算法入門 ( 第 2 版 ) 新装版 サンプルページ この本の定価 判型などは, 以下の URL からご覧いただけます. このサンプルページの内容は, 新装版 1 刷発行時のものです.

C言語によるアルゴリズムとデータ構造

r1.dvi

all.dvi


新・明解C言語 実践編

1 1.1 C 2 1 double a[ ][ ]; 1 3x x3 ( ) malloc() malloc 2 #include <stdio.h> #include

1.ppt

£Ã¥×¥í¥°¥é¥ß¥ó¥°ÆþÌç (2018) - Â裶²ó ¨¡ À©¸æ¹½Â¤¡§·«¤êÊÖ¤· ¨¡

comment.dvi


pptx

新・明解C言語 ポインタ完全攻略

超初心者用

Informatics 2014

1 1.1 C 2 1 double a[ ][ ]; 1 3x x3 ( ) malloc() 2 double *a[ ]; double 1 malloc() dou

ex01.dvi

programmingII2019-v01

/* sansu1.c */ #include <stdio.h> main() { int a, b, c; /* a, b, c */ a = 200; b = 1300; /* a 200 */ /* b 200 */ c = a + b; /* a b c */ }

解きながら学ぶC言語

I ASCII ( ) NUL 16 DLE SP P p 1 SOH 17 DC1! 1 A Q a q STX 2 18 DC2 " 2 B R b

PowerPoint Presentation

実際の株価データを用いたオプション料の計算

1-4 int a; std::cin >> a; std::cout << "a = " << a << std::endl; C++( 1-4 ) stdio.h iostream iostream.h C++ include.h 1-4 scanf() std::cin >>

£Ã¥×¥í¥°¥é¥ß¥ó¥°(2018) - Âè11²ó – ½ÉÂꣲ¤Î²òÀ⡤±é½¬£² –

() () (parse tree) ( (( ) * 50) ) ( ( NUM 10 + NUM 30 ) * NUM 50 ) ( * ) ( + ) NUM 50 NUM NUM (abstract syntax tree, AST) ( (( ) * 5

I 2 tutimura/ I 2 p.1/??

£Ã¥×¥í¥°¥é¥ß¥ó¥°ÆþÌç (2018) - Â裵²ó ¨¡ À©¸æ¹½Â¤¡§¾ò·ïʬ´ô ¨¡

ex01.dvi

‚æ4›ñ

untitled

コンピュータ概論

2 [1] 7 5 C 2.1 (kikuchi-fem-mac ) input.dat (cat input.dat type input.dat ))

:30 12:00 I. I VI II. III. IV. a d V. VI

untitled

2008 IIA (program) pro(before)+gram(write) (artificial language) (programming languege) (programming) (machine language) (assembly language) ( )

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 =

c-all.dvi

lexex.dvi

+ +

y = x 4 y = x 8 3 y = x 4 y = x 3. 4 f(x) = x y = f(x) 4 x =,, 3, 4, 5 5 f(x) f() = f() = 3 f(3) = 3 4 f(4) = 4 *3 S S = f() + f() + f(3) + f(4) () *4

スライド 1

Informatics 2010.key


PC Windows 95, Windows 98, Windows NT, Windows 2000, MS-DOS, UNIX CPU

Informatics 2015

C のコード例 (Z80 と同機能 ) int main(void) { int i,sum=0; for (i=1; i<=10; i++) sum=sum + i; printf ("sum=%d n",sum); 2

II ( ) prog8-1.c s1542h017%./prog8-1 1 => 35 Hiroshi 2 => 23 Koji 3 => 67 Satoshi 4 => 87 Junko 5 => 64 Ichiro 6 => 89 Mari 7 => 73 D

:30 12:00 I. I VI II. III. IV. a d V. VI

1.1 1 C IIA $ cd comp3a %endminipage ~/comp3a mkdir $ mkdir comp3a $ cd comp3a C.c Emacs Cntrol x Control s 2 Emacs Control-x Control-f Control-

9 8 7 (x-1.0)*(x-1.0) *(x-1.0) (a) f(a) (b) f(a) Figure 1: f(a) a =1.0 (1) a 1.0 f(1.0)

untitled

第7章 有限要素法のプログラミング

tuat1.dvi

(K&R 2.9) ~, &,, >>, << 2. (K&R 5.7) 3. (K&R 5.9) 4. (K&R 5.10) (argc argv atoi(), atof() ) 5. (K&R 7.5) (K&R 7.6) - FILE, stdin, stdout, std

double float

main

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

prog-text.dvi

double 2 std::cin, std::cout 1.2 C fopen() fclose() C++ std::fstream 1-3 #include <fstream> std::fstream fout; int a = 123; fout.open( "data.t

XMPによる並列化実装2

スライド 1

PowerPoint Presentation

[ 1] 1 Hello World!! 1 #include <s t d i o. h> 2 3 int main ( ) { 4 5 p r i n t f ( H e l l o World!! \ n ) ; 6 7 return 0 ; 8 } 1:

2017 p vs. TDGL 4 Metropolis Monte Carlo equation of continuity s( r, t) t + J( r, t) = 0 (79) J s flux (67) J (79) J( r, t) = k δf δs s( r,

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


Excel ではじめる数値解析 サンプルページ この本の定価 判型などは, 以下の URL からご覧いただけます. このサンプルページの内容は, 初版 1 刷発行時のものです.

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

Transcription:

C 2017 9 29, 30 5 13 http://nalab.mind.meiji.ac.jp/~mk/labo/text/ 1 2 2 C 2 3 4 3.1 C................................... 4 3.2 Hello world........................................ 5 3.3 5............................... 6 3.4............................ 7 3.5.............................. 9 3.6 for................................... 11 3.7 for (2) :........................ 13 3.8 while if ( ).................. 13 3.9................................... 15 3.10.................................. 17 3.11.......................... 18 3.11.1........................................ 18 3.11.2 prog10.c...................................... 19 3.11.3 prog11.c...................................... 19 3.11.4 prog11-c99.c................................... 20 3.11.5 prog11-c++.c.................................. 21 3.12 2................. 22 3.12.1 ( ).................................. 22 3.12.2 prog12.c...................................... 23 3.12.3 prog12a.c..................................... 24 3.12.4 prog12b.c..................................... 25 4 26 4.1..................................... 27 4.2.................................. 28 1

A 30 A.1............................. 30 A.2.............................. 31 1 ( ) 2 C C (, machine language) C (C compiler) ( ) Mac Apple Xcode Clang+LLVM cc, gcc Mac GLSC C cglsc cc Clang+LLVM cc, gcc UNIX cc C 1. 1 ( ) ( ) cc -S C cc C prog.c prog.s prog.s a.out 1 http://nalab.mind.meiji.ac.jp/~mk/labo/studying-c/programing-in-c/node5.html 2

% ls prog.c % cat prog.c int a,b,c,d; a = 1; b = 2; c = 3; d = a * b + c; printf("%d*%d+%d=%d\n", a, b, c, d); % cc -S prog.c % ls prog.c prog.s % cat prog.s ( ) % cc prog.s % ls a.out* prog.c prog.s %./a.out 1*2+3=5 % (macos cc ) prog.s 1 2 + 3 printf() 3

prog.s.section TEXT, text,regular,pure_instructions.macosx_version_min 10, 13.globl _main ## -- Begin function main.p2align 4, 0x90 _main: ## @main.cfi_startproc ## BB#0: pushq %rbp Lcfi0:.cfi_def_cfa_offset 16 Lcfi1:.cfi_offset %rbp, -16 movq %rsp, %rbp Lcfi2:.cfi_def_cfa_register %rbp subq $32, %rsp leaq L_.str(%rip), %rdi movl $0, -4(%rbp) movl $1, -8(%rbp) movl $2, -12(%rbp) movl $3, -16(%rbp) movl -8(%rbp), %eax imull -12(%rbp), %eax addl -16(%rbp), %eax movl %eax, -20(%rbp) movl -8(%rbp), %esi movl -12(%rbp), %edx movl -16(%rbp), %ecx movl -20(%rbp), %r8d movb $0, %al callq _printf xorl %ecx, %ecx movl %eax, -24(%rbp) ## 4-byte Spill movl %ecx, %eax addq $32, %rsp popq %rbp retq.cfi_endproc ## -- End function.section TEXT, cstring,cstring_literals L_.str: ## @.str.asciz "%d*%d+%d=%d\n".subsections_via_symbols 3 3.1 C C main() ( ) C (/* */ ) 4

prog01.c /* prog01.c --- ( ) C */ % cc -o prog01 prog01.c ( cglsc prog01.c) %./prog01 % C ( ) main() 8 C // 1 1 // prog01.c --- ( ) C (main() return ) OS 0 echo $status 0 OS 0 3.2 Hello world 2 Hello world prog02.c /* prog02.c --- Hello world */ printf("hello, world.\n"); % cc -o prog02 prog02.c ( cglsc prog02.c) %./prog02 Hello, world. % 2 & 5

printf() ( ) " " \n ( \ JIS Y ) printf() printf( ); printf(" \n"); printf() stdio.h #include (stdio=standard input and output, h header file ) /usr/include/stdio.h printf() 3.3 5 ( ) prog03.c /* prog03.c --- 5 (?) */ int a, b; printf(" : "); scanf("%d%d", &a, &b); printf(" %d, %d \n", a, b); printf(" =%d, =%d, =%d, ( )=%d, =%d\n", a + b, a - b, a * b, a / b, a % b); C 6

( 3 ) int ( integer, integral) int ( ) int ; int a; int b, c, d; /* */ ( ) scanf() (scanf() ) ( ) ( ) printf() scanf(), printf() (format) %d (d decimal (10 ) 8 16 ) print() 10 ) printf(" %d\n", ); printf("a=%d, b=%d\n", a, b); printf("a 3 =%d\n", 3 * a); scanf() 10 scanf("%d", & ); scanf("%d", &a); scanf("%d%d", &b, &c); & ( ) scanf() scanf() +, -, *, /, % 3.4 C (floating point numbers) 3 Mac cc ( Clang+LLVM ) 2 31 n 2 31 1 n. 2 31 = 2147483648 21 = 2.1 10 9 10 9 64 long long int ( 2147483649LL 2147483649ll LL ll printf() scanf() %lld ) int128 7

prog04.c /* prog04.c --- */ double a, b; printf(" : "); scanf("%lf%lf", &a, &b); printf(" %f, %f \n", a, b); printf(" =%f, =%f, =%f, =%f\n", a + b, a - b, a * b, a / b); float, double, long double IEEE754 10 float 7, double 16 float 10 38 10 38, double 10 308 10 308 double ( ) printf() double %f printf("a=%f\n", a); printf("b=%f, c=%f\n", b, c); scanf() double %lf ( ) (l L ) scanf("%lf", &a); scanf("%lf%lf", &b, &c); %lf, %f %e, ( ) %g (n), (m) %n.mf printf("%20.15f\n", a); ( 20 15 ) 8

int double int double double (1) double (2) ( ) int (3) ( ) int int double double long long int a a long long int ( ) 64 double (IEEE754 ) 53 long long int 11 3.5, n n, C (1) (2) (argument) math.h /usr/include/math.h -lm 4 4 libname.a -lname libm.a ( ) -lm 9

prog05.c /* prog05.c --- ( ) */ #include <math.h> /* */ double x; printf(" : "); scanf("%lf", &x); /* ( ) */ printf("sqrt(%g) =%g\n", x, sqrt(x)); /* sin */ printf("sin(%g) =%g\n", x, sin(x)); /* e */ printf("exp(%g) =%g\n", x, exp(x)); /* */ printf("log(%g) =%g\n", x, log(x)); /* (10 ) */ printf("log10(%g) =%g\n", x, log10(x)); /* hyperbolic sin) */ printf("sinh(%g) =%g\n", x, sinh(x)); /* (power) --- 3 */ printf("pow(%g,%g)=%g\n", x, 1.0/3.0, pow(x, 1.0/3.0)); /* Arctan */ printf("atan(%g) =%g\n", x, atan(x)); /* */ printf("fabs(%g) =%g\n", x, fabs(x)); /* (- = Gauss ) */ printf("floor(%g) =%g\n", x, floor(x)); /* */ printf("ceil(%g) =%g\n", x, ceil(x)); % cc -o prog05 prog05.c -lm (-lm l L ) %./prog05 ( ) / 1 1.0/3.0 1/3 0 3 (double)1/(double)3 1.0/3.0 1.0/3 ( ) 1.0 2 1. 10

π, e π = 3.1415926535 (Napier ) e = 2.7182818284 #include <math.h> double pi, e;... int main()... /* main() pi, e */ pi = 4.0 * atan(1.0); e = exp(1.0); int main() ( ) C C++ 2 ax 2 + bx + c = 0 (a, b, c R, a 0) 3.6 for for() for ( ; ; ) ; for ( ; ; ) 1; 2;... n; n n for (i = 0; i < n; i++) ; ; n = 1, 2,... 2 n, 2 n 11

x n := 2 n, y n := 2 n x n, y n x 0 = 1, x n = 2x n 1 (n = 1, 2,... ), y 0 = 1, y n = y n 1 /2 (n = 1, 2,... ) prog06.c /* prog06.c --- for (1) */ int i, n; double x, y; printf(" : "); scanf("%d", &n); x = 1.0; y = 1.0; for (i = 1; i <= n; i++) /* x 2 y 1/2 */ x = 2 * x; y = y / 2; /* %g %f %e */ printf("2 %d =%g, 1/2 %d =%g\n", i, x, i, y); prog06 %./prog06 : 20 2 1 =2, 1/2 1 =0.5 2 2 =4, 1/2 2 =0.25 2 3 =8, 1/2 3 =0.125 2 4 =16, 1/2 4 =0.0625 2 5 =32, 1/2 5 =0.03125 2 6 =64, 1/2 6 =0.015625 2 7 =128, 1/2 7 =0.0078125 2 8 =256, 1/2 8 =0.00390625 2 9 =512, 1/2 9 =0.00195312 2 10 =1024, 1/2 10 =0.000976562 2 11 =2048, 1/2 11 =0.000488281 2 12 =4096, 1/2 12 =0.000244141 2 13 =8192, 1/2 13 =0.00012207 2 14 =16384, 1/2 14 =6.10352e-05 2 15 =32768, 1/2 15 =3.05176e-05 2 16 =65536, 1/2 16 =1.52588e-05 2 17 =131072, 1/2 17 =7.62939e-06 2 18 =262144, 1/2 18 =3.8147e-06 2 19 =524288, 1/2 19 =1.90735e-06 2 20 =1.04858e+06, 1/2 20 =9.53674e-07 % while ()... do... while () 12

3.7 for (2) : S n = a 1 + a 2 + + a n S 0 = 0 S i = S i 1 + a i (i = 1, 2,..., n) S n = n i=1 a i (1) S i s (2) s = 0; (3) s = s + a i ; i = 1, 2,..., n n 1 2 + 2 2 + + n 2 prog07.c /* * prog07.c --- for (2) */ int i, n; double s; printf(" : "); scanf("%d", &n); s = 0.0; for (i = 1; i <= n; i++) /* s i s = s + i * i; */ s += i * i; printf(" 1 %d =%g\n", n, s); n 1 S n = k! k=0 : a k = 1/k! 5 3.8 while if ( ) while 5 http://nalab.mind.meiji.ac.jp/~mk/keisanki2-2005/zenkashiki/ 13

while ( ) ; == ( )!= ( ) < ( ) <= ( ) > ( ) >= ( ) if (1) if ( ) ; (2) if ( ) 1; else 2; prog08a.c /* * prog08a.c --- 2 */ #include <math.h> double a, b, c, D, sqrtd, re, im, x1, x2; printf("2 a x^2+b x+c=0 \n"); printf("a, b, c: "); scanf("%lf%lf%lf", &a, &b, &c); D = b * b - 4 * a * c; if (D > 0) sqrtd = sqrt(d); x1 = (- b + sqrtd) / (2 * a); x2 = (- b - sqrtd) / (2 * a); printf(" 2 : %20.15g, %20.15g\n", x1, x2); else if (D == 0.0) printf(" ( ): %20.15g\n", - b / (2 * a)); else re = - b / (2 * a); im = sqrt(- D) / (2 * a); printf(" 2 : %20.15g %20.15g \n", re, im); 14

prog08.c /* prog08.c --- while if ( ) */ /* * 2 3 1 * 1 * ( ) * */ int n; printf(" : "); scanf("%d", &n); while (n!= 1) printf("%d\n", n); if (n % 2 == 0) n = n / 2; else n = 3 * n + 1; printf("%d\n", n); 3.9 ( ) ( ); double square(double); double square(double x); ( )...... 15

return ; double square(double x) return x * x; sin x (x 0) f(x) := x 1 (x = 0) prog09.c 6 /* prog09.c --- */ #include <math.h> /* f */ double f(double); int i, n; double a; printf(" : "); scanf("%d", &n); a = 1.0; for (i = 0; i < n; i++) a /= 2; printf("1-sin(%g)/%g=%g\n", a, a, 1.0-f(a)); /* f() */ double f(double x) if (x == 0.0) return 1.0; else return sin(x) / x; 6 http://nalab.mind.meiji.ac.jp/~mk/labo/text/cminimum-prog/prog09.c 16

3.10 input.data 2 3 1 2 2 output.data 5 prog13.c /* * prog13.c --- fopen(), fclose(), fprintf(), fscanf() * gcc -o prog13 prog13.c */ int a, b, sum; FILE *in, *out; in = fopen("input.data", "r"); /* in NULL */ fscanf(in, "%d%d", &a, &b); fclose(in); sum = a + b; printf("%d %d %d\n", a, b, sum); out = fopen("output.data", "w"); fprintf(out, "%d\n", sum); fclose(out); fopen() 17

prog13check.c /* * prog13check.c --- fopen(),fclose(),fprintf(),fscanf() * gcc -o prog13 prog13.c */ int a, b, sum; FILE *in, *out; if ((in = fopen("input.data", "r")) == NULL) fprintf(stderr, "input.data \n"); exit(1); fscanf(in, "%d%d", &a, &b); fclose(in); sum = a + b; printf("%d %d %d\n", a, b, sum); if ((out = fopen("output.data", "w")) == NULL) fprintf(stderr, "output.data \n"); exit(1); fprintf(out, "%d\n", sum); fclose(out); 3.11 3.11.1 ( ) 1 ( ) malloc() double a[1000]; // 1000 double b[1000]; // Seg fault double *c; // c = malloc(sizeof(double) * 1000); // 1000 if (c == NULL) //... 18

3.11.2 prog10.c N /* * prog10.c --- * gcc -o prog10 prog10.c */ #define N (3) /* n x, y */ double inner_product(double x[], double y[], int n) int i; double s; s = 0.0; for (i = 0; i < n; i++) s += x[i] * y[i]; return s; int i; double a[n], b[n]; printf(" %d \n", N); printf(" a \n"); for (i = 0; i < N; i++) printf(" %d =", i + 1); scanf("%lf", &a[i]); printf(" b \n"); for (i = 0; i < N; i++) printf(" %d =", i + 1); scanf("%lf", &b[i]); printf(" =%g\n", inner_product(a, b, N)); 3.11.3 prog11.c prog10.c N (C99 C ) malloc() /* * prog11.c --- * gcc -o prog11 prog11.c */ #include <stdlib.h> /* malloc() */ /* n x, y */ 19

double inner_product(double *x, double *y, int n) int i; double s; s = 0.0; for (i = 0; i < n; i++) s += x[i] * y[i]; return s; int i, N; double *a, *b; printf(" \n"); printf(" : "); scanf("%d", &N); a = malloc(sizeof(double) * N); b = malloc(sizeof(double) * N); if (a == NULL b == NULL) fprintf(stderr, " \n"); exit(1); printf(" a \n"); for (i = 0; i < N; i++) printf(" %d =", i + 1); scanf("%lf", &a[i]); printf(" b \n"); for (i = 0; i < N; i++) printf(" %d =", i + 1); scanf("%lf", &b[i]); printf(" =%g\n", inner_product(a, b, N)); /* a, b * */ free(a); free(b); 3.11.4 prog11-c99.c C C99 (variable length array) ( C11 C++14 ( Mac 8 MB ) ) /* * prog11-c99.c --- * gcc -o prog11-c99 prog11-c99.c */ /* n x, y */ 20

double inner_product(double *x, double *y, int n) int i; double s; s = 0.0; for (i = 0; i < n; i++) s += x[i] * y[i]; return s; int i, N; printf(" \n"); printf(" : "); scanf("%d", &N); double a[n], b[n]; printf(" a \n"); for (i = 0; i < N; i++) printf(" %d =", i + 1); scanf("%lf", &a[i]); printf(" b \n"); for (i = 0; i < N; i++) printf(" %d =", i + 1); scanf("%lf", &b[i]); printf(" =%g\n", inner_product(a, b, N)); 3.11.5 prog11-c++.c C++ malloc() free() new delete /* * prog11-c++.cpp --- * g++ -o prog11-c++ prog11-c++.cpp */ #include <iostream> #include <cstdlib> using namespace std; /* n x, y */ double inner_product(double *x, double *y, int n) int i; double s; s = 0.0; for (i = 0; i < n; i++) s += x[i] * y[i]; return s; 21

int i, N; double *a, *b; cout << " " << endl; cout << " : "; cin >> N; a = new double [N]; b = new double [N]; if (a == NULL b == NULL) cerr << " " << endl; exit(1); cout << " a \n"; for (i = 0; i < N; i++) cout << i+1 << " = "; cin >> a[i]; cout << " b " << endl; for (i = 0; i < N; i++) cout << i+1 << " ="; cin >> b[i]; cout << " =" << inner_product(a, b, N) << endl; /* a, b * */ delete [] a; delete [] b; 3.12 2 3.12.1 ( ) ( ) 2 C C99 C Fortran C11 GCC LLVM 2 2 malloc() C++ Eigen 7 C++ 7 http://eigen.tuxfamily.org 22

3.12.2 prog12.c 2 /* * prog12.c --- 2 */ void display(double A[2][2]) int i, j; for (i = 0; i < 2; i++) for (j = 0; j < 2; j++) printf("%7.2f ", A[i][j]); printf("\n"); int i, j; double a[2][2] = 1,2,3,4; double b[2][2], c[2][2]; /* b */ for (i = 0; i < 2; i++) for (j = 0; j < 2; j++) printf("b[%d][%d]=", i, j); scanf("%lf", &b[i][j]); /* c:=a+b */ for (i = 0; i < 2; i++) for (j = 0; j < 2; j++) c[i][j] = a[i][j] + b[i][j]; /* a,b,c */ printf("a=\n"); display(a); printf("b=\n"); display(b); printf("c=\n"); display(c); prog12 oyabun% gcc prog12.c oyabun%./a.out b[0][0]=4 b[0][1]=3 b[1][0]=2 b[1][1]=1 a= 1.00 2.00 3.00 4.00 b= 4.00 3.00 2.00 1.00 c= 5.00 5.00 5.00 5.00 oyabun% 23

3.12.3 prog12a.c 2 /* * prog12a-new.c --- C99 */ /* --- */ void display(int m, int n, double A[m][n]) int i, j; for (i = 0; i < m; i++) for (j = 0; j < n; j++) printf("%7.2f ", A[i][j]); printf("\n"); int i, j, k, m, n; /* */ printf("m= "); scanf("%d", &m); n = m; double a[m][n], b[m][n], c[m][n]; // : m*n /* a */ k = 0; for (i = 0; i < m; i++) for (j = 0; j < n; j++) a[i][j] = k++; /* b */ for (i = 0; i < m; i++) for (j = 0; j < n; j++) printf("b[%d][%d]=", i, j); scanf("%lf", &b[i][j]); /* c:=a+b */ for (i = 0; i < m; i++) for (j = 0; j < n; j++) c[i][j] = a[i][j] + b[i][j]; /* a,b,c */ printf("a=\n"); display(m, n, a); printf("b=\n"); display(m, n, b); printf("c=\n"); display(m, n, c); 24

$./prog12a-new m= 2 b[0][0]=1 b[0][1]=2 b[1][0]=3 b[1][1]=4 a= 0.00 1.00 2.00 3.00 b= 1.00 2.00 3.00 4.00 c= 1.00 3.00 5.00 7.00 $ 3.12.4 prog12b.c double malloc() /* * prog12b.c --- */ #include <stdlib.h> /* double vector, vector matrix */ typedef double *vector; typedef vector *matrix; /* matrix */ void display(int m, int n, matrix A) int i, j; for (i = 0; i < m; i++) for (j = 0; j < n; j++) printf("%7.2f ", A[i][j]); printf("\n"); /* matrix ( ) */ matrix new_matrix(int m, int n) int i; vector ap; matrix a; if ((a = malloc(sizeof(vector) * m)) == NULL) return NULL; 25

if ((ap = malloc(sizeof(double) * (m * n))) == NULL) free(a); return NULL; for (i = 0; i < m; i++) a[i] = ap + i * n; return a; /* matrix */ void free_matrix(matrix a) free(a[0]); free(a); int i, j, m, n; matrix a, b, c; m = 2; n = 2; a = new_matrix(m, n); b = new_matrix(m, n); c = new_matrix(m, n); if (a == NULL b == NULL c == NULL) fprintf(stderr, " \n"); exit(1); /* a */ a[0][0] = 1; a[0][1] = 2; a[1][0] = 3; a[1][1] = 4; /* b */ for (i = 0; i < m; i++) for (j = 0; j < n; j++) printf("b[%d][%d]=", i, j); scanf("%lf", &b[i][j]); /* c:=a+b */ for (i = 0; i < m; i++) for (j = 0; j < n; j++) c[i][j] = a[i][j] + b[i][j]; /* a,b,c */ printf("a=\n"); display(m, n, a); printf("b=\n"); display(m, n, b); printf("c=\n"); display(m, n, c); 4 26

4.1 [1] n 1 + 2 + + n 8 [2] a, n a n 9 [3] k, n 1 k, 2 k,, n k 10 [4] a 1 = 1, a n+1 = 3a n + 2 (n 1) 100 (n ) [5] a 0 = 1, a 1 = 1, a n+2 = a n+1 + a n (n 0) ( ) a n n = 1, 2,..., 100 a n a n /a n 1 (n ) [ ] a n /a n 1 ( ) [6] n S 1 (n) := n k=1 1 k, S 2(n) := double [ ] lim n S 2 (n) = π 2 /6 (n, π 2 /6 S 2 (n)) [7] n S n = ) n k=0 1 k! n k=1 1 k 2 (1/k! [8] f : [a, b] R f x (0 x 1/2) f(x) := 1 x (1/2 x 1) 0 ( ) 0.2 x 1.2 [9] ( ) n, x s n (x) := n k=1 ( 1) k+1 (2k 1)! x2k 1 n = 1, 2, 3,, 10 s n (x) (0 x 2π) ( Taylor ) [10] R 3 ( ) 8 n(n + 1)/2 1 n 9 pow() 10 for 27

x = r * sin(theta) * cos(phi); y = r * sin(theta) * sin(phi); z = r * cos(theta); ( ) d2p() 11 d2p(x, y, z, &r, &theta, &phi); [11] Euler Runge-Kutta (1) x (t) = x(t), x(0) = 1. x(1) = e (2) x (t) = g γx (t), x(0) = H, x (0) = 0. g > 0, γ 0 ( ) x (t) = g γx (t) 2 (3) d dt ( x y ) ( a = c ) ( b d x y ) (x 0, y 0 ), x(0) = x 0, y(0) = y 0. a, b, c, d [12] cos x x = 0 Newton (f(x) := cos x x f(0) = 1 > 0, f(1) = cos 1 1 < 0 (0, 1) 1 ) 4.2 ( ) [5] n n n a = (a 1, a 2,, a n ) a := max a i i=1,2,,n 3 maxnorm0() 11 Decartes to Polar 28

#define N 3 int i; double a[n], maxnorm0(); for (i = 0; i < N; i++) scanf("%lf", &a[i]); printf("maxnorm=%g\n", maxnorm0(a)); double maxnorm0(... ( ) [6] ( ) n maxnorm() #define MAXN 1000 int i, n; double a[maxn], maxnorm(); printf("input n (<= %d): ", MAXN); scanf("%d", &n); if (n > MAXN) exit(1); for (i = 0; i < n; i++) scanf("%lf", &a[i]); printf("maxnorm=%g\n", maxnorm(a, n)); double maxnorm(... maxnorm() ( ) [7] MAXN MAXN n malloc() 29

#include <stdlib.h> int i, n; double *a, maxnorm(); printf("input n: "); scanf("%d", &n); a = malloc(n * sizeof(double)); if (a == NULL) fprintf(stderr, " \n"); exit(1); /* OK */ for (i = 0; i < n; i++) scanf("%lf", &a[i]); printf("maxnorm=%g\n", maxnorm(a, n)); double maxnorm(... (C++ C++ ) n addvector(), dotproduct(), norm(), angle() [8] a[0], a[100] a[0], a[1], a[2],, a[100] a[1], a[2],, a[99] maxnorm() A A.1 I(f, a, b) := b a f(x) dx f trapezoidal() 30

/* * ex1.c --- 1/x [1,2] */ #include <math.h> typedef double rrfunction(double); rrfunction f; double trapezoidal(rrfunction, double, double, int); int main() int N; double I, T; I = log(2.0); printf(" \n"); printf(" N \n"); for (N = 1; N <= (1 << 16); N *= 2) T = trapezoidal(f, 1.0, 2.0, N); printf("%5d\t%25.18f\t%e\n", N, T, I - T); double trapezoidal(rrfunction f, double a, double b, int N) int j; double h, T; h = (b - a) / N; T = (f(a) + f(b)) / 2; for (j = 1; j < N; j++) T += f(a + j * h); T *= h; return T; double f(double x) return 1 / x; A.2 31

/* void vvfunc */ typedef void vvfunc(void); /* vvfunc a */ vvfunc *a = NULL; void f(void) printf("hello\n"); void g(void) printf("bye\n"); int main() a = f; a(); a = g; a(); oyabun% cc -o prog1 prog1.c oyabun%./prog1 Hello Bye oyabun% /* void vvfunc */ typedef void vvfunc(void); void f(void) printf("hello\n"); void g(void) printf("bye\n"); int n = 0; vvfunc *commands[10]; void register_command(vvfunc *F) commands[n++] = F; void all_commands(void) int i; for (i = 0; i < n; i++) commands[i](); int main() register_command(f); register_command(g); all_commands(); 32

oyabun% cc -o prog2 prog2.c oyabun%./prog2 Hello Bye oyabun% ( ) /* void vvfunc */ typedef void vvfunc(void); void f(void) printf("hello\n"); void g(void) printf("bye\n"); /* --------------------------------------------------- */ int n = 0; vvfunc *commands[10]; char keys[10]; void register_command(vvfunc *F, char c) keys[n] = c; commands[n++] = F; void command(char c) int i; for (i = 0; i < n; i++) if (c == keys[i]) commands[i](); return; /* --------------------------------------------------- */ int main() register_command(f, H ); register_command(g, B ); command( H ); command( B ); oyabun% cc -o prog3 prog3.c oyabun%./prog3 Hello Bye oyabun% 33