C语言课程实践报告
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(F)、后记 此次课程设计,遇到的问题、困难很多。前面几天,什么也没干,
课程设计报告
摘要:此次 C 语言程序课程设计,旨在给定的设计条件下,利用 梯级图解法计算苯—甲苯精馏塔理论塔板数。该程序使用了直接计算 法解方程组,计算出塔顶 D 和塔底 W,使用最小二乘拟合法和高斯消 元法求得相平衡方程,同时使用牛顿迭代的法求得 q 线方程与相平衡 方程的交点以及 q 线方程与精馏段操作线方程等的交点,循环使用牛 顿迭代法最后求得精馏塔理论塔板的数目和进料板的位置;在设计的 过程中所需要的 C++语言方法有:循环、选择、数组、绘图等的综合 使用,最后完成整个设计过程。
及常数 a0,a1,a2,a3。 2、 矩阵板块:我们在求解平衡线方程中的系数及常数 a0,a1,a2,a3
时,有一个问题,那就是矩阵的行数和列数不相同,不能完全 照搬书上所说的高斯主元素,而是需要利用数据的拟合。我们
可以用矩阵的转置与矩阵的乘法(参考实际程序),达到此目的。 3、 牛顿迭代法:牛顿迭代法是求方程根的重要方法之一,在所给
cout<<" 精 馏 操 作 线 方 程 为 : "<<setw(5)<<"y="<<R/(R+1)<<"*x"<<"+"<<xd/(R+1)<<endl;
cout<<" 提 馏 操 作 线 方 程 为 : "<<setw(5)<<"y="<<(M*R+q*G)/(M*R+q*G-K)<<"*x"<<"-"<<K*xw/(M
p=(X[j-1]-xq)*xw/(xw-xq)+(X[j-1]-xw)*yq/(xq-xw); X[j]=Diedai(a0-p,a1,a2,a3); } while (X[j]>xw); cout<<"理论塔板的数目是:"<<j<<endl; cout<<endl; cout<<endl; } (E)、程序的运行结果为:
cout<<endl;
cout<<"请输入 xd: ";
cin>>xd;
cout<<endl;
cout<<"请输入 xw: "; cin>>xw; cout<<endl; xe=xf; ye=a0+a1*xe+a2*pow(xe,2)+a3*pow(xe,3); //平衡方程 Rmin=(xd-ye)/(ye-xe); cout<<"输入最小回流比前的系数 t(t=1.1~2.0): "; cin>>t; cout<<endl; R=t*Rmin; xq=xf; yq=R*xq/(R+1)+xd/(R+1); cout<<"xe="<<xe<<setw(5)<<"ye="<<ye<<endl; cout<<endl; cout<<"最小回流比为:"<<setw(5)<<Rmin<<endl; cout<<endl; cout<<"回流比为:"<<setw(5)<<R<<endl; cout<<endl;
for(i=3;i>=0;i--) //************求三次函数的系数 A, B,C,D
{ s=0; for(j=3;j>i;j--) s+=H[i][j]*a[j]; a[i]=(H[i][4]-s)/H[i][i];
}
cout<<"三次函数的系数分别为:"<<endl;
cout<<"A="<<a[0]<<endl;
*R+q*G-K)<<endl; cout<<endl; cout<<"xq="<<xq<<setw(5)<<"yq="<<yq<<endl; cout<<endl; cout<<endl; cout<<endl; X[1]=Diedai(a0-xd,a1,a2,a3); //牛顿迭代法求解 i=1; do { i++; X[i]=Diedai(a0-R*X[i-1]/(R+1)-xd/(R+1),a1,a2,a3); } while (X[i]>xq); Q=i;j=Q; cout<<"进料板位置是:"<<setw(5)<<Q<<endl; cout<<endl; cout<<endl; cout<<endl; cout<<endl; do { j++;
程序设计流程图:
开始
定义牛顿迭 代法
运行主函数,对数 组进行定义
矩阵的转置 及乘法
高 斯 消 元 法 求 a0 , a1,a2 , a3 , 得 到 相 平 衡方程
输
入
F,xf,xd,q,xw,t,
牛顿迭代法求解
输出进料板位置 和理论塔板数
C++原始程序:
程序① : //求解方程组
#include<iostream.h>
二、设计报告
1、撰写要求 (1)C 语言课程设计任务书; (2)目录; (3)摘要; (4)程序设计思路和流程框图; (5)C 语言原始程序; (6)程序运行结果; (7)后记(程序调试过程出现问题的讨论)。 2、印装和上交要求 (1)设计报告要求采用 A4 纸双面打印,订书针装订。 (2)将源程序按统一文件名 100a-bc 形式发给辅导老师
D=(F*XF-F*XW)/(XD-XW);
W=(F*XD-F*XF)/(XD-XW);
cout<<"D="<<D<<" "<<"W="<<W<<endl;
returnLeabharlann Baidu0;
}
程序② ://求精馏段与提镏段方程,并求塔板数
#include <iostream.h>
#include <stdio.h>
1=a[1],a2=a[2],a3=a[3],R,xn,xn1,f,f1,g,g1,xq,yq,xm,xm1,X[50]
,p,y1,y2,x0,x1,x2,e;
double q=1;
//进料热状态 q 的值为 1
cout<<endl;
cout<<endl;
cout<<"请输入 xf: ";
cin>>xf;
{
for(k=1;k<4-i;k++)
{
if(fabs(H[i][i])<fabs(H[i+k][i]))
{
for(j=0;j<5;j++)
{
r=H[i][j];
H[i][j]=H[i+k][j]; H[i+k][j]=r; } } } for(k=1;k<4-i;k++) { m=H[i+k][i]/H[i][i]; for(j=i;j<5;j++) H[i+k][j]=H[i+k][j]-m*H[i][j]; } }
海 到 无 边 天 接 水,山 登 绝 顶 我 为 峰
C++
程
班级:化工1002 班
序
设
学号:1505100203
计
实
指导老师:李海普
践
报
姓 名:刘艳珍
告
化学化工学院
思 维 的 碰 撞、智 慧 的 火 花
目录
(1)C 语言课程设计任务书****************** (2)设计报告******************************* (3)摘要*********************************** (4)程序设计思路*************************** (5)流程框图******************************* (6)C 语言原始程序************************* (7)程序运行结果*************************** (8)后记*********************************** (9)参考文献*******************************
y[]={0,2.5,7.11,11.2,20.8,29.4,37.2,44.2,50.7,56.6,61.9,66.
7,71.3,75.5,79.1,82.5,85.7,88.5,91.2,93.6,95.9,98,98.9,99.6
1,100},
A,B,C,D;
//A,B,C,D 为函数的系数
程序设计思路:一拿到题目,起初觉得非常的难。感觉不知从何 下手。及至后来老师发了该题求解过程,并在老师讲解后我才大概懂 得题目的要求,参考了一些范例后,我终于有了设计思路。我将整个 程序设计过程分为两步,计算部分和作图部分,而计算又分为两个部 分,程序一过程使用了直接计算法解方程组,计算出塔顶 D 和塔底 W, 程序二过程先利用高斯消元法求得相平衡方程,再利用牛顿迭代法求 得精馏塔理论塔板数的过程。 1、 高斯函数:利用高斯主元素消去法可以求解平衡线方程中的系数
#define F 46.61
//F 为处理量
#define XF 0.45
//XF 为苯-甲苯混合液中苯的含量
#define XD 0.996 //xd 为塔顶产品摩尔分率
#define XW 0.0118 //XW 为塔底产品摩尔分率
int main()
{
double D=0,W=0; //D 为塔顶,W 为塔底
目录 (1)摘要********************************************* (2)程序设计思路************************************* (3)流程图框***************************************** (4)C++原始程序************************************** (5)程序运行结果************************************* (6)后记(程序调试过程出现的一些问题的讨论)********
system("cls");
cout<<"\t****苯-甲苯精馏塔理论塔板数的计算****"<<endl;
cout<<endl;
cout<<endl;
int i,j,k,n;
double H[4][5],b[25][5],a[4],s,m,r; //********数据输入
double x[]={0,1,3,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,8 5,90,95,97,99,100},
#include <iomanip.h>
#include <math.h>
#include <windows.h>
#include <dos.h>
double Diedai(double a,double b,double
c,double
d)//********迭代定义
{
double xn,xn1=0.45,f,f1;
的参考的资料中,认真阅读之下,发现牛顿迭代法运用了很多 次。所以觉得如果先定义一下牛顿迭代法,然后再在所需要的 地方调用一下,应该会方便一些。因此,做程序时便先定义了。
4、 循环板块:在最后的计算部分,要输出进料板的位置和理论总板 数,我便想到了数组,输出其角标即可。其实,循环的过程中, 我们也用到了牛顿迭代法直接调用时非常方便的。我采用的是 do….while 语句。
for(i=0;i<25;i++)
{
b[i][0]=1;
b[i][1]=x[i]/100;
b[i][2]=b[i][1]*b[i][1];
b[i][3]=b[i][2]*b[i][1];
b[i][4]=y[i]/100;
} //**************求矩阵
for(i=0;i<4;i++) {
for(j=0;j<5;j++) {
if(j<4) {
for(n=0,s=0;n<25;n++) s+=b[n][i]*b[n][j];
H[i][j]=s;
} if(j==4) {
for(n=0,s=0;n<25;n++) s+=b[n][i]*b[n][4];
H[i][j]=s; } } }
for(i=0;i<3;i++)
//********************求解
do
{
xn=xn1;
f=a+xn*b+c*pow(xn,2)+d*pow(xn,3); //平衡方程
f1=b+2*c*xn+3*d*pow(xn,2);
//平衡方程求导
xn1=xn-f/f1;
}while(fabs(xn1-xn)>=1e-6);
return xn1;
}
void main()
{
loop:
cout<<"B="<<a[1]<<endl;
cout<<"C="<<a[2]<<endl;
cout<<"D="<<a[3]<<endl;
cout<<endl;
i=0;j=0;
int Q;
double
M=21.4048,G=46.61,K=25.2052,xf,xw,xd,ye,xe,Rmin,t,a0=a[0],a