C言語の初歩
第6回:算術演算子(その2)
今回は、前回に引き続き、算術演算子についてです。とはいえ、新規事項などはなくて、プログラムを提示して、こんなことも出来るんだよ~といったことや、こういうときはこういう風にも出来るんだよ~といった感じなので、どちらかというと、プログラムを見てもらうことが中心になりますね。
では、まず、第一のプログラム(given.c)
4行目のx=3の3を他の数字(ただし、整数限定)に書き換えれば、いろんな数字で計算ができます。
1 :#include<stdio.h> 2 : 3 :int main(){ 4 : int x=3,y; 5 : 6 : 7 : y = x*x+2*x+3; 8 : 9 : printf("when x=%d\n",x); 10: printf("y = x^2+2x+3 = %d\n",y); 11: 12: return 0; 13:}x^2+2x+3の計算をするプログラムです。
4行目のx=3の3を他の数字(ただし、整数限定)に書き換えれば、いろんな数字で計算ができます。
さて、ここで新しく説明をしたいのは7行目です。
実は、C言語には、累乗の計算をするための演算子というものがありません。
他の方法を使って擬似的に作ることはできるものの、普段、私たちが書くような、指数を使った書き方や、テキストベースで説明するときの^も使えません。
なので、累乗をあらわそうと思うと、その回数分、文字をかけてやるしかありません。
7 : y = x*x+2*x+3;
2乗の計算の部分で、x*xと書いていますよね。実は、C言語には、累乗の計算をするための演算子というものがありません。
他の方法を使って擬似的に作ることはできるものの、普段、私たちが書くような、指数を使った書き方や、テキストベースで説明するときの^も使えません。
なので、累乗をあらわそうと思うと、その回数分、文字をかけてやるしかありません。
補足的な話ですが、あまりにも指数の数字が大きいときは、のちのち使う繰り返し処理を使った方がいいとは思います。
そもそも、あまり大きな指数計算は、プログラムで扱える値をオーバーしてしまうため、できないかと思います。
そもそも、あまり大きな指数計算は、プログラムで扱える値をオーバーしてしまうため、できないかと思います。
ちょっと話が脱線してしまいましたが、要は、累乗計算は、その回数分かけるという書き方で書きましょうということです。
では、第二のプログラム(input.c)
ただし、入力できる数字は整数限定ですので、まだまだ一般性は低いですがね。
ここで説明したいのは、9行目のscanf文です。
ただ、それだと、面倒くさいのですよね(汗)
なので、9行目のように、複数の数字を一気にscanfできるようにも書けます。
では、第二のプログラム(input.c)
1 :#include<stdio.h> 2 : 3 :int main(){ 4 : int a,b,c; 5 : int x,y; 6 : 7 : printf("y=ax^2+bx+cの値を計算します\n"); 8 : printf("Please input a b c(a,b,cは整数)\n"); 9 : scanf("%d %d %d",&a,&b,&c); 10: printf("\nPlease input x(xは整数)\n"); 11: scanf("%d",&x); 12: 13: y = a*x*x+b*x+c; 14: 15: printf("\ny = %d (y=ax^2+bx+c)\n",y); 16: 17: return 0; 18:}第一のプログラムを少し変えて、いろいろな二次式を計算できるように拡張したプログラムです。
ただし、入力できる数字は整数限定ですので、まだまだ一般性は低いですがね。
ここで説明したいのは、9行目のscanf文です。
9 : scanf("%d %d %d",&a,&b,&c);
今までは、ひとつの数字を入力するたびにscanfをひとつ書いていましたよね。ただ、それだと、面倒くさいのですよね(汗)
なので、9行目のように、複数の数字を一気にscanfできるようにも書けます。
書き方は、" "の内側に、読み込みたい数だけ「%d(あるいは%fなど)」を書く、後ろにも、読み込みたい数だけ「&(変数名)」を書くとなります。
この際、%dをひとつ書くごとにスペースを空けておく、&(変数名)をひとつ書くごとにコンマで区切っておく、ということが重要ですね。
プログラムを実行して入力する際も、例えば、aに1、bに2、cに3を入力したければ、
最後に、第3のプログラム(input2.c)
実数の入力もできるということです。
ただ、プログラムの実数計算は、誤差が出ることも多いです。
ここは、説明は不要ですかね。
では、最後に練習問題
この際、%dをひとつ書くごとにスペースを空けておく、&(変数名)をひとつ書くごとにコンマで区切っておく、ということが重要ですね。
プログラムを実行して入力する際も、例えば、aに1、bに2、cに3を入力したければ、
1 2 3
というように、値ごとにスペースで区切ってやらなければいけません。最後に、第3のプログラム(input2.c)
1 :#include<stdio.h> 2 : 3 :int main(){ 4 : int a,b,c; 5 : float x; 6 : double y; 7 : 8 : printf("Please input a b c(a,b,cは整数)\n"); 9 : scanf("%d %d %d",&a,&b,&c); 10: printf("\nPlease input x(xは実数)\n"); 11: scanf("%f",&x); 12: 13: y = a*x*x+b*x+c; 14: 15: printf("\ny = %f (y=ax^2+bx+c)\n",y); 16: 17: return 0; 18:}ほぼ、input.cと同じですね。
実数の入力もできるということです。
ただ、プログラムの実数計算は、誤差が出ることも多いです。
ここは、説明は不要ですかね。
では、最後に練習問題
input2.cを少し変更して、a,b,cにも実数を入力できるようなプログラム(input3.c)を作りましょう。