• 締切済み

グレースケール画像を量子化する問題で、量子化レベル数を8階調(N=8)

グレースケール画像を量子化する問題で、量子化レベル数を8階調(N=8)と設定して画像h=(Ih,Ih,Ih)を生成し、その輝度ヒストグラムを生成せよという問題なのですが。 printf("量子レベル数Nを入力してください"); scanf("%d",&n); dn=256/n; for(j=0;j<nHeight;j++) for(k=0;k<nWidth;k++){ rVal=DllBmpGetPixelValueR(pBmpOrig, j, k); for(i=0;i<n;i++){ if(dn*i<=rVal&&dn*(i+1)>rVal){ f1=dn*i; } DllBmpSetPixelValueR(pBmpCopy1, j, k, f1); DllBmpSetPixelValueG(pBmpCopy1, j, k, f1); DllBmpSetPixelValueB(pBmpCopy1, j, k, f1); ※nHeight:高さ nWidth:幅 rVal=DllBmpGetPixelValueR(pBmpOrig, j, k):赤色成分の輝度値を得る 量子化の公式ΔN=256/N I(x,y)=n*ΔN ifn*ΔN≦I(x,y)<(n+1)*ΔN for∀n={0,N-1} をif文以下で表現しました。 ここまでやってみましたがあとがよくわかりません。 教えてください。 どうかよろしくお願いします。

みんなの回答

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

「ある個数の0~N-1の整数の中から、それぞれがいくつあるか数えて、その度数を表示する」 というのは作れますか? >f1=dn*i; とありますが、このiの注目すれば0~N-1ですよね?

関連するQ&A

  • 条件式について・・・・・・・・・・・・

    画像の左下隅と右上隅を結んだ線分を考え、この線分よりも下の三角形の領域をネズミ色(RGB成分の輝度値が128)にした画像を生成するプログラムをやっているのですが、左下隅と右上隅を結んだ線分を考え、この線分よりも下の三角形の領域の色を変えたい場合は、 まず、for(k = 0; k < nWidth; k++) を変えるべきだと思うのですが・・・・・・・四角の画像の右下から上に徐々に色を変えてくかんじだと思うのですが、三角形の公式みたいなのって関係ありますか? /* nWidth:画像の幅、nHeight:画像の高さ、nVal:輝度値*/ int nWidth,nHeight; /* 画像を生成する */ for(j = 0; j < nHeight; j++) for(k = 0; k < nWidth; k++) { DllBmpSetPixelValueR(pBmpOrig, j, k, 255); DllBmpSetPixelValueG(pBmpOrig, j, k, 255); DllBmpSetPixelValueB(pBmpOrig, j, k, 255); } わかる方は、教えてください。よろしくお願いします。

  • 奇数の判断について・・・・・・・・

    y座標が16で割ると余り1になるようなすべてのピクセルを白(RGB成分の輝度値が255)にした画像を生成したい場合・・・・・・・・・ /* nWidth:画像の幅、nHeight:画像の高さ*/ /* x座標とy座標の値を足すと奇数になるすべてのピクセルを白(RGB成分の輝度値が255)にする画像を生成する */  for(j = 0; j < nHeight; j++)   for(k = 0; k < nWidth; k++)   if(k%16==1)     {     DllBmpSetPixelValueR(pBmpOrig, j, k, 255);     DllBmpSetPixelValueG(pBmpOrig, j, k, 255);     DllBmpSetPixelValueB(pBmpOrig, j, k, 255);    } と条件式としましては、if(k%16==1)な感じでも大丈夫でしょうか? すみませんがアドバイスお願いします。。。。。。

  • 画像の輝度値のプログラムについて・・・・・・

    プログラムをPCでやる前にある程度、何かに書いてからやっているのですが、画像の1部分の色を変えたいのですが、例えば画像の左半分を黒くした画像を生成したい場合は,(一般的には,輝度値は0~255までの整数(8ビット)か,または0~65535までの整数(16ビット)により表される) *printfとscanfを使用するためにインクルードする*/ #include<stdio.h> /*ビットマップ画像を扱うためのヘッダ*/ #include<Dll_BMP_C.h> //画像ファイル名最大長(バイト) #define NAME_SIZE 101 int main(void) { int j,k; /* nWidth:画像の幅、nHeight:画像の高さ、nVal:輝度値*/ int nWidth,nHeight; /*pcFileName:画像ファイル名を保存する配列*/ char pcFileName[NAME_SIZE]; /*pBmpOrig:読み込んだ画像へのポインタ pBmpCopy:複製した画像へのポインタ*/ DllBmp*pBmpOrig,*pBmpCopy; /*読み込む画像のファイル名を指定する*/ printf(“読み込む画像”); scanf(“%s”,pcFileName); /*画像を読み込みメモリに保存する 読み込みに失敗したら実行を中止する*/ pBmpOrig=DllBmpReadImage(pcFileName); if(pBmpOrig==NULL) { printf(“画像の読み込みに失敗! 実行を中止します\n”); exit(1); } /*読み込んだ画像のヘッダ情報を表示する*/ DllBmpShowHeader(pBmpOrig); /*読み込んだ画像の大きさを得る*/ nWidth=DllBmpGetWidth(pBmpOrig); nHeight= DllBmpGetHeight (pBmpOrig); /* 画像を生成する */  for(j = 0; j < nHeight; j++)   for(k = 0; k < nWidth; k++)    {     DllBmpSetPixelValueR(pBmpOrig, j, k, 255);     DllBmpSetPixelValueG(pBmpOrig, j, k, 255);     DllBmpSetPixelValueB(pBmpOrig, j, k, 255);    } /*保存する画像のファイル名を指定する*/ printf(“保存する画像”); scanf(“%s”,pcFileName); /*画像を保存する 保存に失敗したら実行を中止する*/ if(!DllBmpWriteImage(pcFileName,pBmpOrig)); { printf(“画像の保存に失敗! 実行に中止します”); exit(1); } /*画像をメモリから消去する*/ DllBmpDleteImage(pBmpOrig); return 0; } 画像の輝度値を操作するプログラムをやっているのですが、画像の左半分を黒くした画像を生成する場合は、 DllBmpSetPixelValueR(pBmpOrig, j, k, 255); DllBmpSetPixelValueG(pBmpOrig, j, k, 255); DllBmpSetPixelValueB(pBmpOrig, j, k, 255); の部分のRが赤、Gが緑、Bが青なんですが、その値をすべて0にすればいいんでしょうか?もしくはあらたに条件式を作るべきなのでしょうか??そして画像の左半分を黒くしたい場合は、 for(j = 0; j < nHeight; j++)   for(k = 0; k < nWidth; k++) の部分のj < nHeightをj < nHeight/2にしたらなるでしょうか?? この場合だと上半分になってしまうでしょうか?? PCがまだ使えないのでルーズリーフにいろいろ試行錯誤して書いてるのですが、他に何かヒントがあればよろしくお願いします。。。。。 すみませんがお願いします。

  • プログラミングでの画像の生成について・・・・・・・・

    任意の画像をfと呼び,座標(x,y)における画像fの輝度値を(R(x,y),G(x,y),B(x,y))と呼ぶことにします。 以下の処理を行うプログラムを作成してください。 1,画像fの明るさがm分の1になった画像h1(x,y)=(R(x,y)/m,G(x,y)/m,B(x,y)/m)を生成する。 ここで,mは0<m<10の範囲にある任意の整数である. 2,画像fから法256の画像h2(x,y)=((n×R(x,y))mod(256),(n×G(x,y))mod(256),(n×B(x,y))mod(256))を生成する。 ここで,nは任意の正の整数である. *printfとscanfを使用するためにインクルードする*/ #include<stdio.h> /*ビットマップ画像を扱うためのヘッダ*/ #include<Dll_BMP_C.h> //画像ファイル名最大長(バイト) #define NAME_SIZE 101 int main(void) { int j,k; /* nWidth:画像の幅、nHeight:画像の高さ、nVal:輝度値*/ int nWidth,nHeight; /*pcFileName:画像ファイル名を保存する配列*/ char pcFileName[NAME_SIZE]; /*pBmpOrig:読み込んだ画像へのポインタ pBmpCopy:複製した画像へのポインタ*/ DllBmp*pBmpOrig,*pBmpCopy; /*読み込む画像のファイル名を指定する*/ printf(“読み込む画像”); scanf(“%s”,pcFileName); /*画像を読み込みメモリに保存する 読み込みに失敗したら実行を中止する*/ pBmpOrig=DllBmpReadImage(pcFileName); if(pBmpOrig==NULL) { printf(“画像の読み込みに失敗! 実行を中止します\n”); exit(1); } /*読み込んだ画像のヘッダ情報を表示する*/ DllBmpShowHeader(pBmpOrig); /*読み込んだ画像の大きさを得る*/ nWidth=DllBmpGetWidth(pBmpOrig); nHeight= DllBmpGetHeight (pBmpOrig); /* 画像を生成する */ for(j = 0; j < nHeight; j++) for(k = 0; k < nWidth; k++) { DllBmpSetPixelValueR(pBmpOrig, j, k, 255); DllBmpSetPixelValueG(pBmpOrig, j, k, 255); DllBmpSetPixelValueB(pBmpOrig, j, k, 255); } /*保存する画像のファイル名を指定する*/ printf(“保存する画像”); scanf(“%s”,pcFileName); /*画像を保存する 保存に失敗したら実行を中止する*/ if(!DllBmpWriteImage(pcFileName,pBmpOrig)); { printf(“画像の保存に失敗! 実行に中止します”); exit(1); } /*画像をメモリから消去する*/ DllBmpDleteImage(pBmpOrig); return 0; } 剰余は%演算子を使って求めることができると思うのですが・・・。。 処理内容を選択できて、mとnの値を指定できるように作りたいのですが・・・・・ 何かアドバイス的なものをすみませんがよろしくお願いします。

  • プログラムをやっているのですが・・・・・

    C言語についての質問です。 画像の左半分を黒くした画像を生成したいのですが・・・・・・・ /*printfとscanfを使用するためにインクルードする*/ #include<stdio.h> /*ビットマップ画像を扱うためのヘッダ*/ #include<Dll_BMP_C.h> //画像ファイル名最大長(バイト) #define NAME_SIZE 101 int main(void) { int j,k; /* nWidth:画像の幅、nHeight:画像の高さ、nVal:輝度値*/ int nWidth,nHeight; /*pcFileName:画像ファイル名を保存する配列*/ char pcFileName[NAME_SIZE]; /*pBmpOrig:読み込んだ画像へのポインタ pBmpCopy:複製した画像へのポインタ*/ DllBmp*pBmpOrig,*pBmpCopy; /*読み込む画像のファイル名を指定する*/ printf(“読み込む画像”); scanf(“%s”,pcFileName); /*画像を読み込みメモリに保存する 読み込みに失敗したら実行を中止する*/ pBmpOrig=DllBmpReadImage(pcFileName); if(pBmpOrig==NULL) { printf(“画像の読み込みに失敗! 実行を中止します\n”); exit(1); } /*読み込んだ画像のヘッダ情報を表示する*/ DllBmpShowHeader(pBmpOrig); /*読み込んだ画像の大きさを得る*/ nWidth=DllBmpGetWidth(pBmpOrig); nHeight= DllBmpGetHeight (pBmpOrig); /* 画像を生成する */ for(j = 0; j < nHeight; j++) for(k = 0; k < nWidth; k++) { DllBmpSetPixelValueR(pBmpOrig, j, k, 255); DllBmpSetPixelValueG(pBmpOrig, j, k, 255); DllBmpSetPixelValueB(pBmpOrig, j, k, 255); } /*保存する画像のファイル名を指定する*/ printf(“保存する画像”); scanf(“%s”,pcFileName); /*画像を保存する 保存に失敗したら実行を中止する*/ if(!DllBmpWriteImage(pcFileName,pBmpOrig)); { printf(“画像の保存に失敗! 実行に中止します”); exit(1); } /*画像をメモリから消去する*/ DllBmpDleteImage(pBmpOrig); return 0; } 画像の輝度値を操作するプログラムをやっているのですが、画像の左半分を黒くした画像を生成する場合は、 DllBmpSetPixelValueR(pBmpOrig, j, k, 255); DllBmpSetPixelValueG(pBmpOrig, j, k, 255); DllBmpSetPixelValueB(pBmpOrig, j, k, 255); の部分のRが赤、Gが緑、Bが青なんですが、その値をすべて0にすればいいんでしょうか?もしくはあらたに定義したり、条件式を作るべきなのでしょうか?? 左半分を変色したい場合はnWidth/2と変えれば大丈夫だと思います。 すみませんがお願いします。 わかる方は、教えてください。よろしくお願いします。

  • プログラムを紙に書いていろいろやっているのですがで分からないところがあります・・・・・・・・・・・・・・

    /*printfとscanfを使用するためにインクルードする*/ #include<stdio.h> /*ビットマップ画像を扱うためのヘッダ*/ #include<Dll_BMP_C.h> //画像ファイル名最大長(バイト) #define NAME_SIZE 101 int main(void) { int j,k; /* nWidth:画像の幅、nHeight:画像の高さ、nVal:輝度値*/ int nWidth,nHeight; /*pcFileName:画像ファイル名を保存する配列*/ char pcFileName[NAME_SIZE]; /*pBmpOrig:読み込んだ画像へのポインタ pBmpCopy:複製した画像へのポインタ*/ DllBmp*pBmpOrig,*pBmpCopy; /*読み込む画像のファイル名を指定する*/ printf(“読み込む画像”); scanf(“%s”,pcFileName); /*画像を読み込みメモリに保存する 読み込みに失敗したら実行を中止する*/ pBmpOrig=DllBmpReadImage(pcFileName); if(pBmpOrig==NULL) { printf(“画像の読み込みに失敗! 実行を中止します\n”); exit(1); } /*読み込んだ画像のヘッダ情報を表示する*/ DllBmpShowHeader(pBmpOrig); /*読み込んだ画像の大きさを得る*/ nWidth=DllBmpGetWidth(pBmpOrig); nHeight= DllBmpGetHeight (pBmpOrig); /* x座標とy座標の値を足すと奇数になるすべてのピクセルを白(RGB成分の輝度値が255)にする画像を生成する */  for(j = 0; j < nHeight; j++)   for(k = 0; k < nWidth; k++)   if(j+k%2==1)     {     DllBmpSetPixelValueR(pBmpOrig, j, k, 255);     DllBmpSetPixelValueG(pBmpOrig, j, k, 255);     DllBmpSetPixelValueB(pBmpOrig, j, k, 255);    } /*保存する画像のファイル名を指定する*/ printf(“保存する画像”); scanf(“%s”,pcFileName); /*画像を保存する 保存に失敗したら実行を中止する*/ if(!DllBmpWriteImage(pcFileName,pBmpOrig)); { printf(“画像の保存に失敗! 実行に中止します”); exit(1); } /*画像をメモリから消去する*/ DllBmpDleteImage(pBmpOrig); return 0; } 画像の輝度値を操作するプログラムをやっているのですが、x座標とy座標の値を足すと奇数になるすべてのピクセルを白(RGB成分の輝度値が255)にする画像を生成したいのですが、こんな感じで作ってみたんですが、条件式はif(j+k%2==1) で作ってみたんですが、これだとj+kよりk%2の方がやっぱり先に行いますでしょうか??他に何かいい奇数の判断ってあるでしょうか??ルーズリーフにいろいろ試行錯誤して書いてるのですが、他に何かヒントがあればよろしくお願いします。。。。。 すみませんがお願いします。

  • LU分解を利用した逆行列のプログラム(Java)

    LU分解を利用した逆行列のプログラムが作れません… というか、作ったのですが実行するとエラーが出てしまいます(´Д`;) どこをどう直せばいいか、もしくはこのようにプログラムした方が効率がよい などのアドバイスどなたか下さい double a[][]={{2,5,4}, {2,3,-1}, {6,9,28}}; int N=a.length; double[][] s=new double[N][N]; for(int k=0; k<a[0].length-1; k++){ for(int i=k+1; i<N; i++){ s[i][k]=a[i][k]/a[k][k]; a[i][k]=s[i][k]; for(int j=k+1; j<N; j++){ a[i][j] -= s[i][k] * a[k][j]; } } } double[][] y=new double[N][N]; double[][] X=new double[N][N]; double[][] e=new double[N][N]; for(int i=0;i<N;i++){ for(int j=0;j<N;j++){ if(i==j){ e[i][j]=1; }else{ e[i][j]=0; } } } for(int i=0;i<N;i++){ y[1][i]=e[1][i]; for(int k=2;k<=N;k++){ for(int j=1;j<=N;j++){ y[k][i]=e[k][i]-s[k][j]*y[j][i]; } } X[N][i]=y[N][i]/a[N][N]; for(int k=N-1;k>=1;k--){ for(int j=k+1;j<=N;j++){ X[k][j]=(y[k][j]-s[k][j]*X[j][i])/a[k][k]; } } } for(int i=0;i<N;i++){ for(int j=0;j<N;j++){ System.out.printf(" %6.5f ", X[i][j] ); } System.out.println(""); }

  • C言語のプログラムで質問です。

    C言語のプログラムで質問です。 下のプログラム(最小二乗法の計算)を実行したところ -1.#IND00 というエラーが出てしまいます。 どこを直せばいいのでしょうか、教えてください。 #include <stdio.h> #include <math.h> /* gauss33.c */ #define N 3 main(){ double A[N][N],Aa[N][N]; double b[N],x[N], bb[N], e[N]; int n=N; int i, j, k; double akk, aik, s; double y[N]; double xx,yy; for(i=0;i<n;i++){ /*変数の初期化*/ x[i]=y[i]=0; for(j=0;j<n;j++) A[i][j]=0; } for(i=0;i<5;i++){ /*データ点は5点*/ printf("\n(x,y)="); scanf("%lf,%lf",&xx,&yy); A[0][0]+=xx*xx*xx*xx; /*Σx^4*/ A[0][1]+=xx*xx*xx; /*Σx^3*/ A[0][2]+=xx*xx; /*Σx^2*/ A[0][1]=A[1][0]; A[0][2]=A[1][1]=A[2][0]; A[1][2]+=xx; /*Σx*/ A[1][2]=A[2][1]; A[2][2]=n; y[0]+=xx*xx*yy; /*Σx^2y*/ y[1]+=xx*yy; /*Σxy*/ y[2]+=yy; /*Σy*/ } /* save original coefficients */ for(i=0; i<n; i++){ for(j=0; j<n; j++){ Aa[i][j]=A[i][j]; } bb[i]=b[i]; } /* forward operation */ for(k=0; k<n-1; k++){ akk=1/A[k][k]; for (i=k+1; i<n; i++){ aik=-A[i][k]*akk; for (j=k+1; j<n; j++){ A[i][j]+=aik*A[k][j]; } b[i]+=aik*b[k]; } for(j=k+1; j<n; j++){ A[k][j]*=akk; } b[k]*=akk; } /* backward operation */ x[n-1]=b[n-1]/A[n-1][n-1]; for(k=n-2; k>=0; k--){ s=0.0; for (j=k+1; j<n; j++){ s+=A[k][j]*x[j]; } x[k]=b[k]-s; } /* chek */ for(i=0; i<n; i++){ s=0.0; for(j=0; j<n; j++){ s+=Aa[i][j]*x[j];} e[i]=s-bb[i]; printf("\nx(%d)=%f error=%f\n",i, x[i], e[i]); } }

  • ガウスの消去法のプログラム

    ガウスの消去法(部分ピボット選択)のプログラムを組んでみたつもりなのですが上手くいきません。 間違いだらけだと思いますがどうかアドバイスをして頂けませんでしょうか? #include <stdio.h> double main(void){ int i,j,k,N,M,m; double A[N+1][N+1][N+1],B[j],S,X[N+1]; printf("次数の入力。\n"); scanf("%d",&N); for(k=1;k<=N;k++){ for(i=1;i<=N;i++){ for(j=1;j<=N+1;j++){ A[k][i][j]=0; } } } for(i=1;i<=N;i++){ for(j=1;j<=N+1;j++){ printf("係数の入力.\n A[1][%d][%d]?\n",i,j); scanf("%f",&A[1][i][j]); } } for(k=2;k<=N;k++){ if(A[k-1][k-1][k-1]=0){ for(M=k;M<=N;M++){ if(A[k-1][M][k-1]!=0){ for(j=k-1;j<=N+1;j++){ B[j]=A[k-1][k-1][j]; A[k-1][k-1][j]=A[k-1][M][j]; A[k-1][M][j]=B[j]; } goto abc; } else {printf("解は無い\n");} } } abc: for(i=k;i<=N;i++){ for(j=k;j<=N+1;j++){ A[k][i][j]=A[k-1][i][j]-(A[k-1][i][k-1]/A[k-1][k-1][k-1])*A[k-1][k-1][j]; } } X[N]=A[N][N][N+1]/A[N][N][N]; printf("解X(N)は %f 。\n",X[N]); for(k=N-1;k>=1;k--){ S=0; for(m=N;m>=k+1;m--){ S+=A[k][k][m]*X[m]; } X[k]=(A[k][k][N+1]-S)/A[k][k][k]; printf("解X(%d)は %f 。\n",k,X[k]);} } }

  • c言語 ファイル出力について

    このようなプログラムを作成しました。 エクセルでファイルを出力したいのですが… ファイルは作成できたものの、内容が書かれていません。 とても困っています↓ 自分の力不足なのでしょうがどなたかお願いします。 #include <stdio.h> #include <process.h> #define S 256 #define I 100 #define J 100 #define K 3 //グループの数 void sum(int u[][J],int N,int n); void sort(int y[],int N,int u[][J],int n); void group(int num[],int u[][J],int N,int n); void passege(int groupm[][J],int groupn,int u[][J],int n,int N); void main (void) { FILE *fp; int N=0,i=0,j=1,kou=0,n; //N:人数 n:問題数 static int u[I][J]; char buf[S]; //ファイルオープン if ((fp=fopen("data_i2_3.csv","r"))==NULL){ printf("Can't open File\n"); exit(1); } // 問題数のカウント fgets(buf,S,fp); N+=1; while(buf[i]!='\n'){ kou=kou++; i+=1; } for(i=0;i<=kou;i=i+2){ u[N][j]=buf[i]-'0'; j=j++; } n=kou/2+1; // レコードの読み込み while (fgets(buf,256,fp)!=NULL){ N+=1; // 文字型から数値型へ変換 j=1; for(i=0;i<=kou;i=i+2){ u[N][j]=buf[i]-'0'; j=j++; } } sum(u,N,n); fclose(fp); } void sum(int u[][J],int N,int n) { static int y[I]; int i,ii; //学習者iの得点の初期化 for(i=0;i<=I;i++) y[i]=0; //学習者iの得点の計算 for(i=1;i<=N;i++){ for(ii=1;ii<=n;ii++){ y[i]+=u[i][ii]; } } sort(y,N,u,n); } void sort(int y[],int N,int u[][J],int n) { int left,right,i,shift,t,v; static int num[I]; //学習者の番号記憶用変数numの初期化 for(i=0;i<=I;i++) num[i]=0; for(i=1;i<=N;i++) num[i]=i; //シェーカーソート left=0; right=N; while (left<right){ for(i=left;i<right;i++){ if(y[i]>y[i+1]){ t=y[i]; v=num[i]; y[i]=y[i+1]; num[i]=num[i+1]; y[i+1]=t; num[i+1]=v; shift=i; } } right=shift; for(i=right;i>left;i--){ if(y[i]<y[i-1]){ t=y[i]; v=num[i]; y[i]=y[i-1]; num[i]=num[i-1]; y[i-1]=t; num[i-1]=v; shift=i; } } left=shift; } group(num,u,N,n); } void group(int num[],int u[][J],int N,int n) { int groupn,i,j,k=1; //groupn:グループの人数 static int groupm[K][I]; //groupm:グループのメンバー groupn=N/K; for(i=0;i<K;i++){ for(j=0;j<groupn;j++){ groupm[i][j]=num[k]; k+=1; } } passege(groupm,groupn,u,n,N); } void passege(int groupm[][J],int groupn,int u[][J],int n,int N) { FILE *f; int i,j,k=0,l,tt; static int t[I]; //各グループの正解率 double p[K][J],pp=0.0; //初期化 for(i=0;i<K;i++){ for(j=0;j<J;j++){ p[i][j]=0; t[i]=0; } } for(i=0;i<K;i++){ for(j=0;j<groupn;j++){ t[k]=groupm[i][j]; k+=1; } } k=0; for(i=0;i<K;i++){ for(j=1;j<=n;j++){ for(l=0;l<groupn;l++){ tt=t[k]; pp=pp+u[tt][j]; k+=1; } p[i][j]=pp/groupn; pp=0.0; if(i==0) k=0; else k=groupn*i; } k=groupn*(i+1); } //ファイル出力 f=fopen("test1.csv","w"); //確認 putchar('\n'); for(i=0;i<K;i++){ for(j=1;j<=n;j++){ printf("%d群の項目%dの正解率は%fです\n",i,j,p[i][j]); } } //ファイルを閉じる fclose(f); }

専門家に質問してみよう