今週のプログラムその1
今週は足し算をして、結果を打ち出すだけのプログラムの練習。
繰り返し計算の初歩まで。
ポイント
-
1.C版を入力する際の注意:
-
/* と */ にはさまれた部分はコメントです。コンパイラはこの部分を無視するので、何を書いても構いません。書かなくてもオッケー。
文の終わりを示す;(セミコロン)を忘れがちなので注意。
また、空白や空行は自由にいれてかまいません。
-
2.FORTRAN版を入力する際の注意:
-
FORTRANでは各行の左から6桁目までは位置が意味を持つので、位置を変更しないように。7桁目以降は自由です。
1桁目(行の左端)がCまたは*の行はコメントです。
コンパイラはこの部分を無視するので、何を書いても構いません。書かなくてもオッケー。
空行は自由にいれてかまいません。
-
3.繰り返し計算(ループ)
- 同じ計算を何度も繰り返すときは、ループを使います(下のprogram 3の例では、
変数x1に5.0を何度も足す計算と、変数iの値を1ずつ増やしながら変数x2に5.0*iを次々と足していく計算を行なっています)。
- i. Cでのループは
-
for( i=1; i<=10; ++i){この括弧の中が繰り返し実行したい計算}
という形式で書きます。この意味は
- まずiの値を1にセット。iはループを制御する変数で、
実行したい計算の中でこの値を使ってもいいし、使わなくてもいい。
ただし、iに値を代入してはいけない。
- i <= 10 (iの値が10以下)が満たされていれば{}の中を実行。10を越えていればforループの次の文へ(今の場合、次の行はプログラムの終わりなので、終了)
- {}の中を一回実行したらiに1を足す(++iは i+=1 または i=i+1と同じ意味、
iを2ずつ増やしたければ i+=2)
むろん、もし、kというループ変数を2から100まで、2ずつ増やしていきたければ
for( k=2; k<=100; k+=2){この括弧の中が繰り返し実行したい計算}
とすればよい
- ii. FORTRANでのループは
-
do i=1,10
繰り返し実行したい計算
enddo
という形式で書きます。この意味は
- まずiの値を1にセット。iはループを制御する変数で、
実行したい計算の中でこの値を使ってもいいし、使わなくてもいい。
ただし、iに値を代入してはいけない。
- iの値が10以下ならenddoまでを実行。10以上ならenddoの次の文へ
- enddoまでの処理を一回実行したらiに1を足す
do i=1,10,2と書いておけばiは2ずつ増える
むろん、もし、kというループ変数を2から100まで、2ずつ増やしていきたければ
do k=2,100,2
繰り返し実行したい計算
enddo
とすればよい
なお、プログラム自体は
まずはC版
program 1
#include< stdio.h > この行は必ず必要なおまじない
/* 実数の足し算 */ コメント
main() プログラム本体の開始を宣言(必須)
{ ここから最後の}までがプログラムの中身
float x; 実数変数xを使うことを宣言(Cでは変数をかならず宣言する)
x = 10.0; 実数変数xに初期値として10.0を代入
printf("x= %f\n",x); xの値を出力
"x= %f\n" は出力の形式を指定。
%fは実数を出力する宣言。\nは最後に改行するという意味。
それ以外の文字はそのまま出力される
x += 5.0; xに5.0を足す( x = x+5.0 と書いても同じ)
printf("x= %f\n",x); xの値を出力
} プログラムの終了
program 2
#include < stdio.h >
/* 整数の足し算 */
main()
{
int i; 整数変数iを使うことを宣言
i = 10; 整数変数iに初期値として10を代入
printf("i= %d\n",i); の値を出力。%dは整数を出力する宣言。
i += 5; iに5(整数)を足す( i = i+5 と書いても同じ)
printf("i= %d\n",i);
}
program 3
#include < stdio.h >
/* 足し算のくりかえし */
main()
{
float x1,x2; 実数変数x1とx2を使うことを宣言
int i; 整数変数iを使うことを宣言
x1 = 0.0; 実数変数x1に初期値として0.0を代入
x2 = 0.0; 実数変数x2に初期値として0.0を代入
for( i=1; i<=10; ++i){ この{から次の}までの処理を繰り返す(forループ)
for( i=1; i<=10; ++i)の意味は下を参照
x1 += 5.0; x1に5.0を足す。
x2 += i*5.0; x2にi*5.0を足す(*はかけ算)
printf("i= %d x1= %f x2= %f\n",i,x1,x2); i,x1,x2の値を出力
} この}の前までがforループの中身
} プログラム終了
発展:
- 足し算以外の四則演算も考えてみる(ひき算は-、かけ算は*、割り算は/)
-
プログラム1でxの初期値を10,100,1000...と大きくしていくと、やがて桁落ちのために足し算をしても値が変わらなくなる。xの初期値をいくつにすると、この現象が起きるかをためしてみる(足す値を5.0ではなく1にしたほうがいいかもしれない)。
-
プログラム3では繰り返しの回数を10に固定してある。この回数も整数変数にして、繰り返し回数をforループの外で指定できるようにしてみる。
FORTRAN版
program 1
..................
C 実数の足し算
program tashi1 プログラム本体の開始を宣言
tashi1はプログラムの名前(自由につけられる)
x = 10.0 実数変数xに初期値として10.0を代入
write(*,*)"x= ",x 結果を出力
(*,*)は標準出力へ標準書式で出力することを意味する。
とりあえずはおまじないだと思ってよい。
x = x + 5.0 xに5.0を足す(Cのような += という書き方はない)
write(*,*)"x= ",x 結果を出力
end プログラム終了
Cと違い、FORTRANでは変数を使うための宣言が必須ではない。宣言なしに使うと
i,j,k,l,m,nで始まる名前の変数はすべて整数、他はすべて実数とみなされる
(暗黙の型宣言)。もちろんCと同様に宣言してもよい。
たとえば、
program tashi3
real x
integer i
以下同様
..................
program 2
..................
c 整数の足し算
program tashi2
i = 10 整数変数iに初期値10を代入
write(*,*)"i= ",i
i = i + 5
write(*,*)"i= ",i
end
...................
program 3
...................
c 足し算のくりかえし
program tashi3
x1 = 0.0 実数変数x1,x2に初期値0.0を代入
x2 = 0.0
do i=1,10 ここからenddoまでの処理をくりかえし
x1 = x1 + 5.0
x2 = x2 + i*5.0
write(*,*)"i= ",i," x1= ",x1," x2= ",x2
enddo
end
発展についてはC版と同様