- 締切済み
非常に困ってます
C言語の問題集の回答がないので困っているので誰か教えてください。 私はまだ始めたばかりなので手におえません。 今私が理解しているif文、switch文、for文、while文、do-while文、配列、を 使用してでお願いします。 以下のプログラムに付け足しをしてバブルソートのプログラムを完成させなさい。 バブルソート前とバブルソート後のそれぞれの並びを表示すること。 #include<stdio.h> #define No 11 main(){ int a[No]={2,7,5,1,7,1,8,3,6,4,9}; int i,j,temp; 実行結果例 before 2 7 5 1 7 1 8 3 6 4 9 after large >>>>>>>>>>> small 9 8 7 7 6 5 4 3 2 1 1
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- mi_masakaz
- ベストアンサー率66% (2/3)
- BLK314
- ベストアンサー率55% (84/152)
- takeshix100
- ベストアンサー率25% (1/4)
- S117
- ベストアンサー率40% (18/45)
- lesskey
- ベストアンサー率33% (66/200)
- g_zero
- ベストアンサー率37% (26/70)
関連するQ&A
- 情報処理のバブルソートの問題について質問します。
情報処理のバブルソートの問題について質問します。 #include <stdio.h> int main(void) { double x[5]={6.0, 9.0, 2.0, 10.0, 8.0}; int i,j; int n=5; double temp; /* 初期状態の表示 */ printf("並べ替え前の並びは以下の通り:\n"); for (i=0; i<n; i++) { printf("%f,\t",x[i]); } printf("\n"); for (i=0; i<n-1; i++) { for (j=i+1; j<n; j++) { if (x[j] > x[i]) { temp = x[i]; x[i]=x[j]; x[j]=temp; } } } printf("大きい順に並べ替えた結果は以下の通り:\n"); for (i=0; i<n; i++) { printf("%f,\t",x[i]); } printf("\n"); return 0; } というプログラムを用いて行ってみたのですが、 これは王様ソートというプログラムだと言われました。 どのように換えればバブルソートになるのでしょうか?
- ベストアンサー
- その他(学問・教育)
- C言語
昇順にソートしたいのですけど、このソースだと実行しても、最後に入力した文字が、表示されます。分からないので宜しくお願いします。(例21,34 55を入力すると、55,55,55と表示されます) #include <stdio.h> void sort1(int *dt, int n) { int i,temp,exchg=0; while (exchg<n) { for (i=1; i<n; i++) { if (dt[i-1] > dt[i]) { temp=dt[i-1]; dt[i-1]=dt[i]; dt[i]=temp; } } exchg++; } }int main(void) { int data[10]; int no=3; int i,*p_data; p_data =data; printf("%d個の整数を入力してください。\n",no); for (i=0; i<no; i++) { printf("data[%d]:",i); scanf("%d", p_data); } sort1(data,no); puts("これからの値を昇順に並び替えました。"); for (i=0; i <no; i++) printf("data[%d]=%d\n", i,*p_data); return(0); }
- ベストアンサー
- C・C++・C#
- クイックソート
クイックソートのプログラムを作ったのですがうまくいきません 汗 コンパイル時に sample1.c: In function ‘quicksort’: sample1.c:31: error: expected expression before ‘]’ token sample1.c:32: error: expected expression before ‘]’ token sample1.c:32: error: too few arguments to function ‘quicksort’ とでます。 まだアルゴリズムやCは勉強始めたばかりで基本的なところでつまって いるかもしれません。ご教授おねがいします。 /*クイックソート*/ #include<stdio.h> #define MAXDATA 10 #define swap(type,a,b) {type m; m = a; a = b; b = m;} void quicksort(int a[],int left ,int right) { int i,j,pivot; pivot = a[left]; i = left + 1; j = right; while(i <= j){ while(a[i]<pivot) i++; while(a[j]>pivot) j--; if(i<j){ swap(int,a[i],a[j]); i++; j--; } } swap(int,a[left],a[j]); quicksort(a[],left,j-1); quicksort(a[],j+1,right); } int main(void) { int k,j,sort[MAXDATA]; for(k=0;k < MAXDATA;k++) {printf("sort[%d]:",k); scanf("%d",&sort[k]);} for(k=0;k < MAXDATA;k++) printf("%3d",sort[k]); puts("ソートしますか? Yes:1 No:0 ///"); scanf("%d",&j); if(j==1){ quicksort(sort,0,MAXDATA-1); for(k=0;k < MAXDATA;k++) printf("%3d",sort[k]); } putchar('\n'); return(0); }
- ベストアンサー
- C・C++・C#
- 素数を求めるプログラム
素数を求める関数の作り方を調べていたら以下のような プログラムを見つけました。 for文の中は奇数で割り切れるかどうかを調べているということで いいのでしょうか??何故j*j<=kとなっているのでしょうか?? 後、最後のreturn YES;はどのような場合実行されるのでしょうか?? #include<stdio.h> #define YES 1 #define NO 0 int sosu(int k){ int j; if(k == 2) return YES; if(k % 2 == 0) return NO; for(j=3;j*j<=k;j+=2){ if(k % j == 0) return NO; } return YES; }
- ベストアンサー
- C・C++・C#
- ソートプログラム
ファイルから10個の整数が 29 45 11 2 86 91 33 62 77 59 のように一行に1個の形式で格納されている。このファイルから10個の整数を読み込み、選択法でソートし、この数字を小さい順に表示するプログラムを作成したのですが、ソート部分がうまくできません。どなたかどうすれば改善できるか教えてください。 <プログラム> #include<stdio.h> #include<stdlib.h> #define MAXN 100 int A[MAXN]; main() { _inputdata(); _selectionsort(1,10); _printdata(); } selectionsort(p,q) ___int p, q; { _int i, j, cmin, temp; _for(j = p; j <= q; j++){ __cmin = j; /* A[cmin]が現在の最小値 */ __for(i = j+1; i <= q; i++) ___if(A[cmin] > A[i]) cmin = i; __/* A[j]とA[cmin]との入れ換え操作 */ __swap(j, cmin); _} } swap(int x, int y) { _int temp; _temp = x; _x = y; _y = temp; } inputdata() { _FILE *fp; _if((fp=fopen("integers10.dat", "r"))==NULL) { __printf("ファイルが見つかりません: integers10.dat\n"); __exit(EXIT_FAILURE); _} _printf("データを入力\n"); _while(fscanf(fp, "%s", A)!=EOF) { ____printf("%s\n",A); _} _fclose(fp); } <コンパイル→実行> % gcc -o sort1 sort1.c % ./sort1 データを入力 29 45 11 2 86 91 33 62 77 59 ソート済みデータ 0 0 0 0 0 0 0 0 0 0 %
- ベストアンサー
- C・C++・C#
- UNIXのCでのことなのですが
#include <stdio.h> #define gyou 5 #define retsu 5 main(){ int sort[gyou][retsu]; int tate[retsu]; int yoko[gyou]; int i,j; FILE* fp; for(j=0;j<tate;j++) tate[j]=0; fp=open("sort.txt","r"); for(i=0;i<gyou;i++) { for(j=0;j<retsu;j++) fscanf(fp,"%d",&seiseki[i][j]); } fclose(fp); return 0; } この文にどのようなプログラムを書き足せば、sort.txtの中に書かれている数字20個(4行×5列)を昇順に並び替えさせることができるのでしょうか?したい形は 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 です。 ヒントだけでもいいのでご教授お願いいたします。
- 締切済み
- C・C++・C#
- C言語!教えてください!
/* キーボードから4桁の数字を読み込み、3で割った余りが0ならばそのまま 表示する。1ならば数字と並びを逆に表示する。 2ならばその数字と逆に並べた数字の差の絶対値を表示。その際に差が0 であるなら入力した数字をそのまま表示するプログラム。 */ #include <stdio.h> int main(void) { int no; printf("4桁の数字を入力してください:"); scanf("%d",&no); if(no % 3 ==0) printf("%d \n" , no); else if(no % 3 ==1) do{ printf("%d",no%10); no = no / 10; }while (no > 0 ); else ここから絶対値を考えようとしたのですが 逆にした値が文字で置かれていないのでやりようがありません。 逆にした値は文字で置けるものなんですか? それともこの文ではできませんか? よろしくお願いします。
- ベストアンサー
- C・C++・C#
- C言語をお願いします
何が違うのか教えてください。 segmentation faultになります。 よく分からないので、プログラムを作っていただければ、助かります。 問 整数を入力し、降順並び変えてに表示。 ・入力した整数は配列に入れ、その配列を使って並び変える(入力終りの印は 1000 とする)。 ・入力する整数の個数は #define NUM 100 を使いなさい。 ・使うデータは、下記の例のように、キーボードから入力すること。 #include<stdio.h> #define NUM 100 int main(void){ int d[NUM]; int temp; int i,j,n; printf("Input scores.\n"); for(i=0; i<NUM && d[i]!=1000; i++){ scanf("%d",&d[i]); } n = i; for(i = 0; i < n; i++){ for(j = i + 1; j < n;j++){ if(d[j] > d[i]){ temp = d[i]; d[j] = d[i]; d[i] = temp; } } } printf("After sort."); for(i=0; i < n; i++){ printf("%d\n",d[i]); } return 0; } 実行例 Input scores. 60 30 45 90 100 0 1000 After sort. 100 90 60 45 30 0 よろしければ 問2 並び変えをする部分を mysort 関数にしたプログラムを作ってください。 main 関数から mysort 関数には点数の個数と sort 前の配列を渡し、並び変え結果の表示はmain 関数でお願いします。 (問題の意味が分かりません) 関数はさっぱり分かりません。 では、お願い致します。
- ベストアンサー
- C・C++・C#
- クイックソートのプログラムについて
一から自分なりにやってみましたが、再帰処理の部分がうまくゆきません。 改善方法をご教授願えたらと思います。 #include<stdio.h> void qsort (int x[], int a, int b) { int temp, kijyun, i; kijyun = a; i = a + 1; while (i <= b) { if (x[i] < x[kijyun]) { change (x, kijyun, i); kijyun = kijyun + 1; } i++; } if (kijyun != 0) //基準より左側をソートする。 { qsort (x, 0, kijyun - 1); } //以下if文の部分で、うまくいきません。 if (kijyun != 9) //基準より右側をソートする。 { qsort (x, kijyun + 1, 9); } } int change (int x[], int a, int b) //x[b]をx[a]の位置に挿入させる。 { int i, temp; i = b; while (i != a) { temp = x[i]; x[i] = x[i - 1]; x[i - 1] = temp; i--; } } int main (void) { int i, x[9] = { 6, 8, 9, 5, 3, 2, 1, 4, 7 }; qsort (x, 0, 8); for (i = 0; i != 9; i++) { printf ("\n%d", x[i]); } }
- 締切済み
- C・C++・C#