アプリ版:「スタンプのみでお礼する」機能のリリースについて

複素数の四則演算(a+biとc+diの四則演算)について、for文を用いて表示するプログラムについて、???の部分に何を入れたらよいかわからず、うまく実行することができません。和・差・積・商の計算種別を入れるみたいなのですが、何を入れたらいいのかわかりません。
#include <stdio.h>
void fukuso(double a,double b,double c,double d,double *e,double *f,int keisan);

int main(void)
{
double a=4, b=8, c=4, d=3, e, f;
int i;

for(i=1;i<5;i++){
fukuso(a,b,c,d,&e,&f,???);
if(i==1) printf("和演算\n");
else if(i==2) printf("差演算\n");
else if(i==3) printf("積演算\n");
else printf("商演算\n");
printf("e=%f f=%f i\n",e,f);
}

return (0);
}

void fukuso(double a1,double b1,double a2,double b2,double *a3,double *b3,int keisan)
{
if(keisan==1){
*e=a+c;
*f=a+c;
}
else if(keisan==2){
*e=a-c;
*f=b-d;
}
else if(keisan==3){
*e=a*c-b*d;
*f=a*d+c*b;
}
else{
*e=(a*c+b*d)/(c*c+d*d);
*f=(-a*d+c*b)/(c*c+d*d);
}
}

A 回答 (2件)

まず、for文が何であるかをご理解いただく必要があると思います。



for文は【変数の初期値;実行条件;変数の増加量】と定義し、{ }の中身を実行 → 変数増加 → { }の中身を実行…という動作を実行条件が真である間繰り返し処理するためのものです。
たとえば、

/* printfを10回繰り返す処理 */
for( k = 0 ; k < 10 ; k++ )
{
printf( "%d", k );
}

という構文を言葉で表すと

 #1.k の最初の値は 0 です。
 #2.k が 10 未満であればカッコの中を実行して戻ってきなさい。
 #3.カッコの中に入ったら k の値を printf で出力しなさい。
 #4.戻ってきたら k に 1 を加えて #2 から処理を繰り返しなさい。

となり、printf の出力結果は順に 0、1、2、(中略)…9 となります。
( k の値は最終的に 10 になりますが、上記の #2 の条件から外れてしまうため{ }の中へは入らずに繰り返し処理を終了します)
このfor文の変数を応用するやり方は何かを順番で処理する場合によく使われます。

以上を踏まえれば ??? に何が入るべきかおわかりになると思うのですが、いかがでしょうか。
    • good
    • 0
この回答へのお礼

計算種別がiであることに気づかなかったのですが、Wakkey-sanさんの回答で気づくことができ、プログラムが正常に起動しました。ありがとうございました。

お礼日時:2007/05/31 09:52

C言語で四則演算を行うには、



#include <complex.h>
double complex fukuso(double complex lhs, double complex rhs, int keisan)
{
 double complex result;
 switch (keisan)
 {
 case 1:
  result = lhs + rhs;
  break;
 case 2:
  result = lhs - rhs;
  break;
 case 3:
  result = lhs * rhs;
  break;
 default:
  result = lhs / rhs;
  break;
 }
 return result;
}

で十分な気がします。
なお、古い規格に基づいた処理系では上記のようにはできません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!