1、C 语 言 程 序 设 计实验报告学院:资源加工与生物工程专业:无机非金属材料工程班级:0501:金光龙学号:0302050107指导老师:金胜明制作日期:05年7月9日C语言程序设计说明书 目录一 程序设计目的与任务;二 程序设计的容;三 源程序;四 程序说明;五 实践心得;一 程序设计目的与任务1、学会数据文件的建立 在实验室试验和现场生产过程中,经常要存储、处理许多数据(试验数据和生产数据),在没有在线检测的条件下,这些数据都要进行人工的输入,建立数据文件。 以前,我们都是编写建立数据文件的程序来建立数据文件,当某个数据输入错误时就要重新输入或编写数据文件修改程序,比较麻烦。直接在编辑状
2、态下(TC,TP等)编写数据文件简单、直观、实用。2、理解并且学会运用文件操作函数3、学会用线性回归法建立数学模型二 程序设计的容一、 数据文件1文件操作函数(1)文件的打开 fopen#includeFILE *fopen(char *filename, char *type);filename文件名,字符串变量;type文件打开的方式(r,w,a)函数功能:打开由文件filename指定的文件,并把一个stream与它联系起来。返回一个指针,该指针用来识别随后操作的文件stream。若成功地完成打开,则返回最近打开的文件stream,若出现错误,则返回NULL。(2) 文件的关闭 fclo
3、se#includeint fclose(FILE *stream);filename文件名,字符串变量;type文件打开的方式(r,w,a) 函数功能:关闭指定的流式文件。(3)fscanf从流中执行格式化输入#includeint fscanf(FILE *stream, char *format,argument,);函数功能:从指定的输入流中按规定的格式把数据读入由地址参数&arg1,&argn给定的单元中。(4)fprintf发送格式化输出到流#includeint fprintf(FILE *stream, char *format,argument,);函数功能:按规定的格式把数
4、据输出到指定的流式文件stream中。例:#include “stdio.h”main()FILE fp, *fopen();float d, date102;int i,j;fp=fopen(“试验数据.dat”,“r”);for(i=0;i10;i+)or(j=0;jn)目标:求j的估计值bj。使。用最小二乘法,使由试验数据计算系数。第二步 求方程的解第三步 判断模型的显著性 统计量 给出显著水平(0.1,0.05,0.01) 判断FF显著 呈线性关系FF不显著 不呈线性关系例:(m=6,n=1)X 132 147 163 179 198 222Y 0 0.6 1.1 1.8 2.4 3.
5、1Y=-4.688566+0.035669X利用得到的Y的一个表达式,可以算出相应的弹性模量。三 源程序1、 立存储数据的数据文件,并对它进行读、写操作:数据如上面的表格(1)#includemain() char ch; FILE *fp; if (fp=fopen(F:TCshujiu.txt,r)=NULL) printf(file cannot be openedn); exit(1); while(ch=fgetc(fp)!=EOF) fputc(ch,stdout); fclose(fp);上机调试通过运行结果如下:N0.Na2OK2O CaO SiO2 Model 17.268.
6、1612.68727.2636 26.767.6611.68727.258236.267.1610.68727.2456 /*此程序为对F:TCshujiu.txt 的47.267.6610.68747.2001 文件进行输出*/56.767.1612.68747.313066.268.1611.68747.256077.267.1611.68767.255886.768.1610.68767.198896.267.6612.68767.3086(2)#includemain()FILE *fp;float d, date96;int i,j;fp=fopen(F:TCshujiu.txt,r
7、);printf(nPut the number:n);for(i=0;i9;i+)for(j=0;j6;j+)fscanf(fp,%f,&d); dateij=d; printf(%6.4f,dateij); printf(the munber:n); for(i=0;i9;i+) printf(%8.2f,datei0); printf(%8.2f,datei1); printf(%8.2f,datei2); printf(%8.2f,datei3); printf(%4.2f,datei4); printf(%8.4f,datei5); printf(n); fclose(fp);上机调
8、试通过运行结果如下: 1.00 7.26 8.16 12.6872.00 7.2636 2.00 6.76 7.66 11.6872.00 7.2582 3.00 6.26 7.16 10.6872.00 7.2456 4.00 7.26 7.66 10.6874.00 7.2001 5.00 6.76 7.16 12.6874.00 7.3130 6.00 6.26 8.16 11.6874.00 7.2560 7.00 7.26 7.16 11.6876.00 7.2558 8.00 6.76 8.16 10.6876.00 7.1988 9.00 6.26 7.66 12.6876.00
9、 7.3086、/*此程序为先对F:TCshujiu.txt的文件进行打开,再导入到一个二维数组里进行输出*/2、璃弹性模量与成分之间的数学模型源代码如下:#include stdio.hint i, j, k, n,m;char cele;void head() for(i=0;i8;i+)printf( %c,003);printf(请选择要进行的操作:);for(i=0;i8;i+)printf( %c,003);printf(n); for(i=0;i8;i+)printf( %c,020);printf( a.运行程序n);for(i=0;i8;i+)printf( %c,020);
10、printf( b.退出程序n);cele=getchar();if(cele=a) printf(n);elseexit(1);main() for(i=0;i20;i+)printf( %c %c,001,002);printf(n);for(i=0;i8;i+)printf( %c %c,001,002);printf( 欢迎使用本程序 );for(i=0;i8;i+)printf( %c %c,001,002);printf(nnntt_本程序根据已知的数据构件一个数学模型_nt其作用是通过分析构成物质,用计算机模拟出材料的弹性模量。nnn);printf(tt 资源加工与生物工程学院
11、nttttttt%c 无机0501班nn);printf(ttt: 金光龙 n);printf(nttttttt 学号:0302050107nn);head();printf (请输入行数m:t);scanf (%d,&m);printf (请输入列数n:);scanf (%d,&n);float snn+1, bn, xm+1n+1, y5;float r, t;char celect;FILE *fp1;fp1=fopen(date1.txt,r);/*date1.txt数据为1 0 0 0 0 017.268.1612.68727.263616.767.6611.68727.258217
12、.267.6610.68747.200116.767.1612.68747.313016.268.1611.68747.256017.267.1611.68767.255816.768.1610.68767.198816.267.6612.68767.3086*/for(i=0;i10;i+)for(j=0;j6;j+)fscanf(fp1, %f,&t);xij=t;fclose(fp1);/*把文件中数赋给x106*/for(i=0;i5;i+)for(j=0;j10;j+)sij=0;for(k=1;k10;k+)sij+=xki*xkj;printf(nn增广阵为:n);for(i=0
13、;i5;i+)for(j=0;j6;j+)printf( %8.2f,sij);printf(n);/*得到S二维数组*/printf(nn);for(k=0;k4;k+)for(i=k+1;i5;i+)r=sik/skk;for(j=k;j6;j+)sij=sij-skj*r;for(i=0;i5;i+)for(j=0;j6;j+)if(fabs(sij)0.00001)sij=0; printf(对角阵为:n);for(i=0;i5;i+)for(j=0;j6;j+)printf( %8.2f,sij);printf(n);/*得到对角阵*/b4=s45/s44;b3=(s35-s34*b
14、4)/s33;b2=(s25-s24*b4-s23*b3)/s22;b1=(s15-s14*b4-s13*b3-s12*b2)/s11;b0=(s05-s04*b4-s03*b3-s02*b2-s01*b1)/s00;/*得到b5*/printf(nnttB阵为:n);for(i=0;i5;i+) printf(ttb%d=%fn,i,bi);FILE *fp2;fp2=fopen(fdate2.txt,w);/*文件date2.txt的等式为:y=7.2620+(-0.0303*x1)+(-0.0320*x2)+(0.04012*x3)+(-0.0003*x4)*/fprintf(fp2,y
15、=%.4f+(%.4f*x1)+(%.4f*x2)+(%.5f*x3)+(%.4f*x4) ,b0,b1,b2,b3,b4);fclose(fp2);printf(nntttt我们得到的数学模型为:nn);printf(ty=%f+(%f*x1)+(%f*x2)+(%f*x3)+(%f*x4)n,b0,b1,b2,b3,b4);for(i=0;i40;i+)printf( %c,005);printf(nn使用模型模拟得到的弹性模量:);for(i=0;i5;i+)yi=b0+b1*xi1+b2*xi2+b3*xi3+b4*xi4;printf(n y%d=%f,i,yi);printf(n实
16、际的弹性模量:n);for(i=1;i=5;i+)printf(d%d=%fn,i-1,xi5);上机调试通过运行结果如下:_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 欢迎使用本程序 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _本程序根据已知的数据构件一个数学模型_其作用是通过分析构成物质,用计算机模拟出材料的弹性模量。资源加工与生物工程学院 无机0501班 : 金光龙学号:0302050107_
17、_ _ _ _ _ _ _请选择要进行的操作: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ a.运行程序_ _ _ _ _ _ _ _ b.退出程序请输入行数m: 10请输入列数n: 6增广阵为: 9.00 60.84 68.94 105.12 666.00 65.30 60.84 412.78 466.03 710.61 4502.16 441.38 68.94 466.03 529.58 805.22 5101.56 500.15 105.12 710.61 805.22 1233.80 7778.88 762.94 666.00 4502.16 5101.56 7778.
18、88 49308.00 4832.17对角阵为: 9.00 60.84 68.94 105.12 666.00 65.30 0.00 1.50 -0.00 -0.00 -0.00 -0.05 0.00 0.00 1.50 -0.00 0.00 -0.05 0.00 0.00 0.00 6.00 0.00 0.24 0.00 0.00 0.00 0.00 24.00 -0.01 B阵为: b0=7.261955 b1=-0.030281 b2=-0.031982 b3=0.040121 b4=-0.000343我们得到的数学模型为: y=7.261955+(-0.030281*x1)+(-0.0
19、31982*x2)+(0.040121*x3)+(-0.000343*x4)_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _使用模型模拟得到的弹性模量:y0=7.261955y1=7.265197y2=7.256207y3=7.247218y4=7.200260实际的弹性模量:0=7.2636001=7.2582002=7.2456003=7.2001004=7.313000press any key to continue.五 实践心得这学期虽然学习了C语言,对C语言有了一定的认识,
20、但还只知道在上面运行程序而不知其真正的用途。实习的几天转眼就过去了,通过这几天的学习才发现,原来这一学期对于C语言的了解是非常的肤浅,没有深入的学习。对于第一个任务还算比较容易引进对付,可后面的程序就越发的困难了,有时候是寸步难行,特别是线性回归很难理解,不过到最后还是搞完了。 这次的学习,不仅学到了如何利用TC,还锻炼了计算机能力,收获颇大。经过这近半个月的C语言实践学习,我感觉我有了比较大的收获,对C语言也有了更深的认识。知道C语言是一种概念简洁,数据库类型丰富,表达能力强,运算符多而灵活,控制流和数据结构新颖,程序结构性和可读性好,能有利于培养良好的编程风格,易于体现结构化程序设计思想。
21、它即具有高级语言程序设计的特点,又具有汇编语言的功能;既能有效地进行算法描述,又能对硬件直接进行操作;既适合于编写应用程序,又适合于开发系统软件,它是当今世界上应用广泛,最具有影响力的程序设计语言之一。C语言本身还具有整个语言紧凑整齐,设计精巧,编辑方便,编译与目标代码运行效率高,操作简便,使用灵活等许多鲜明的特点。以前我在TC中只能一个一个的输入,即使两个完全一样的程序都只能再输一次,通过这次的学习,我懂得了用Crtl+k+b ,Crtl+k+k,Crtl+k+c,来定义一个块,再复制到光标处等等。这样省去了很多麻烦,提高了编程的效率。 不仅如此,我还学到了如何制作简单界面、编写“建立、读入、保存、另存”等数据文件操作、“修改、插入、添加和删除函数”和“利用线性回归建立数学模型”等等。在一元线性回归数据处理时,这样可以少用一个循环,体现了编程的简洁性。虽然我对C语言的了解还只是皮毛,但是通过这次的实习我已有了很大的收获。 14 / 14