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