}
}
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;ij+=run[i];
else
for(j=0,i=1;ij+=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;icin>>a[i];
cout<<"请输入化简后右侧常数项"<for(i=0;icin>>b[i];
for(i=0;ifor(j=0;j{
at[j*m+i]=a[i*n+j];
}
for(i=0;ifor(j=0;jfor(k=0,sum=0;k{
sum=sum+at[i*m+k]*a[k*n+j];
ata[i*n+j]=sum;
}
for(i=0;ifor(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