• ベストアンサー

中央値の抽出

 printf("\n中央値は%7.1fです。\n",median);の部分で%7.1fの7.1というのはどんな意味があるのでしょうか? #include<stdio.h> #include<conio.h> void main() { int d[100]; int i,j,n,temp,n_med; float median; printf("データ数を入力してください。(最大100); "); scanf("%d",&n); for(i=0;i<n;i++){ printf("%d番目のデータは? ",i+1); scanf("%d",&d[i]); } for(i=0;i<n;i++){ for(j=i+1;j<n;j++){ if(d[i]<d[j]){ temp=d[i]; d[i]=d[j]; d[j]=temp; } } } n_med=n/2; if(n==n_med*2){ median=(float)(d[n_med-1]+d[n_med])/(float)2; } else{ median=d[n_med]; } printf("\n中央値は%7.1fです。\n",median); getch(); }

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

  • ベストアンサー
回答No.2

printfの出力変換文字は処理系で独自拡張しているかもしれませんが、大抵こんな感じになるはずです。 ・Flags:  - left adjust  + always sign  space space if no sign  0 zero pad  # Alternate form: for conversion character o, first digit will be zero, for [xX], prefix 0x or 0X to non-zero, for [eEfgG], always decimal point, for [gG] trailing zeros not removed. ・Width: ・Period: ・Precision: for conversion character s, maximum characters to be printed from the string, for [eEf], digits after decimal point, for [gG], significant digits, for an integer, minimum number of digits to be printed. ・Length modifier:  h short or unsigned short  l long or unsigned long  L long double Conversions:  d, i int; signed decimal notation  o int; unsigned octal notation  x,X int; unsigned hexadecimal notation  u int; unsigned decimal notation  c int; single character  s char*;  f double; [-]mmm.ddd  e,E double; [-]m.dddddde(+|-)xx  g,G double  p void*; print as pointer  n int*; number of chars written into arg  % print % %7.1fの場合、フラグなし、最小フィールド幅が7、小数点、精度1、変換修飾子なし、10進浮動小数点表記になります。

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

この場合、最初の7は表示幅で1は、小数点以下の桁数です。 一般的には、指定したタイプによって意味が変わります。

関連するQ&A

  • C言語 プログラミングで行詰まりました…

    標準入力(キーボード)からi,jk,nの値を入力し、次の漸化式を計算し、X_0からX_nまで求めるプログラムを作成したいのですが、うまく表示されません。どかがおかしいのかご指摘お願いします。 <漸化式> X_n=(a+b)/X_(n-1) , X_0=c(n=0) ================================================================== #include<stdio.h> float f_X(int a,int b,float c) { float y; y=(a+b)/c; return y; } int main (void) { int number,i,j; float k,l,n,X; printf("i:"); scanf("%d", &i); printf("j:"); scanf("%d", &j); printf("k:"); scanf("%f", &k); printf("n:"); scanf("%f", &n); X=k; printf("X_0= %.6f\n",X); for(number=1;number<=n;number++) { l=f_X(i,j,X); printf("X_%d= %.6f \n",number,l); X=l; } return 0; } ===================================================================

  • 二次配列

    3×2 行列の要素(float)をキーボードから入力し,画面表示するプログラムを作成したいのですが 配列名をmatrixとして #include <stdio.h> int main(void){ int i, j; float matrix[3][2]; for ( i = 0; i < 3; i++ ){ printf("列入力:"); scanf("%f",matrix[i]); } for ( j = 0; j < 2; j++ ){ printf("行入力:"); scanf("%f",matrix[i]); }   for( i = 0; i < 3; i++ ){ for(j = 0; j < 2; j++ ){ printf("matrix[%d][%d] = %f\n",i+1,j+1,matrix[j][i]); } } getchar(); getchar(); return(0); } としたのですが・・・・・・一部が正しく表示されません。 さらにビジュアルスタジオ.net2003でコンパイルすると。実行結果の最後にエンターキーを押すとエラーが発生してしまうのですが・・・・。 どのようにすればいいのでしょうか?

  • C言語 プログラミング 行列演算

    下記のプログラムのおかしい点と解決法を教えてください。 コンパイルは通りますがうまく動きません。。 #include<stdio.h> #define MAX 500 int main(void){ int matrA[MAX][MAX],matrB[MAX][MAX],matrC[MAX][MAX],l,m,n,i,j,k; printf("lとmを入力してください:"); scanf("%d",&l); scanf("%d",&m); printf("行列Aを入力してください"); for(i=0;i<l;i++){ printf(">"); for(j=0;l<m;j++){ scanf("%d",&matrA[i][j]); } printf("\n"); } printf("nを入力してください(m = %d):",m); scanf("%d",&n); printf("行列Bを入力してください"); for(i=0;i<m;i++){ printf(">"); for(j=0;j<n;j++){ scanf("%d",&matrB[i][j]); } printf("\n"); } printf("C=\n"); for(i=0;i<l;i++){ for(j=0;j<n;j++){ for(k=0;k<m;k++){ matrC[i][j]+=matrA[i][k]*matrB[k][j]; } printf("%d",matrC[i][j]); } printf("\n"); } }

  • ベキ級数の和

    実数xと整数nを与えて下のベキ級数の和を求める関数を作りたいのですが…。 n Σ(x^i/i!) = 1 + (x/1!) + (x^2/2!) + (x^3/3!) + … + (x^n/n!) i=0 #include <stdio.h> #include <math.h> { float x; int n; printf("x->>"); scanf("%f",&x); printf("n->>"); scanf("%d",&n); のあとどのようなプログラムになるのでしょうか?よろしくおねがいします。

  • プログラム

    下のようなプログラムを作ったのですが、10進2進変換をj=n>>2&1の部分にあるようなビットシフトではなく、 for(i=1;i<8;i++){printf("bit[%d]=%d\n",i,n%2);n=n/2;}に変えて剰余計算で行うプログラムにしたいのですが、分かる方がいましたら教えて下さい。お願いします。 #include <stdio.h> int main(void) { int i,j,n; i=2; printf("数字を入力="); scanf("%d",&n); printf("Dec=%d\n",n); printf("heX=0x%x\n",n); j=n>>2&1; printf("bit[%d]=%d\n",i,j); return(0); }

  • C言語 エラー表示 break の位置が誤っている(関数 main ) 

    #include<stdio.h> int main(void){ int n,i,j,k; char c='*'; printf("正の整数:"); scanf("%d",&n); if(n>0){ for(i=1;i<=n;i++){ printf("%d",i); for(j=1;j<=n+1-i;j++){ if(j==1){ if(i-1>0){ for(k=i-1;k>0;k--){ printf(" "); } } } printf("%c",c); } printf("\n"); } } break; return 0; } これをコンパイルすると「break の位置が誤っている(関数 main )」と表示されるのですが何でですか? 困ってます↓

  • 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; }

  • n次の奇数魔方陣をつくるプログラム

    どうしてもエラーが出てしまいます。少なくとも、「int mahojin[n+1][n+1],i,j,k;」あたりの行が間違っているらしいのですが、なぜだかわかりません。アドバイスお願いします!!(スペースが上手く入らなくて、全角スペースを使ってますが気にしないでください。) #include<stdio.h> int main(void) {  int n;  printf("n(ただし、nは奇数)=?");scanf("%d",&n);  int mahojin[n+1][n+1],i,j,k;  j=(n+2)/2;i=0;  for(k=1;k<=n*n;k++){     if((k%n)==1)      i++;     else {      i--;j++;     }     if(i==0)      i=n;     if(j>n)      j=1;     mahojin[i][j]=k;   }   printf(" %d次の魔方陣 \n",n);   for(i=1;i<=n;i++){     for(j=1;j<=n;j++)      printf("%4d",mahojin[i][j]);     printf("\n");   }   return 0; }

  • 以前も同じ質問したのですがもう一度お願いします

    以前も同じ質問したのですがもう一度お願いします プログラミングで3行3列の行列Aに対しAの2乗、Aの3乗を求めるプログラムを作成したいのですが下記のプログラムでは3行3列まで表示できません どこが間違えているのか修正していただけないでしょうか? #include <stdio.h> int main(){ int z[3][3]; int w[3][3]; int x[3][3]={1,2,3,4,5,6,7,8,9}; int n,m; int i,j,k; printf("z[3][3] : \n"); for(i=0;i<3;i++) { for(j=0;j<3;j++) {printf("z[%d][%d] = ",i,j); scanf ("%d",&z[i][j]); } } printf("m for [z]^m ="); scanf ("%d",&m); for(n=0;n<m;n++) { for(i=0;i<3;i++) { for(j=0;j<3;j++) { w[i][j] = 0; for(k=0;k<3;k++) { w[i][j] += x[i][k]*z[k][j]; } } } for(i=0;i<3;i++) { for(j=0;j<3;j++) { x[i][j] = w[i][j]; } } printf("[z]^%d\n",n+1); for(i=0;i<3;i++) { for(j=0;j<3;j++) { printf(" %9d",x[i][j]); }printf("\n"); }printf("\n"); } return 0; }

  • C言語についてなのですが、

    C言語についてなのですが、 #include<stdio.h> #include<stdlib.h> #include<time.h> #include<search.h> int main(void) { int i,j,k,temp,n,count,time,list[65537]; clock_t startTime, endTime; printf("取得する乱数の個数を入力してください\n"); scanf("%d",&n); srand((unsigned)time(NULL)); printf("Before sort\n"); startTime = clock(); for(i = 0; i < n; i++) { list[i] = rand(); /* printf("%d\n", list[i]);*/ } count = 0; for (i = 1; i < n; i++) { for (j = i; j < n-i-1; j++) { count++; if(list[j] < list[j+1]) { temp = list[j]; list[j] = list[j+1]; list[j+1] = temp; } } } endTime = clock(); printf("\nAfter sort\n"); for(k = 0; k < n; k++) { /* printf("%d\n", list[k]);*/ } printf("\n比較回数:%d\n", count); printf("実行時間:%.4f秒\n", (double)(endTime - startTime) / CLOCKS_PER_SEC); return 0; } 上記のソースコードをcygwinで gcc -Wall -o k5-1-2 k5-1-2.c でコンパイルしようとすると k5-1-2.c:関数'main'内 k5-1-2.c:14:error:called object is not a function と表示されます。 いろいろなサイトを参考にして乱数取得用に srand((unsigned)time(NULL));を使うように書かれていたので使っているのですが、何かだめなのでしょうか?自分ではお手上げ状態で。

専門家に質問してみよう