2整数の大小比較
2整数の大小比較
こんにちは!!!!!!!『☆』です!!!!(笑)
またまた質問にきました♪♪お願いいします。
問題は、「2つの整数 a,b を入力し、大きい方の値を出力するプログラムを作成せよ」っていう問題なんです。
そして+αで、
1. int max(int a, int b); /* a と b のうち大きい方の値を返す関数 */
2. void asc_swap(int *a, int *b); /* *a < *b となるように swap する関数 */
という2つ関数を使うように指定されているんですよ。
それで、私が作ったプログラムは・・・・・
#include <stdio.h>
int max(int a,int b){
if(a>b){
printf("関数 max を使った場合:大きい方は%dです.\n",a);
}
else{
printf("関数 max を使った場合:大きい方は%dです.\n",b);
}
return 0;
}
void asc_swap(int *a,int *b){
int t;
if(a<b){
printf("関数 asc_swap を使った場合:大きい方は%dです.\n",b);
}
else if(a>b){
t=*b;
*b=*a;
*a=t;
}
printf("関数 asc_swap を使った場合:大きい方は%dです.\n",t);
}
int main(void){
int a,b;
printf("a :");
scanf("%d",&a);
printf("b :");
scanf("%d",&b);
max(a,b);
asc_swap(&a,&b);
return 0;
}
っというものなんですが。。。。上手く行きません・・・・
bよりもaが大きいとき、asc_swap関数が上手く働いていないんですが・・どこが違うのでしょうか??
教えてください☆お願いします。
またまた質問にきました♪♪お願いいします。
問題は、「2つの整数 a,b を入力し、大きい方の値を出力するプログラムを作成せよ」っていう問題なんです。
そして+αで、
1. int max(int a, int b); /* a と b のうち大きい方の値を返す関数 */
2. void asc_swap(int *a, int *b); /* *a < *b となるように swap する関数 */
という2つ関数を使うように指定されているんですよ。
それで、私が作ったプログラムは・・・・・
#include <stdio.h>
int max(int a,int b){
if(a>b){
printf("関数 max を使った場合:大きい方は%dです.\n",a);
}
else{
printf("関数 max を使った場合:大きい方は%dです.\n",b);
}
return 0;
}
void asc_swap(int *a,int *b){
int t;
if(a<b){
printf("関数 asc_swap を使った場合:大きい方は%dです.\n",b);
}
else if(a>b){
t=*b;
*b=*a;
*a=t;
}
printf("関数 asc_swap を使った場合:大きい方は%dです.\n",t);
}
int main(void){
int a,b;
printf("a :");
scanf("%d",&a);
printf("b :");
scanf("%d",&b);
max(a,b);
asc_swap(&a,&b);
return 0;
}
っというものなんですが。。。。上手く行きません・・・・
bよりもaが大きいとき、asc_swap関数が上手く働いていないんですが・・どこが違うのでしょうか??
教えてください☆お願いします。
Re:2整数の大小比較
swap関数をこのようになおしてみました。
void asc_swap(int *a,int *b){
int t;
if(*a<*b){
printf("関数 asc_swap を使った場合:大きい方は%dです.\n",*b);
}
else if(*a>*b){
t=*b;
*b=*a;
*a=t;
}
printf("関数 asc_swap を使った場合:大きい方は%dです.\n",*b);
}
『*』をつけてみたんですが・・・
bが大きい時、
『関数 asc_swap を使った場合:大きい方は2です.』
こおん文章が2回表示されてしまいます。。
void asc_swap(int *a,int *b){
int t;
if(*a<*b){
printf("関数 asc_swap を使った場合:大きい方は%dです.\n",*b);
}
else if(*a>*b){
t=*b;
*b=*a;
*a=t;
}
printf("関数 asc_swap を使った場合:大きい方は%dです.\n",*b);
}
『*』をつけてみたんですが・・・
bが大きい時、
『関数 asc_swap を使った場合:大きい方は2です.』
こおん文章が2回表示されてしまいます。。
Re:2整数の大小比較
何回もすみません。。。。
このように変えてみました☆
void asc_swap(int *a,int *b){
int t;
if(a<b){
printf("関数 asc_swap を使った場合:大きい方は%dです.\n",b);
}
else if(*a>*b){
t=*b;
*b=*a;
*a=t;
}
printf("関数 asc_swap を使った場合:大きい方は%dです.\n",*b);
}
一応、実行結果は合っているんですが、内容的に合ってますか??
このように変えてみました☆
void asc_swap(int *a,int *b){
int t;
if(a<b){
printf("関数 asc_swap を使った場合:大きい方は%dです.\n",b);
}
else if(*a>*b){
t=*b;
*b=*a;
*a=t;
}
printf("関数 asc_swap を使った場合:大きい方は%dです.\n",*b);
}
一応、実行結果は合っているんですが、内容的に合ってますか??
Re:2整数の大小比較
17:04のコードは、
if(a<b){
と、ポインタどうしを比べているので正しくありません。
比較の仕方は、17:01の方が正しいです。
17:01のコードで、後の方のprintf()の内容と書いている場所が正しくありません。
else if のすぐ後に、
「*aの方が大きい」という内容のメッセージを出力してから、
*aと*bを入れ替えるとよいでしょう。
if(a<b){
と、ポインタどうしを比べているので正しくありません。
比較の仕方は、17:01の方が正しいです。
17:01のコードで、後の方のprintf()の内容と書いている場所が正しくありません。
else if のすぐ後に、
「*aの方が大きい」という内容のメッセージを出力してから、
*aと*bを入れ替えるとよいでしょう。
Re:2整数の大小比較
ちょっと全然違う質問なんですが、、、関数の中で出力するという子とはしないほうがいいですか??
出力はmain関数でした方がいいでかね??
あ!!そうですね!!同値のときは、強制終了するように、変えてみます。
出力はmain関数でした方がいいでかね??
あ!!そうですね!!同値のときは、強制終了するように、変えてみます。
Re:2整数の大小比較
> 1. int max(int a, int b); /* a と b のうち大きい方の値を返す関数 */
> 2. void asc_swap(int *a, int *b); /* *a < *b となるように swap する関数 */
2つの整数のうち大きい方を出力するプログラムで、
max()を作成せよという指示はわかりますが、
asc_swap()の方はどうもよくわからないですね。
別に2つの整数を入れ替えなくても、単に大小関係を判定するだけで
よいはずなのですが…。
> 2. void asc_swap(int *a, int *b); /* *a < *b となるように swap する関数 */
2つの整数のうち大きい方を出力するプログラムで、
max()を作成せよという指示はわかりますが、
asc_swap()の方はどうもよくわからないですね。
別に2つの整数を入れ替えなくても、単に大小関係を判定するだけで
よいはずなのですが…。
Re:2整数の大小比較
ううん。。。私たちもそう思うんですけどねぇー。。。
入れ換える練習みたいなんですよねぇ。。。。
しかも、 *a < *b となるように swap する関数 のようにまた指示されてるんです。。
入れ換える練習みたいなんですよねぇ。。。。
しかも、 *a < *b となるように swap する関数 のようにまた指示されてるんです。。
Re:2整数の大小比較
こんなんでいいのかな?。
#include <stdio.h> int max(int a, int b) { if(a > b) return a; return b; } void asc_swap(int *a, int *b) { int temp; if(*a < *b) return; temp = *a; *a = *b; *b = temp; return; } int main(void) { int a, b; printf("a = "); scanf("%d", &a); printf("b = "); scanf("%d", &b); if(a == b) puts("同じ値です。"); else { printf("%d が大きい\n", max(a, b)); asc_swap(&a, &b); printf("a == %d, b == %d\n", a, b); } return 0; }
Re:2整数の大小比較
フリオさん、ありがとうございます。
やはり、関数じゃなくて、main関数でprintfしたほうがいいんですかねぇーー。。
なんか私のとちょっと違ったんで、勉強になりました。
if だけしか使ってないところも、勉強になりました。
確かに、2整数しかないから、私が書いてた見たいにelse if とかはいらないですねぇ。
フリオさんの方がもっと、シンプルなものですねぇ。
やはり、関数じゃなくて、main関数でprintfしたほうがいいんですかねぇーー。。
なんか私のとちょっと違ったんで、勉強になりました。
if だけしか使ってないところも、勉強になりました。
確かに、2整数しかないから、私が書いてた見たいにelse if とかはいらないですねぇ。
フリオさんの方がもっと、シンプルなものですねぇ。