作者markoo (被釋放抑或自解脫?)
看板NCTU-STAT98G
標題統計計算語言 07/09 程式碼
時間Sat Jul 11 22:23:30 2009
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
1F:推 smallvc :努力跟上進度中! 07/11 22:27