C语言课程实践报告
海 到 无 边 天 接 水,山 登 绝 顶 我 为 峰
C++
程
班级:化工1002 班
序
设
学号:1505100203
计
实
指导老师:李海普
践
报
姓 名:刘艳珍
告
化学化工学院
思 维 的 碰 撞、智 慧 的 火 花
目录
(1)C 语言课程设计任务书****************** (2)设计报告******************************* (3)摘要*********************************** (4)程序设计思路*************************** (5)流程框图******************************* (6)C 语言原始程序************************* (7)程序运行结果*************************** (8)后记*********************************** (9)参考文献*******************************
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;
二、设计报告
1、撰写要求 (1)C 语言课程设计任务书; (2)目录; (3)摘要; (4)程序设计思路和流程框图; (5)C 语言原始程序; (6)程序运行结果; (7)后记(程序调试过程出现问题的讨论)。 2、印装和上交要求 (1)设计报告要求采用 A4 纸双面打印,订书针装订。 (2)将源程序按统一文件名 100a-bc 形式发给辅导老师
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
{
for(k=1;k<4-][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]; } }
#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 为塔底
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)、程序的运行结果为:
的参考的资料中,认真阅读之下,发现牛顿迭代法运用了很多 次。所以觉得如果先定义一下牛顿迭代法,然后再在所需要的 地方调用一下,应该会方便一些。因此,做程序时便先定义了。
4、 循环板块:在最后的计算部分,要输出进料板的位置和理论总板 数,我便想到了数组,输出其角标即可。其实,循环的过程中, 我们也用到了牛顿迭代法直接调用时非常方便的。我采用的是 do….while 语句。
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;
程序设计流程图:
开始
定义牛顿迭 代法
运行主函数,对数 组进行定义
矩阵的转置 及乘法
高 斯 消 元 法 求 a0 , a1,a2 , a3 , 得 到 相 平 衡方程
输
入
F,xf,xd,q,xw,t,
牛顿迭代法求解
输出进料板位置 和理论塔板数
C++原始程序:
程序① : //求解方程组
#include<iostream.h>
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 为函数的系数
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++)
//********************求解
课程设计报告
摘要:此次 C 语言程序课程设计,旨在给定的设计条件下,利用 梯级图解法计算苯—甲苯精馏塔理论塔板数。该程序使用了直接计算 法解方程组,计算出塔顶 D 和塔底 W,使用最小二乘拟合法和高斯消 元法求得相平衡方程,同时使用牛顿迭代的法求得 q 线方程与相平衡 方程的交点以及 q 线方程与精馏段操作线方程等的交点,循环使用牛 顿迭代法最后求得精馏塔理论塔板的数目和进料板的位置;在设计的 过程中所需要的 C++语言方法有:循环、选择、数组、绘图等的综合 使用,最后完成整个设计过程。
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},
程序设计思路:一拿到题目,起初觉得非常的难。感觉不知从何 下手。及至后来老师发了该题求解过程,并在老师讲解后我才大概懂 得题目的要求,参考了一些范例后,我终于有了设计思路。我将整个 程序设计过程分为两步,计算部分和作图部分,而计算又分为两个部 分,程序一过程使用了直接计算法解方程组,计算出塔顶 D 和塔底 W, 程序二过程先利用高斯消元法求得相平衡方程,再利用牛顿迭代法求 得精馏塔理论塔板数的过程。 1、 高斯函数:利用高斯主元素消去法可以求解平衡线方程中的系数
#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;
D=(F*XF-F*XW)/(XD-XW);
W=(F*XD-F*XF)/(XD-XW);
cout<<"D="<<D<<" "<<"W="<<W<<endl;
return 0;
}
程序② ://求精馏段与提镏段方程,并求塔板数
#include <iostream.h>
#include <stdio.h>
for(i=0;i<25;i++)
{
b[i][0]=1;
b[i][1]=x[i]/100;