C言語で最も小さい数を求める方法

このQ&Aのポイント
  • C言語で配列の中から最も小さい数を求める方法を教えてください。
  • プログラムを実行するときに最も小さい数を出力することができません。どこが間違っているのか教えてください。
  • C言語での最も小さい数の求め方について教えてください。
回答を見る
  • ベストアンサー

C言語 最も小さい数

#include <stdio.h> #define NUMBER 5 int min_of(const int vc[ ], int no){ int i; int min=vc[0]; for(i=1;i<no;i++) if(vc[i]<min){ min=vc[i]; return(min); } } int main(void) {int a[NUMBER],i=0; for(;i<NUMBER;i++){ scanf("%d",&a[i]); } printf("%d",min_of(a,NUMBER)); return(0); } 最も小さい数を出すようにしたいのですがうまくいきません。 どこがおかしいのでしょうか? 教えてくださいm(_ _ )m

質問者が選んだベストアンサー

  • ベストアンサー
  • ok-kaneto
  • ベストアンサー率39% (1798/4531)
回答No.2

if(vc[i]<min){ min=vc[i]; } これをforループの中に入れたいです。 で、returnはifの外でforの後に入れたい。 for(i=1;i<no;i++){ if(vc[i]<min){ min=vc[i]; } } return(min);

CooLNight
質問者

お礼

出来ました。ありがとうございますm(_ _ )m

その他の回答 (1)

  • wormhole
  • ベストアンサー率28% (1619/5654)
回答No.1

>if(vc[i]<min){ >min=vc[i]; >return(min); >} ここをよく読み直してみましょう。

CooLNight
質問者

お礼

出来ました。ありがとうございますm(_ _ )m

関連するQ&A

  • C言語 ファイル出力について

    Excelでも使えるようにCSV形式に書き込みをしたいのですがどのようにすればよいのでしょうか #include <stdio.h> #define N 50 int main(void) { int i, a, n[N], min, temp; for(i=0; i<N; i++) { printf("%2d番目の値:", i+1); scanf("%d",&n[i]); } for(i=0; i<N; i++) { min = i; for(a = i + 1; a < N; a++) { if(n[min] > n[a]) min = a; } temp = n[min]; n[min] = n[i]; n[i] = temp; } printf("小さい順:\n"); for(a=0; a<N; a++){ printf("%2d番目\t%d\n", a+1, n[a]); } return 0; }

  • コンパイルエラー

    このソースを実行しても、コンパイルエラーになります。エラーメッセージは、 エラーE2449で19行目で、'eng'のサイズが不明またはゼロとでます。これが、二つ出ます。また20行目の'mat'も一緒のが二つでます、ほかにもでるのですが、これが、分からないので教えてください。宜しくお願いします。また、int max= vc[0];の意味も教えてください。 #include <stdio.h> #define NUMBER int max_of(int vc[ ],int no) { int i; int max = vc[0]; for (i=1; i< no; i++) if(vc[i] > max) max= vc[i]; return(max); } int main(void) { int i; int eng[NUMBER]; /*数学の点数*/ int mat[NUMBER]; /*英語の点数*/ int max_e, max_m; /*最高点*/ printf("%d人の点数を入力してください。\n", NUMBER); for (i=0; i<NUMBER; i++) { printf("[%d] 英語 :",i+1); scanf("%d", &eng[i]); printf(" 数学 :"); scanf("%d", &mat[i]); } max_e = max_of(eng, NUMBER); /*英語の最高点*/ max_m = max_of(mat, NUMBER); /*数学の最高点*/ printf("英語の最高点=%d\n", max_e); printf("数学の最高点=%d\n", max_m); return (0); }

  • C言語

    3. 整数配列data の,data[left]からdata[right-1]の最小値がある添字番号を返す関数 int min_ind_ary(const int data[ ], int left, int right) で最小値が複数あるときは,一番小さい添字を返すようにするにはどうしたらよいのかわかりません? 途中経過↓ #include <stdio.h> int min_ind_ary(const int data[10],int left,int right) { int i,min = 0; for( i = 1; i < left; i++){ if(data[min] < data[i]) min = i; } return min; } void print_ary(const int data[10], int size){ int i; for(i = 0; i < 10; i++){ printf("%2d", data[i]); } } void sort_ary (int data[10], int size) { int i; for(i = 0; i < size - 1; i ++ ) { int min, work; min = min_ind_ary(data, i, size); work = data[min]; data[min] = data[i]; data[i] = work; } return; } int main(void) { int data[10] = {1, 6, 4, 8, 2, 3, 5, 9, 7, 4}; print_ary(data, 10); sort_ary(data, 10); print_ary(data, 10); return 0; }

  • c言語でのダイクストラ法の実装

    大学の課題で、c言語におけるダイクストラ法について以下のようなものが出たのですが出力のためにどのようなコードを書けばいいかわかりません。どなたかコードや実装方法を教えていただけないでしょうか。 (入力例) 7 -1 7 3 6 -1 -1 4 7 -1 5 -1 6 -1 -1 3 5 -1 4 1 3 5 6 -1 4 -1 -1 -1 7 -1 6 1 -1 -1 2 -1 -1 -1 3 -1 2 -1 9 4 -1 5 7 -1 9 -1 1 1行目は頂点の数、2行目以降の各行は隣接行列の各要素を空白区切りで表し、最後の行の数はスタートの頂点の番号 [出力] 1. スタートとして選択した頂点から各頂点への最短経路とコストを以下の形式で 出力する.ここで s はスタートの頂点, g はゴールの頂点, c は合計のコス トを表す.また s ... g は最短経路の各頂点を空白区切りとして表す. s-->g : c ( s ... g ) 以下は上記の入力例の場合の出力例 Input>1 <-- スタートとして選択した頂点番号 1-->0 : 7 ( 1 0 ) 1-->1 : 0 ( 1 ) 1-->2 : 5 ( 1 2 ) 1-->3 : 9 ( 1 2 3 ) 1-->4 : 6 ( 1 4 ) 1-->5 : 8 ( 1 2 5 ) 1-->6 : 10 ( 1 2 6 ) ↓自分の書いたコード #include <stdio.h>#include <limits.h>#define FALSE 0 #define TRUE (!FALSE) #define INFINITY INT_MAX #define MAXSIZE 100 int dijkstr(int number_of_vertex, int weight[][MAXSIZE], int start_vertex){ int is_in_mst[MAXSIZE], d[MAXSIZE]; int i, j, number_of_edges, min_d, v; printf("Input>%d\n", start_vertex); for (i = 0; i <number_of_vertex; i++) is_in_mst[i] = FALSE; for (i = 0; i <number_of_vertex; i++) d[i] = INFINITY; d[start_vertex] = 0; for(number_of_edges = 0; number_of_edges<(number_of_vertex-1); number_of_edges++) { min_d = INFINITY; v = INFINITY; for (i = 0; i <number_of_vertex; i++) { if(is_in_mst[i] == FALSE &&d[i] <min_d) { min_d = d[i]; v = i;}} if(v != INFINITY) is_in_mst[v] = TRUE; for (i = 0; i <number_of_vertex; i++) { if(is_in_mst[i] == FALSE &&weight[i][v] != INFINITY &&(weight[i][v] + d[v]) <d[i]) d[i] = weight[i][v] + d[v];}}} int main(void){ int weight[MAXSIZE][MAXSIZE]; int i, j, data, n, start; printf("Input data size>"); scanf("%d", &n); printf("%d\n", n); for (i = 0; i <n; i++) { for(j = 0; j <n; j++) { printf("Input data>"); scanf("%d", &data); printf("%d\n", data); weight[j][i] = data; if(weight[j][i] == -1) weight[j][i] = INFINITY;}} printf("\n"); printf("Input start vertex>"); scanf("%d", &start); return 0;}

  • プログラミング・C言語の配列(単純選択ソート)についてです

    最近プログラミングを勉強し始めた初心者です。 今、配列について勉強していて あるプログラムを作成しています。 それは10個の実数を入力して、入力された実数を降順に並び替えるものなのですが、 降順に並び替えることができません(泣 どこが違うのか教えていただきたいのですが・・・ よろしくお願いします。 #include <stdio.h> #define NUMBER 10 int main(void) { int i, j, min, min_a, temp; double zissu[NUMBER]; printf("%d個の実数を入力してください", NUMBER); min=i; printf("date[%d]:", i); scanf("%lf", &zissu[i]); for(j=i+1; j<NUMBER; j++) { if(zissu[j] < zissu[min]) min_a =j; } temp = zissu[min]; zissu[min] = zissu[min_a]; zissu[min_a] = temp; } for(i = 0; i < NUMBER; i++) printf("date[%d]=%lf \n", i, zissu[i]); return (0); } 【入出力例】 10個の実数を入力してください data[0]:24.2 data[1]:2 ・・・ data[9]:9 降順にソートしました data[0] = 2 data[1] = 9 data[2] = 24.2 ・・・ みたいにしたいのです。 よろしくお願いします

  • C言語でまったくわからないところがあります。

    C言語でまったくわからないところがあります。 配列を格納して、その中の最小値をA[9]と入れ替える動作がしたいのですが、 #include<stdio.h> int main(void) { double A[10],min,tmp; int i; for(i=0;i<=9;i++) { printf("A[%d]=",i); scanf("%lf",&A[i]); } printf("\n"); min=A[0]; for(i=0;i<=9;i++) { if(A[i]<min) { min=A[i]; } } tmp=A[i]; A[i]=A[9]; A[9]=tmp; for(i=0;i<=9;i++) { printf("A[%d]=%.0lf\n",i,A[i]); } return 0; } これを実行すると、A[9]=最小値にはなるのですが、A[i]はそのまま入れ替わらないのです。 誰か、どのように直せばよいか、教えていただけないでしょうか。よろしくお願いします。

  • C言語について

    #include <stdlib.h > #include <stdio.h> double sum ( double data[] , int number) { double result; int a ; result = 0; for (a = 0; a < number; a+1){ result += data[a]; } return (result); } double average ( double data[] , int number) { double result; result = sum(data,number)/number; return (result); } int main ( void ) { double heikin; double data[9]; double average; int number,i; printf("数値の数を入力(1~10) = "); scanf("%d",&number); printf("データを入力 "); for( i=0;i<number;i++ ) { printf("%d個目 = ",i+1); scanf("%d",&data[i]); } heikin = average(data,number); printf("平均は%lfです\n",heikin);//文を使って平均値(heikin)を出力 return(EXIT_SUCCESS); } というプログラムがありエラーで 「35行目」で記述エラーを発見しました。 「function pointer」を付け忘れています。 と出てきます。ほかのサイト様で写真とかありえないといわれましたのでテキストで再度質問させていただきました。 よろしくお願いします。 前投稿から編集もしているので少しプログラムが違います。

  • c言語 行列の積に関して

    <問>  4行3列の行列aと3行4列の行列bの積を、4行4列の行列cに格納する関数を作成せよ。  void mat_mul(const int a[4][3], const int b[3][4], int c[4][4]) 入門レベルのスキルしかありません。 上手く行列の積のプログラムが組めません。 行列の積の計算結果が何も出てきません。 どの様にしたら良いかご指導の程、宜しくお願いします。 <プログラム>  void mat_mul(const int a[4][3], const int b[3][4], int c[4][4]) { int i, j, k; for (i = 0; i < 4; k++) { for (j = 0; j < 4; i++) for (k = 0; k < 3; j++) c[i][j] = c[i][j] + (a[i][k] * b[k][j]); } } void mat_print(const int m[4][4]) { for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) printf("%4d", m[i][j]); putchar('\n'); } } int main(void) { int i, j ,k; int tensu1[4][3]; int tensu2[3][4]; int seki[4][4]; for(i = 0; i < 4; i++) { for (j = 0; j < 3; j++) { scanf("%d", &tensu1[i][j]); } putchar('\n'); } for(i = 0; i < 3; i++) { for(j = 0; j < 4; j++){ scanf("%d", &tensu2[i][j]); } putchar('\n'); } putchar('\n'); mat_mul(tensu1, tensu2, seki); puts("行列の積"); mat_print(seki); return 0; }  

  • C言語 初心者です。

    この合格者一覧のソースについてわからない所があります。 詳しく教えてもらえないでしょうか? #include <stdio.h> #define NUMBER 5 /* 人数 */ int main(void) { int i; int snum = 0; int tensu[NUMBER]; int succs[NUMBER]; puts("点数を入力してください。"); for (i = 0; i <NUMBER ; i++){ printf("%2d番:", i + 1); scanf("%d",&tensu[i]); if (tensu[i] >= 60){ succs[snum++] = i; } } puts("合格者一覧"); puts("-----------"); for (i = 0; i < snum; i++) printf("%2d (%3d点)\n",succs[i] + 1, tensu[succs[i]]); return (0); } そのわからないところとは、 if (tensu[i] >= 60){ succs[snum++] = i; で、特に、succs[snum++] = i について教えてください。  私の考えでは、一回目は、 succs[1] = 0 になるのですが・・・?? それでは、おかしい気がするのです。 この i は どれに代入するのですか?? 全くわかりません。 どうか、回答よろしくお願いします。

  • C言語の参照はずしについて

    ソートのプログラムなんですが #include <stdio.h> #include <stdlib.h> int comp(const void *, const void *); int main() { int i; int test[6] = {10, 8, 2, 6, 4, 0}; qsort(test, (size_t)6, sizeof(int), comp); printf("\n"); for (i = 0; i < 6; i++) printf("%d\n", test[i]); return 0; } int comp(const void *a, const void *b) { static int i = 1; printf("%02d--%d,%d\n", i, *(int *)a, *(int *)b); i++; return (*(int *)a - *(int *)b); } 最後のreturnの()の中身がよくわかりません。「参照はずし」という事をしてるらしいんですが「参照はずし」とは何ですか意味も教えてください。

専門家に質問してみよう