身につくC言語-9回目 繰り返し文 for文 計算-

for文を使って、複雑な計算をしてみたいと思います。

入力したものに消費税を付ける

ソースコード


#include<stdio.h>

int main(void)
{
	int a[3];
	int i;
	
	printf("商品の値段を入力してください。\n");
	
	for(i=0;i<3;i++)
	{
		scanf("%d",&a[i]);
	}
	
	
	for(i=0;i<3;i++)
	{
		a[i]=a[i]*1.08;
	}
	
	printf("消費税を付けた値段です。\n");
	
	for(i=0;i<3;i++)
	{
		printf("%d\n",a[i]);
	}
	
	return 0;
}

消費税は、8%(2017年6月現在)ですので、1.08をかけるというのは、わかりますよね。

ですが、ここではint型で宣言しています。

なぜかというと、「お金は小数にはならないから」です。

小数点以下は、切り捨てという特性を使用しています。

ここで注意してほしいのは、四捨五入ではないということです。

中心となるのは


for(i=0;i<3;i++)
	{
		a[i]=a[i]*1.08;
	}

というところです。

for文で3回繰り返しているということはわかりますよね。

その{}の中を日本語に直してみましょう。(iが0と仮定する)

a[0]×1.08の結果をa[0]に代入する

という意味です。

scanfで代入したところに、計算結果を上書きで代入するということです。

3人の生徒の点数を比較し、一番高い点数を出力する

ここからは、for文とif文の組み合わせで作ります。

かなり複雑だと感じると思います。ひとつずつ確認して理解していきましょう。

ソースコード


#include<stdio.h>

int main(void)
{
	int a[3];
	int i;
	int max;
	
	for(i=0;i<3;i++)
	{
		scanf("%d",&a[i]);
	}
	
	max=a[0];
	
	for(i=0;i<3;i++)
	{
		if(max<a[i])
		{
			max=a[i];
		}
	}
	
	printf("最大は%d点です。\n",max);
	
	return 0;
}

ここでは、最大値を扱うmaxという名前の変数を用意します。

重要なところは、ここです。


	max=a[0];
	
	for(i=0;i<3;i++)
	{
		if(max<a[i])
		{
			max=a[i];
		}
	}
	

まずmaxにはどの要素でもいいので値を入れておきます。

ここでは、a[0]の値を入れていますが、a[1]やa[2]の値を代入してもかまいません。

なぜ代入しなければいけないかというと次の、比較ができなくなってしまうからです。

空の要素(値が格納されていない変数)の比較はできません。

if文の日本語訳は(iは0と仮定する)

もし、maxよりa[0]のほうが大きいならば、maxにa[i]を代入しなさい。

という意味です。

a[0]のほうが小さいときは、if文の中は無視して実行されます。

for文により、a[i]の中身は変化しながら3回繰り返されます。

練習問題

問題1 5人の国語の点数(任意)の点数を入力し、合否を判断しなさい。(50点以上合格)必ずfor文を使用して書くこと

問題2 5人の数学の点数を入力し最小値を出力しなさい。

練習問題解答

問題1解答

ソースコード


#include<stdio.h>

int main(void)
{
	int a[5];
	int i;
	
	for(i=0;i<5;i++)
	{
		scanf("%d",&a[i]);
	}
	
	for(i=0;i<5;i++) { if(a[i]>=50)
		{
			printf("合格\n");
		}
		else
		{
			printf("不合格\n");
		}
	}
	
	return 0;
}

for文の中に、if,elseを入れることによって5つ文の条件分岐をすることができます。

問題2解答

ソースコード


#include<stdio.h>

int main(void)
{
	int a[5];
	int i;
	int min;
	
	
	for(i=0;i<5;i++)
	{
		scanf("%d",&a[i]);
	}
	
	min=a[0];
	
	for(i=0;i<5;i++)
	{
		if(min>a[i])
		{
			min=a[i];
		}
	}
	
	printf("最小値は%dです。\n",min);
	
	return 0;
}

ここでは、最小値を格納する変数として、minを作成しました。

条件分岐の日本語訳は、(iを0とする)

もし、a[0]がminより小さかったらminにa[0]を上書きで代入する

という意味です。

まとめ

for文、if文はC言語では必須のものです。

これらに関しては、どれだけ詳しくなっても損することはないでしょう。

もし、C言語を学ぶときはここを徹底的に学ぶことが効果的かと思います。

スポンサーリンク