「C言語練習」 1-3.c   ・前へ   ・次へ
/* 計算と繰り返し命令、数値入力  1-3.c */
#include <stdio.h>	/* 初めに必ずこの文を書く */

main()
{
	int i,sum;
	int a,b;

/* 今回は、少し計算をしてみる。その計算に使う変数を宣言。文末に ;を付けるのを忘れない事 */

	printf("1から10までの総和を求める\n\n"); //一行あけるために\nを余分に書いている

	sum=0;	/* 総和を求めるのにsumを使うので初期化しておく。;を付けるのを忘れない事 */

/* 総和を求めるには、次の様に一つ一つ足して行く計算をすれば良い。
	1+2+3+ ... +10	これを求めるには 1に2を足し、その後に3を足し…と
それまでの和に、増えていく数を順繰りに足していけば良い。繰り返しを行う命令を使えば
次の様に書ける。*/

	for (i=1;i<=10;i=i+1) sum=sum+i;	// ;を付ける事

/* これはfor loop である。ここでは、変数iの値が 1から始まった後 1ずつ増えて10まで行くが、
増える度にそれをsumという変数に繰り返し足しているので、1から10までの総和が求まる。

for loop は、 for () と書き、( )の中に、繰り返し条件を記述する。条件が成り立つと
( ) の後に書かれた文一つを実行して、再び条件判定に入る。再度条件が成り立つと( ) の後に
書かれた文一つを実行して、三度び条件判定…と繰り返す。( )中には;で区切られた3つの式を書く。
 上の例では、先ず1から始めるので初期条件をi=1;と書いて、その次にloopを回る条件式を書く。
10になるまでだから、iが10以下の時という意味でi<=10;と書く。一番右でiを 1ずつ増やしている。
 i+1の計算結果をiに代入するので、iが 1ずつ増える事が分かる(sumに付いても
今までのsumの値にiの値を加えて、その新しい値を再びsumに代入している。つまり、
そこまでの和を求めた事になる)。
 for loop では( ; ; )の真ん中がloopを回る条件である。左が初期値、右が変数 iの変化の仕方。

loop 中に使う変数は何でも良いが、通常は iや jが良く使われる。また、変数iの変化の仕方も
色々あって良い。一つずつ減るとか、等比的に増減する等々。
 結果を見るため、変数sumを表示する。
*/
	printf("for loopで求めた総和=%d\n",sum);	// ;を付けるのを忘れない事

	sum=0;	// もう一度sumを使うので初期化しておく

/* 同じfor loop を別の書き方で書いて、結果表示。*/
	for (i=1;i<=10;i++) sum+=i;		// ;を忘れない事
	printf("一寸書き方を変えて求めた総和=%d\n",sum);

/* i=i+1、i=i-1の様に1ずつ増減する時は、i++ やi-- の様な書き方が良く用いられる。
また、ある変数にある値を加減した値を、再び同じ変数に代入する場合は上の様に += や -= が
使われる事が多い。*/
	printf("\n");	// 改行して一行あける
/* 総和は、for loop を使わなくても求まる。ガウス法を用いれば、aからbまでの総和は
(a+b)*(b-a+1)/2 の様に書けるので、これを計算してsumに代入し、表示すると
*/
	sum=(1+10)*(10-1+1)/2;	// 文末には;が必要。代入式も文なので終わりに;を付ける。
	printf("ガウス法で求めた総和=%d\n",sum);

/* printf();で表示させる値の所に式を直接書いても良い。そこで、sumを使わず次の様に書く事も出来る */

	printf("(1+10)*(10-1+1)/2=%d\n",(1+10)*(10-1+1)/2);

/* 今度は、任意の2つの整数値 aからbまでの総和を求めて見る。 */

	printf("\n任意の2つの整数値 aからbまでの総和を、1)for loop と2)ガウス法で求める。\n");

/* 任意の 2つの整数値というからには、a b 2数値の入力を求めなければならない。
それには、scanfという命令を使う。数値入力を求める文を表示した後で、数を入力させると
次の様になる。 */

	printf("数を入力 a=");
		scanf("%d",&a);
	printf("数を入力 b=");
		scanf("%d",&b);

/* scanfは、scanf();の形で使う。formatして(形を整えて)、scan(取り込む、走査する)の意。
scanf命令を使うとKey Boardからの入力待ちになるので、任意の数値を入力して Enter Keyを押す。
画面には入力した数が表示される。scanfは、この入力値を整数(%d)か実数(%f)か指定して取り込む。
つまり、scanf();は、printf(); と反対の命令である。 ただし、printfの書式の場合と異なり、
入力format" "の中に書いた%dの後ろに、空白を作ってはいけない。

 また、読み込むべき変数名の前に &が必要である。←つい忘れ勝ちなので、気を付ける。
 &の付いた変数名は、その変数にcomputerが割り振ったaddress(どこかは知らぬが)を示して
いる。scanfは、指定された場所addressに入力値を納める命令である。

入力された a から b までの総和を計算すると
 */
	printf("\n");	// 改行して一行あける
		sum=0;	// sumを使うので初期化しておく
	for (i=a;i<=b;i++) sum+=i;	// aから bまでloopを回して、その値をsumに加えている

	printf("%dから%dまでの",a,b);	// この様に一つの書式で複数の値を表示できる
	printf("総和=%d\n",sum);

/* ガウス法で直接計算した事を明示し、値の所に式をそのまま書くと */
	printf("(a+b)*(b-a+1)/2=%d\n",(a+b)*(b-a+1)/2);

/* 上記書式の a b の所に、実際の値を入れて表示すると */
	printf("(%d+%d)*(%d-%d+1)/2=%d\n",a,b,b,a,(a+b)*(b-a+1)/2);

printf("\nEnd\n");	// これで終わり
return 0;
}
/* ある計算を programとして書くには、計算のアルゴリズム(=流れ)を十分理解して置かねば
ならない(どういう事をしているか、一つ一つ順番に整理する)。その上で、加減乗除をしたり、
使える関数や命令を選んだりする。 */


(前に戻る)   ・次へ