身につく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言語を学ぶときはここを徹底的に学ぶことが効果的かと思います。