- 締切済み
C言語の課題について
C言語のプログラミングの課題なのですが、設問内容として「適当な正整数を読み込んで、12,98,5,34,119,77,26,3の8個の整数の中から、最も近い数を探しましょう。」という問題なのですが、自分でもやってみたもののプログラミングができなかったので、設問のプログラミングがわかる人は早急に教えてくださいよろしくお願いします。
- みんなの回答 (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)
はい。 #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)); }
- koko_u_
- ベストアンサー率18% (459/2509)
>「適当な正整数を読み込んで、12,98,5,34,119,77,26,3の8個の整数の中から、 > 最も近い数を探しましょう。」という問題なのですが、 最も近い数をプログラムに探してもらえば OK というか、自分でやってみた何かを質問欄に書けば誰かが直してくれるよ。
お礼
回答ありがとうございました。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
int data[] = { 12, 98, 5 ... } と入力された数 x に対し、 tada[i]-x の絶対値がいちばん小さくなる data[i] を探せばいい。 > 自分でもやってみたもののプログラミングができなかったので できたとこまで呈示してほしい。
補足
返事が遅れすみません。自分でやってみたプロクラミングなのですが、 /*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)
8枚のカードがあります。それぞれのカードには、 12, 98, 5, 34, 119, 77, 26, 3 の数字が書いてあります。 1枚のカードを引きます。そのカードに書いてある数字が、 先の8枚のカードのうちどれに書いてある数字と一番近いか、 手で求めるときはどういう手順を踏みますか?
補足
返事が遅れすみません。自分でやってみたプロクラミングなのですが、 /*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です。」 という形で表わす事ができるようです。
お礼
丁寧な回答ありがとうございました。 自分ではまだC言語は正直言ってほとんど理解していない状態なのでお手数をおかけして申し訳ありませんでした。