プログラムを書こう 2004/1111/08
今回はc言語でプログラムを書いて数値計算を行いましょう。
まず、簡単な例を示します。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double kaijyou(double x, int n);
main()
{
int n;
double x, y;
x=2.0;
for (n=1; n<10; n++) {
y = kaijyou(x, n);
printf("%fの%I乗= %f\n", x, n, y);
}
}
double kaijyou(double x, int n)
{
int i;
double value;
value = 1.0;
for (i=0; i<n; i++) {
value *= x;
}
return value;
}
これは階乗を計算するプログラムです。
プログラムの構成は
n ヘッダファイル定義部
n 本文(main文)
n 変数の定義部
n 計算をさせている部分
n 関数定義部
となっています。
n ヘッダファイル定義部
printf文などの関数を使うためにヘッダファイルを読み込むところ。
はじめはおまじないだと思っても大丈夫
n 本文(main文)
c言語のプログラムには必ずmain文が必要です。
プログラムの中心ですね。main分の他に自分で作った関数をmain文から呼ぶことも
出来ます。
n 変数の定義部
プログラムで使われる変数を定義します。変数の型にはいろいろあって
char 8bit 大体文字につかう
int 32bit 整数につかう
float 浮動小数点
double 浮動小数点
n 計算をさせている部分
宣言した変数、文法、関数をつかっていろいろさせます。
文法としてここではfor文を使っています。これは繰り返しに使うもので
for ( i=0; i<10; i++) {
何かさせる
}
というように使います。
またkaijyou(x, n)というのはxのn乗を計算させるためにつくったプログラムです。
n 関数定義部分
階乗を計算させて値を返します。
return文を使って値を返しています。
とりあえずコンパイルをしよう。
コンパイルするには
% gcc -o kaijyou.out kaijyou.c -lm
とします。-lmというオプションは、C言語で数値計算プログラムを作る際には、付ける必要があります。この結果、kaijyou.outという名前の実行ファイルができます。
n ここからが問題
実験でラザフォード散乱を行うわけですが12MeVの運動エネルギーを持った陽子をビームとして炭素標的にぶつけるとします。運動学的にある角度θに散乱された陽子の運動エネルギーは弾性散乱であればエネルギー保存則と運動量保存則によって一意に決定されます。ある角度θに散乱されたときの陽子の運動エネルギーを計算させるプログラムを作ってください。
その結果を横軸角度、縦軸運動エネルギーのグラフを作ってください。
陽子の質量は983.2MeV, 炭素の質量は11177MeVです。
〇方針
角度を0度から180度までfor文で回そう。
for (theta=0.0; theta<180.0; theta += 10.0)
角度を入れたら運動量または運動エネルギーを返す関数を作ろう。
double calc(double theta)
角度と運動エネルギーを端末またはファイルに書き出そう。
printf(“%f %f\n”, theta, energy);