数値計算プログラム

目次

  1. ソースファイルの作成、コンパイル、実行
  2. 変数と定数
  3. 演算子と数学関数(関数とは...)
  4. 練習課題その1

1. ソースファイルの作成、コンパイル、実行

 以下の内容のファイルを作り、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 



2. 変数と定数

 数値計算は、変数や定数を用いて行ないます。また、プログラムが扱うデータも変数に入れて処理を行ないます。
 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型があります。これは、"値が参照できない"、"値が代入できない"データ型です。ここでは、"何も無し"というような意味で考えるてください。
 関数mainに引数が無いということを明示するために、( )内にvoidと書きました。覚えていますか?

また文字型定数(後でまた出てきますが... )の定義については次のような決まりがあります。
◎ 一文字を表す時... シングルクォーテーションでくくる 例) 'a', '9', '#'
◎ 文字列を表す時... ダブルクォーテーションでくくる 例) "hoge", "namihei"



3. 演算子と数学関数

 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
 数値を2進数に変換後、真理値表にしたがって計算される。計算後は、元の数値の型に戻る。
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によって関数を呼び出した部分に返すことができます。

 

4. 練習課題その1

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;
}

練習問題その1の解答例

 
戻る