当日のOHP資料です。
Download : sample-001.c ( SJIS 版 )
/*
* 2012/06/29 sample-001.c
*/
#include <stdio.h>
#include "s_print.h" /* 出力のために必要 */
/*
* main
*/
int main(void)
{
s_print_double ( 2.3 ); /* 浮動小数点数の表示 */
s_print_newline(); /* 改行 */
return 0;
}
/*
*
*/
C:\usr\c>sample-001 2.300000 C:\usr\c>
Download : sample-002.c ( SJIS 版 )
/*
* 2012/06/29 sample-002.c
*/
#include <stdio.h>
#include "s_print.h"
/*
* 浮動小数点数の引数宣言
*/
double wa ( double a, double b ) {
/* 浮動小数点数の引数の型は double */
s_print_double ( a );
s_print_string ( " と " );
s_print_double ( b );
s_print_string ( " の和は " );
s_print_double ( a + b ); /* 浮動小数点の和の計算 */
s_print_string ( " です。" );
s_print_newline(); /* 改行 */
return a + b; /* 計算結果を値として返す */
}
/*
* main
*/
int main(void)
{
wa ( 2.3, 4.5 ); /* 関数の値は無視してもよいし.. */
s_print_double ( 1.0 + wa ( -9.8, 2.1 ) * 10000.0 );
/* 式の中で利用する事もでみる */
s_print_string ( "は、返ってきた値を 10000 倍して 1 を加えた結果\n" );
return 0;
}
/*
*
*/
C:\usr\c>sample-002 2.300000 と 4.500000 の和は 6.800000 です。 -9.800000 と 2.100000 の和は -7.700000 です。 -76999.000000は、返ってきた値を 10000 倍して 1 を加えた結果 C:\usr\c>
Download : sample-003.c ( SJIS 版 )
/*
* 2012/06/29 sample-003.c
*/
#include <stdio.h>
#include "s_print.h"
#include "s_input.h" /* 入力のために必要 */
/*
* 2 倍を表示
*/
void doubleDouble ( double number ) {
s_print_double ( number );
s_print_string ( "の 2 倍は " );
s_print_double ( 2.0 * number ); /* 数値を二倍して出力 */
s_print_string ( " です。" );
s_print_newline();
}
/*
* main
*/
int main(void)
{
s_print_string ( "実数値を入力してください : " );
doubleDouble ( s_input_double() ); /* キーボードから実数値を入力 */
return 0;
}
/*
*
*/
123.456
C:\usr\c>sample-003< sample-003.in 実数値を入力してください : 123.456000 123.456000の 2 倍は 246.912000 です。 C:\usr\c>
Download : sample-004.c ( SJIS 版 )
/*
* 2012/06/29 sample-004.c
*/
#include <stdio.h>
#include <float.h> /* DBL_MIN, DBL_MAX */
#include "s_print.h"
/*
* main
*/
int main(void)
{
s_print_string ( "DBL_MIN=" );
s_print_doublee ( DBL_MIN );
s_print_string ( ", DBL_MAX=" );
s_print_doublee ( DBL_MAX );
s_print_newline();
return 0;
}
/*
*
*/
C:\usr\c>sample-004 DBL_MIN=2.225074e-308, DBL_MAX=1.797693e+308 C:\usr\c>
Download : sample-005.c ( SJIS 版 )
/*
* 2012/06/29 sample-005.c
*/
#include <stdio.h>
#include "s_print.h"
/*
* error_check
*/
void error_check ( double a, double b ) {
s_print_double ( a );
s_print_string ( " と " );
s_print_double ( b );
s_print_string ( " は、" );
if ( a == b ) { /* 二つの浮動小数点数を比較するのは危険 */
s_print_string ( "等しいです\n" );
} else {
s_print_string ( "等しくないです\n" );
}
}
/*
* main
*/
int main(void)
{
error_check ( 1.0, 1.0 );
error_check ( 1.0-0.7, 0.3 );
error_check ( 1.001,1.002 );
error_check ( 1.000000000001,1.000000000002 );
return 0;
}
/*
*
*/
C:\usr\c>sample-005 1.000000 と 1.000000 は、等しいです 0.300000 と 0.300000 は、等しくないです 1.001000 と 1.002000 は、等しくないです 1.000000 と 1.000000 は、等しくないです C:\usr\c>
Download : sample-006.c ( SJIS 版 )
/*
* 2012/06/29 sample-006.c
*/
#include <stdio.h>
#include "s_print.h"
/*
* error_check_long
*/
void error_check_long ( double a, double b ) {
s_print_doublel ( a ); /* 長い形式の出力 */
s_print_string ( " と " );
s_print_doublel ( b ); /* 長い形式の出力 */
s_print_string ( " は、" );
if ( a == b ) { /* 二つの浮動小数点数を比較するのは危険 */
s_print_string ( "等しいです\n" );
} else {
s_print_string ( "等しくないです\n" );
}
}
/*
* main
*/
int main(void)
{
error_check_long ( 1.0, 1.0 );
error_check_long ( 1.0-0.7, 0.3 );
error_check_long ( 1.001,1.002 );
error_check_long ( 1.000000000001,1.000000000002 );
return 0;
}
/*
*
*/
C:\usr\c>sample-006 1.00000000000000000000 と 1.00000000000000000000 は、等しいです 0.30000000000000004441 と 0.29999999999999998890 は、等しくないです 1.00099999999999988987 と 1.00200000000000000178 は、等しくないです 1.00000000000100008890 と 1.00000000000199995576 は、等しくないです C:\usr\c>
Download : sample-007.c ( SJIS 版 )
/*
* 2012/06/29 sample-007.c
*/
#include <stdio.h>
#include <math.h> /* fabs に必要 */
#include "s_print.h"
/*
* error_check_with_epsilon
*/
#define EPSILON (0.00000001) /* 最小誤差を(自分で)决める */
void error_check_with_epsilon ( double a, double b ) {
s_print_double ( a ); /* 長い形式の出力 */
s_print_string ( " と " );
s_print_double ( b ); /* 長い形式の出力 */
s_print_string ( " は、" );
if ( fabs ( a - b ) < EPSILON ) { /* 差の絶対値を最小誤差と比較 */
s_print_string ( "等しいです\n" );
} else {
s_print_string ( "等しくないです\n" );
}
}
/*
* main
*/
int main(void)
{
error_check_with_epsilon ( 1.0, 1.0 );
error_check_with_epsilon ( 1.0-0.7, 0.3 );
error_check_with_epsilon ( 1.001,1.002 );
error_check_with_epsilon ( 1.000000000001,1.000000000002 );
/* 1.000000000001 と 1.000000000002 の差は EPSILON より小さい */
return 0;
}
/*
*
*/
C:\usr\c>sample-007 1.000000 と 1.000000 は、等しいです 0.300000 と 0.300000 は、等しいです 1.001000 と 1.002000 は、等しくないです 1.000000 と 1.000000 は、等しいです C:\usr\c>
Download : sample-008.c ( SJIS 版 )
/*
* 2012/06/29 sample-008.c
*/
#include <stdio.h>
#include "s_print.h"
/*
* fact
*/
double fact ( int n ) {
if ( n > 0 ) {
return fact ( n - 1 ) * n;
} else {
return 1.0;
}
}
/*
* sum_1_n ( n ) = 1/1! + 1/2! + .. + 1/n!
*/
double sum_1_n ( int n ) {
if ( n >= 0 ) {
return sum_1_n ( n - 1 ) + 1.0 / fact( n );
} else {
return 0.0;
}
}
/*
* sum_n_1 ( n ) = 1/n! + 1/(n-1)! + .. + 1/1!
*/
double sum_n_1_sub ( int n, double sum ) {
if ( n >= 0 ) {
return sum_n_1_sub ( n - 1, sum + 1.0 / fact( n ) );
} else {
return sum;
}
}
double sum_n_1 ( int n ) {
return sum_n_1_sub ( n, 0.0 );
}
/*
* main
*/
int main(void)
{
s_print_string ( "1 to 1000 = " );
s_print_doublel ( sum_1_n ( 1000 ) );
s_print_newline();
s_print_string ( "1000 to 1 = " );
s_print_doublel ( sum_n_1 ( 1000 ) );
s_print_newline();
return 0;
}
/*
*
*/
C:\usr\c>sample-008 1 to 1000 = 2.71828182845904553488 1000 to 1 = 2.71828182845904509080 C:\usr\c>
Download : sample-009.c ( SJIS 版 )
/*
* 2012/06/29 sample-009.c
*/
#include <stdio.h>
#include <math.h> /* exp に必要 */
#include "s_print.h"
/*
* main
*/
int main(void)
{
s_print_string ( "exp(" );
s_print_double ( 1.0 );
s_print_string ( ")=" );
s_print_doublel ( exp(1.0) );
s_print_newline();
return 0;
}
/*
*
*/
C:\usr\c>sample-009 exp(1.000000)= 2.71828182845904509080 C:\usr\c>
Download : sample-010.c ( SJIS 版 )
/*
* 2012/06/29 sample-010.c
*/
#include <stdio.h>
#include <math.h> /* sin, M_PI に必要 */
#include "s_print.h"
/*
* main
*/
int main(void)
{
s_print_string ( "sin(" );
s_print_double ( M_PI/4.0 ); /* M_PI は円周率 */
s_print_string ( ")=" );
s_print_double ( sin( M_PI/4.0 ) );
s_print_newline();
s_print_string ( "sin^2(" );
s_print_double ( M_PI/4.0 );
s_print_string ( ")=" );
s_print_double ( sin( M_PI/4.0 ) * sin( M_PI/4.0 ) );
s_print_newline();
return 0;
}
/*
*
*/
C:\usr\c>sample-010 sin(0.785398)=0.707107 sin^2(0.785398)=0.500000 C:\usr\c>
Download : sample-011.c ( SJIS 版 )
/*
* 2012/06/29 sample-011.c
*/
#include <stdio.h>
#include <math.h> /* 数学関数を利用する場合はこれを追加する */
#include "s_print.h"
/*
*
*/
void plot_dot_sub ( double pos, double value ) {
if ( pos >= value ) { /* 印刷位置まだきた */
s_print_char ( '*' ); /* 「点」を出力 */
s_print_newline (); /* この行は終り */
} else {
s_print_char ( ' ' ); /* 空白を出力 */
plot_dot_sub ( pos + 1.0, value ); /* 続きを計算 */
}
}
/*
* 0 〜 79 で、 -1.0 〜 1.0 を表現するには、
* x | -1.0 〜 1.0 | x
* --+-------------+---------------
* y | 0 〜 79 | ( x + 1 ) * 40
*/
#define WIDTH 80.0 /* 一行の中のカラム数を定義 */
void plot_dot ( double value ) {
plot_dot_sub ( 0.0, ( value + 1.0 ) * WIDTH/2.0 );
}
/*
*
*/
void print_sin_curve( double top, double end, double step ) {
if ( top >= end ) {
/* 何もする必要はない */
} else {
plot_dot ( sin ( top ) ); /* sin は正弦関数 */
print_sin_curve ( top + step, end, step ); /* 次のステップを実行 */
}
}
/*
*
*/
int main ( void ) {
print_sin_curve( 0, 2 * M_PI, 0.1 );
return 0;
}
/*
*
*/
C:\usr\c>sample-011
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
C:\usr\c>
Download : sample-012.c ( SJIS 版 )
/*
* 2012/06/29 sample-012.c
*/
#include <stdio.h>
#include "s_print.h"
#include "s_input.h"
/*
* 二分法による平方根の計算
*
*/
#define EPSILON (0.00000001) /* 最小誤差を(自分で)决める */
double mysqrt_sub ( double min, double max, double mid, double number ) {
if ( max - min < EPSILON ) {
/*
* 十分に精度が得られたので、その結果を値とする
*/
return mid;
} else if ( mid * mid - number < 0.0 ) {
/*
* 答は mid と max の間にある
*/
return mysqrt_sub ( mid, max, (mid+max)/2.0, number );
} else {
/*
* 答は min と mid の間にある
*/
return mysqrt_sub ( min, mid, (min+mid)/2.0, number );
}
}
double mysqrt ( double number ) {
if ( number > 1.0 ) {
/*
* n > 1.0 なら
* 0.0 < mysqrt(n) < n
*/
return mysqrt_sub ( 0.0, number, number/2.0, number );
} else {
/*
* n < 1.0 なら
* 0.0 < mysqrt(n) < 1.0
*/
return mysqrt_sub ( 0.0, 1.0, 0.5, number );
}
}
/*
*
*/
void print_result ( double number ) {
s_print_double ( number );
s_print_string ( " の平方根は " );
s_print_double ( mysqrt ( number ) );
s_print_string ( " です。\n" );
}
/*
*
*/
int main ( void ) {
s_print_string ( "数値を入力してください : " );
print_result ( s_input_double() );
return 0;
}
/*
*
*/
2.0
C:\usr\c>sample-012< sample-012.in 数値を入力してください : 2.000000 2.000000 の平方根は 1.414214 です。 C:\usr\c>
Download : sample-013.c ( SJIS 版 )
/*
* 2012/06/29 sample-013.c
*/
#include <stdio.h>
#include "s_print.h"
/*
*
*/
void has_arg ( int n ) {
s_print_string ( "変数 n の値は " );
s_print_int ( n );
s_print_string ( " です\n" );
}
/*
*
*/
int main ( void ) {
has_arg ( 10 );
has_arg ( 30 );
return 0;
}
/*
*
*/
C:\usr\c>sample-013 変数 n の値は 10 です 変数 n の値は 30 です C:\usr\c>
Download : sample-014.c ( SJIS 版 )
/*
* 2012/06/29 sample-014.c
*/
#include <stdio.h>
#include "s_print.h"
/*
*
*/
int main ( void ) {
s_print_string ( "変数 n の値は " );
s_print_int ( 10 );
s_print_string ( " です\n" );
s_print_string ( "変数 n の値は " );
s_print_int ( 30 );
s_print_string ( " です\n" );
return 0;
}
/*
*
*/
C:\usr\c>sample-014 変数 n の値は 10 です 変数 n の値は 30 です C:\usr\c>
Download : sample-015.c ( SJIS 版 )
/*
* 2012/06/29 sample-015.c
*/
#include <stdio.h>
#include "s_print.h"
/*
*
*/
int main ( void ) {
int n; /* 変数 n の宣言 */
n = 10; /* 代入文 */
s_print_string ( "変数 n の値は " );
s_print_int ( n );
s_print_string ( " です\n" );
n = 30;
s_print_string ( "変数 n の値は " );
s_print_int ( n );
s_print_string ( " です\n" );
return 0;
}
/*
*
*/
C:\usr\c>sample-015 変数 n の値は 10 です 変数 n の値は 30 です C:\usr\c>
Download : sample-016.c ( SJIS 版 )
/*
* 2012/06/29 sample-016.c
*/
#include <stdio.h>
#include "s_print.h"
/*
*
*/
int assign ( int n ) {
/* n の値を参照 */
s_print_string ( "n = " );
s_print_int ( n );
s_print_newline();
n = 100; /* n に 100 を代入 */
s_print_string ( "n = " );
s_print_int ( n );
s_print_newline();
n = 1 + 2 + 3; /* n に 1 + 2 + 3 を代入 */
s_print_string ( "n = " );
s_print_int ( n );
s_print_newline();
}
/*
*
*/
int main ( void ) {
/*
* assign ( 5 )
*/
s_print_string ( "assgin ( 5 )\n" );
assign ( 5 );
/*
*
*/
s_print_newline();
/*
* assign ( 5 )
*/
s_print_string ( "assgin ( 10 )\n" );
assign ( 10 );
return 0;
}
/*
*
*/
C:\usr\c>sample-016 assgin ( 5 ) n = 5 n = 100 n = 6 assgin ( 10 ) n = 10 n = 100 n = 6 C:\usr\c>
Download : sample-017.c ( SJIS 版 )
/*
* 2012/06/29 sample-017.c
*/
#include <stdio.h>
#include "s_print.h"
/*
* なにやら複雑な計算をしたとする.. ( 二乗の計算しかしていないが.. )
*/
int any_complex_calculus ( int n ) {
s_print_string ( "Function Called !!\n" );
return n * n;
}
/*
*
*/
int assign_and_refer ( int n, int m ) {
/* n の値を参照 */
s_print_string ( "n = " );
s_print_int ( n );
s_print_newline();
n = any_complex_calculus ( m );
s_print_string ( "any_complex_calculus ( " );
s_print_int ( m );
s_print_string ( " ) = " );
s_print_int ( n );
s_print_newline();
s_print_string ( "any_complex_calculus ( " );
s_print_int ( m );
s_print_string ( " ) = " );
s_print_int ( n );
s_print_newline();
}
/*
*
*/
int function_call_again ( int n, int m ) {
/* n の値を参照 */
s_print_string ( "n = " );
s_print_int ( n );
s_print_newline();
s_print_string ( "any_complex_calculus ( " );
s_print_int ( m );
s_print_string ( " ) = " );
s_print_int ( any_complex_calculus ( m ) );
s_print_newline();
s_print_string ( "any_complex_calculus ( " );
s_print_int ( m );
s_print_string ( " ) = " );
s_print_int ( any_complex_calculus ( m ) );
s_print_newline();
}
/*
*
*/
int main ( void ) {
/*
* assign_and_refer ( 10, 5 );
*/
s_print_string ( "assign_and_refer ( 10, 5 )\n" );
assign_and_refer ( 10, 5 );
/*
*
*/
s_print_newline();
/*
* function_call_again ( 10, 5 );
*/
s_print_string ( "function_call_again ( 10, 5 )\n" );
function_call_again ( 10, 5 );
/*
*
*/
return 0;
}
/*
*
*/
C:\usr\c>sample-017 assign_and_refer ( 10, 5 ) n = 10 Function Called !! any_complex_calculus ( 5 ) = 25 any_complex_calculus ( 5 ) = 25 function_call_again ( 10, 5 ) n = 10 any_complex_calculus ( 5 ) = Function Called !! 25 any_complex_calculus ( 5 ) = Function Called !! 25 C:\usr\c>
Download : sample-018.c ( SJIS 版 )
/*
* 2012/06/29 sample-018.c
*/
#include <stdio.h>
#include "s_print.h"
/*
*
*/
void modify_with_self ( int n ) {
/* n の値を参照 */
s_print_string ( "n = " );
s_print_int ( n );
s_print_newline();
n = n * 2; /* 自分の値を利用して次の自分の値を求める事ができる */
s_print_string ( "n = " );
s_print_int ( n );
s_print_newline();
n = n - 10; /* 自分の値を利用して次の自分の値を求める事ができる */
s_print_string ( "n = " );
s_print_int ( n );
s_print_newline();
}
/*
*
*/
int main ( void ) {
/*
* modify_with_self ( 5 )
*/
s_print_string ( "modify_with_self ( 5 )\n" );
modify_with_self ( 5 );
/*
*
*/
s_print_newline();
/*
* modify_with_self ( -8 )
*/
s_print_string ( "modify_with_self ( -8 )\n" );
modify_with_self ( -8 );
/*
*
*/
return 0;
}
/*
*
*/
C:\usr\c>sample-018 modify_with_self ( 5 ) n = 5 n = 10 n = 0 modify_with_self ( -8 ) n = -8 n = -16 n = -26 C:\usr\c>
Download : sample-019.c ( SJIS 版 )
/*
* 2012/06/29 sample-019.c
*/
#include <stdio.h>
#include "s_print.h"
/*
*
*/
int assign_variable ( int n ) {
/* n の値を参照 */
s_print_string ( "n = " );
s_print_int ( n );
s_print_newline();
n = n - 1; /* 代入 */
s_print_string ( "n = " );
s_print_int ( n );
s_print_newline();
n = n - 1; /* 代入 */
s_print_string ( "n = " );
s_print_int ( n );
s_print_newline();
n = n - 1; /* 代入 */
s_print_string ( "n = " );
s_print_int ( n );
s_print_newline();
n = n - 1; /* 代入 */
s_print_string ( "n = " );
s_print_int ( n );
s_print_newline();
n = n - 1; /* 代入 */
s_print_string ( "n = " );
s_print_int ( n );
s_print_newline();
}
/*
*
*/
void function_argument ( int n ) {
/* n の値を参照 */
s_print_string ( "n = " );
s_print_int ( n );
s_print_newline();
if ( n > 0 ) {
function_argument ( n - 1 );
}
}
/*
*
*/
int main ( void ) {
/*
* assign_variable
*/
s_print_string ( "assign_variable ( 5 )\n" );
assign_variable ( 5 );
/*
*
*/
s_print_newline();
/*
* function_argument ( 5 );
*/
s_print_string ( "function_argument ( 5 )\n" );
function_argument ( 5 );
/*
*
*/
return 0;
}
/*
*
*/
C:\usr\c>sample-019 assign_variable ( 5 ) n = 5 n = 4 n = 3 n = 2 n = 1 n = 0 function_argument ( 5 ) n = 5 n = 4 n = 3 n = 2 n = 1 n = 0 C:\usr\c>
Download : sample-020.c ( SJIS 版 )
/*
* 2012/06/29 sample-020.c
*/
#include <stdio.h>
#include "s_print.h"
/*
* swap
*
* 値の交換 : 失敗
*/
int swap ( int n, int m ) {
s_print_string ( "n = " );
s_print_int ( n );
s_print_string ( ", m = " );
s_print_int ( m );
s_print_newline();
s_print_string ( "swap\n" );
n = m; /* この時点で n の値は失われる.. */
m = n; /* 思った通りにはならない .. */
s_print_string ( "n = " );
s_print_int ( n );
s_print_string ( ", m = " );
s_print_int ( m );
s_print_newline();
}
/*
*
*/
int main ( void ) {
/*
* swap ( 10, 15 )
*/
swap ( 10, 15 );
return 0;
}
/*
*
*/
C:\usr\c>sample-020 n = 10, m = 15 swap n = 15, m = 15 C:\usr\c>
Download : sample-021.c ( SJIS 版 )
/*
* 2012/06/29 sample-021.c
*/
#include <stdio.h>
#include "s_print.h"
/*
* swap
*
* 値の交換 : 成功
*/
int swap ( int n, int m, int w ) {
s_print_string ( "n = " );
s_print_int ( n );
s_print_string ( ", m = " );
s_print_int ( m );
s_print_string ( ", w = " );
s_print_int ( w );
s_print_newline();
s_print_string ( "swap\n" );
w = n; /* この時点で w の値は失われるし.. */
n = m; /* n の値も消えてしまうが.. */
m = w; /* w にのこっているので、m,n の交換は可能.. */
s_print_string ( "n = " );
s_print_int ( n );
s_print_string ( ", m = " );
s_print_int ( m );
s_print_string ( ", w = " );
s_print_int ( w );
s_print_newline();
}
/*
*
*/
int main ( void ) {
/*
* swap ( 10, 15, 0 )
*/
swap ( 10, 15, 0 );
return 0;
}
/*
*
*/
C:\usr\c>sample-021 n = 10, m = 15, w = 0 swap n = 15, m = 10, w = 10 C:\usr\c>
Download : sample-022.c ( SJIS 版 )
/*
* 2012/06/29 sample-022.c
*/
#include <stdio.h>
#include "s_print.h"
/*
*
*/
void function_argument ( int n ) {
/* n の値を参照 */
s_print_string ( "(pre) n = " );
s_print_int ( n );
s_print_newline();
if ( n > 0 ) {
function_argument ( n - 1 );
}
s_print_string ( "(pos) n = " );
s_print_int ( n );
s_print_newline();
}
/*
*
*/
int main ( void ) {
/*
* function_argument ( 5 );
*/
s_print_string ( "function_argument ( 5 )\n" );
function_argument ( 5 );
/*
*
*/
return 0;
}
/*
*
*/
C:\usr\c>sample-022 function_argument ( 5 ) (pre) n = 5 (pre) n = 4 (pre) n = 3 (pre) n = 2 (pre) n = 1 (pre) n = 0 (pos) n = 0 (pos) n = 1 (pos) n = 2 (pos) n = 3 (pos) n = 4 (pos) n = 5 C:\usr\c>
Download : sample-023.c ( SJIS 版 )
/*
* 2012/06/29 sample-023.c
*/
#include <stdio.h>
#include "s_print.h"
/*
*
*/
int assign_variable ( int n ) {
/* n の値を参照 */
s_print_string ( "n = " );
s_print_int ( n );
s_print_string ( ", &n = " );
s_print_hex ( &n );
s_print_newline();
n = n - 1; /* 代入 */
s_print_string ( "n = " );
s_print_int ( n );
s_print_string ( ", &n = " );
s_print_hex ( &n );
s_print_newline();
n = n - 1; /* 代入 */
s_print_string ( "n = " );
s_print_int ( n );
s_print_string ( ", &n = " );
s_print_hex ( &n );
s_print_newline();
n = n - 1; /* 代入 */
s_print_string ( "n = " );
s_print_int ( n );
s_print_string ( ", &n = " );
s_print_hex ( &n );
s_print_newline();
n = n - 1; /* 代入 */
s_print_string ( "n = " );
s_print_int ( n );
s_print_string ( ", &n = " );
s_print_hex ( &n );
s_print_newline();
n = n - 1; /* 代入 */
s_print_string ( "n = " );
s_print_int ( n );
s_print_string ( ", &n = " );
s_print_hex ( &n );
s_print_newline();
}
/*
*
*/
void function_argument ( int n ) {
/* n の値を参照 */
s_print_string ( "n = " );
s_print_int ( n );
s_print_string ( ", &n = " );
s_print_hex ( &n );
s_print_newline();
if ( n > 0 ) {
function_argument ( n - 1 );
}
}
/*
*
*/
int main ( void ) {
/*
* assign_variable
*/
s_print_string ( "assign_variable ( 5 )\n" );
assign_variable ( 5 );
/*
*
*/
s_print_newline();
/*
* function_argument ( 5 );
*/
s_print_string ( "function_argument ( 5 )\n" );
function_argument ( 5 );
/*
*
*/
return 0;
}
/*
*
*/
C:\usr\c>sample-023 assign_variable ( 5 ) n = 5, &n = bf97b160 n = 4, &n = bf97b160 n = 3, &n = bf97b160 n = 2, &n = bf97b160 n = 1, &n = bf97b160 n = 0, &n = bf97b160 function_argument ( 5 ) n = 5, &n = bf97b160 n = 4, &n = bf97b140 n = 3, &n = bf97b120 n = 2, &n = bf97b100 n = 1, &n = bf97b0e0 n = 0, &n = bf97b0c0 C:\usr\c>
Download : sample-024.c ( SJIS 版 )
/*
* 2012/06/29 sample-024.c
*/
#include <stdio.h>
#include "s_print.h"
/*
*
*/
void function_argument ( int n ) {
/* n の値を参照 */
s_print_string ( "(pre) n = " );
s_print_int ( n );
s_print_string ( ", &n = " );
s_print_hex ( &n );
s_print_newline();
if ( n > 0 ) {
function_argument ( n - 1 );
}
s_print_string ( "(post) n = " );
s_print_int ( n );
s_print_string ( ", &n = " );
s_print_hex ( &n );
s_print_newline();
}
/*
*
*/
int main ( void ) {
/*
* function_argument ( 5 );
*/
s_print_string ( "function_argument ( 5 )\n" );
function_argument ( 5 );
/*
*
*/
return 0;
}
/*
*
*/
C:\usr\c>sample-024 function_argument ( 5 ) (pre) n = 5, &n = bfd11a90 (pre) n = 4, &n = bfd11a70 (pre) n = 3, &n = bfd11a50 (pre) n = 2, &n = bfd11a30 (pre) n = 1, &n = bfd11a10 (pre) n = 0, &n = bfd119f0 (post) n = 0, &n = bfd119f0 (post) n = 1, &n = bfd11a10 (post) n = 2, &n = bfd11a30 (post) n = 3, &n = bfd11a50 (post) n = 4, &n = bfd11a70 (post) n = 5, &n = bfd11a90 C:\usr\c>
Download : sample-025.c ( SJIS 版 )
/*
* 2012/06/29 sample-025.c
*/
#include <stdio.h>
#include "s_print.h"
/*
* swap_sub
*
* 引数上で値の交換
*/
void swap_sub ( int n, int m ) {
s_print_string ( "swap_sub " );
s_print_string ( "n = " );
s_print_int ( n );
s_print_string ( ", m = " );
s_print_int ( m );
s_print_newline();
}
/*
* swap
*
* 値の交換
*/
int swap ( int n, int m ) {
s_print_string ( "swap " );
s_print_string ( "n = " );
s_print_int ( n );
s_print_string ( ", m = " );
s_print_int ( m );
s_print_newline();
swap_sub ( m, n ); /* 引数の上では交換可能 */
}
/*
*
*/
int main ( void ) {
/*
* swap ( 10, 15 )
*/
swap ( 10, 15 );
return 0;
}
/*
*
*/
C:\usr\c>sample-025 swap n = 10, m = 15 swap_sub n = 15, m = 10 C:\usr\c>
Download : sample-026.c ( SJIS 版 )
/*
* 2012/06/29 sample-026.c
*/
#include <stdio.h>
#include "s_print.h"
/*
* swap
*
* 値の交換 : 局所変数の利用
*/
int swap ( int n, int m ) {
int w; /* 局所変数 w の宣言 (w には何がはいっているか解らない..) */
s_print_string ( "n = " );
s_print_int ( n );
s_print_string ( ", m = " );
s_print_int ( m );
s_print_newline();
s_print_string ( "swap\n" );
w = n; /* この時点で w の値が初めて意味を持つ */
n = m; /* n の値も消えてしまうが.. w にコピーがある */
m = w; /* w にのこっているので、m,n の交換は可能.. */
s_print_string ( "n = " );
s_print_int ( n );
s_print_string ( ", m = " );
s_print_int ( m );
s_print_newline();
}
/*
*
*/
int main ( void ) {
/*
* swap ( 10, 15 )
*/
swap ( 10, 15 );
return 0;
}
/*
*
*/
C:\usr\c>sample-026 n = 10, m = 15 swap n = 15, m = 10 C:\usr\c>
Download : sample-027.c ( SJIS 版 )
/*
* 2012/06/29 sample-027.c
*/
#include <stdio.h>
#include "s_print.h"
/*
*
*/
int main ( void ) {
int w; /* 変数を宣言するだけでは値が定まならない */
s_print_string ( "w = " );
s_print_int ( w ); /* どんな値になるかは神のみ知るぞ.. */
s_print_newline();
return 0;
}
/*
*
*/
C:\usr\c>sample-027 w = 1075765236 C:\usr\c>
Download : sample-028.c ( SJIS 版 )
/*
* 2012/06/29 sample-028.c
*/
#include <stdio.h>
#include "s_print.h"
/*
*
*/
int main ( void ) {
int w = 15; /* 初期代入をする */
s_print_string ( "w = " );
s_print_int ( w ); /* 15 である事が保証される */
s_print_newline();
return 0;
}
/*
*
*/
C:\usr\c>sample-028 w = 15 C:\usr\c>
Download : sample-029.c ( SJIS 版 )
/*
* 2012/06/29 sample-029.c
*/
#include <stdio.h>
#include "s_print.h"
#include "s_input.h"
/*
*
*/
int main ( int argc, char *argv[] ) {
int m; /* 変数 m の宣言 */
int n; /* 変数 n の宣言 */
int wa; /* 変数 wa の宣言 */
/*
* m,n の値の入力
*/
s_print_string ( "imput m = " );
m = s_input_int();
s_print_string ( "imput n = " );
n = s_input_int();
/*
* wa の計算
*/
wa = m + n;
/*
* wa の結果出力
*/
s_print_int ( m );
s_print_string ( " と " );
s_print_int ( n );
s_print_string ( " の和は " );
s_print_int ( wa );
s_print_string ( " です。\n" );
return 0;
}
/*
*
*/
12 5
C:\usr\c>sample-029< sample-029.in imput m = 12 imput n = 5 12 と 5 の和は 17 です。 C:\usr\c>
Download : sample-030.c ( SJIS 版 )
/*
* 2012/06/29 sample-030.c
*/
#include <stdio.h>
#include "s_print.h"
#include "s_input.h"
/*
*
*/
int prompt ( char *var_name ) {
s_print_string ( "imput " );
s_print_string ( var_name );
s_print_string ( " = " );
return s_input_int();
}
/*
*
*/
void print_result ( int m, int n, char *calc, int result ) {
s_print_int ( m );
s_print_string ( " と " );
s_print_int ( n );
s_print_string ( " の" );
s_print_string ( calc );
s_print_string ( "は " );
s_print_int ( result );
s_print_string ( " です。\n" );
}
/*
*
*/
void four_calc_sub ( int m, int n ) {
print_result ( m, n, "和", m + n );
print_result ( m, n, "差", m - n );
print_result ( m, n, "積", m * n );
print_result ( m, n, "商", m / n );
print_result ( m, n, "余り", m % n );
}
/*
*
*/
void four_calc ( int m ) {
four_calc_sub ( m, prompt ( "n" ) );
}
/*
*
*/
int main ( int argc, char *argv[] ) {
four_calc ( prompt ( "m" ) );
return 0;
}
/*
*
*/
12 5
C:\usr\c>sample-030< sample-030.in imput m = 12 imput n = 5 12 と 5 の和は 17 です。 12 と 5 の差は 7 です。 12 と 5 の積は 60 です。 12 と 5 の商は 2 です。 12 と 5 の余りは 2 です。 C:\usr\c>
Download : sample-031.c ( SJIS 版 )
/*
* 2012/06/29 sample-031.c
*/
#include <stdio.h>
#include "s_print.h"
/*
* swap
*
* 値の交換 : 他の変数を利用しなくても済む方法
*/
int swap ( int n, int m ) {
s_print_string ( "n = " );
s_print_int ( n );
s_print_string ( ", m = " );
s_print_int ( m );
s_print_newline();
s_print_string ( "swap\n" );
n = n + m;
m = n - m;
n = n - m;
s_print_string ( "n = " );
s_print_int ( n );
s_print_string ( ", m = " );
s_print_int ( m );
s_print_newline();
}
/*
*
*/
int main ( void ) {
/*
* swap ( 10, 15 )
*/
swap ( 10, 15 );
return 0;
}
/*
*
*/
C:\usr\c>sample-031 n = 10, m = 15 swap n = 15, m = 10 C:\usr\c>
Download : 20120629-01.c ( SJIS 版 )
/*
* 20120629-01-QQQQ.c
*
* 二つの実数を入力して、その四則を計算する
*/
#include <stdio.h>
#include "s_print.h"
#include "s_input.h"
/*
* print_result
*/
void print_result ( double a, double b, double r, char *message ) {
s_print_double ( a );
/*
** この部分を完成させなさい
*/
s_print_string ( message );
s_print_string ( "は " );
s_print_double ( r );
s_print_string ( " です。" );
s_print_newline();
}
/*
* wa
*/
void wa ( double a, double b ) {
print_result ( a, b, a + b, "和" );
}
/*
* sa
*/
void sa ( double a, double b ) {
/*
** この部分を完成させなさい
*/
}
/*
** この部分を完成させなさい
*/
/*
* shisoku
*/
void shisoku ( double one, double two ) {
/*
** この部分を完成させなさい
*/
sa ( one, two ); /* 差 */
seki ( one, two ); /* 積 */
sho ( one, two ); /* 商 */
}
/*
* input2
*/
void input2 ( double one ) { /* 変数 one には一つ目の数値 */
s_print_string ( "二つ目の実数を入力してください : " );
shisoku ( one, s_input_double() );
/* 二つ目の数値を入力して shisoku を呼ぶ */
}
/*
* main
*/
int main()
{
s_print_string ( "一つ目の実数を入力してください : " );
input2 ( s_input_double() ); /* 一つ目の数値を入力して input2 を呼ぶ */
return 0;
}
/*
*
*/
123.456 922.031
C:\usr\c\20120629>20120629-01 一つ目の実数を入力してください : 123.456000 二つ目の実数を入力してください : 922.031000 123.456000 と 922.031000 の和は 1045.487000 です。 123.456000 と 922.031000 の差は -798.575000 です。 123.456000 と 922.031000 の積は 113830.259136 です。 123.456000 と 922.031000 の商は 0.133896 です。 C:\usr\c\20120629>
Download : 20120629-02.c ( SJIS 版 )
/*
* 20120629-01-QQQQ.c
*
* 方程式 cos(x) = x の根を二分法を用いて求める
*/
#include <stdio.h>
#include <math.h>
#include "s_print.h"
#include "s_input.h"
/*
* 二分法による、方程式「cos(x) = x」の根の計算
*/
#define EPSILON (0.00000001) /* 最小誤差を(自分で)决める */
double cosx_x_sub ( double min, double max, double mid ) {
if ( max - min < EPSILON ) {
/*
* 十分に精度が得られたので、その結果を値とする
*/
/*
** この部分を完成させなさい
*/
} else if ( cos(mid) - mid > 0.0 ) {
/*
* 答は mid と max の間にある
*/
/*
** この部分を完成させなさい
*/
} else {
/*
* 答は min と mid の間にある
*/
return cosx_x_sub ( min, mid, (min+mid)/2.0 );
}
}
double cosx_x ( void ) {
/*
* COS(x) = x の解は 0 と π/2 の間にある
*/
return cosx_x_sub ( 0, M_PI/2.0, M_PI/4.0 );
}
/*
*
*/
int main ( void ) {
s_print_string ( "COS(x) = x の方程式の解は " );
s_print_double ( cosx_x() );
s_print_string ( "です\n" );
s_print_string ( "確かに " );
s_print_double ( cosx_x() );
s_print_string ( " = " );
s_print_double ( cos(cosx_x()) );
s_print_string ( " です\n" );
return 0;
}
/*
*
*/
123.456 922.031
C:\usr\c\20120629>20120629-02 COS(x) = x の方程式の解は 0.739085です 確かに 0.739085 = 0.739085 です C:\usr\c\20120629>