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