西北工业大学动力与能源学院上机实习报告.docx

上传人:b****8 文档编号:23890097 上传时间:2023-05-21 格式:DOCX 页数:35 大小:695.71KB
下载 相关 举报
西北工业大学动力与能源学院上机实习报告.docx_第1页
第1页 / 共35页
西北工业大学动力与能源学院上机实习报告.docx_第2页
第2页 / 共35页
西北工业大学动力与能源学院上机实习报告.docx_第3页
第3页 / 共35页
西北工业大学动力与能源学院上机实习报告.docx_第4页
第4页 / 共35页
西北工业大学动力与能源学院上机实习报告.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

西北工业大学动力与能源学院上机实习报告.docx

《西北工业大学动力与能源学院上机实习报告.docx》由会员分享,可在线阅读,更多相关《西北工业大学动力与能源学院上机实习报告.docx(35页珍藏版)》请在冰豆网上搜索。

西北工业大学动力与能源学院上机实习报告.docx

西北工业大学动力与能源学院上机实习报告

 

西北工业大学动力与能源学院

上机实习报告

 

班级:

02031002

专业:

自动化

学号:

2010301740

姓名:

王宏业

课程名称:

上机实习

成绩:

2012年7月4日

 

1.熟悉VC编程环境,用选择法对n个数字进行排序。

程序编制要点(知识点、程序框图):

源程序代码:

#include

#definen7

usingnamespacestd;

intmain()

{

inti,j;

doubletmp;

doublea[n];

for(i=0;i>a[i];

for(j=n-1;j>0;j--)

for(i=0;i

{

if(a[i]

{

tmp=a[i+1];a[i+1]=a[i];a[i]=tmp;

}

}

for(i=0;i

:

cout<

cout<

return0;

}

程序执行结果(拷屏):

源程序文件名:

第一天第一题.cpp

1.利用梯形法计算

程序编制要点(知识点、程序框图):

源程序代码:

的源程序

#include

#include

usingnamespacestd;

doublef(doublex)

{

returnsin(x);

}

intmain()

{

doublea,b,h,k,l,s;

inti;

longn=10000;

cout<<"请输入要积分sin的上下限"<

cin>>a>>b;

if(a>b)

k=a,a=b,b=k;

h=(b-a)/n;

for(i=1,s=f(a)+f(b);i

s=s+2*f(a+i*h);

l=h/2*s;

cout<

return0;

}

的源程序

#include

#include

usingnamespacestd;

#definee1e-6

#definef(x)(cos(x))

intmain()

{

inti,n,a,b,k;

doubleh,ll,l,g;

n=1;

cout<<"请输入要积分cosx的上下限"<

cin>>a>>b;

if(a>b)k=a,a=b,b=k;//判断输入的数值是否是上下限

h=(double)(b-a)/2;

l=h*(f(a)+f(b));

do

{

ll=l;

g=0;

for(i=1;i<=n;i++)

g+=f((a+(2*i-1)*h));

l=(ll/2)+(h*g);

n*=2;

h/=2;

}

while(fabs(l-ll)>e);

cout<

return0;

}

的源程序

#include

#include

usingnamespacestd;

#definee1e-6

#definef(x)(exp(x))//定义f(x)

intmain()

{

inti,n,a,b,k;

doubleh,ll,l,g;

cout<<"请输入要积分expx的上下限"<

cin>>a>>b;

if(a>b)k=a,a=b,b=k;//判断输入的数值是否是上下限

n=1;

h=(double)(b-a)/2;

l=h*(f(a)+f(b));

do

{

ll=l;

g=0;

for(i=1;i<=n;i++)

g+=f((a+(2*i-1)*h));

l=(ll/2)+(h*g);

n*=2;

h/=2;

}

while(fabs(l-ll)>e);//判断是否满足误差限e

cout<

return0;

}

程序执行结果(拷屏):

源程序文件名:

第一天第二题1.cpp,第一天第二题2.cpp,第一天第二题3.cpp

2.将一个mxn的整型矩阵转置。

程序编制要点(知识点、程序框图):

源程序代码:

#include

usingnamespacestd;

classA

{

public:

int**a;

voidinput();

voidoutput();

voidswap();

intm,n;

private:

intb[100][100];

};

voidA:

:

input()

{

cout<<"矩阵的转置"<

cout<<"***********************************"<

cout<<"输入mn:

"<

cin>>m>>n;

a=newint*[m];

for(inti=0;i

a[i]=newint[n];

cout<<"输入"<

"<

for(i=0;i

for(intj=0;j

cin>>a[i][j];

cout<<"***********************************"<

cout<<"输入矩阵A为:

"<

}

voidA:

:

output()

{

for(inti=0;i

{

for(intj=0;j

{

cout<

}

cout<

}

cout<<"***********************************"<

}

voidA:

:

swap()

{

cout<<"转置矩阵B为:

"<

for(inti=0;i

{

for(intj=0;j

{

b[j][i]=a[i][j];

}

cout<

}

for(i=0;i

{

for(intj=0;j

cout<

cout<

}

}

voidmain()

{

Aa;

a.input();

a.output();

a.swap();

}

程序执行结果(拷屏):

源程序文件名:

第一天第三题.cpp

3.用二分法(对分法)求方程f(x)=x3-2x-5=0在[2,3]内的根的近似值,绝对误差要求小于0.001。

(x=2.0945515)

程序编制要点(知识点、程序框图):

源程序代码:

#include

#include

#include

usingnamespacestd;

doublef(doublex,doublea,doubleb,doublec,doubled)

{

doubley;

y=a*x*x*x+b*x*x+c*x+d;

returny;

}

intmain()

{

doublex1,x2,f1,f2,z,a,b,c,d,k;

cout<<"从高到低输入方程的系数"<

cin>>a>>b>>c>>d;

cout<<"输入隔根区间的端点x1,x2:

"<

cin>>x1>>x2;

f1=f(x1,a,b,c,d);

f2=f(x2,a,b,c,d);

cout<<"输入精度:

"<

cin>>k;

if(f1*f2>0)

cout<<"隔根区间内没有根或不止一个根"<

else

{

while(fabs(x1-x2)>=k)

{

if(f(x1,a,b,c,d)*f((x1+x2)/2,a,b,c,d)>0)

x1=(x1+x2)/2;

else

x2=(x1+x2)/2;

}

}

z=(x1+x2)/2;

cout<<"方程的根为"<

return0;

}

程序执行结果(拷屏):

源程序文件名:

第二天第一题.cpp

4.用迭代法解线性方程组(参考答案:

x1=1,x2=2,x3=1)

程序编制要点(知识点、程序框图):

源程序代码:

#include

usingnamespacestd;

intmain()

{

doublex[3]={1,1,1},y,m=1;

inti;

for(;m>=0.0000001;)

{

y=x[0];

x[0]=(3+3*x[1]+2*x[2])/11;

x[1]=(0+23*x[0]-x[2])/11;

x[2]=(-1-x[0]+2*x[1])/2;

if((y-x[0])>0)m=y-x[0];

elsem=x[0]-y;

}

for(i=0;i<3;i++)

{

cout<<"X"<

}

return0;

}

程序执行结果(拷屏):

源程序文件名:

第二天第二题.cpp

5.输入某年某月某日,指出这一天是这一年的第几天。

程序编制要点(知识点、程序框图):

源程序代码:

#include

intping[]={0,31,28,31,30,31,30,31,31,30,31,30,31};

intrun[]={0,31,29,31,30,31,30,31,31,30,31,30,31};

boolf(intyear)

{

if(year%4==0&&year%100!

=0||

year%400==0)

returntrue;

returnfalse;

}

intmain()

{

intyear,month,day,i,j;

while(~scanf("%d%d%d",&year,&month,&day))

{

if((year==0||month==0||day==0)||(month==2&&day>29)||

(run[month]

(!

(year%4==0&&year%100!

=0||year%400==0)&&month==2&&day==29)

{

printf("illegal\n");

continue;

}

if(f(year))

for(j=0,i=1;i

j+=run[i];

else

for(j=0,i=1;i

j+=ping[i];

printf("%d\n",j+day);

}

return0;

}

程序执行结果(拷屏):

源程序文件名:

第二天第三题.cpp

6.用最小二乘法求解方程组的近似解

程序编制要点(知识点、程序框图):

源程序代码:

#include

#include

usingnamespacestd;

intmain()

{

start:

intm,n,i,j,k;

doublesum,cha,cha1,jing=0.000001;

charch;

cout<<"输入方程个数"<

cin>>m;

cout<<"输入未知数个数"<

cin>>n;

double*a=newdouble[m*n];

double*at=newdouble[m*n];

double*ata=newdouble[n*n];

double*b=newdouble[m];

double*atb=newdouble[n];

double*x=newdouble[n];

cout<<"请输入化简后系数矩阵,不包含常数项"<

for(i=0;i

cin>>a[i];

cout<<"请输入化简后右侧常数项"<

for(i=0;i

cin>>b[i];

 

for(i=0;i

for(j=0;j

{

at[j*m+i]=a[i*n+j];

}

for(i=0;i

for(j=0;j

for(k=0,sum=0;k

{

sum=sum+at[i*m+k]*a[k*n+j];

ata[i*n+j]=sum;

}

 

for(i=0;i

for(j=0,sum=0;j

{

sum=sum+at[i*m+j]*b[j];

atb[i]=sum;

}

for(i=0;i

{

x[i]=1;

}

for(cha=1;cha>jing;)

{

cha1=x[0];

for(i=0;i

{

for(j=0,sum=0;j

{

if(i==j)continue;

sum=sum+ata[i*n+j]*x[j];

}

x[i]=(atb[i]-sum)/ata[i*n+i];

}

if(cha1>x[0])cha=cha1-x[0];

elsecha=x[0]-cha1;

}

if(n==2)

{

cout<<"X="<

}

else

{

for(i=0;i

{

cout<<"X"<

}

}

delete[]a;

delete[]at;

delete[]ata;

delete[]atb;

delete[]b;

delete[]x;

cout<<"是否继续?

y/n"<

cin>>ch;

if(ch=='y')gotostart;

return0;

}

程序执行结果(拷屏):

源程序文件名:

最小二乘法.cpp

7.有n个人围成一圈,顺序排号。

从第一个人开始报数(从1到m报数),凡报到m的人退出圈子,问最后留下的是原来第几号。

程序编制要点(知识点、程序框图):

源程序代码:

#include

#include

#defineMAX100

main()

{

inta[MAX];

intm,n;

inti,k,length;

printf("请输入n和m(n>m),中间以空格结束!

\n当只剩余一个人时候,自动结束,例如输入21;不会把2个人都删除了.\n当删除了第一个人之后,则先结束程序,于是输出2\n");

scanf("%d%d",&n,&m);

if(n>=MAX||n

{

printf("您的输入不符合要求!

\n");

return;

}

for(i=1;i<=n;i++)//开始赋值初始化

{

a[i]=i;

}

length=n;//初始化

i=1;

k=1;

while

(1)

{

if(a[i]>0)

{

if(length==1)

{

break;

}

if(k>=m)

{

a[i]=0;

k=1;

length--;

}

else//k

{

k++;

}

}

i++;

i=i>n?

1:

i;

}

printf("最后剩余的下标为%d\n",i);

}

程序执行结果(拷屏):

源程序文件名:

8报数.cpp

8.构建一个基本的学生成绩信息档案管理系统,学生信息包括:

学号、姓名、性别、三门课程成绩及三门课程平均成绩。

要求:

(I)打印出每位学生三门课的平均成绩和总平均成绩及;(II)各门课程所有学生的平均成绩。

(提示:

考虑使用结构体)

程序编制要点(知识点、程序框图):

源程序代码:

#include

#include

usingnamespacestd;

structStudent

{

stringname[100];

charsex[100];

intnum[100];

doublescore[100][3];

doubleavg[100];

doublesum_avg;

doubleAvg[3];

};

intmain()

{

Studentstu;

inti,j,n;

doublesum=0,Avg_sum=0;

cout<<"输入学生人数:

";

cin>>n;

for(i=0;i

{

cout<<"输入学生"<

"<

cin>>stu.num[i]>>stu.name[i]>>stu.sex;

for(j=0;j<3;j++)

cin>>stu.score[i][j];

}

for(i=0;i

{

stu.avg[i]=(stu.score[i][0]+stu.score[i][1]+stu.score[i][2])/3;

}

for(i=0;i

{

sum=sum+stu.avg[i];

}

stu.sum_avg=sum/n;

for(i=0;i<3;i++)

{

for(j=0;j

{

Avg_sum=Avg_sum+stu.score[j][i];

}

stu.Avg[i]=Avg_sum/n;

Avg_sum=0;

}

cout<<"每位学生的三门课的平均成绩"<

for(i=0;i

{

cout<<"输出学生"<

"<

}

cout<<"总平均成绩"<

cout<

cout<<"各门课程所有学生的平均成绩"<

for(i=0;i<3;i++)

{

cout<<"输出课程"<

"<

}

return0;

}

程序执行结果(拷屏):

源程序文件名:

教务系统.cpp

10.用欧拉方法与改进的欧拉方法求初值问题

在区间[0,1]上取步长h=0.1的数值解。

要求:

显示各x值下(0、0.1、0.2…0.9、1)两种方法计算的y值。

程序编制要点(知识点、程序框图):

源程序代码:

#include

usingnamespacestd;

floatf(floatx,floaty)

{

floatz;

z=2.0/3*x/(y*y);

return(z);

}

intmain()

{

floaty1,y2,x1,x3,y3,y4;

floath=0.1;

inti,a,b;

cout<<"请输入区间:

";

cin>>a>>b;

x1=0;

y1=1;

cout<<"欧拉方法计算得到的y值:

"<

for(i=1;i<(b-a)/h+1;i++)

{y2=y1+h*f(x1,y1);

cout<<"x="<

y1=y2;

x1=x1+h;

}

cout<<"改进的欧拉方法计算得到的y值:

"<

x3=0;

y3=1;

for(i=1;i<(b-a)/h+1;i++)

{y4=y3+h/2*(f(x3,y3)+f(x3+h,y3+h*f(x3,y3)));

cout<<"x="<

y3=y4;

x3=x3+h;

}

return0;

}

程序执行结果(拷屏):

源程序文件名:

欧拉公式.cpp

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1