/* 計算と繰り返し命令、数値入力 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として書くには、計算のアルゴリズム(=流れ)を十分理解して置かねば ならない(どういう事をしているか、一つ一つ順番に整理する)。その上で、加減乗除をしたり、 使える関数や命令を選んだりする。 */