• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:c言語の、voidの使い方で困っています)

C言語で困っている問題:voidの使い方

このQ&Aのポイント
  • C言語で複素数の引き算と掛け算を計算するプログラムを作成したが、void show関数の使い方が分からない。
  • プログラムはcomplex構造体を引数とする2つの関数を作成し、計算結果を表示するプログラムである。
  • 質問者は以下のプログラムを作成したが、void show関数の使用方法が不明で困っている。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

>printf("z1-z2=%f+%fi \n",z.re,z.im); これを、show(complex x) に置き換えたいということでしょうか? かなり推定ですみません。こうなるのかもしれません。 (全コード書きました) #include<stdio.h> typedef struct complex{ double re; double im; } complex; complex hikizan(complex z1,complex z2) { complex z; z.re=z1.re-z2.re; z.im=z1.im-z2.im; return z; } complex kakezan(complex z1,complex z2) { complex zz; zz.re=z1.re*z2.re-z1.im*z2.im; zz.im=z1.re*z2.im+z1.im*z2.re; return zz; } void show(complex x) { printf("%f+%fi",x.re,x.im); } int main(void) { complex z1,z2,z,zz; z1.re=1; z1.im=3; z2.re=2; z2.im=2; z=hikizan(z1,z2); zz=kakezan(z1,z2); printf("z1-z2="); show(z); printf("\n"); printf("z1*z2="); show(zz); printf("\n"); } 補足・・・ 実は、大して考えていません。 ですが、printfで、"z1-z2="とか表示しているので そこをあえてわけて 最小限の値をshow(z)等で表示したにすぎないものです。 もしかしたら、考え違いで不正解かもしれません。

o-saka-iru
質問者

お礼

助かりました。有難うございます。 上手く出来ました。

その他の回答 (2)

  • Wap58
  • ベストアンサー率33% (29/87)
回答No.3

質問の(voidの使い方で困ってます)だと 皆さん、戻りvoidか引数(void *)など どこまで書けばいいか戸惑うと思います いずれポインタ使うようになるでしょう サンプルです、mainのコメントアウトすると intキャストポインタの実装が表示されます printf関数の"%s"は文字リテラルポインタの 実装を表示する特殊な役割を持っています #include<stdio.h> typedef struct{ double re; double im; void *str; }complex; complex hikizan(complex z1,complex z2){ complex z; z.re=z1.re-z2.re; z.im=z1.im-z2.im; z.str = "z1 - z2 = "; return z; } complex kakezan(complex z1,complex z2){ complex z; z.re=z1.re*z2.re-z1.im*z2.im; z.im=z1.re*z2.im+z1.im*z2.re; z.str = "z1 * z2 = "; return z; } void show(complex x){ printf("%s %f + %fi\n",x.str,x.re,x.im); } int main(void){ int integer_1 = 987,integer_2 = 123; complex z1 = {1,3,&integer_1},z2 = {2,2,&integer_2}; //printf("%d %d\n",*(int *)z1.str,*(int *)z2.str); show(hikizan(z1,z2)); show(kakezan(z1,z2)); return 0; }

o-saka-iru
質問者

お礼

助かります。ありがとうございます

  • Wap58
  • ベストアンサー率33% (29/87)
回答No.2

1の方の補足 それぞれの関数の役割を振り分けましょう hikizan,kakezan関数は引数の値を計算し値を返す show関数は値を受けて、全て任され表示する show(hikizan(z1,z2)); show(kakezan(z1,z2)); 文字リテラルを加えたいなら グローバル変数 char *GLOBAL_1; などを構造体の後などに宣言して 計算関数内で GLOBAL_1 = "kansuumei"; show関数内で "%s",GLOBAL_1を表示する

o-saka-iru
質問者

お礼

ありがとうございます。助かりました