西北工业大学动力与能源学院上机实习报告.docx
- 文档编号:9897563
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:35
- 大小:695.71KB
西北工业大学动力与能源学院上机实习报告.docx
《西北工业大学动力与能源学院上机实习报告.docx》由会员分享,可在线阅读,更多相关《西北工业大学动力与能源学院上机实习报告.docx(35页珍藏版)》请在冰点文库上搜索。
西北工业大学动力与能源学院上机实习报告
西北工业大学动力与能源学院
上机实习报告
班级:
02031002
专业:
自动化
学号:
2010301740
姓名:
王宏业
课程名称:
上机实习
成绩:
2012年7月4日
1.熟悉VC编程环境,用选择法对n个数字进行排序。
程序编制要点(知识点、程序框图):
源程序代码:
#include
#definen7
usingnamespacestd;
intmain()
{
inti,j;
doubletmp;
doublea[n];
for(i=0;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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 西北工业大学 动力 能源 学院 上机 实习 报告