cp-3. 計算

-- Views

February 21, 22

スライド概要

(C プログラミング入門)
URL: https://www.kkaneko.jp/cc/adp/index.html

profile-image

金子邦彦(かねこくにひこ) 福山大学・工学部・教授 ホームページ: https://www.kkaneko.jp/index.html 金子邦彦 YouTube チャンネル: https://youtube.com/user/kunihikokaneko

シェア

埋め込む »CMSなどでJSが使えない場合

各ページのテキスト
1.

cp-3. 計算 (C プログラミング入門) URL: https://www.kkaneko.jp/cc/adp/index.html 金子邦彦 1

2.

内容 例題1.自由落下距離 四則演算 例題2.三角形の面積 浮動小数の変数,入力文,出力文,代入文 例題3. sin 関数による三角形の面積 ライブラリ関数 2

3.

目標 • プログラムを使って,自分の思い通りの計算がで きるようになる • 四則演算 • ライブラリ関数(三角関数,対数・指数関数など) • 見やすいプログラムを書くために,ブロック単位 での字下げを行う 3

4.

例題1.自由落下距離 • 自由落下距離を求めるプログラムを作る • 地上で物を落とし始めた後の自由落下距離を求める • 重力加速度 g は 9.8 とする • 自由落下距離を求めるために,プログラム中に,計算 式 y = ( 9.8 / 2.0 ) * x * x を書く 4

5.
[beta]
#include <stdio.h>
#include <math.h>
#pragma warning(disable:4996)
int main()
{
double x;
double y;
char buf[256];

int i;
double start_x;
double step_x;
FILE* fp;
printf( "start_x =" );
fgets( buf, 256, stdin );
sscanf_s( buf, "%lf\n", &start_x );
printf( "step_x =" );
fgets( buf, 256, stdin );
sscanf_s( buf, "%lf\n", &step_x );
fp = fopen( "z:\\data.csv", "w" );
for( i = 0; i < 20; i++ ) {
x = start_x + ( i * step_x );

自由落下距離の
計算を行っている部分

y = ( 9.8 / 2.0 ) * x * x;
printf( "x= %f, y= %f\n", x, y );
fprintf( fp, "x=, %f, y=, %f\n", x, y );
}
fprintf( stderr, "file created\n" );
fclose( fp );
return 0;
}

5

6.

実行結果例 start_x =0 step_x = 0.1 x= 0.000000, y= 0.000000 x= 0.100000, y= 0.049000 x= 0.200000, y= 0.196000 x= 0.300000, y= 0.441000 x= 0.400000, y= 0.784000 x= 0.500000, y= 1.225000 x= 0.600000, y= 1.764000 x= 0.700000, y= 2.401000 x= 0.800000, y= 3.136000 x= 0.900000, y= 3.969000 x= 1.000000, y= 4.900000 x= 1.100000, y= 5.929000 x= 1.200000, y= 7.056000 x= 1.300000, y= 8.281000 x= 1.400000, y= 9.604000 (以下続く) 6

7.

四則演算のための演算子 •+ 和 •-差 • * 積 •/ 商 7

8.

例題2.三角形の面積 • 底辺と高さを読み込んで,面積を計算するプログ ラムを作る 例) 底辺が2.5,高さが5のとき, 面積: 6.25 • 底辺,高さ,面積を扱うために,浮動小数の変数 を3つ使う 8

9.
[beta]
#include <stdio.h>
#pragma warning(disable:4996)
int main()
{
double teihen;
double takasa;
double menseki;
printf("teihen=");
scanf("%lf", &teihen);
printf("takasa=");
scanf("%lf", &takasa);
menseki = teihen*takasa*0.5;
printf("menseki=%f\n", menseki);
return 0;
}

入力部分
計算部分
出力部分

9

10.

実行結果例 x=2.5 y=5 z = 6.250000 10

11.

プログラム実行順 printf("teihen="); メッセージ「teihen=」を表示 scanf("%lf", &teihen); 浮動小数データを読み込み printf("takasa="); メッセージ「takasa=」を表示 scanf("%lf", &takasa); 浮動小数データを読み込み menseki = teihen * takasa * 0.5; printf("menseki = %f\n", menseki); return 0; 終わり 計算 計算結果を表示 11

12.

プログラムとデータ メモリ teihen ③ takasa menseki = tekhen * takasa * 0.5; 計算 menseki ① scanf("%lf", &teihen); 浮動小数データを読み込み ② ④ scanf("%lf", &takasa); 浮動小数データを読み込み printf("menseki = %f\n", menseki); 計算結果を表示 3つの変数 12

13.

変数宣言 • 変数は,データを入れるための容器 • 変数宣言とは,変数を使うために,名前と型を書い て,変数の使用をコンピュータに伝えること double teihen; 浮動小数データで,変数名は「teihen」 double takasa; 浮動小数データで,変数名は「takasa」 double menseki; 浮動小数データで,変数名は「menseki」 「double」とは,浮動小数データという 意味. 13

14.

代入文 menseki = teihen*takasa*0.5; • 計算結果(teihen*takasa*0.5)を,変数 menseki に格納する(このことを,代入という) • 「=」は,変数に計算結果等を格納するという意 味.「両辺が等しい」という意味ではない 14

15.

入力,出力とは • 入力 • データの読み込み (読み込まれたデータは変数に格納される) • 出力 • メッセージの表示 • データの表示 (変数に格納されたデータが表示される) 15

16.

入力文 scanf("%lf", &teihen); 書式 & 読み込むべき変数名 • 入力文とは,データを読み込むための文 • 書式と読み込むべき変数名を書く • 書式: 浮動小数データを読み込む場合,書式は 「%lf」 と書くことになっている • 変数名: 変数名の前には「&」を付けること 16

17.

いろいろな入力 double x; scanf( "%lf\n", &x ); double a; double b; scanf( "%lf\n", &a ); scanf( "%lf\n", &b ); 浮動小数の変数 x への入力 浮動小数の変数 a と b への入力 17

18.

出力文 printf("menseki=%f\n", menseki); 書式 表示すべき変数名 • 出力文とは,データとメッセージを表示するため の文 • 書式と表示すべき変数名を書く • 書式: 浮動小数データを表示する場合,書式は 「%f」 と書くことになっている • 変数名: 変数名の前には「&」を付けない (scanf と は違う) 18

19.

いろいろな出力 printf( "x= ?" ); printf( "x= %f" ); printf( "y= %f" ); メッセージ 表示 「x= ?」の 「x= 10.0000 y= 20.0000」 のように,メッセージ と変数の中身を並べて 表示 19

20.

¥n 次の行に進め(改行)という指示 printf 文などの中で用いる (例) printf("menseki=%f\n", menseki); 20

21.

浮動小数データの使い方 • 変数宣言: double teihen; double takasa; double menseki; • 書式: %lf - scanf(入力)での書式 %f - printf (出力)での書式 21

22.

例題3.sin 関数による三角形の面積 • 三角形の2辺の長さ a, b とその挟角 thetaを読み 込んで,面積 S を計算するプログラムを作る • 面積を求めるために,sin関数を使う • 円周率π=3.14159 とする 1 S = ab sin  2 22

23.
[beta]
#include <stdio.h>
#include <math.h>
#pragma warning(disable:4996)
int main()
{
double a;
double b;
double theta;
double S;
printf("a=");
scanf("%lf", &a);
入力部分
printf("b=");
scanf("%lf", &b);
計算部分
printf("theta=");
scanf("%lf", &theta);
S = 0.5 * a * b * sin( theta * 3.14159 / 180.0 );
printf("S = %f\n ", S );
return 0;
出力部分
23
}

24.

ライブラリ関数 指数,対数,平方根 • • • • exp log sqrt 三角関数 • • • • • • • acos asin atan cos sin tan 指数関数(eを底とする指数zの累乗,eのz乗) 対数関数(底をeとする自然対数の計算) 平方根 逆コサイン 逆サイン 逆タンジェント コサイン サイン タンジェント その他 • • • • fabs 絶対値 fmod(x,y) 浮動小数データの剰余 pow(x,y) べき乗(xのy乗) 24

25.

いろいろな計算 y = sin( x ); sin x を計算し,y に格納 y = sqrt( x ); √ x を計算し,y に格納 d = sqrt( ( x * x ) + ( y * y ) ); √ x2 + y2 を計算し,d に格納 25

26.

ライブラリ関数の利用 • 計算に関するライブラリ関数を利用するには, を,プログラムの先頭部分に書くこと #include <math.h> 26

27.
[beta]
三角関数では「ラジアン」を使う
#include <stdio.h>
#include <math.h>
#pragma warning(disable:4996)
int main()
「度」から「ラジアン」への変換
{
double degree;
double s;
printf("degree=");
scanf("%lf", &degree);
s = sin( degree * 3.14159 / 180.0 );
printf("sin(%f) = %f\n ", degree, s );
return 0;
}
• 180.0 の「.0」には意味がある(浮動小数での計算を行うべき
であることをコンピュータに教えている)
27

28.

課題1.Heron の公式 • 三角形の3辺の長さ a, b, c を読み込んで,面 積 S を計算するプログラムを作りなさい. • Heronの公式を用いること S = s(s −a)(s −b)(s −c) 但し s =(a +b+c)/ 2 28

29.

課題2.四則演算 • 2つの数を読み込んで,和,差,積,商, 剰余を計算するプログラムを作りなさい 29