インテル(R) 数値演算ライブラリ(MKL) リファレンス・マニュアル · インテル® 数値演算ライブラリ -リファレンス・マニュアル- 目次
いろいろな演算(四則演算) int以外の変数の型)yaoki/pro2/pro2-02.pdf ·...
Transcript of いろいろな演算(四則演算) int以外の変数の型)yaoki/pro2/pro2-02.pdf ·...
1
第2回 プログラミング入門2 2
演算と変数の型 いろいろな演算(四則演算) 整数だけでなく小数データも!(int以外の変数の型)
前回 → 点数の合計 今回 → 平均点(小数データ)
演算と型の関係
条件分岐 If文による条件分岐の制御
2
第2回 プログラミング入門2 3
キーボードから2つの整数を読み込み、和を表示するプログラムを作成せよ。
これに他の演算(差,積,商,剰余) を加えていく
第2回 プログラミング入門2 4
コンピュータに様々な計算を実行させる → 四則演算が基本 (和、差、積、商)
四則演算を実現する演算子(演算の働きを持った記号)
演算子 用法 説明
+ a + b aとbの和 ー a - b aとbの差 * a * b aとbの積 / a / b aをbで割った商 % a % b aをbで割った剰余
+ 二項演算子
a 第一(左)オペランド
b 第二(右)オペランド
3
第2回 プログラミング入門2 5
ソースファイル名:list0201.c 目的: 四則演算を実行し、結果を確認する(特に / , % 演算子の結果に注意)
/* 読み込んだ二つの整数値の和・差・積・商・剰余を表示 */ #include <stdio.h>
int main(void) {
int vx, vy;
puts("二つの整数を入力してください。"); printf("整数vx:"); scanf("%d", &vx); printf("整数vy:"); scanf("%d", &vy);
printf("vx + vy = %d\n", vx + vy); printf("vx - vy = %d\n", vx - vy); printf("vx * vy = %d\n", vx * vy); printf("vx / vy = %d\n", vx / vy); printf("vx %% vy = %d\n", vx % vy);
return (0); }
第2回 プログラミング入門2 6
整数 / 整数 商の整数部
5 / 3 → 1, 3 / 5 → 0
整数 % 整数 剰余
5 % 3 → 2, 3 % 5 → 3
整数(int型)と整数(int型)の四則演算 結果も整数
4
第2回 プログラミング入門2 7
これまでの計算 → 整数のみ(int型) 実際の数値計算では、実数計算がほとんど 例)
点数の平均点を求める
平方根の計算
sin, cos その他
第2回 プログラミング入門2 8
ファイル名:heikin_int.c /* 2科目の点数の平均を表示するプログラム 整数版*/
#include <stdio.h>
int main(void) {
int sugaku; int english; int heikin;
printf(“数学の点数は?: ”); scanf(“%d”, &sugaku); printf(“英語の点数は?: ”); scanf(“%d”, &sugaku);
heikin = (sugaku + english) / 2; /* 平均点を求める */ printf(“平均点は、%d 点 です。”, heikin );
return(0); }
• 演算は、*, / (乗算、除算)が優先される
• +, ‐を先に計算させる場合には、 半角( )でくくる
5
第2回 プログラミング入門2 9
ファイル名:heikin_dbl.c /* 2科目の点数の平均を表示するプログラム 実数版*/
#include <stdio.h>
int main(void) {
int sugaku; int english;
printf(“数学の点数は?: ”); scanf(“%d”, &sugaku); printf(“英語の点数は?: ”); scanf(“%d”, &sugaku);
heikin = (sugaku + english) / 2.0; /* 平均点を求める */ printf(“平均点は、%f 点 です。”, heikin );
return(0); }
• 割る数を 2 → 2.0 に!
%d を %f に!
double heikin;
int を double に!
第2回 プログラミング入門2 10
C言語 実数を 浮動小数点数で表す 整数 → int 型 浮動小数点 → double型,float型
型名 変数名
int sugaku; 宣言
型名 変数名
double heikin; 宣言
整数 変数の宣言
浮動小数点数 変数の宣言
double型
タコ焼のカタ (設計図)
int型 sugaku
heikin
タコ焼 (実体)
6
第2回 プログラミング入門2 11
int型の場合 double型の場合
printf printf( “%d”, no ); printf( “%f ”, no );
scanf scanf( “%d”, &no ); scanf( “%lf ”, &no );
忘れずに! 忘れずに!
%lf (パーセント・エル・エフ)
第2回 プログラミング入門2 12
ファイル名:list0207.c 目的: double型変数に対する printf, scanf の使い方をマスター
/* 二つの実数値を読み込んで和・差・積・商を実数で表示 */
#include <stdio.h>
int main(void) {
double vx, vy; /* 浮動小数点数 */
puts("二つの数を入力してください。"); printf("実数vx:"); scanf("%lf", &vx); printf("実数vy:"); scanf("%lf", &vy);
printf("vx + vy = %f\n", vx + vy); printf("vx - vy = %f\n", vx - vy); printf("vx * vy = %f\n", vx * vy); printf("vx / vy = %f\n", vx / vy);
return (0); }
7
第2回 プログラミング入門2 13
int型変数に小数値(double)を代入すると……
double型に整数値(int)を代入すると…
nx int型
dx double型
9.99
小数点以下は切り捨て! 型に入らない!
9.99
OK!
dx double型
9 printf → 9.000000
第2回 プログラミング入門2 14
同じ型どうし、異なる型どうしの演算
5 / 2 → 2 int / int → int
5.0 / 2.0 → 2.0 double / double → double
同じ型どうしの演算
5.0 / 2 double / int
5.0 / 2.0 → 2.5 double / double → double
5 / 2.0 int / double
5.0 / 2.0 → 2.5 double / double → double
異なる型どうしの演算
格上げ 格上げ
8
第2回 プログラミング入門2 15
異なる型どうしの演算では、
小さい方の型のオペランドは、より大きい方の型に変換 された上で演算が行われる
重要
int 整数のみ
double 実数
<
第2回 プログラミング入門2 16
ソースファイル名:list0208.c (p.29) 確認事項: 同じ型,異なる型どうしの演算結果
/* 型と演算について確認する */
#include <stdio.h>
int main(void) {
int n1, n2, n3, n4; double d1, d2, d3, d4;
n1 = 5 / 2; n2 = 5.0 / 2.0; n3 = 5.0 / 2; n4 = 5 / 2.0;
d1 = 5 / 2; d2 = 5.0 / 2.0; d3 = 5.0 / 2; d4 = 5 / 2.0;
printf("n1 = %d\n", n1); printf("n2 = %d\n", n2); printf("n3 = %d\n", n3); printf("n4 = %d\n\n", n4);
printf("d1 = %f\n", d1); printf("d2 = %f\n", d2); printf("d3 = %f\n", d3); printf("d4 = %f\n", d4);
return (0); }
9
第2回 プログラミング入門2 17
a (型) aの値を型名で指定された値に 変換したものを生成
例1) (double) 5 → 5.0 を生成 (int) 2.55 → 2 を生成 例2) int na, nb; double heikin;
na = 40; nb = 45;
heikin = (double) (na + nb) / 2 ; 85(int型)
85.0(double型)
85.0 / 2 (double) / (int)
第2回 プログラミング入門2 18
条件にもとづいて、プログラムの流れを変える 例えば、
キーボードから入力した整数値が…
・ もし、5で割り切れなかったら、“5の倍数でありません。” と表示する。 ・ そうでなかったら(5で割り切れたら)、“5の倍数です。” と表示する。
10
第2回 プログラミング入門2 19
ソースファイル名: list0301.c 概要: 読み込んだ整数値が5で割り切れないかどうか判定 目的: if 文の動作を確認
/* 読み込んだ整数値は5で割り切れないか */
#include <stdio.h>
int main(void) {
int vx;
printf("整数を入力してください:"); scanf("%d", &vx);
if (vx % 5) puts("その数は5で割り切れません。");
return (0); }
if文
%: 余り
第2回 プログラミング入門2 20
if (vx % 5)
puts("その数は5で割り切れません。");
式
文
if ( 式 ) 文
構文
• (式)を評価 • 式の結果が非0だったら、文を実行 • 式の結果が0だったら、文を実行せず
vxが5の倍数 → vx%5 = 0 vxが5の倍数でない → vx%5 ≠0(非ゼロ)
11
第2回 プログラミング入門2 21
ソースファイル名: list0303.c 概要: 割り切れなくても,割り切れても,その結果を表示 目的: if ~else~文の動作を確認
#include <stdio.h>
int main(void) {
int vx;
printf("整数を入力してください:"); scanf("%d", &vx);
if (vx % 5) puts("その数は5で割り切れません。"); else puts(“その数は5で割り切れます。");
return (0); }
If~else~文
第2回 プログラミング入門2 22
if ( 式 )
構文
If(もしも~なら・・・),else(それ以外の時は・・・)という意味
文1
式if (vx % 5)
puts("その数は5で割り切れません。"); else
puts(“その数は5で割り切れます。"); 文2
else
12
第2回 プログラミング入門2 23
C言語における「式」
x (int型変数) 38 (int型定数) x + 38 (演算)
全てその値を評価できる 「式」
X + 38
15 38
X % 5
7 5 53 式全体の評価値
2 式全体の評価値
第2回 プログラミング入門2 24
条件分岐における条件判定
人間の日常生活の中での様々な判断は,1つの条件,またはいくつかの条件を総合して判断している。
例えば… 只今の所持金は財布の中の2000円のみ 欲しい品物が2000円より高い → 買えない 2000円以下 → 買える!
大学の成績評価 A(80~100),B(70~79),C(60~69),D(~59)
駅から歩くか,学バスが来るまで待つか,タクシーに乗るか 判断要素: 天候,次のバスが来るまでの時間,所持金,疲労度,授業までの残り時間 など
ある値の大小によって,処理を分岐する必要になる!
13
第2回 プログラミング入門2 25
ファイル名:list0306.c /* 読み込んだ二つの整数値は等しいか */
#include <stdio.h>
int main(void) {
int x1, x2;
puts("二つの整数を入力してください。"); printf("整数1:"); scanf("%d", &x1); printf("整数2:"); scanf("%d", &x2);
if (x1 == x2) puts("それらの値は同じです。"); else puts("それらの値は違います。");
return (0); }
第2回 プログラミング入門2 26
ファイル名:list0307.c
/* 読み込んだ二つの整数値は等しいか */
#include <stdio.h>
int main(void) {
int x1, x2;
puts("二つの整数を入力してください。"); printf("整数1:"); scanf("%d", &x1); printf("整数2:"); scanf("%d", &x2);
if (x1 != x2) puts("それらの値は違います。"); else puts(“それらの値は同じです。");
return (0); }
14
第2回 プログラミング入門2 27
2つの式の値が等しいか,等しくないかを判定
==演算子 a == b aとbの値が等しければ1,そうでなければ0
!=演算子 a != b aとbの値が等くなければ1,そうでなければ0
等価演算子
if (x1 == x2)
puts("それらの値は同じです。"); else
puts("それらの値は違います。");
値が1(等しい)
値が0 (等しくない)
※ != はこの逆
第2回 プログラミング入門2 28
これまでは流れを2つに分岐 → 3つ以上の場合は? 例)
所持金2,000円 (1) 商品が2,000円より高かったら,惜しくも買えない. (2) 商品が2,000円ピッタリだったら,ビンゴ. (3) 商品が2,000円より安ければ,余裕で買える.
値が等しいかどうかを判定:等価演算子(==,!=)
値の大小を比較する演算子が必要!!
値の比較により,処理の流れを3つに分岐したい
15
第2回 プログラミング入門2 29
ファイル名:list0309.c /* 読み込んだ整数値の符号を判定 */
#include <stdio.h>
int main(void) {
int no;
printf("整数を入力してください:"); scanf("%d", &no);
if (no == 0) puts("その数は0です。"); else if (no > 0) puts("その数は正です。"); else puts("その数は負です。");
return (0); }
第2回 プログラミング入門2 30
if (no == 0) puts("その数は0です。"); else if (no > 0) puts("その数は正です。"); else puts("その数は負です。");
if(条件式1) 文1
else if(条件式2) 文2 else
文3
①
②
③
If(もし) 条件1であれば,文1実行
①でなく,条件2であれば,文2実行
①, ②のどの条件にもあてはまらない場合
※else if は何個でも書ける.
①
②
③ ①,②以外,つまり,0でも正でもない場合
16
第2回 プログラミング入門2 31
< 演算子 a < b aがbより小さければ1,そうでなければ0
>演算子 a > b aがbより大きければ1,そうでなければ0
<=演算子 a <= b aがb以下であれば1,そうでなければ0
>=演算子 a >= b aがb以上であれば1,そうでなければ0
if ( a >= b ) ○ → 値は1 × → 値は0
第2回 プログラミング入門2 32
ファイル名:list0310.c /* 2つの整数の大きい方の値を求める */
#include <stdio.h>
int main(void) {
int n1, n2;
puts("二つの整数を入力してください。"); printf("整数1:"); scanf("%d", &n1); printf("整数2:"); scanf("%d", &n2);
if (n1 > n2) printf("大きい方の値は%dです。\n", n1); else printf("大きい方の値は%dです。\n", n2);
return (0);
}
17
第2回 プログラミング入門2 33
ファイル名:list0311.c 求めた値を,後の処理のために変数に格納
/* 2つの整数の大きい方の値を求める */
#include <stdio.h>
int main(void) {
int n1, n2, max;
puts("二つの整数を入力してください。"); printf("整数1:"); scanf("%d", &n1); printf("整数2:"); scanf("%d", &n2);
if (n1 > n2) max = n1; else max = n2;
printf("大きい方の値は%dです。\n", max);
return (0); }
第2回 プログラミング入門2 34
ファイル名:list0315.c /* 2つの整数の大きい方,小さい方の値両方を求める */ #include <stdio.h> int main(void) {
int n1, n2, max, min;
puts("二つの整数を入力してください。"); printf("整数1:"); scanf("%d", &n1); printf("整数2:"); scanf("%d", &n2);
if (n1 > n2) { max = n1; min = n2; } else { max = n2; min = n1; }
printf("大きい方の値は%dです。\n", max); printf("小さい方の値は%dです。\n", min); return (0);
}
今までに無かった中括弧
} 文が2つ(複数)
今までに無かった中括弧
} 文が2つ(複数)
18
第2回 プログラミング入門2 35
単一の文が要求されるところで,複数の文を実行しなければ
ならない時には,{}の中にまとめて,複合文(ブロック)として実現.
重要
if (n1 > n2) { max = n1; min = n2;
}
例1)
複合文(ブロック)
※文が一つの場合, {}は書いても書かなくてもOK.
実はこんなところにも… #include <stdio.h> int main(void) { printf(“こんにちは。”); return (0); }
複合文(ブロック)
第2回 プログラミング入門2 36
一つの条件だけでなく,複数の条件が成立,またはどちらからかが成立した時,というように複数の条件から処理を判断.
例) とある飲み会へ参加しようかどうか迷っている
(1)友人AとBが両方とも(AかつB)参加表明 → 私も参加 (2)友人AとBの少なくともどちらかが(AまたはB)参加表明 → 参加微妙 (3)友人AとB,両方とも不参加 → 私も不参加
論理演算子 の導入
19
第2回 プログラミング入門2 37
読み込んだ月から季節を判定するプログラム 仕様
整数値(月:変数名 month )を入力 その数字が,
3,4,5 → 春 6,7、8 → 夏 9,10,11 → 秋 12,1,2 → 冬
と判定したい
条件を ?以上?以下で表現できる
条件を 12または1または2 と表現できる
第2回 プログラミング入門2 38
条件の「かつ」,「または」を表現
&&(and) 演算子 a && b aとbがどちらも非0であれば1,そうでなければ0
|| (or)演算子 a || b aとbの一方でも非0であれば1,そうでなければ0
例) もし,3月以上(かつ)5月以下だったら…
3 <= month <= 5 month >= 3 month <= 5 && 「かつ」
① ②
○(1:正) ×(0:誤) →×(0:誤) ×(0:正) ○(1:正) →×(0:誤) ×(0:誤) ×(0:誤) →×(0:誤)
○(1:正) ○(1:正) → ○(1:正)
①,②の両方成り立てば○
20
第2回 プログラミング入門2 39
条件の「かつ」,「または」を表現
&&(and) 演算子 a && b aとbがどちらも非0であれば1,そうでなければ0
|| (or)演算子 a || b aとbの一方でも非0であれば1,そうでなければ0
例) 12月,または1月だったら
month == 12 month == 1 || 「または」 ① ②
○(1:正) ×(0:誤) →○(1:正) ×(0:正) ○(1:正) →○(1:正) ×(0:誤) ×(0:誤) →×(0:誤)
○(1:正) ○(1:正) → ○(1:正)
①,②のどちらかが成り立てば○
第2回 プログラミング入門2 40
ファイル名:list0316.c /* 読み込んだ月の季節を表示 */ #include <stdio.h> int main(void) {
int month; /* 月 */
printf("何月ですか:"); scanf("%d", &month);
if (month >= 3 && month <= 5) puts("春です。"); else if (month >= 6 && month <= 8) puts("夏です。"); else if (month >= 9 && month <= 11) puts("秋です。"); else if (month == 1 || month == 2 || month == 12) puts("冬です。"); else puts("そんな月はありませんよ!!\a");
return (0); }
21
第2回 プログラミング入門2 41
1. 身長を整数値として読み込んで(scanf)、それに対する標準体重を実数で表示(printf)するプログラムを作成せよ。なお、標準体重の計算式は以下で与えられるものとする。
標準体重 = (身長‐100)×0.9
2. あるサッカーチームのゴール決定率を計算・表示するプログラムを作成せよ。
手順)
・チーム名を表示(printf) ・シュート数を入力
・ゴール数を入力
・ゴール決定率を計算(ゴール数÷シュート数)×100 (%)
・ゴール決定率を表示
3.if文を用いて,点数を入力すると、その評価を出力するプログラムを作れ。 なお評価は、以下のとおりとする。
・80点以上: A(優), 70点以上80点未満: B(良),60点以上70点未満: C(可), 60点未満: D(不可)
kadai2-1.c
kadai2-2.c
Kadai2-3.c