課題プログラム内の「/*名前:ここ*/」の部分を書き換え「/*この部分を完成させなさい*/」の部分にプログラムを追加して、プログラムを完成させます。
Download : 20211210-01.c
/*
* 20211210-01-QQQQ.c
*
*/
#include <stdio.h>
#include <math.h>
/*
*
*/
#define EPS (1e-300) /* 1/i! の下限 */
/*
* float 型での計算
*/
float fexp() {
int i;
float fe = 1.0; /* fe = 1 + \sum_{i=1}^n 1/(i!) */
float fs = 1.0; /* fs = 1/(i!), 1/(0!) = 1/1 = 1 */
for ( i = 1; ; i++ ) {
/* 1/(i!) = (1/((i-1)!))/i */
/*
** この部分を完成させなさい
*/
fe = fe + fs;
if ( (double)fs < EPS ) {
return fe;
}
}
}
/*
* double 型での計算
*/
double dexp() {
int i;
double ds = 1.0;
double de = 1.0;
for ( i = 1; ; i++ ) {
ds = ds / (double)i;
/*
** この部分を完成させなさい
*/
if ( (double)ds < EPS ) {
return de;
}
}
}
/*
* main
*/
int main ( void ) {
/* fexp の結果 */
printf ( "fexp = %40.35f\n", fexp() );
/* dexp の結果 */
/*
** この部分を完成させなさい
*/
/* math.h の中の定数 */
printf ( "M_E = %40.35f\n", M_E );
return 0;
}
$ ./20211210-01-QQQQ.exe fexp = 2.71828198432922363281250000000000000 dexp = 2.71828182845904553488480814849026501 M_E = 2.71828182845904509079559829842764884 $
Download : 20211210-02.c
/*
* DATE-02-QQQQ.c
*
* 動的なメモリの確保
* キーボードより正の整数を幾つか入力して、その要素が入った配列を返す
* 0 以下の整数が入力されたら、終了とする
* 配列のサイズは、正の整数の個数 + 1 とし、最後の要素には 0 を入れる
*/
/*
* 利用方法
* コンパイル
* cc -o BASENAME.exe FILENAME
* 実行
* ./BASENAME.exe
*/
#include <stdio.h>
#include <malloc.h> /* calloc/free を利用するので必要 */
/*
* read_n_integers
*/
int *read_n_integers( int size ) {
int num; /* キーボードから入力された数値を保存する */
int *value; /* 確保された配列の先頭要素へのポインター */
printf ( "正の整数値を入力してください(0 以下だと入力を終了します):" );
scanf ( "%d", &num );
if ( num <= 0 ) { /* 入力が全部終ったので、配列を作成する */
/* 配列のサイズは、引数で指定された個数 + 1 となる */
if ( ( value = (int *)calloc ( size + 1, sizeof ( int ) ) ) != NULL ) {
/* 動的メモリは取り出せるとは限らないので、結果をチェック */
value[ size ] = 0; /* 最後の要素として 0 を代入 */
} /* else {} */ /* NULL が帰った場合は、そのまま、値として返す */
} else { /* 入力が終っていないので、更に、値を読むために再帰呼び出し */
if ( ( value = read_n_integers( size + 1 ) ) != NULL ) {
/* 結果が NULL でなければ、配列が作られている */
/* size 番目の要素を配列に記録 */
/*
** この部分を完成させなさい
*/
} /* else {} */ /* NULL が帰った場合は、そのまま、値として返す */
}
/* いずれの場合でも value を返す */
/*
** この部分を完成させなさい
*/
}
/*
* main
*/
int main ( int argc, char *argv[] ) {
int *array; /* n 個数の要素をもつ配列の先頭をもつ */
int i;
/* read_n_integers を呼び出して、n 個の整数値を入力する */
/* 引数には、入力済のデータ数を指定するので、最初は 0 を指定する */
if ( ( array = read_n_integers( 0 ) ) != NULL ) {
/* read_n_integers は、NULL を返す可能性がある */
/* 入力された要素を画面に出力 */
for ( i = 0; array[i] > 0; i++ ) {
printf ( "%d th data = %d\n", i, array[i] );
}
/* malloc/calloc で確保したメモリは、必ず free で解放する */
/*
** この部分を完成させなさい
*/
} /* else {} */ /* NULL の場合はエラーなので、何もしない */
return 0;
}
12 34 5 6 90 -1
$ ./20211210-02-QQQQ.exe 正の整数値を入力してください(0 以下だと入力を終了します):12 正の整数値を入力してください(0 以下だと入力を終了します):34 正の整数値を入力してください(0 以下だと入力を終了します):5 正の整数値を入力してください(0 以下だと入力を終了します):6 正の整数値を入力してください(0 以下だと入力を終了します):90 正の整数値を入力してください(0 以下だと入力を終了します):-1 0 th data = 12 1 th data = 34 2 th data = 5 3 th data = 6 4 th data = 90 $