- ベストアンサー
printfの挿入箇所
- C言語のプログラムで、特定の場所に「printf」を挿入する方法について質問があります。
- 質問のプログラムでは、配列をバブルソートする処理があります。
- しかし、処理の途中結果を表示するために「printf」を挿入したいのですが、うまく表示されません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#include <stdio.h> #include <stdlib.h> #define N 500 void bubblesort(int h, int k, int *A); void swap(int i, int j, int *A); /* 個人的な見易さの都合上 for (i = 0;i < n;i++) printf("%d",i); のような表記を for (i = 0;i < n;i++){ printf("%d",i); } と書き換えて,また if ( k == 1 ) { } else { } を if ( k == 1 ){ }else{ } と書き換え, int main() { } を int main(){ } と書いてます。 */ /* 変数を増やした */ int swapcount = 0; int comparecount = 0; int main(void){ int A[N]; int n, i; FILE *file; file=fopen("sortdata", "r"); /* データの読込み */ fscanf(file, "%d", &n); if(n>N){ printf("Illegal array size n = %d for N = %d\n", n, N); exit(1); } for(i=0; i< n ; i++){ fscanf(file, "%d", &A[i]); } bubblesort(0, n-1, A); /* 配列A[0]からA[n-1]の整列 */ /* 別に表示はここでなくても構わない。 ソースコードをUTF-8で書いてあるが, コマンドプロンプトは日本語版ではShift_JIS前提になっていて文字化けするため 比較回数,という日本語表記にはしていない。 */ printf("compare count : %d\n",comparecount); printf("swap count : %d\n",swapcount); return(0); } /* A[k],...,A[h]の要素をバブルソートによって整列 */ void bubblesort(int h, int k, int *A){ int i, j, p; int no; int test; /* test==1; すでに整列済み */ for(i=h; i<k; i++){ /* バブル操作の反復 */ test=1; for(j=k; j>=i+1; j--){ for(no=0; no<j; no++){ printf(" %d",A[no]); } if(A[j-1] > A[j]){/* 個人的に落ち着かなかったので表示と向きを統一しました。*/ printf(" > %d",A[j]); swap(j, j-1, A); test=0; }else if (A[j-1] < A[j] ){ printf(" < %d",A[j]); }else{ printf(" = %d",A[j]); /* 折角だから増やしてみる */ } for(no=j+1; no<=k; no++){ printf(" %d",A[no]); } printf("\n"); comparecount++; /* 比較回数を増やす */ } /* 出力結果自体は最後こう出力すべきみたいなので 体裁をそろえるために各prinf関数の後ろの半角空白を取り除いてます */ for(no=h; no<=k; no++){ printf(" %d",A[no]); } printf("\n"); printf("\n"); if(test==1){ return; } } return; } /* Swap A[i] and A[j]. */ void swap(int i, int j, int *A){ int temp; temp=A[i]; A[i]=A[j]; A[j]=temp; swapcount++; /* 交換回数を増やす */ return; }
その他の回答 (1)
- himajin100000
- ベストアンサー率54% (1660/3060)
訂正 パスのこと忘れてた。 for(i=h; i<k; i++){ /* バブル操作の反復 */ printf("pass%d:\n",i-h+1); /* ここ追加 */ printf("\n"); /* printf("\n"); ここ不要 */ if(test==1){