ページ 1 / 1
2整数の大小比較
Posted: 2007年4月30日(月) 16:27
by ☆
こんにちは!!!!!!!『☆』です!!!!(笑)
またまた質問にきました♪♪お願いいします。
問題は、「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整数の大小比較
Posted: 2007年4月30日(月) 16:36
by box
a, bというポインタの大小ではなく、a, bが指している領域の内容の大小を
比較しなければなりません。
Re:2整数の大小比較
Posted: 2007年4月30日(月) 16:54
by ☆
ということは・・・アドレスってことですか??
Re:2整数の大小比較
Posted: 2007年4月30日(月) 17:01
by ☆
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回表示されてしまいます。。
Re:2整数の大小比較
Posted: 2007年4月30日(月) 17:04
by ☆
何回もすみません。。。。
このように変えてみました☆
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整数の大小比較
Posted: 2007年4月30日(月) 17:16
by box
17:04のコードは、
if(a<b){
と、ポインタどうしを比べているので正しくありません。
比較の仕方は、17:01の方が正しいです。
17:01のコードで、後の方のprintf()の内容と書いている場所が正しくありません。
else if のすぐ後に、
「*aの方が大きい」という内容のメッセージを出力してから、
*aと*bを入れ替えるとよいでしょう。
Re:2整数の大小比較
Posted: 2007年4月30日(月) 17:22
by box
ところで、2つの整数値が等しい場合は、どうするようになっているのですか?
Re:2整数の大小比較
Posted: 2007年4月30日(月) 17:24
by ☆
ちょっと全然違う質問なんdせすが、、、関数の中で出力するという子とはしないほうがいいですか??
出力はmain関数でした方がいいでかね??
Re:2整数の大小比較
Posted: 2007年4月30日(月) 17:25
by ☆
ちょっと全然違う質問なんですが、、、関数の中で出力するという子とはしないほうがいいですか??
出力はmain関数でした方がいいでかね??
あ!!そうですね!!同値のときは、強制終了するように、変えてみます。
Re:2整数の大小比較
Posted: 2007年4月30日(月) 17:32
by ☆
でも、asc_swap関数は、void型なので、return -1もbreakも使えません。。。
Re:2整数の大小比較
Posted: 2007年4月30日(月) 18:44
by box
> 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つの整数を入れ替えなくても、単に大小関係を判定するだけで
よいはずなのですが…。
Re:2整数の大小比較
Posted: 2007年4月30日(月) 18:56
by ☆
ううん。。。私たちもそう思うんですけどねぇー。。。
入れ換える練習みたいなんですよねぇ。。。。
しかも、 *a < *b となるように swap する関数 のようにまた指示されてるんです。。
Re:2整数の大小比較
Posted: 2007年5月01日(火) 01:26
by フリオ
こんなんでいいのかな?。
#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整数の大小比較
Posted: 2007年5月01日(火) 14:06
by ☆
フリオさん、ありがとうございます。
やはり、関数じゃなくて、main関数でprintfしたほうがいいんですかねぇーー。。
なんか私のとちょっと違ったんで、勉強になりました。
if だけしか使ってないところも、勉強になりました。
確かに、2整数しかないから、私が書いてた見たいにelse if とかはいらないですねぇ。
フリオさんの方がもっと、シンプルなものですねぇ。