- 締切済み
C言語
C言語の問題が分からなくて困ってます。 時間がないのでわかる方教えていただけますでしょうか。次の1️⃣2️⃣3️⃣です。 整数割り算の結果と余りを同時に求める関数 div_mod_intを作成せよ。 ただし、ゼロ割り算は考慮しなくて良い。 * 整数割り算の結果と余りを同時に求める関数を作成 #include <stdio.h> int input_int(int *pd); void div_mod_int(int data1, int data2, ____1⃣____); int main(void) { int data1, data2; int syou, amari; while (input_int(&data1) != EOF && input_int(&data2) !=EOF) { div_mod_int(data1, data2, ____2⃣____); printf("%d / %d = %d...%d\n\n", data1, data2, syou, amari); } return 0; } /* * 整数割り算を行い商と余りを求める * 引数 int data1 :被除数 (割られる数) * int data2 : 除数 (割る数) * int data1 / data2 : 除算結果 * int data1 % data2 : 余り * 戻り値 void :なし */ void div_mod_int(int data1, int data2,____1⃣____) { ____3⃣____ __________ }
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- AsarKingChang
- ベストアンサー率46% (3467/7474)
>原因不明のバグの元にしかなりませんからお勧めしません。 実際、その通り! ともあれ、初期のポインタ練習の問題っぽいですが。 不思議とこの手の質問をしたケースで、 質問者が戻ってくる確率が妙に低いですね。 自己解決したのかな?と、信じたいところ ひとまず、全体を整理すると、 int work[2],*p=work; // または&work[0]; で板自体は終了なんですがね。 それか、渡すとき、二つの変数の両方のアンバサンドを渡すか。 教科書式ならこっちの方が親切?かも。↑ 痛い回答なら、 int *p=(int *)malloc(sizeof(int)*2); // やりすぎ おし!次~(サンクスね~ALL)
- wormhole
- ベストアンサー率28% (1626/5665)
>また、あまりここを気にする人はいないのですが、 > int syou, amari; >と宣言した時、syouの位置+sizeof(int)は、必ずamariを指します。 C言語の仕様に、そのような事は決まりはないですし、 原因不明のバグの元にしかなりませんからお勧めしません。
- wormhole
- ベストアンサー率28% (1626/5665)
>これはあかん。 >int p[2];とせなあかんで。 void div_mod_int(int data1, int data2, int p[2]); と仮引数で int p[2] としたところで領域確保はされないです。
- asuncion
- ベストアンサー率33% (2127/6289)
>第3パラメーターは >int *p; これはあかん。 int p[2];とせなあかんで。 int *p; としておいて p[0]に代入するのはいいが、 p[1]の領域は確保されてまへん。
- AsarKingChang
- ベストアンサー率46% (3467/7474)
正直言えば。。 int data1, data2; int syou, amari; ここも、気持ち悪いですがね。 struct tag_data { int data1; int data2; int syou; int amari; }; にしたいところですね。 int main(void) { tag_data data; ←ここでまとめて、実体を作り ~~~~~~~~~~~~~~~~~~~~~ void div_mod_int(struct tag_data *p); { p->syou = p->data1 / p->data2; p->amari = p->data1 % p->data2; } の方が、パラメーター1個なので、バグが生まれにくく すっきりしますね。 (ここは、問題とは別の話なので、回答ではないですけどね)
- AsarKingChang
- ベストアンサー率46% (3467/7474)
あ~簡単ですね。 ポイントは、 void div_mod_int(int data1, int data2, ____1⃣____); 帰り値が"void"とあることです。 つまり、「ない!」ってことです。 であるなら、第3パラメーターは、ポインターにしかなりえません。 また、あまりここを気にする人はいないのですが、 int syou, amari; と宣言した時、syouの位置+sizeof(int)は、必ずamariを指します。 ですので、 第3パラメーターは int *p; 名前は何でもいい 関数の中で p[0]=data1 / data2; p[1]=data1 % data2; ですね。 *p++ = n でも構いません。 ただし、教科書式では、 *pSyou,*pAmari でしょうけどね。 OKですかね?