2整数の大小比較

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

2整数の大小比較

#1

投稿記事 by » 18年前

こんにちは!!!!!!!『☆』です!!!!(笑)
またまた質問にきました♪♪お願いいします。

問題は、「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関数が上手く働いていないんですが・・どこが違うのでしょうか??
教えてください☆お願いします。

box

Re:2整数の大小比較

#2

投稿記事 by box » 18年前

a, bというポインタの大小ではなく、a, bが指している領域の内容の大小を
比較しなければなりません。

Re:2整数の大小比較

#3

投稿記事 by » 18年前

ということは・・・アドレスってことですか??

Re:2整数の大小比較

#4

投稿記事 by » 18年前

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整数の大小比較

#5

投稿記事 by » 18年前

何回もすみません。。。。

このように変えてみました☆

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);
}

一応、実行結果は合っているんですが、内容的に合ってますか??

box

Re:2整数の大小比較

#6

投稿記事 by box » 18年前

17:04のコードは、
if(a<b){
と、ポインタどうしを比べているので正しくありません。
比較の仕方は、17:01の方が正しいです。

17:01のコードで、後の方のprintf()の内容と書いている場所が正しくありません。
else if のすぐ後に、
「*aの方が大きい」という内容のメッセージを出力してから、
*aと*bを入れ替えるとよいでしょう。

box

Re:2整数の大小比較

#7

投稿記事 by box » 18年前

ところで、2つの整数値が等しい場合は、どうするようになっているのですか?

Re:2整数の大小比較

#8

投稿記事 by » 18年前

ちょっと全然違う質問なんdせすが、、、関数の中で出力するという子とはしないほうがいいですか??
出力はmain関数でした方がいいでかね??

Re:2整数の大小比較

#9

投稿記事 by » 18年前

ちょっと全然違う質問なんですが、、、関数の中で出力するという子とはしないほうがいいですか??
出力はmain関数でした方がいいでかね??

あ!!そうですね!!同値のときは、強制終了するように、変えてみます。

Re:2整数の大小比較

#10

投稿記事 by » 18年前

でも、asc_swap関数は、void型なので、return -1もbreakも使えません。。。

box

Re:2整数の大小比較

#11

投稿記事 by box » 18年前

> 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整数の大小比較

#12

投稿記事 by » 18年前

ううん。。。私たちもそう思うんですけどねぇー。。。
入れ換える練習みたいなんですよねぇ。。。。
しかも、 *a < *b となるように swap する関数 のようにまた指示されてるんです。。

フリオ

Re:2整数の大小比較

#13

投稿記事 by フリオ » 18年前

 
 こんなんでいいのかな?。
#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整数の大小比較

#14

投稿記事 by » 18年前

フリオさん、ありがとうございます。

やはり、関数じゃなくて、main関数でprintfしたほうがいいんですかねぇーー。。

なんか私のとちょっと違ったんで、勉強になりました。

if だけしか使ってないところも、勉強になりました。
確かに、2整数しかないから、私が書いてた見たいにelse if とかはいらないですねぇ。
フリオさんの方がもっと、シンプルなものですねぇ。

閉鎖

“C言語何でも質問掲示板” へ戻る