要素数がnoであるint型の配列vcの要素の最小値を返す関数

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

要素数がnoであるint型の配列vcの要素の最小値を返す関数

#1

投稿記事 by ビギナー » 10年前

要素数がnoであるint型の配列vcの要素の最小値を返す関数を
int min_of(const int vc[], int no)
を用いて作ることが目的です。
以下のように作ってみたのですが、うまく作動しませんでした。
具体的には、繰り返しが起きず、でたらめな数値が出てきます。
どこを修正すればいいでしょうか。
あいまいな点が多くあるので、お手柔らかにお願いします。

[2] 環境  
 [2.1] OS : Windows7
 [2.2] コンパイラ名 :EasyIDEC

 ・どの程度C言語を理解しているか
 const型修飾子を学んでいる最中。ポインタ・マクロ・列挙体・再帰・入出力はまだ分かりません。

コード:

#include <stdio.h>



int min_of(const int vc[], int no)/*要素数noの配列vcの最小値を返す*/
{
	int i;
	int min = vc[0];
	
	for( i = 1; i < no; i++){
		if( min > vc[i])
			min = vc[i];
	}
	return min;
	}
	
	int main(void)
	{
		int num, i;
		int vc[] = {};
		int min_e;
		
		printf("要素をいくつ入力しますか。");/*要素数の決定*/
		printf("要素数:");		scanf("%d", &num);
		
		printf("%d個分整数を入力してください。", num);
		
		for( i = 0; i < num; i++){/*配列vcにnum個分、任意の整数を代入*/
			printf("vc[%d] = ", i + 1);
			scanf("%d", &vc[i]);
			putchar('\n');
		}
		
		min_e = min_of( vc, num);
		
		printf("与えられた整数の中でもっとも小さい数は%dです。",	min_e);
		
		return 0;
	}
よろしくお願いします。

hide

Re: 要素数がnoであるint型の配列vcの要素の最小値を返す関数

#2

投稿記事 by hide » 10年前

最小値を求める関数としては合っています。

配列は 確保した分にしかアクセスしてはいけません。
array[100] = 10 とやったからといって配列の100番目を勝手に使えるようにしてくれるわけではありません。
その前の段階で array[128] などとした分だけを利用することが出来ます。必要な分を自分で先に確保しましょう。
教科書の配列のあたりをもう一度見なおしてみると良いです。

それと、配列についてのミスを関数のほうのミスだと思い込んでしまっていることも問題だと思います。
入力もやらなければならない課題とかなのだろうとは思うのですが、まずは

コード:

int main(void) {
	int numList[] = {5,2,4,3};
	printf("%d",min_of(numList,4));
	return 0;
}
などという形でなるべく必要な機能だけをチェックしましょう。

ビギナー

Re: 要素数がnoであるint型の配列vcの要素の最小値を返す関数

#3

投稿記事 by ビギナー » 10年前

迅速な回答ありがとうございます。
早速以下のように組んで確認しました。
配列は自分が思っているより都合のよいものではないのですね。
後で改めて配列の確認をします。

この問題は、「明解C言語 入門編 2003年」の演習問題です。
#define で要素数を指定すれば簡素に組めるようなプログラムなのですが、要素の入力から出来ないものかと思い挑戦してみたい次第です。

しかし、やろうとしていたことは思っていたよりも自分の能力を超えたものだったようですね。
あまり背伸びをせずに、学習を続けたいと思います。

コード:

#include<stdio.h>


int min_of(int vc[], int num){
	int i;
	int	min = vc[0];
	
	for( i = 1; i < num; i++){
		if(min > vc[i])
			min = vc[i];
	}
	return min;
}


int main(void) {
    int numList[] = {5,2,4,3};
    
    printf("%d\n",min_of(numList,4));
    return 0;
}

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

Re: 要素数がnoであるint型の配列vcの要素の最小値を返す関数

#4

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

ビギナー さんが書きました:#define で要素数を指定すれば簡素に組めるようなプログラムなのですが、要素の入力から出来ないものかと思い挑戦してみたい次第です。
mallocなどで「動的確保」しましょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

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