看板 NCTU-STAT98G 關於我們 聯絡資訊
Ex 2: 寫一個txt檔,然後計算該檔案行數與列數再讀回。 #include <stdio.h> #include <stdlib.h> #include <math.h> FILE *in; FILE *out; int main() { int i,j; double data[5][5];//輸出資料 double get[100][100];//讀入資料 //這邊假設不知道資料量多少,所以給一個大一點的矩陣 char ch; int col=0,row=0; //以下開始寫檔,寫入資料隨便。 for (i=0;i<5;i++) { for (j=0;j<5;j++) data[i][j] = pow(0.9,i+j); } out = fopen("data.txt","wt"); for (i=0;i<5;i++) { for (j=0;j<5;j++) { if (j<4) fprintf(out,"%lf ",data[i][j]); else fprintf(out,"%lf\n",data[i][j]); } } fclose(out); //開始算列數(原本寫入是以/n作為一列的結束) //每一次讀到\n,就是一列 in = fopen("data.txt","rt"); if (in==NULL) { printf("File does not exit.\n"); exit(0); } do{ ch = getc(in); if (ch=='\n') row++; } while (ch!=EOF); fclose(in); //開始算行數(原本寫入是以空格做為行跟行的間隔) //每讀到一個空格,就是一行,直到最後一行以\n結束。 in = fopen("data.txt","rt"); do{ ch = getc(in); if (ch==' ') col++; } while (ch!='\n'); col++; fclose(in); printf("Number of colum = %d\n",col); printf("Number of row = %d\n",row); //開始讀資料,順便把讀入資料顯示在螢幕。 in=fopen("data.txt","r"); for (i=0;i<row;i++) { for (j=0;j<col;j++) { fscanf(in,"%lf",&get[i][j]); printf("%12.8lf",get[i][j]); } printf("\n"); } fclose(in); return 0; } Ex 3: 積分值 #include <stdio.h> #include <stdlib.h> #include <math.h> #include <time.h> #define Num 100000 #define f(x) exp(sin(pow(x,2.0)-x+2))/pow(x,3.0) int main() { int i; float ans=0; float unif[Num]; float a,b; printf("輸入積分範圍(a,b):"); scanf("%f,%f",&a,&b);//輸入格式依照a,b輸入 time_t t1; time(&t1); for (i=0;i<Num;i++) { unif[i] =(float)((rand()*t1)%Num)/Num; unif[i] = (b-a)*unif[i]+a; ans+=(float) f(unif[i])/Num; } printf("The integral value is %f\n",ans); return 0; } 以上,Ex1的部分大家下載網頁的檔案,這邊就不贅貼了。 PS: Ex3的部分,變數宣告為float再VC++6.0可以執行。 但Studio 2008似乎要宣告為double才可以,這邊大家就盡量使用double吧。 那有問題歡迎上課提問:) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.166.51.131
smallvc :努力跟上進度中! 07/11 22:27