4章 制御の流れ1(スライドのPDF版)

4章 制御の流れ-1
if else 文
if (条件式) 文a; else 文b;
文が1つでもこちらの形式がお薦め
if (条件式)
{
文a-1;
文a-2;
}
else
{
文b-1;
文b-2;
}
条件式
•  関係演算子
== 等しい
!= 等しくない
>=
<=
>
<
•  論理演算子
&&
||
!
AND
OR
NOT
条件式は0(偽)または
1(真)のint型の値を返す。
正の値を返す式は真と見なさ
れる。
/* 66666 tachibana masayoshi */
/* p104 list 4.1 */
#include "stdafx.h"
int main(void)
{
int Taro,Hanako,Jiro;
Tara = 20;
Hanako = 50;
Jiro = 10;
if
if
if
if
(Taro == 20) printf("太郎は20歳ですね\n");
(Hanako != 20) printf("花子は20歳ではありません\n");
(Hanako >= 20) printf("花子は20歳以上です\n");
(Jiro < 20) printf("次郎は20歳未満ですね\n");
if (Taro > Jiro) printf("太郎は次郎より年上です\n");
if (Hanako > Taro) printf("花子は太郎より年上です\n");
}
return 0;
論理演算子(AND)
A && B
A B 結果
偽 偽 偽
偽 真 偽
真 偽 偽
真 真 真
A B 結果
0 0 0
0 1 0
1 0 0
1 1 1
論理演算子 (OR)
A || B
A B 結果
偽 偽 偽
偽 真 真
真 偽 真
真 真 真
A B 結果
0 0 0
0 1 1
1 0 1
1 1 1
論理演算子(OR)
A || B
A B 結果
偽 偽 偽
偽 真 真
注意!!
真 偽 真
真 真 真
A B 結果
0 0 0
0 1 1
注意!!
1 0 1
1 1 1
論理演算子 (NOT)
!A
A 結果
偽 真
真 偽
A 結果
0 1
1 0
論理演算子の優先順位
高い
低い
! > && > ||
間違いやすいので注意
!A && B || A && !B
((!A) && B) || (A && (!B))
同じ値
/* p110 list 4.3 */
#include "stdafx.h"
int main(void)
{
int x,y;
char c1,c2,c3;
printf("数値2つと文字を3文字を入力してください(x y c1 c2 c3) >>>\n");
scanf_s("%d %d %c %c %c",&x, &y, &c1, &c2, &c3);
printf("入力値:x=%d y=%d c1=%c c2=%c c3=%c\n",x,y,c1,c2,c3);
if (x>=0 && x<=100) printf("xは0以上100以下です\n");
if (y<=0 || y>=100) printf("yは0以下かまたは100以上です\n");
if (c1>='0' && c1<='9') printf("c1は数字\n");
if (c2>='A' && c2<='Z') printf("c2は英大文字\n");
if (c3=='Y' || c3=='y') printf("c3はYまたはy\n");
printf("xの値は%dです\n",x);
printf("yの値は%dです\n",y);
printf("c1 コードは10進数で%d 16進数で%xです\n",c1,c1);
printf("c2 コードは10進数で%d 16進数で%xです\n",c2,c2);
printf("c3 コードは10進数で%d 16進数で%xです\n",c3,c3);
}
return 0;
3つ以上の数値の比較
int x=10,y=20,z=30;
if (z>=y>=x)
printf("A\n");
else
printf("B\n");
出力されるのは A か B か?
3つ以上の数値の比較
int x=10,y=20,z=30;
if (z>=y>=x)
printf("A\n");
else
printf("B\n");
答えはB 3つ以上の数値の比較
x=10,y=20,z=30
z>=y>=x
(z>=y)>=x → (30>=20)>=10
→ 1>=10 → 0
答えはB 3つ以上の数値の比較
int x=10,y=20,z=30;
if (z>=y && y>=x)
printf("A\n");
else
printf("B\n");
この場合はAが出力される 3つ以上の数値の比較
かならず
z>=y
のように書くこと!
&& y>=x
x==y==zも同じ理由で
x==y && y==z
と書く 3つ以上の数値の比較
おなじ理由で
a == 1 || 2 || 3 も
a == 1 || a == 2 || a == 3
と書く if else 文
if (条件式) 文a; else 文b;
文が1つでもこちらの形式がお薦め
if (条件式)
{
文a-1;
文a-2;
}
else
{
文b-1;
文b-2;
}
複文
{
{
文1;
文2;
{
文3;
文4;
}
文1;
文2;
文N;
}
}
ネストした複文
if-elseの使い方
Start
aを入力
a<0
No
a == 1
No
a == 2
Yes
Yes
Yes
scanf("%d",&a);
smallと出力
oneと出力
twoと出力
if (a<0) printf("small\n");
else if (a==1) printf("one\n");
else if (a==2) printf("two\n");
else printf("big\n");
No
bigと出力
End
/* p116 list 4.4 */
#include "stdafx.h"
int main(void)
{
int a;
printf("入力データは?>>>\n");
scanf_s("%d", &a);
}
printf("データは");
if (a %2 == 0)
{
printf("偶数");
}
else
{
printf("奇数");
}
printf("です\n");
return 0;
真
偶数
a%2==0
偽
奇数
switch文(1)
switch (式)
{
case 定数式1:
文1;
break;
case 定数式2:
文2;
break;
default :
文n;
break;
}
breakが無いと、突き抜ける。
式
1
式==定数式1
yes
文1
no
yes
式==定数式2
文2
no
default
文n
caseのうしろには定数式しか書けない。
/* p118 list 4.5 */
#include "stdafx.h"
int main(void)
{
int rank;
printf("あなたの順位は?>>>\n");
scanf_s("%d", &rank);
}
switch(rank)
{
case 1:
printf("優勝したあなたには、海外旅行です。\n");
break;
case 2:
printf("2位のあなたには、国内旅行です。\n");
break;
case 3:
printf("3位のあなたには、ホテルの食事券です。\n");
break;
default:
printf("タオルをどうぞ。\n");
break;
}
return 0;
switch文(2)
switch (式)
{
case 定数式1:
文1;
case 定数式2:
文2;
default :
文n;
break;
}
式
式==定数式1
1
yes
文1
no
式==定数式2
default
breakが無いと、突き抜ける。
文2
no
文n
yes
/* p121 list 4.6 */
#include "stdafx.h"
int main(void)
{
char c;
printf("あなたの順位は?>>>\n");
scanf_s("%c", &c);
switch(rank)
{
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9' :
printf("入力文字は数字の%cです。\n",c);
break;
default:
printf("入力文字は数字ではありません。\n");
break;
}
return 0;
}
多岐条件文
if (条件式1)
文1;
else if (条件式2)
文2;
else if (条件式3)
else if (条件式n)
文n;
else
文m;
数学関数(1)
sin(x)
asin(x)
cos(x)
acos(x)
tan(x)
atan(x)
atan2(x,y)
exp(x)
log(x)
log10(x)
pow(x,y)
sqrt(x)
fabs(x)
ceil(x)
floor(x)
fmod(x)
各関数の説明はP127
数学関数(2)
VC++では必要 2行続けて書く
•  #define _USE_MATH_DEFINES
#include <math.h>が必要
•  double型
•  角度はradian
–  radian = degree*π/180.0
•  パラメータ、結果の型、値の範囲に注意
数学定数
•  定数(よく使われるもの)
π
M_PI
1/π M_1_PI
e M_E
const double pi=M_PI;
•  3.141592653589793のように値を
打ち込むのはやめた方がいい
VC++と教科書の違い
•  #include "stdafx.h" •  #include <stdio.h> •  scanf_s ( ) •  scanf ( ) •  #define _USE_MATH_DEFINES #include <math.h> •  #include <math.h>