作者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