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の累乗,ez乗)
log 対数関数(底をeとする自然対数の計算)
sqrt 平方根
三角関数
acos 逆コサイン
asin 逆サイン
atan 逆タンジェント
cos コサイン
sin サイン
tan タンジェント
その他
fabs 絶対値
fmod(x,y) 浮動小数データの剰余
pow(x,y) べき乗(xy乗)
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