ce-3. 式,変数,入力,出力
1
金子邦彦
(C プログラミング応用)(全14回)
URL: https://www.kkaneko.jp/pro/c/index.html
C言語における四則演算とライブラリ関数を用いた計算
処理,変数・入力文・出力文の基本的な使い方の習得。
【学習内容の構成】
1. 四則演算:自由落下距離の計算を通じた演算子(+,
-, *, /)の活用
2. 変数と代入:浮動小数データ(double型)の宣言と
計算結果の格納
3. 入出力処理:scanf による読み込みと printf による表
示,書式指定(%lf, %f)の使い分け
4. ライブラリ関数:math.h を用いた三角関数(sin)
や平方根(sqrt)等の数学関数の利用
• 前提:Microsoft Visual Studio C++の基本操作,プロ
グラムのビルドと実行
• 意義:計算式をプログラムで表現し,思い通りの計算
を実行できる能力の獲得
2
例題1.自由落下距離
• Win32 コンソールアプリケーションを新規作成す
る
• その後,C++ソースファイルの編集を行い,自由
落下距離を求めるプログラムを作る
• 地上で物を落とし始めた後の自由落下距離を求める
• 重力加速度 g は 9.8 とする
• 自由落下距離を求めるために,プログラム中に,計算
式 y = ( 9.8 / 2.0 ) * x * x を書く
•3
Microsoft Visual Studio C++ の画面構成
•4
ファイルなど
が表示される
C++ソースファイ
ルの編集はここで行
う
ビルド結果が現れ
る
#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( "d:¥¥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 d:¥¥data.csv created¥n" );
fclose( fp );
return 0;
}
•5
自由落下距離の
計算を行っている部分
データファイル名
d:¥¥data.csv
は適切に設定すること
#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( "d:¥¥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 d:¥¥data.csv created¥n" );
fclose( fp );
return 0;
}
•6
計算を行っている部分
キーボードからの
データ読み込みを
行っている部分
ファイルへの書き出し
を行っている部分
#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( "d:¥¥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 d:¥¥data.csv created¥n" );
fclose( fp );
return 0;
}
•7
Cプログラムはメイン関数から
実行開始
プログラムは順次実行
変数 x, y, buf, i, start_x,
step_x, fp をメモリエリア中に確保
printf でメッセージを表示
fgets でキーボードから1行を読み込み
sscanf で数値を読み取って変数に格納
printf でメッセージを表示
fgets でキーボードから1行を読み込み
sscanf で数値を読み取って変数に格納
20回の繰り返し (i = 0, 1, ... 19)
x の値から
( 9.8 / 2.0 ) * x * x
を求め,y に書き込む
C++ソースファイルの
書き換えが終わった後の手順
• ビルド
「ビルド」→「ソリューションのビルド」
ビルドが終了し
「ビルド:1 正常終了,0 失敗,0 スキップ」
のように表示されていることを確認
→ さもなければ,プログラム中のミスを疑う
• 実行
「デバック」→「デバッグ無しで開始」
すると,新しいウインドウが開く
•8
実行手順
• 実行すると,新しいウインドウが現れるので,
start_x, step_x の値をキーボードから与える
例えば
start_x = 0
step_x = 0.1
• ウインドウは消えるが,d: ドライブに data.csv
(データファイル)が作成されるので,Excel 等で
開き確認する
•9
Excelでデータファイルを開いたとき
•10
四則演算のための演算子
+ 和
- 差
* 積
/ 商
•11
例題2.三角形の面積
• 底辺と高さを読み込んで,面積を計算するプログ
ラムを作る
例) 底辺が2.5,高さが5のとき,
面積: 6.25
• 底辺,高さ,面積を扱うために,浮動小数の変数
を3つ使う
•12
#include "stdio.h"
#include <math.h>
#pragma warning(disable:4996)
int main()
{
double teihen;
double takasa;
double menseki;
int ch;
printf("teihen=");
scanf("%lf", &teihen);
printf("takasa=");
scanf("%lf", &takasa);
menseki = teihen*takasa*0.5;
printf("menseki=%f¥n", menseki);
ch = getchar();
ch = getchar();
return 0;
}
•13
キーボードからの
読み込み部分
出力部分
計算部分
終了確認のため,
キーボードからの読み込み
実行手順
• 実行すると,新しいウインドウが現れるので,
teihen, takasa の値をキーボードから与える
•14
例えば
teihen = 5
takasa = 3
menseki の値が
表示されるので,
確認したら
Enter キーを押す
プログラム実行順
•15
printf("teihen=");
scanf("%lf", &teihen);
menseki = teihen * takasa * 0.5;
printf("menseki = %f¥n", menseki);
メッセージ「teihen=」を表示
浮動小数データを読み込み
計算
計算結果を表示
終わり
printf("takasa=");
scanf("%lf", &takasa);
メッセージ「takasa=」を表示
浮動小数データを読み込み
プログラムとデータ
•16
メモリ
takasa
menseki
3つの変数
scanf("%lf", &teihen);
teihen
①
浮動小数データを読み込み
printf("menseki = %f¥n", menseki);
④
計算結果を表示
menseki = tekhen * takasa * 0.5;
③
計算
scanf("%lf", &takasa);
②
浮動小数データを読み込み
変数宣言
• 変数は,データを入れるための容器
• 変数宣言とは,変数を使うために,名前と型を書
いて,変数の使用をコンピュータに伝えること
•17
double teihen;
double takasa;
double menseki;
浮動小数データで,変数名は「teihen」
浮動小数データで,変数名は「takasa」
浮動小数データで,変数名は「menseki」
「double」とは,浮動小数データという
意味.
代入文
• 計算結果(teihen*takasa*0.5)を,変数 menseki
に格納する(このことを,代入という)
• 「=」は,変数に計算結果等を格納するという意
味.「両辺が等しい」という意味ではない
•18
menseki = teihen*takasa*0.5;
入力,出力とは
• 入力
データの読み込み
(読み込まれたデータは変数に格納される)
• 出力
メッセージの表示
データの表示
(変数に格納されたデータが表示される)
•19
入力文
• 入力文とは,データを読み込むための文
• 書式と読み込むべき変数名を書く
• 書式: 浮動小数データを読み込む場合,書式は
「%lf」 と書くことになっている
• 変数名: 変数名の前には「&」を付けること
•20
scanf("%lf", &teihen);
書式
読み込むべき変数名
&
いろいろな入力
•21
double x;
scanf( "%lf¥n", &x );
double a;
double b;
scanf( "%lf¥n", &a );
scanf( "%lf¥n", &b );
浮動小数の変数
x への入力
浮動小数の変数
a と b への入力
出力文
• 出力文とは,データとメッセージを表示するため
の文
• 書式と表示すべき変数名を書く
• 書式: 浮動小数データを表示する場合,書式は
「%f」 と書くことになっている
• 変数名: 変数名の前には「&」を付けない (scanf と
は違う)
•22
printf("menseki=%f¥n", menseki);
書式
表示すべき変数名
いろいろな出力
•23
printf( "x= ?" );
メッセージ 「x= ?」
の表示
printf( "x= %f" );
printf( "y= %f" );
「x= 10.0000
y= 20.0000」
のように,メッセージ
と変数の中身を並べて
画面に表示
¥n
• 次の行に進め(改行)という指示
• printf 文などの中で用いる
•24
printf("menseki=%f¥n",
menseki);
浮動小数データの使い方
• 変数宣言:
double teihen;
double takasa;
double menseki;
• 書式:
%lf - scanf(入力)での書式
%f - printf (出力)での書式
•25
例題3.sin 関数による三角形の面積
• 三角形の2辺の長さ a, b とその挟角 thetaを読み
込んで,面積 S を計算するプログラムを作る
• 面積を求めるために,sin関数を使う
• 円周率π=3.14159 とする
•26
sin
2
1
abS =
#include "stdio.h"
#include <math.h>
#pragma warning(disable:4996)
int main()
{
double a;
double b;
double theta;
double S;
int ch;
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 );
ch = getchar();
ch = getchar();
return 0;
}
計算
実行ウインドウへの表示
終了確認のため,
キーボードからの読み込み
キーボードからの
データ読み込みを
行っている部分
•27
標準ライブラリ関数
• 指数,対数,平方根
• exp 指数関数(eを底とする指数zの累乗,eのz乗)
• log 対数関数(底をeとする自然対数の計算)
• sqrt 平方根
• 三角関数
• acos 逆コサイン
• asin 逆サイン
• atan 逆タンジェント
• cos コサイン
• sin サイン
• tan タンジェント
• その他
• fabs 絶対値
• fmod(x,y) 浮動小数データの剰余
• pow(x,y) べき乗(xのy乗)
•28
いろいろな計算
• y = sin( x );
•29
y = sqrt( x );
d = sqrt( ( x * x ) + ( y * y ) );
sin x を計算し,y に格納
x を計算し,y に格納
√
x
2
+ y
2
を計算し,d に格納
√
ライブラリ関数の利用
• 計算に関するライブラリ関数を利用するには,
• 次のように,プログラムの先頭部分に書くこと
•30
#include <math.h>
#include "stdio.h"
#include <math.h>
#pragma warning(disable:4996)
int main()
{
double a;
double b;
double theta;
double S;
int ch;
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 );
ch = getchar();
ch = getchar();
return 0;
}
「度」から「ラジアン」への変換
三角関数ではラジアンを
単位とする
180.0 の「.0」には意味がある
(浮動小数での計算を行うべき
であることをコンピュータに教えている)
•31