• ベストアンサー

プログラムについてです。

main関数内でキーボードから入力された2つの整数について、その整数値の和差乗除をユーザ定義関数shisoku()内で計算し、main関数内で結果を出力するプログラムを作成せよ。 ただし、すべて局所変数で構成し、大域変数を使ってはならない。 僕は和差、乗除はできるんですが和差乗除ができません。

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

  • ベストアンサー
  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.5

おっと、そこまでできているのであれば、  ・wasaという関数名を、本来のshisokuに変える  ・shisoku関数に、積と商のための引数を加える(名前は積/商を端的に示すようにする)  ・xとyという変数名を、和/差を端的に示すような名前に付け替える  ・main関数で、積や商のための変数定義を追加する  ・main関数で、shisoku関数で計算した積や商を出力するコードを追加する というような修正を行なえば、完成するのではないかと思います。

その他の回答 (5)

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.6

ただし、 >int*ap,*bp; >wasa(a,b,ap,bp); >printf("%d+%d=%d\n",a,b,*ap); >printf("%d-%d=%d\n",a,b,*bp); ここのコードは正しくないですけどね。 和/差のための変数ap,bpは、ポインター変数である必要はありません。 というか、ポインター変数にしてはいけません。ふつうのint型です。 apとbpのアドレスをwasa(本来はshisoku)に渡すようにしないと。

tsuryo1119
質問者

お礼

ちょっとよくわからないんですが具体的にどういうことですか?

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.4

>#3さん shisoku関数の戻り値はどこでも使っていないので、不要だと思います。 main関数の戻り値の型をintにする方がよいと思います。 >質問者さん 途中経過でかまいませんので、できている部分を見せていただけますでしょうか。

tsuryo1119
質問者

補足

#include<stdio.h> void wasa(int a,int b,int*x,int*y); int main(void) { int a,b; int*ap,*bp; printf("a=:"); scanf("%d",&a); printf("b=:"); scanf("%b",&b); wasa(a,b,ap,bp); printf("%d+%d=%d\n",a,b,*ap); printf("%d-%d=%d\n",a,b,*bp); return 0; } void wasa(int c,int d,int*x,int*y) { *x=c+d; *y=c-d; }

  • KEIS050162
  • ベストアンサー率47% (890/1879)
回答No.3

要は、引数がひとつなら、戻り値を計算結果として記述できるが、複数の計算結果を引数でやり取りする方法が分からない、ということでしょうか? 例えば、変数x、yをを引数として、戻り値を計算結果にする場合は、例えば下記の様な方法。 int Wa( int x, int y ) {     return( x+y ); } void main( void ) {     int x,y,r;     … x、yを入力する手段をここに記述     r = Wa( x,y );         … 計算結果を表示 } これを複数の計算結果をやり取りする様に改造する場合は、ポインター渡しを使うと良いでしょう。例は和の場合だけですが、工夫して四則演算に応用してみてください。 int Shisoku( int x, int y, int *wa ) {     *wa = x + y;     return( 0 ); } void main( void ) {     int x,y,r,wa;     … x、yを入力する手段をここに記述     r = Shisoku( x,y, &wa );         … 計算結果を表示 } 四則演算全部やる場合は、waの他に、sa, jou, jo などの変数をポインター渡しにしてあげれば出来るかと思います。 戻り値は、入力した計算できない場合の異常値を返す(たとえば、0除算の時など)に利用すると良いでしょう。 これでヒントになりますでしょうか?

tsuryo1119
質問者

お礼

ありがとうございます。

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.2

>乗除はできるんですが では、これはどういう意味で書かれたのでしょうか。

tsuryo1119
質問者

補足

そっちも下と一緒で掛け算と割り算をさせるプログラムはつくれたんですが、四則演算をさせることができないんです。

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.1

>僕は和差、乗除はできるんですが和差乗除ができません。 何をおっしゃっているのか、全くわかりません。 足し算 引き算 かけ算 割り算 が、できるんでしょうか。それともできないんでしょうか。

tsuryo1119
質問者

補足

そういうことじゃなくて、足し算と引き算だけを計算させるのは作れたんですが、足し算、引き算、掛け算、割り算の4つの計算をさせるのができないんです。

関連するQ&A

  • プログラムの組み方が分かりません。

    ある課題で以下の問題が出題されました。 >>>> 2つのint型変数x,yにキーボードから値を入力し、その大小を判定する関数funcを作成せよ。この課題では、大きいと判定された数が代入された変数のアドレスがmain関数に戻されるものとする。 ============ #include<stdio.h> int *func(int *a,int *b) { /* 2つの値の大小判定を行い、アドレスを返す */ } main(void) { int x, y, *z; /* 変数 x,yにキーボードからデータを入力する */ /* 関数funcの呼び出し */ /* 変数zを用いて値の出力を行う */ } ============ <<<< 2行目の*funcというように、関数の頭に*が付くプログラムは初めてで、 どういう意味かもさっぱりわかりません。 それも含め、この問題はどういう風解けばいいのか、教えてください。 お願いします。

  • 電卓プログラムを作りたい。

    わたしは、プログラムの初心者なのですが、力不足でプログラムが作れないのでご協力おねがいします。 データをすべて整数で演算子は、1個だけ用い、標準入力を受け取り、リターンキーが押されると、その解答を標準出力に表示するような、加減乗除の四則演算と整数剰余の演算を繰り返し行うことが可能な電卓プログラムを作りたいのですが、、、。

  • c言語プログラム

    加減乗除および剰余の演算記号(+-* / %)と2つの整数を入力し、入力した2つの整数に対して入力した演算を施して表示するプログラムをif文ではなくswitch文を用いて作成しなさいなお、演算記号入力の際に間違った記号(+ - * / % 以外)を入力した場合は+を入力したものとして計算するものとしなさい。 ヒントで 変数としては入力演算記号に対応する変数op、入力する2つの整数に対応する変数m,n、答えに対応する変数ansを使うとよいでしょう宣言についてはopは記号なのでcharで宣言しますが、あとはすべて整数ですのでintで宣言 まずやることは演算記号以外の場合に+であることを表示するプログラムを組むと思うんですけど どうしたらいいのかわかりません力を御貸しください

  • プログラミング float型

    float型の変数x、yを定義し、scanfを使ってキーボードから値を入力して代入する。この2個の変数を引数として平均値を計算し、その値をfloat値として返す関数heikinを作成し、mainから呼び出し、結果を表示する表示するプログラムを作成するという命令なのですが、このプログラムのソースを教えていただけないでしょうか?

  • ビット列を表示するプログラム

    C言語の問題でビット列を表示するプログラムが全くできません。 どなたか分かる人はどうか知恵を貸してください。 ユーザが整数を入力すると、その整数をINT型の変数に入れ、そのビット列を表示するプログラム。 ただ、INT型のビット数は環境によって変わる可能性があるため、sizeof()関数を利用してINT型の変数のビット数を求め、そのビット数分だけ表示する。

  • 多変数関数の最小値

    多変数関数の最小値を最急降下法で求めようとする場合、大域的な最小ではなく、局所的極小値につかまってしまう場合があることは良く知られています。しかし量子力学ではトンネル効果で壁を通り抜けて必ずポテンシャルエネルギー最小の状態にいくはずだから、これを利用して最小値が求められそうに思います。多変数のWKB法は難しいそうですが、これにより多変数関数の最小値は求められるのでしょうか。

  • 次のプログラムの作り方が分かりません…

    整数変数(データ変数)a,b,cを定義し、それぞれ10,20,30を代入しなさい。 次にその変数の格納されているアドレスを表示するプログラム ---------------------------------------------------------- 【ヒント】16進数で打ち出すためには、%xを利用する。課題のように頭に0xを付けるときには、0x%xとすればよい 宜しくお願いします。

  • 至急!助けて下さい。プログラミングJava

    明日までの大学の課題が、わかりません。 どなたか教えてください。書き方が、わかりません。言語はJavaです。 よろしくお願い申し上げます。 1.条件分岐 整数d,xをキーボードから入力させ、 dとzの差の大きさ(絶対値)を計算し、結果を表示するプログラムを作りなさい。 2.繰り返し 整数qcをキーボードから入力させ、1からqcまでの整数を全て表示させるプログラムを作りなさい 3.式 式y=xの二乗+6x+10の値を、x=13から21まで、一つづつ変化させた時のyの値を表示しなさい。 4.和 1から58までの和1+2+3+….+58をプログラムを作って求めなさい。 5.乱数 乱数関数rnd()を使って、変数wgに0~383までの適当な数値を代入し、その結果を出力しなさい。 6.円を描く for文を使って、適当な位置に半径17の赤い円を、87個だけ描きなさい。 7.余り 変数qeに整数を入力させ、その変数qeが6で割り切れたら「割り切れる」と表示し、それ以外は「割り切れない」と表示するプログラムを作りなさい。 *ヒント %演算子で割った余りが求められる。 例えば、5%3は2となる。 8.break文 変数bjに0から1000までの乱数を作っては代入することを繰り返し、bjの値が900以上になったら繰り返しを止めて、bjの値を出力するプログラムを作りなさい。 9.カウント 1から1076までの整数の中で、8で割り切れる数がいくつあるかカウントしてその数を表示しなさい。 以上です。 どうかお助け下さいm(__)m

  • C言語プログラムの課題

    大学で以下のような課題が出ました。でも全然わかりません。わかる方がいらっしゃったら、是非教えてほしいです★ 1整数値123を変数iに代入して、iの値を表示するプログラムを作成せよ。 2実数値3.14159を変数xに代入して、xの値を表示するプログラムを作成せよ。 3文字型せーた'A'を変数chに代入して、chの値を表示するプログラムを作成せよ。ただし、chの値を表示する際には、%d,%x,%cの書式を用いること。 4キーボードから入力された2つの整数値i,jの値を画面に表示するプログラムを作成せよ。 5キーボードから2つの整数値を、変数in1とin2に入力して、以下の計算をした結果を画面に表示するプログラムを作成せよ。 in1+in2= in1-in2= in1*in2= in1/in2= in1%in2=

  • 関数を使ったプログラムについてなのですが・・・

    ・変数a,bの内容を入れ換える処理を関数を用いて実行するためのプログラム と ・変数a,bを与えたときa+bとa-bを計算する処理を関数を用いて行い、和と差を表示させるためのプログラム はどう作ればいいか分かりません…。 教えてください。