C言語の初歩

第6回:算術演算子(その2)

今回は、前回に引き続き、算術演算子についてです。
とはいえ、新規事項などはなくて、プログラムを提示して、こんなことも出来るんだよ~といったことや、こういうときはこういう風にも出来るんだよ~といった感じなので、どちらかというと、プログラムを見てもらうことが中心になりますね。


では、まず、第一のプログラム(given.c)
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行目です。
7 : y = x*x+2*x+3;
2乗の計算の部分で、x*xと書いていますよね。
実は、C言語には、累乗の計算をするための演算子というものがありません
他の方法を使って擬似的に作ることはできるものの、普段、私たちが書くような、指数を使った書き方や、テキストベースで説明するときの^も使えません。
なので、累乗をあらわそうと思うと、その回数分、文字をかけてやるしかありません。

補足的な話ですが、あまりにも指数の数字が大きいときは、のちのち使う繰り返し処理を使った方がいいとは思います。
そもそも、あまり大きな指数計算は、プログラムで扱える値をオーバーしてしまうため、できないかと思います。

ちょっと話が脱線してしまいましたが、要は、累乗計算は、その回数分かけるという書き方で書きましょうということです。


では、第二のプログラム(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を入力したければ、
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)を作りましょう。