gcc プログラムのファイル名
.\a.exe
WWW の一部をドキュメントをプログラムとして取り込んで、コンパイルする方法
1: /* This program prints "Hello World!". */ 2: #include <stdio.h> 3: main(){ 4: printf("Hello World!\n"); 5: }
/* コメント */
/*
と */
で囲まれた部分はプログラムとして解釈されないので、コメントを書き込むことができる。
どこからでも書くことができ、また何行でも書くことができる。
(入れ子構造にはできない)
関数は数学の関数とほぼ同じ意味。 値を与えると、定められた処理をして、対応した値を返してくる。
printf("Hello World!\n");は C 言語の文で、printf という名前の関数を呼出すという意味である。 引数として "Hello World!\n" が与えられる。 この関数を実行すると、
Hello World!\n
を出力する。
printf は関数の値は出力した文字数を返す。
返り値 = 名前(引数);
で関数名「名前」という関数に「引数」を与えて呼出す。
関数の返す値は返り値にセットされる。
名前(引数);
で関数名「名前」という関数に「引数」を与えて呼出す。
a.exe
を実行すると、main
という関数を呼出す。
C 言語でプログラムを作成するには、 main という関数を定義する。
main
の定義は
次のように書く。
(これは正式な記述法ではない。正式な記述は後述。)
main(){ プログラムの内容 }
1: #include <stdio.h> 2: #include <math.h> 3: main() 4: { 5: float a,b,c,d,kai1,kai2,zitsubu,kyobu; 6: a=2.0; b=3.0; c=1.0; 7: printf(" %f x^2 + %f x + %f = 0\n",a,b,c); 8: d=b*b-4*a*c; 9: if(d==0){ 10: kai1 = -b/2/a; 11: printf("root = %f\n", kai1); 12: }else{ 13: if( d>0 ){ 14: kai1 = (-b + sqrt(d))/2/a; kai2 = (-b - sqrt(d))/2/a; 15: printf("root1= %f, root2= %f\n",kai1,kai2); 16: }else{ 17: zitsubu= -b/2/a; kyobu = sqrt(d)/2/a; 18: printf("kai = %f +- %fi\n",zitsubu,kyobu); 19: } 20: } 21: }
printf
関数を呼出す時、stdio.h
を指定する。
sqrt
関数を呼出す時、math.h
を指定する。
float
は「浮動小数点」という「型」を表す。(「型」も後述)
6: a=2.0; b=3.0; c=1.0; 8: d=b*b-4*a*c; 14: kai1 = (-b + sqrt(d))/2/a; kai2 = (-b - sqrt(d))/2/a;
7: printf(" %f x^2 + %f x + %f = 0\n",a,b,c); 11: printf("root = %f\n", kai1); 15: printf("root1= %f, root2= %f\n",kai1,kai2); 18: printf("kai = %f +- %fi\n",zitsubu,kyobu);
printf("文字列",変数1,変数2,...)
通常、文字列はそのまま表示される。特殊な文字に特殊な機能が割当られている。
%f
は浮動小数点の変数の表示位置を表す。
7: printf(" %f x^2 + %f x + %f = 0\n",a,b,c);の場合、 一番目の
%f
はa
の表示位置、
ニ番目の%f
はb
の表示位置、
三番目の%f
はc
の表示位置を表す。
9: if(d==0){ 12: }else{ 19: }
else
の直後の文を実行する。
等号条件は=
を使わず、==
を使用する。
もし、(d=0)
と書くと、d
に 0 が代入され、常にelse
以下の文が実行される。
C 言語で扱えるデータには、整数、実数(浮動小数点)、文字、文字列などがある。
浮動小数点とは、有効桁が定まっている実数。(計算機では無限の桁数を扱えない。)
float では 7 桁。
x.xxxxxx × 10^yy
という形を C 言語では
x.xxxxxxEyy
で表現する。
変数や関数は型を持つ。 型には主に、整数型(int)、実数(浮動小数点)型(float)、文字型(char)がある。 変数を使用するにはあらかじめ型宣言をする必要がある。 (文字列型はない。文字列の扱いは次回以降。)
整数型、実数型、文字型
int i; float a,b; char c,d,e;
printf の第一引数の文字列中での変数の型指定
整数型 | %d |
実数型 | %f |
文字型 | %c |
#include <stdio.h> main(){ int i; float a; i=1; i=i+1; a=0.314E1; printf("%d %f\n",i,a); }
プログラミングには、プログラミング言語の知識だけでは不十分。 コンピュータで問題を解決するためには、問題の解決方法を考えることが重要。
問題を解決するための計算方法を アルゴリズム と言う。
a x + b y = e c x + d y = f
注意: 割り算で、0 で割ってはいけない。 この場合、逆行列が存在しない時の処理を考えなければならない。 つまり、行列式を計算して判断しなければならない。
┌x┐ 1 ┌ d -b ┐┌ e ┐ │ │ = --- │ ││ │ └y┘ det └ -c a ┘└ f ┘
従って、 x=(de-bf)/det, y=(-ce+af)/det である。
#include <stdio.h> main(){ float a,b,c,d,e,f,x,y; float det; a=1.0; b=2.0; c=3.0; d=4.0; e=5.0; f=6.0; det = a * d - b * c; if(det==0){ if(a*f==c*e){ printf("%f x + %f y = %f を満す全ての x, y\n",a,b,e); }else{ printf("解なし\n"); } }else{ x=(d*e-b*f)/det; y=(-c*e+a*f)/det; printf("x = %f, y = %f\n",x,y); } }