間違いの部分を教えてください

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

間違いの部分を教えてください

#1

投稿記事 by ぽーる » 9年前

5つの数字を入力して最大と最小、最大と最小の差を求めるプログラムを作成しているのですが、
条件としてint a(int *a, int *max, int *min)は絶対に使うことです。
ポインタが全然把握できていないのでお手伝いお願いします。
問題点は出力したときに数字が全く望んでいる数字と違う数字が出てきてします。

コード:

#include<stdio.h>
#define N 5

int a(int *a, int *max, int *min);

int main(void)
{
	int test[N];
	int i, j;
	int max, min;

	for (i = 0; i < N; i++){
		printf("%d個目の整数を入力\n",i + 1);
		scanf("%d",&test[i]);
	}
	max = 0;
	min = 100;
	
	j = a(test, &max, &min);

	printf("最大:%d,最小値:%d,最大―最小%d", max,min,j);
	return 0;
}

int a(int *a, int *max, int *min)
{
	int i, j;

	for (i = 1; i < N; i++){
		if (*max > *(a + 1))*max = *(a + 1);
		if (*min < *(a + 1))*min = *(a + 1);
	}
	return *max - *min;
}

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 間違いの部分を教えてください

#2

投稿記事 by みけCAT » 9年前

  • maxやminの初期値が正しくない
  • a[1]しか見ていない
  • 不等号の向きが逆
  • (scanfの戻り値をチェックしていない)
  • (関数aで使用されていない変数jが宣言されている)
改善したコードです。

コード:

#include<stdio.h>
#define N 5

int a(int *a, int *max, int *min);

int main(void)
{
	int test[N];
	int i, j;
	int max, min;

	for (i = 0; i < N; i++){
		printf("%d個目の整数を入力\n",i + 1);
		if(scanf("%d",&test[i]) != 1){
			puts("入力エラー");
			return 1;
		}
	}
	
	j = a(test, &max, &min);

	printf("最大:%d,最小値:%d,最大―最小%d", max,min,j);
	return 0;
}

int a(int *a, int *max, int *min)
{
	int i;

	*max = *min = *a;
	for (i = 1; i < N; i++){
		if (*max < *(a + i))*max = *(a + i);
		if (*min > *(a + i))*min = *(a + i);
	}
	return *max - *min;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

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