プログラミング基礎覚え書き④(条件演算子と繰り返し文for)

参考文献:高橋麻奈著『やさしいC第5版』

論理演算子
コンピュータサイエンス入門でやったやつ。C言語でコードを書く場合は以下の記号を使う。

||(論理和)
AまたはB。

&&(論理積)
AかつB。

!(論理否定)
Aではない。

条件演算子
「変数 = (条件式) ? 条件が真のときに入れる値 : 条件が偽のときに入れる値 ;」で、if文を使わなくても場合分けをすることができる。

大人と子どもで料金が異なる場合のコード
ロープウェイの運賃は12歳未満なら子ども料金が適用されるというケース。

#include

int main(void)
{
int age,fee; //※feeは運賃という意味の英単語。

printf("年齢: ");
scanf("%d",&age);

fee = (age<12) ? 300:600; //12歳未満の運賃は300円、それ以外は600円という条件式。
printf("\nロープウェイ運賃は%d円です。\n",fee);

return 0;
}

携帯電話のパケット代を求めるコード
基本料は1パケット0.05円なのだが、上限額が月5000円までと決まっている場合。

#include

int main(void)
{
double packet,fee;

printf("パケット数: ");
scanf("%lf",&packet);

fee = 0.05 * packet;
fee = (fee>5000.0) ? 5000.0 : fee; //5000円以上の場合は請求額5000円で変わらず、5000円未満は0.05×パケット数で求めるという条件演算子。

printf("\n通信料は%.0f円です。\n",fee);

return 0;
}

たくさん買うとお得になるコード
リンゴの値段は1個50円だが、4個以上買うと1割引、7個以上は2割引になるという設定。

#include

int main(void)
{
int n,fee;

printf("リンゴの個数: ");
scanf("%d",&n);

fee = 50 * n;
fee = n<=3 ? fee:(4<=n && n<=6? fee*9/10 : fee*8/10); //1割引は(本来の料金×9/10)として計算。

printf("\n料金は%d円です。\n",fee);

return 0;
}

for文
繰り返し処理を行うための構文。
文法的には、for(初期化の式1; 繰り返すかどうかを判断する式2; 継続処理の式3) {繰り返したい処理;} という形になる。イメージとしては高校数学に出てくるシグマとかに似ている。

Hello World!を50回繰り返すコード
コピペを50回分繰り返すのも大変なのでfor文を用いる。
しかし、このHello World!ってなんなんだろうな。コンピュータの授業だと、いつも最初にやらさせられるけど、「キミもこのコンピュータの世界に生まれたんだね、おめでとう」、みたいななんかバカにされてる感じがして、別にほかの言葉でもいいと思うんだけどね。ハローワールドくらいわかるよバカやろうとか。

#include

int main(void)
{
int i = 1;
for(i = 1; i <=50; i++)
//初項は1で(i = 1)、そのあと1ずつ増やしていって(i++)、iが50まで行ったらおしまい(i <=50)という意味。

{printf("Hello World!\n");} //繰り返したい処理

return 0;
}

身長から適正体重を3回繰り返して調べるコード
課題の意味がよくわからなくて手こずったやつ。
適正体重(kg)は、身長(m)×身長(m)×22なので、式さえ定義すればいい。
ややこしいのは、結局ユーザーに3回身長を入力させるため、scanfの行もfor文の{}の中に組み込むというところ。

#include

int main(void)
{

double l,kg; //身長と適正体重の変数の宣言。
int i; //繰り返し回数の変数の宣言。

for(i=1; i<=3; i++)
{

printf("身長を入力\n");
scanf("%lf",&l);

printf("身長:%f\n",l);

kg=l*l*22;
printf("適正体重:%f\n",kg);

}

return 0;
}

1から入力された値までの奇数の和を求めて出力するコード
ただし、0やマイナスの数が入力された場合は合計値を0と表示すること。
いよいよ中かっこだらけで、どれがどの中かっことセットになっているか、わからなくなってきました。
かなり難しいが、テキストの155ページに答えが載っていた・・・

#include

int main(void)
{

int i,n,sum=0; //繰り返し回数iと、入力された値nと、奇数の和のsumを宣言

for(i=1; i<=n; i=i+2)
//初項は1で(i=1)、偶数は抜かすから一つ飛ばしで足していって(i=i+2)、nまで行ったらおしまい(i<=n)という意味。

{

printf("入力値:\n");
scanf("%d",&n);

if(n>0) //入力された数値がプラスの数ならば1~nまでの奇数を全て足す。
{

sum +=i ;
printf("1~%dまでの合計値は%dです。\n",sum);

}

else
{printf("合計値:0\n");} //0やマイナスの数が入力された場合は合計値を0と表示する。

}

return 0;
}

繰り返し回数を入力して決められるコード
繰り返す回数をnum回として、num回まで繰り返したら処理終了としている。

#include

int main(void)
{
int num,i;

printf("いくつ「Hello World!」を出力しますか?\n");
scanf("%d",&num);

for(i=1; i<=num; i++)
{printf("Hello World!\n");}

return 0;
}

4つの整数の最小値と最大値を求めるコード
テキストに載っていない恐るべき課題。
最小値は、それぞれの整数とminを比べて、minよりも小さければそれが最小値という決め方をさせている。

#include

int main(void)
{
int i,n,min,max;

n=0;
max=-10000;
min=10000;

for(i=1; i<=4; i++)
{
printf("整数:");
scanf("%d",&n);

if(min > n) //その数がminより小さいかどうかを調べている
min = n;

if(max < n) //その数がmaxより大きいかどうかを調べている
max = n;
}

printf("最小値は%dです。\n", min);
printf("最大値は%dです。\n", max);

return 0;
}

1から入力された値までの奇数の和を求めて出力するコード
ただし、0やマイナスの数が入力された場合は合計値を0と表示するということなので、この合計値が0になる場合(nが0以下)を先にif文ではけさせてしまう。
それ以外をelse文の{}に入れて、この中でfor文を作る。

#include

int main(void)
{
int i,n,sum;
sum=0;

scanf("%d",&n);
printf("入力値:%d\n",n);

if(n<=0)
{
printf("\n合計値:0\n");
}

else
{
for(i= 1; i<= n; i=i+2) //初項1、1つ飛ばしに増えて、nまで行ったらおしまい
{ sum=sum+i; } //※sum+=iでも多分大丈夫。
}

printf("合計値:%d\n",sum);

return 0;
}
Calendar
<< February 2021 >>
SunMonTueWedThuFriSat
 123456
78910111213
14151617181920
21222324252627
28
search this site.
tags
archives
recent comment
recent trackback
others
にほんブログ村 科学ブログへ にほんブログ村 科学ブログ 恐竜へ カウンター
admin
  • 管理者ページ
  • 記事を書く
  • ログアウト