• 締切済み

C言語の課題について

C言語のプログラミングの課題なのですが、設問内容として「適当な正整数を読み込んで、12,98,5,34,119,77,26,3の8個の整数の中から、最も近い数を探しましょう。」という問題なのですが、自分でもやってみたもののプログラミングができなかったので、設問のプログラミングがわかる人は早急に教えてくださいよろしくお願いします。

みんなの回答

noname#168451
noname#168451
回答No.5

これが多分一番シンプル かな… #include <stdio.h> #define D_LIST data[0] #define D_DIFF data[1] #define N_VAL near[0] #define N_POS near[1] int main(void) {   int i, input, near[2] = {-1, 0}, data[2][8] = {12,98,5,119,34,77,26,3};   scanf("%d", &input);   for(i = 0;8 > i; i++){     D_DIFF[i] = input - D_LIST[i];     if(0 > D_DIFF[i]) D_DIFF[i] *= -1;     if(N_VAL > D_DIFF[i] || N_VAL == -1){       N_VAL = D_DIFF[i];       N_POS = i;     }   }   printf("near val = %d\n", D_LIST[N_POS]); }

  • luckymako
  • ベストアンサー率55% (29/52)
回答No.4

はい。 #include <stdio.h> int distance(int a, int b){  if(a >= b)   return a - b;  else   return b - a; } int nearest(int num, int* elements, int len){  int i;  int minDist = distance(elements[0], num);  int minElem = elements[0];     for(i = 1; i < len; i++){   int tmpDist = distance(elements[i], num);   if(tmpDist < minDist){    minDist = tmpDist;    minElem = elements[i];   }  }    return minElem; } int main(){  int elements[] = {12, 98, 5, 34, 119, 77, 26, 3};  int num;  while(scanf("%d", &num) != EOF)   printf("%d is the nearest.\n", nearest(num, elements, 8)); }

artoocp
質問者

お礼

丁寧な回答ありがとうございました。 自分ではまだC言語は正直言ってほとんど理解していない状態なのでお手数をおかけして申し訳ありませんでした。

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.3

>「適当な正整数を読み込んで、12,98,5,34,119,77,26,3の8個の整数の中から、 > 最も近い数を探しましょう。」という問題なのですが、 最も近い数をプログラムに探してもらえば OK というか、自分でやってみた何かを質問欄に書けば誰かが直してくれるよ。

artoocp
質問者

お礼

回答ありがとうございました。

回答No.2

int data[] = { 12, 98, 5 ... } と入力された数 x に対し、 tada[i]-x の絶対値がいちばん小さくなる data[i] を探せばいい。 > 自分でもやってみたもののプログラミングができなかったので できたとこまで呈示してほしい。

artoocp
質問者

補足

返事が遅れすみません。自分でやってみたプロクラミングなのですが、 /*kadai2*/ #include <stdio.h> main(){ int x,input,min,mB,a[]={12,98,5,119,34,77,26,3},b[8]; for(x=1;x<8;x++){ b[x]=a[x]-input;} if(x<b[x]){b[x]=-b[x];} for(x=1;x<8;x++){if( min>b[x] ){ min=b[x]; mB=x;} } printf("%d",a[mB],b[x]); } 上記は自分が考えたプログラミングです。あとこの問題から正しいプログラムを実行した場合例として31を入力した時に 「$./a.exe 適当な正整数を入れてね?31 31に最も近い数は4番目の数34です。」 という形で表わす事ができるようです。

  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.1

8枚のカードがあります。それぞれのカードには、 12, 98, 5, 34, 119, 77, 26, 3 の数字が書いてあります。 1枚のカードを引きます。そのカードに書いてある数字が、 先の8枚のカードのうちどれに書いてある数字と一番近いか、 手で求めるときはどういう手順を踏みますか?

artoocp
質問者

補足

返事が遅れすみません。自分でやってみたプロクラミングなのですが、 /*kadai2*/ #include <stdio.h> main(){ int x,input,min,mB,a[]={12,98,5,119,34,77,26,3},b[8]; for(x=1;x<8;x++){ b[x]=a[x]-input;} if(x<b[x]){b[x]=-b[x];} for(x=1;x<8;x++){if( min>b[x] ){ min=b[x]; mB=x;} } printf("%d",a[mB],b[x]); } 上記は自分が考えたプログラミングです。あとこの問題から正しいプログラムを実行した場合例として31を入力した時に 「$./a.exe 適当な正整数を入れてね?31 31に最も近い数は4番目の数34です。」 という形で表わす事ができるようです。

関連するQ&A