1989年開業 技術士 佐伯英子(情報工学部門) 文部科学省登録番号 第22082号 日本技術士会会員 東大阪商工会議所会員

≫サンプルプログラム一覧 

オープンソース/C言語サンプルプログラム 関数電卓

●数値と関数記号を入力して、計算結果を表示するプログラムです。
●べき乗(記号 ^ )は数値を2つ入力します。
 ≫ソースファイルのダウンロード: dentaku10.c

【問題】
●計算できる関数を増やしてみよう。
●関数記号 sin をまちがえて sim と入力した場合どのような結果になるか考察し、
 実際に結果を確認してみよう。
●90度のtan や 負数のsqrt など、エラーになる入力をするとどのような結果になるか、
 確認してみよう。
●エラーになる入力がされた場合、計算をおこなわずに「数値が範囲外です」と表示する
 ように改造してみよう。

/**************/
/*  関数電卓  */
/**************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

#define PI 3.14159265

void  main( )
{
    char    c[128],fnc[128];
    double  x=0,y,z=0;
    double  rd=PI/180.0;  // 1度(ラジアン)

    printf("\n**************************");
    printf("\n*  関数電卓              *");
    printf("\n*  sin X, cos X, tan X,  *");
    printf("\n*  exp X, log X, ln X    *");
    printf("\n*  sqr X, X ^ Y          *");
    printf("\n*  ※角度の単位は度です  *");
    printf("\n*************************\n");

    //--入力--
    printf("\n数値 X: ");
    gets(c); x=atof(c);                   // 数値X 入力
    printf("\n関  数: ");
    gets(fnc);                            // 関数記号入力
    if ( strcmp(fnc,"^")==0 )
      {
        printf("\n数値 Y: ");
        gets(c); y=atof(c);               // 数値Y 入力
      }

    //--計算実行--
    if ( strcmp(fnc,"sin")==0 )
      { z=sin(x*rd); }
    else if ( strcmp(fnc,"cos")==0 )
      { z=cos(x*rd); }
    else if ( strcmp(fnc,"tan")==0 )
      { z=tan(x*rd); }
    else if ( strcmp(fnc,"exp")==0 )
      { z=exp(x); }
    else if ( strcmp(fnc,"log")==0 )
      { z=log10(x); }
    else if ( strcmp(fnc,"ln")==0 )
      { z=log(x); }
    else if ( strcmp(fnc,"sqr")==0 )
      { z=sqrt(x); }
    else if ( strcmp(fnc,"^")==0 )
      { z=pow(x,y); }
    else
      { printf("\a関数がありません"); }   // ブザー

    //--結果表示--
    printf("\n答:%4.8f\n\n",z);
}
   

※SSL暗号化通信対応

佐伯英子技術士事務所 〒542-0073 大阪市中央区日本橋 1-14-13 サンオフィス日本橋601  E-mail: info@saeki-pe.com