目次
以下の内容のファイルを作り、test2.c として保存して下さい。
/* Program "test2.c" --- 単振動(振り子) */ #include <stdio.h> #include <math.h> double g = 9.8; double pai = 3.1416; int main(void) { int n; double x, y; double w; double range = 0.2; double l = 0.5; w = sqrt( g / l ); x = 0.1; for( n = 1; n <= 10; n++ ) { y = range * sin( w * x * n); printf(" x = %lf, y = %lf \n", x * n, y); } return 0; }
ソースプログラムの入力と保存が終わったら、コンパイルします。ただし、前回と少しコンパイルオプションが少し変わります。
cc -o test2 test2.c -lm
エラーがなければ、test2 というファイルができているはずです。lsコマンドでファイルの
有無を確認して下さい。もしエラーメッセージがでたら、ソースファイルを修正して再コンパ
イルして下さい。コンパイルが正常に通ったらプログラムを実行してみましょう。
./test2 x = 0.100000, y = 0.085680 x = 0.200000, y = 0.154838 x = 0.300000, y = 0.194141 x = 0.400000, y = 0.196010 x = 0.500000, y = 0.160084 x = 0.600000, y = 0.093291 x = 0.700000, y = 0.008510 x = 0.800000, y = -0.077913 x = 0.900000, y = -0.149312 x = 1.000000, y = -0.191921
数値計算は、変数や定数を用いて行ないます。また、プログラムが扱うデータも変数に入れて処理を行ないます。
C言語で使用できる変数の種類(型)と、以下の項目に挙げた使用上の注意を確認して下さい。
定数や変数型について
今のところは10進数の整数と浮動小数点が分かれば良いでしょう。ただし、後の「入出力」で
出てくる文字型についても、目を通しておいて下さい。
C言語ではその変数に代入するデータによって型を使い分けなければなりますん。
変数の型 宣言子 バイト数 整数型 char 1バイト 文字型(0からFFHまで) int 4バイト 0からFFFFFFFFHまで(-214783648〜214783647) short int 2バイト 0からFFFFHまで(-32768〜32767) long int 4バイト 0からFFFFFFFFHまで(-214783648〜214783647) 実数型 float 4バイト double 8バイト
/* hensuu_teigi.c */
#include <stdio.h>
int main(void)
{
char moji = 0xfe;
int seisu = 0xfffffffe, i;
short sseisu = 0xfffe;
for(i = 1;i <= 3;++i){
moji = moji + 1;
seisu = seisu + 1;
sseisu = sseisu + 1;
printf("moji=%d seisu=%d sseisu=%d\n", moji, seisu, sseisu);
}
}
特殊なデータ型としてvoid型があります。これは、"値が参照できない"、"値が代入できない"データ型です。ここでは、"何も無し"というような意味で考えるてください。
C言語では、数式と同様に変数や定数間に演算子を書くことにより、演算を記述します。
用意されていない演算は、数学関数を利用して行ないます。C言語で使用できる演算子と、数学関数の例を確認して下さい。
また、数学関数を利用する場合の変数の型に注意して下さい。
算術演算子
タイプ | 記号 | 用例 |
加算 | + | a = b + c |
減算 | - | a = b - c |
乗算 | * | a = b * c |
除算 | / | a = b / c |
余り | % | a = b % c |
代入演算子
タイプ | 記号 | 用例 | 一般記法 |
= | a = b | a = b | |
+= | a += b | a = a + b | |
-= | a -= b | a = a - b | |
*= | a *= b | a = a * b | |
/= | a /= b | a = a / b | |
%= | a %= b | a = a % b | |
&= | a &= b | a = a & b | |
|= | a |= b | a = a | b | |
^= | a ^= b | a = a ^ b | |
<<= | a <<= b | a = a <<= b | |
>>= | a >>= b | a = a >>= b |
関係演算子
タイプ | 記号 | 用例 |
大なり | > | if(a > b) c = 0; |
以上 | >= | if(a >= b) c = 0; |
小なり | < | if(a < b) c = 0; |
以下 | <= | if(a <= b) c = 0; |
等しい | == | if(a == b) c = 0; |
等しくない | != | if(a != b) c = 0; |
論理演算子
タイプ | 記号 | 用例 |
論理和 | || | if(a == 0 || b == 0) c = 0; |
論理積 | && | if(a == 0 && b == 0) c = 0; |
否定 | ! | if(!a) c = 0; |
インクリメント、デクリメント演算子
タイプ | 記号 | 用例 | |
インクリメント | ++ | ++a; | ++a; または a++; → a=a+1 |
デクリメント | -- | --a; | --a; または a--; → a=a-1 |
a = ++b; → b = b + 1; a = b; bに1を加算してから、bをaに代入する。
a = b++; → a = b; b = b + 1; bをaに代入してから、bに1を加算する。
a = --b; → b = b - 1; a = b;
a = b--; → a = b; b = b - 1;
ビット演算子
タイプ | 記号 | 用例 | |
論理積 | & | a = b & c; | A = B AND C |
論理和 | | | a = b | c; | A = B OR C |
排他的論理和 | ^ | a = b ^ c; | A = B XOR C |
1の補数 | ~ | a = b ~ c; | A = B NOT C |
左シフト | << | a = b << c; | |
右シフト | >> | a = b >> c; |
真理値表
論理積 | 論理和 | 排他的論理和 | ||||||||||
入力 | 出力 | 入力 | 出力 | 入力 | 出力 | |||||||
A | B | Y | A | B | Y | A | B | Y | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||||
0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | ||||
1 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | ||||
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
1の補数
数値を2進数に変換後、1と0すべて反転させる。
10101010(AAH) → 01010101(55H)
C言語での関数とは 関数とはサブルーチンのようなもので、別に記述したプログラムの一部を呼び 出して実行することができます。呼び出す際には、変数を渡すことができます。 関数内部の処理が終ると、返り値を一つ返すことができます。 整数変数 a, b を関数hoge()に渡し、返り値を 整数変数 cに代入する例 int a, b, c; a = 1; b = 2; c = hoge(a, b); もし関数hoge()が次のように記述されているとしたら、変数cには11が入ります。 int hoge(int x, int y) { int z; z = x * 5 + y * 3; return z; } 「int hoge(int x, int y)」という部分に注目して下さい。最初のintは、 関数hoge()の返り値が整数型であることを指定しています。括弧の中の 「int x, int y」は、この関数には整数型変数2つが渡されることを表して います。渡された変数x, yは、この関数の内部で使用することができます。 返り値は、returnによって関数を呼び出した部分に返すことができます。 |
2次方程式 a x*x + b x + c = 0の解を計算するプログラムを作成してください
1. 計算結果はprintf() 関数を用いて表示することができます。
double型の変数 d に結果が入っている場合、 printf("answer=%f\n", d); で d に入っている数字を表示できます。2. a,b,cを適当に設定して解が正しく計算されているか確認しましょう。
プログラムの見当がつかない人は、以下のひな型を参考に考えてみましょう。
/* Program exercise01.c --- 二次方程式の解 */ #include <stdio.h> #include <math.h> int main(void){ double A = 1.0; double B = -4.0; double C = 4.0; SecondDegreeAnswer(A, B, C); return 0; } int SecondDegreeAnswer(double a, double b, double c){ double x1; double x2; x1 = [ここに何が入るか考えてみよう]; x2 = [ここに何が入るか考えてみよう]; printf("二次方程式 %.2f x*x + %.2f x + %.2f = 0 の解は\n", a, b, c); printf(" x1: %.2f\n", x1); printf(" x2: %.2f\n", x2); return 0; } |