当日のOHP資料です。
次のファイルを、c:\usr\cに保存する。
Download : sample-001.c ( SJIS 版 )
/*
* 2013/06/28 sample-001.c
*/
/*
* 色々な型
*
* 利用方法
* コンパイル
* cc -Ic:\usr\c\include -o sample-001.exe sample-001.c
* 実行
* sample-001
*/
#include <stdio.h>
#include "s_input.h"
#include "s_print.h"
/*
* main 関数
*/
int main ( int argc, char *argv[] ) {
/*
* 整数と文字の扱い
*/
s_print_string ( "文字の '9' に 1 を加えると「" );
s_print_char ( '9' + 1 );
s_print_string ( "」になります。\n" );
s_print_string ( "整数値の 9 に 1 を加えると「" );
s_print_int ( 9 + 1 );
s_print_string ( "」になります。\n" );
/*
* 整数と浮動小数点数の違い
*/
s_print_string ( "13 を 2 で割ると「" );
s_print_int ( 13 / 2 );
s_print_string ( "」になります。\n" );
s_print_string ( "13.0 を 2.0 で割ると" );
s_print_double ( 13.0 / 2.0 );
s_print_string ( "」になります。\n" );
return 0;
}
C:\usr\c>sample-001 文字の '9' に 1 を加えると「:」になります。 整数値の 9 に 1 を加えると「10」になります。 13 を 2 で割ると「6」になります。 13.0 を 2.0 で割ると6.500000」になります。 C:\usr\c>
Download : sample-002.c ( SJIS 版 )
/*
* 2013/06/28 sample-002.c
*/
/*
* 関数の例
*
* 利用方法
* コンパイル
* cc -Ic:\usr\c\include -o sample-002.exe sample-002.c
* 実行
* sample-002
*/
#include <stdio.h>
#include "s_input.h"
#include "s_print.h"
/*
* int minus_int ( int number )
* int number 符号を反転したい整数の値
* return number の値の符号を変換
*
* minus_int を int を引数に int を返す関数
*/
int minus_int ( int number ) {
return number * (-1); /* 元の数に (-1) をかけると符号が反転する */
}
/*
* void print_message ( int number );
* int number;
* 処理結果を出力する
*/
void print_message ( int number ) {
s_print_int ( number );
s_print_string ( " の符号を反転すると " );
s_print_int ( minus_int ( number ) );
s_print_string ( " になります。\n" );
}
/*
* main 関数
*/
int main ( int argc, char *argv[] ) {
print_message ( 12 );
print_message ( 0 );
print_message ( -12 );
return 0;
}
C:\usr\c>sample-002 12 の符号を反転すると -12 になります。 0 の符号を反転すると 0 になります。 -12 の符号を反転すると 12 になります。 C:\usr\c>
Download : sample-003.c ( SJIS 版 )
/*
* 2013/06/28 sample-003.c
*/
/*
* 関数の例
*
* 利用方法
* コンパイル
* cc -Ic:\usr\c\include -o sample-003.exe sample-003.c
* 実行
* sample-003
*/
#include <stdio.h>
#include "s_input.h"
#include "s_print.h"
/*
* double minus_double ( double number )
* double number 符号を反転したい浮動小数点数の値
* return number の値の符号を変換
*
* minus_double を double を引数に double を返す関数
*/
double minus_double ( double number ) {
return number * (-1.0); /* 元の数に (-1.0) をかけると符号が反転する */
}
/*
* void print_message ( double number );
* double number;
* 処理結果を出力する
*/
void print_message ( double number ) {
s_print_double ( number );
s_print_string ( " の符号を反転すると " );
s_print_double ( minus_double ( number ) );
s_print_string ( " になります。\n" );
}
/*
* main 関数
*/
int main ( int argc, char *argv[] ) {
print_message ( 12.0 );
print_message ( 0.0 );
print_message ( -12.0 );
return 0;
}
C:\usr\c>sample-003 12.000000 の符号を反転すると -12.000000 になります。 0.000000 の符号を反転すると -0.000000 になります。 -12.000000 の符号を反転すると 12.000000 になります。 C:\usr\c>
Download : sample-004.c ( SJIS 版 )
/*
* 2013/06/28 sample-004.c
*/
/*
* 関数の例
*
* 利用方法
* コンパイル
* cc -Ic:\usr\c\include -o sample-004.exe sample-004.c -lm
* 実行
* sample-004
*/
#include <stdio.h>
/* sqrt/sin を利用するために、必要 */
/* コンパイルする場合に -lm を追加する必要がある事に注意 */
#include <math.h>
#include "s_input.h"
#include "s_print.h"
/*
* main 関数
*/
int main ( int argc, char *argv[] ) {
s_print_string ( "円周率(π)は " );
s_print_double ( M_PI ); /* math.h 内で定義 */
s_print_string ( " です。\n" );
s_print_string ( "2.0 の平方根は " );
s_print_double ( sqrt ( 2.0 ) );
s_print_string ( " です。\n" );
s_print_string ( "π/6 の正弦は " );
s_print_double ( sin ( M_PI/6.0 ) );
s_print_string ( " です。\n" );
return 0;
}
C:\usr\c>sample-004 円周率(π)は 3.141593 です。 2.0 の平方根は 1.414214 です。 π/6 の正弦は 0.500000 です。 C:\usr\c>
/*
* 2013/06/28 sample-001.c
*/
/*
* 色々な型
*
* 利用方法
* コンパイル
* cc -Ic:\usr\c\include -o sample-001.exe sample-001.c
* 実行
* sample-001
*/
#include <stdio.h>
#include "s_input.h"
#include "s_print.h"
/*
* main 関数
*/
int main ( int argc, char *argv[] ) {
/*
* 整数と文字の扱い
*/
s_print_string ( "文字の '9' に 1 を加えると「" );
s_print_char ( '9' + 1 );
s_print_string ( "」になります。\n" );
s_print_string ( "整数値の 9 に 1 を加えると「" );
s_print_int ( 9 + 1 );
s_print_string ( "」になります。\n" );
/*
* 整数と浮動小数点数の違い
*/
s_print_string ( "13 を 2 で割ると「" );
s_print_int ( 13 / 2 );
s_print_string ( "」になります。\n" );
s_print_string ( "13.0 を 2.0 で割ると" );
s_print_double ( 13.0 / 2.0 );
s_print_string ( "」になります。\n" );
return 0;
}
/*
* 2013/06/28 sample-004.c
*/
/*
* 関数の例
*
* 利用方法
* コンパイル
* cc -Ic:\usr\c\include -o sample-004.exe sample-004.c -lm
* -lm が追加されているが、これは
* c:/mingw/lib/libm.a
* の中身を調べなさい (必要なら、その中の一部
* を利用する )。
* sin/cos/etc.. は libm.a の中にある
* 実行
* sample-004
*/
#include <stdio.h>
/* sqrt/sin を利用するために、必要 */
/* コンパイルする場合に -lm を追加する必要がある事に注意 */
#include <math.h>
#include "s_input.h"
#include "s_print.h"
/*
* main 関数
*/
int main ( int argc, char *argv[] ) {
s_print_string ( "円周率(π)は " );
s_print_double ( M_PI ); /* math.h 内で定義 */
s_print_string ( " です。\n" );
s_print_string ( "3.0 の平方根は " );
s_print_double ( sqrt ( 3.0 ) );
s_print_string ( " です。\n" );
s_print_string ( "π/6 の正弦は " );
s_print_double ( sin ( M_PI/6.0 ) );
s_print_string ( " です。\n" );
return 0;
}
/*
* CDATE FILENAME
*/
/*
* 関数の例
*
* 利用方法
* コンパイル
* cc -Ic:\usr\c\include -o BASENAME.exe FILENAME
* 実行
* BASENAME
*/
#include <stdio.h>
#include "s_input.h"
#include "s_print.h"
/*
* int minus_int ( int number )
* int number 符号を反転したい整数の値
* return number の値の符号を変換
*
* minus_int を int を引数に int を返す関数
*/
int minus_int ( int number ) {
/*
return 式;
は、
式の値を計算し、ここで、関数を終了し、
関数の値(返り値)として、その式の値を割り当てる
という事をする。
もし、ある(式の)値を、関数の値としたければ、
return (式の)値
とすればよい。
*/
return number * (-1); /* 元の数に (-1) をかけると符号が反転する */
/*
関数の値として、number の符号をかえたものをかえしたい
なので
return numner * (-1);
としている。
*/
}
/*
int minus_int ( int number ) {
return number*(-1);
}
int 型の値を与えると、int 型の値を返す関数
int minus_int ( int );
-> プロトタイプ宣言(関数の型宣言)
*/
/*
* void print_message ( int number );
* int number;
* 処理結果を出力する
*/
void print_message ( int number ) {
s_print_int ( number );
s_print_string ( " の符号を反転すると " );
s_print_int ( minus_int ( number ) );
s_print_string ( " になります。\n" );
}
/*
* main 関数
*/
int main ( int argc, char *argv[] ) {
print_message ( 12 );
print_message ( 0 );
print_message ( -12 );
return 0;
}
#include <stdio.h>
#include "s_print.h"
/*
* 与えらえた数(整数型)の二倍を返す
* 名前は two_time_int
* 引数は int 型 一つ
* 結果は、 int 型
* 値は、引数の値の二倍
*/
int two_time_int ( int number ) { /* number 仮引数変数 */
return number * 2;
/* 引数で指定された number の二倍なので
それを計算する式 ( number * 2 ) をかけばよい*/
}
/*
* main
*/
int main ( int argc, char *argv[] ) {
s_print_string ( "123 の 2 倍は " );
s_print_int ( two_time_int ( 123 ) );
s_print_string ( "です。\n" );
}
#include <stdio.h>
#include "s_print.h"
/*
* 与えらえた二つの数(浮動小数点数型)の和返す。
* 名前は add_double
* 引数は double 型 二つ
* 結果は、 double 型
* 値は、二つの引数の値の和
*/
double add_double ( double a, double b ) {
return a + b;
}
/*
* main
*/
int main ( int argc, char *argv[] ) {
s_print_string ( "12.34 と 56.78 の和は " );
s_print_double ( add_double ( 12.34, 56.78 ) );
s_print_string ( "です。\n" );
}
#include <stdio.h>
#include "s_print.h"
/*
* 与えらえた二つの数(浮動小数点数型)の和返す。
* 名前は add_double
* 引数は double 型 二つ
* 結果は、 double 型
* 値は、二つの引数の値の和
*/
double add_double ( double a, double b ) {
return a + b;
}
/*
* main
*/
int main ( int argc, char *argv[] ) {
s_print_string ( "12.34 と 56.78 の和は " );
s_print_double ( 12.45 + 56.78 );
s_print_string ( "です。\n" );
s_print_string ( "11.11 と 22.22 の和は " );
s_print_double ( 11.11 + 22.22 );
s_print_string ( "です。\n" );
/*
f(12.34,56.78) = 12.45 + 56.78
f(11.11,22.22) = 11.11 + 22.22
f(X,Y) = X + Y
double f(double X, double X) {
return X + Y;
}
}
#include <stdio.h>
#include "s_print.h"
/*
* main
*/
int main ( int argc, char *argv[] ) {
if ( 0 ) { /* if 文の条件部分が 0 -> C 言語では不成立 */
printf ( "条件は成立したか ?\n" );
} else {
printf ( "条件は不成立だったか ?\n" );
}
return 0;
}
#include <stdio.h>
#include "s_print.h"
/*
* main
*/
int main ( int argc, char *argv[] ) {
if ( 1 ) { /* if 文の条件部分が 0でない -> C 言語では成立 */
printf ( "条件は成立したか ?\n" );
} else {
printf ( "条件は不成立だったか ?\n" );
}
return 0;
}
#include <stdio.h>
#include "s_print.h"
/*
* main
*/
int main ( int argc, char *argv[] ) {
s_print_string ( "「 1 < 2 」とは : " );
s_print_int ( 1 < 2 );
s_print_string ( "です。\n" );
s_print_string ( "「1 > 2」とは : " );
s_print_int ( 1 > 2 );
s_print_string ( "です。\n" );
/*
比較などの条件式は、一般に、成立する場合は 1 そうで
ない場合は 0 の整数値になる
*/
if ( 1 < 2 ) {
printf ( "条件は成立したか ?\n" );
} else {
printf ( "条件は不成立だったか ?\n" );
}
return 0;
}
#include <stdio.h>
#include "s_print.h"
/*
* main
*/
int main ( int argc, char *argv[] ) {
s_print_string ( "「 1 < 2 」とは : " );
s_print_int ( 1 < 2 );
s_print_string ( "です。\n" );
s_print_string ( "「1 > 2」とは : " );
s_print_int ( 1 > 2 );
s_print_string ( "です。\n" );
/*
比較などの条件式は、一般に、成立する場合は 1 そうで
ない場合は 0 の整数値になる
*/
if ( 1 + 1 ) { /* 1 + 1 = 2 これは 0 でないので真 */
printf ( "条件は成立したか ?\n" );
} else {
printf ( "条件は不成立だったか ?\n" );
}
if ( 1 - 1 ) { /* 1 - 1 = 0 これは 0 なので偽 */
printf ( "条件は成立したか ?\n" );
} else {
printf ( "条件は不成立だったか ?\n" );
}
return 0;
}
#include <stdio.h>
#include "s_print.h"
/*
* 整数 n に対して 階乗 n! を計算する関数
* factrial
* を考える
*
* factrial(4) = 4! = 4 * 3 * 2 * 1 = 24
* factrial(6) = 6! = 6 * 5 * 4 * 3 * 2 * 1 = 720
* factrial(n) = n! = n * (n-1) * .. * 2 * 1
* [考えかた]
* factrial(n) = n! = n * (n-1) * .. * 2 * 1
* = n * [ (n-1) * .. * 2 * 1 ]
* = n * factrial(n-1)
* 一般的には、
* n * factrial(n-1) (n>1)
* factrial(n) = {
* 1 (n=1)
* と「再帰的に定義」すれば(..を使わずに済むので..)良い
*
* [関数の定義]
* 関数名 : factrial
* 引数 : int 型を一つ
* 返り値 : int
* 値は、引数で与えられた数の階乗となる
*/
int factrial(int n) {
if ( n < 2 ) { /* n が 2 より小さい */
return 1; /* 1! = 0! = 1 */
} else { /* n > 1 の時 */
/* n! = n * (n-1)! という性質から */
return n * factrial ( n - 1 );
}
}
/*
* main
*/
int main ( int argc, char *argv[] ) {
s_print_string ( "6! = " );
s_print_int ( factrial ( 6 ) );
s_print_newline();
return 0;
}
#include <stdio.h>
#include "s_input.h"
#include "s_print.h"
/*
* main
*/
int main ( int argc, char *argv[] ) {
/*
* 目的 :
* 一行分の文字列を入力して、小文字を大文字に
* 変換して出力
*/
/*
step 1:
1 文字入力して、1 文字出力する
*/
s_print_char ( s_input_char() );
/* ^^^^^^^^^^^^^^ 文字入力 */
/* =========== 文字出力 */
return 0;
}
#include <stdio.h>
#include "s_input.h"
#include "s_print.h"
/*
* main
*/
int main ( int argc, char *argv[] ) {
/*
* 目的 :
* 一行分の文字列を入力して、小文字を大文字に
* 変換して出力
*/
/*
step 2:
1 文字入力して、大文字にして 1 文字出力する
「小文字を大文字する」
小文字 'a' 〜 'z' : これがこの順にならんでいる
'a' は 'a' + 0
'b' は 'a' + 1
..
'z' は 'a' + 26
大文字 ’A’ 〜 'Z'
'A' は 'A' + 0
'B' は 'A' + 1
..
'Z' は 'A' + 26
もし、
'a' を 'A' にしたければ、
'a' - 'a' + 'A' = 'A' <*>
'b' を 'B' にしたければ、
'b' - 'b' + 'B' = 'B'
'b' - ('a'+1) + ('A'+1) = 'B'
'b' - 'a'-1 + 'A'+1 = 'B'
'b' - 'a' + 'A' = 'B' <**>
...
'z' を 'Z' にしたければ、
'z' - 'a' + 'A'
一般に、小文字を大文字にするには、
- 'a' + 'A'
とすればよい
*/
s_print_char ( s_input_char() - 'a' + 'A' );
return 0;
}
#include <stdio.h>
#include "s_input.h"
#include "s_print.h"
/*
* char to_upper_case ( char ch )
* char ch : 大文字にしたい文字のコード
* return : ch が小文字なら大文字、それいがいはかえない
*/
char to_upper_case ( char ch ) {
if ( 'a' <= ch && ch <= 'z' /* 小文字の時 */ ) {
/* 小文字 : 'a' 〜 'z'
* ch が小文字ならば 'a' <= ch <= 'z'
*/
return ch - 'a' + 'A'; /* 大文字に変換 */
} else {
return ch; /* そのまま */
}
}
/*
* main
*/
int main ( int argc, char *argv[] ) {
/*
* 目的 :
* 一行分の文字列を入力して、小文字を大文字に
* 変換して出力
*/
/*
step 3:
1 文字入力して、正く大文字にして 1 文字出力する
*/
s_print_char ( to_upper_case ( s_input_char() ) );
return 0;
}
#include <stdio.h>
#include "s_input.h"
#include "s_print.h"
/*
* char to_upper_case ( char ch )
* char ch : 大文字にしたい文字のコード
* return : ch が小文字なら大文字、それいがいはかえない
*/
char to_upper_case ( char ch ) {
if ( 'a' <= ch && ch <= 'z' /* 小文字の時 */ ) {
/* 小文字 : 'a' 〜 'z'
* ch が小文字ならば 'a' <= ch <= 'z'
*/
return ch - 'a' + 'A'; /* 大文字に変換 */
} else {
return ch; /* そのまま */
}
}
/*
*
* 何かをするには、まず、一文字取り出す必要がある
* その文字は既に、入力済として、話を考える
* その入力されている文字を next とする
*/
void print_upper_line ( char next ) {
if ( next == '\n' ) { /* 次の文字が改行 */
/* 行の終わりまで読み込んでおり、すべての仕事は
おわっている */
s_print_newline(); /* 最後に改行をだして御仕舞い */
} else { /* まだおわっていない */
/* まず、まだ、出力してない next を大文字して出力 */
s_print_char ( to_upper_case ( next ) );
/* 次の仕事に行くには、準備として、一文字読む必要がある*/
print_upper_line ( getchar() );
/* s_intput_char() でなく getchar() を使うは
実は、getchar() は、空白や、改行を読み飛ばすので
*/
}
}
/*
* main
*/
int main ( int argc, char *argv[] ) {
/*
* 目的 :
* 一行分の文字列を入力して、小文字を大文字に
* 変換して出力
*/
/*
step 4:
一行分の文字の入力
「一行」は、「いくつか(0を含む)の文字」の後に「改行がきたもの
=> 改行がくるまでは、繰り返す、
改行がきたら、終わり
行 =
改行
|
文字 行
何か =
if ( 改行 ) {
おわり
} else {
仕事をして
次をする (再帰呼出し)
}
*/
/*
* 仕事は、全て、print_upper_line にまかせてよいが
一文字だけは先に読んで、渡してあげる必要があるので、
getchar() を呼ぶ
*/
print_upper_line ( getchar() );
return 0;
}
#include <stdio.h>
#include "s_input.h"
#include "s_print.h"
/*
二分法をつかって、答のある領域をせばめて行く
条件
関数 f(x) が与えられていて
f(x') = 0
となる x' が一つ欲い
ここで、更に、a < b があたえられていて
f(a) < 0
f(b) > 0
とする。
すると、
区間 [a,b] の中に x' が少くてもひとつ
# 連続関数の性質(中間値の定理)と、
# 実数の連続性
いま、m = (a+b)/2 とする。
f(m)>=0
か
f(m)<0
のいずれか
f(m)>=0 x' は [a,m] にある
f(m)<0 x' は [m,b] にある
なので、
この作業を繰り返すと、x' の範囲が縮まる
f(x)=x^3-a
の根が
a の三乗根
*/
#define EPSIRON 0.00000001 /* 十分に小さい幅 */
double cube_root_sub ( double a, double min, double mid, double max ) {
/*
欲いのは、a > 0 の三乗根
いま、候補としては、min と max の間に答があり
f(min) < 0 < f(max) となっているとする。
また、mid は (min+max)/2 とする。
*/
if ( max - min < EPSIRON /* 区間が十分に狭い */ ) {
/* 区間の中点が答(にとっても近いので、それ)としてよい */
return mid; /* mid には、すでに min と max の中点が入っている */
} else {
/* まだ、区間を狭くする必要がある */
/* f(mid) の符号をしらべて区間の長さを半分にする */
/* f(x) = x*x*x - a なので.. */
if ( mid*mid*mid - a < 0.0 /* f(mid) < 0 */ ) {
/* 答は、mid と max の間にある */
return cube_root_sub ( a, mid, (mid+max)/2.0, max );
/* mid が、あたらしい min になり、
あたらしい min は、今の min と max の中点
*/
} else {
/* 答は、min と mid の間にある */
return cube_root_sub ( a, min, (min+mid)/2.0, mid );
}
}
}
/*
* main
*/
int main ( int argc, char *argv[] ) {
/*
3 の立方根
*/
s_print_string ( "3 の立方根は " );
s_print_double ( cube_root_sub ( 3.0, 1.0, (1.0+3.0)/2.0, 3.0 ) );
/*
3 の立方根は、3 が 1 より大きいので、1 より大きい
3 の立方根は、3 が 1 より大きいので、3 よりちいさい
*/
s_print_string ( "です。\n" );
}
Download : 20130628-01.c ( SJIS 版 )
/*
* 課題 20130628-01
*
* 2013/06/28 20130628-01-QQQQ.c
*
* キーボードから一行分の文字列を読込み、その中の小文字を全て大文字にする
*/
#include <stdio.h>
#include "s_input.h"
#include "s_print.h"
/*
* char to_upper_case ( char ch )
* char ch 大文字にしたい文字の文字コード
* return ch が小文字ならば大文字にした文字コード、そうでなければ元の値
*/
char to_upper_case ( char ch ) {
if ( 'a' <= ch && ch <= 'z' ) { /* もし ch が小文字ならば */
/* 対応する大文字に変換して返す */
/*
** この部分を完成させなさい
*/
} else { /* そうでなければ.. */
return ch; /* 入力された文字コードをそのまま返す */
}
}
/*
* void print_upper_line ( char next )
* char next 次に処理すべき文字 (文字を先読みする)
*/
void print_upper_line ( char next ) {
if ( next == '\n' ) { /* 次の処理すべき文字が改行ならば */
s_print_newline(); /* 改行を出力して終わり */
} else { /* 改行でないならば.. */
/* その文字を大文字にして出力し.. */
s_print_char ( to_upper_case ( next ) );
/* 次の文字を読込み、処理を続ける */
/* 文字の読込みには getchar() を使う */
/*
** この部分を完成させなさい
*/
}
}
/*
* main
*/
int main( int argc, char *argv[] )
{
/* 最初の文字を読込み、関数を読み込む */
print_upper_line ( getchar() );
/* s_input_char() でなく getchar() を利用するのは、
* s_input_char() が空白や改行を読み捨てるようになっているため
* 今回は、改行も読み出したいので getchar() を利用する
*/
return 0;
}
ABC123abc456UvW
C:\usr\c\> 20130628-01-QQQQ AABBCC112233aAbBcC445566UUvVWW C:\usr\c\>
Download : 20130628-02.c ( SJIS 版 )
/*
* 課題 20130628-02
*
* 2013/06/28 DATE-02-QQQQ.c
*
* 一つ浮動小数点数値をキーボードから入力し、その立方根を出力する
* 手段としては、「二分法」を使う
*/
#include <stdio.h>
#include "s_input.h"
#include "s_print.h"
/*
*
*/
#define EPSILON 0.00000001 /* 誤差幅 */
/*
* double regula_falsi_cubic_root ( double a, double min, double mid, double \
max )
* double a 立方根の元になる数(正を仮定している)
* double min, max 根の入る区間の範囲
* double mid min と mid の中点
* return a 立方根
* 二分法により、a の立方根を求める
* 0 < min < a の立方根 < max
*/
double regula_falsi_cubic_root ( double a, double min, double mid, double \
max ) {
if ( max - min < EPSILON ) { /* 十分に精度が上った */
return mid; /* 中点の値を答として返す */
} else { /* まだ、狭める必要がある */
/* min が解のどちら側にあるかを調べ.. それに併せて区間を調整 */
/* f(x)=x^3-a */
if ( mid * mid * mid - a < 0.0 ) { /* f(mid) の符号を確認 */
/* 解の左にあった */
/*
** この部分を完成させなさい
*/
} else { /* 解の右にあった */
return regula_falsi_cubic_root ( a, min, (min+mid)/2.0, mid );
}
}
}
/*
* double cubic_root ( double a )
* double a 立方根の元になる数
* return a 立方根
* a の立方根を求めて結果として返すが、
* 計算の基本は、regula_falsi_cubic_root にまかせる
* ここでは、計算の正規化を行う
*/
double cubic_root ( double a ) {
if ( a < 0.0 ) { /* a が負の数ならば.. */
/* -a の立方根を計算し、負数を返す */
/*
** この部分を完成させなさい
*/
} else if ( a < 1.0 ) { /* a が 1.0 以下なら */
/*
** この部分を完成させなさい
*/
/* 立方根は a と 1.0 の間にある */
} else { /* そうでなければ.. */
return regula_falsi_cubic_root ( a, 1.0, (1.0+a)/2.0, a );
/* 立方根は 1.0 と a の間にある */
}
}
/*
* void print_cubic_root ( double a )
* double a 立方根を計算する数
* 元の数と、立方根を出力する
*/
void print_cubic_root ( double a ) {
s_print_double ( a );
s_print_string ( " の立方根は " );
/*
** この部分を完成させなさい
*/
s_print_string ( " です。\n" );
}
/*
* main
*/
int main( double argc, char *argv[] )
{
s_print_string ( "実数値を一つ入力してください : " );
print_cubic_root ( s_input_double() );
return 0;
}
12.34
C:\usr\c\> 20130628-02-QQQQ 実数値を一つ入力してください : 12.34 12.340000 の立方根は 2.310850 です。 C:\usr\c\>