C统考习题答案66.docx
《C统考习题答案66.docx》由会员分享,可在线阅读,更多相关《C统考习题答案66.docx(43页珍藏版)》请在冰点文库上搜索。
![C统考习题答案66.docx](https://file1.bingdoc.com/fileroot1/2023-5/4/a859a87d-d27c-4046-8b3d-d0dd7eec03c5/a859a87d-d27c-4046-8b3d-d0dd7eec03c51.gif)
C统考习题答案66
统考复习题
1.编写程序,用矩形法求一元函数f(x)=x^3+2x^2-12x-6(其中^示幂运算),在区间[3.5,5]上的积分近似值S,保留2位小数(小区间数n=15,此参数不能改动,否则影响答案)。
#include"stdio.h"
#include"math.h"a
doublef(doublex)
{doubley;
y=x*x*x+2*x*x-12*x-6;
returny;
}
voidmain()
{inti,n;
doublea,b,x,h,s;
n=15;
a=3.5;b=5.0;
h=(b-a)/n;
s=0;
for(i=1;i<=n;i++)
{x=a+i*h;
s=s+f(x)*h;
}
printf("s=%6.2f\n",s);
}
运行结果:
s=92.50
2.编写程序,用矩形法求一元函数f(x)=x^3+2x^2-12x-6(其中^示幂运算),在区间[3.5,
5]上的积分近似值S,保留2位小数(小区间数n=25,此参数不能改动,否则影响答案)
#include"stdio.h"
#include"math.h"
doublef(doublex)
{doubley;
y=x*x*x+2*x*x-12*x-6;
returny;
}
voidmain()
{inti,n;
doublea,b,x,h,s;
n=25;
a=3.5;b=5.0;
h=(b-a)/n;
s=0;
for(i=1;i<=n;i++)
{x=a+i*h;
s=s+f(x)*h;
}
printf("s=%6.2f\n",s);
}
运行结果:
s=90.69
3.编写程序,用矩形法求一元函数f(x)=7x^3+2x^2-12x-16(其中^表示幂运算),在区间[5,7]上的积分近似值S,保留2位小数(小区间数n=15,此参数不能改动,否则影响答案)
#include"stdio.h"
#include"math.h"
doublef(doublex)
{doubley;
y=7*pow(x,3)+2*x*x-12*x-6;
returny;
}
voidmain()
{inti,n;
doublea,b,x,h,s;
n=15;
a=5.0;b=7.0;
h=(b-a)/n;
s=0;
for(i=1;i<=n;i++)
{x=a+i*h;
s=s+f(x)*h;
}
printf("s=%8.2f\n",s);
}
运行结果:
s=3201.43
4.编写程序,用矩形法求一元函数f(x)=3x^3+2x^2+x+1(其中^表示幂运算),在区间[1,3]上的积分近似值S,保留3位小数(小区间数n=15,此参数不能改动,否则影响答案)
#include"stdio.h"
#include"math.h"
doublef(doublex)
{doubley;
y=3*pow(x,3)+2*x*x+x+1;
returny;
}
voidmain()
{inti,n;
doublea,b,x,h,s;
n=15;
a=1.0;b=3.0;
h=(b-a)/n;
s=0;
for(i=1;i<=n;i++)
{x=a+i*h;
s=s+f(x)*h;
}
printf("s=%8.3f\n",s);
}
运行结果:
s=89.852
5.编写程序,用牛顿切线法求方程f(x)=x+㏑x-1.56=0的近似实根r,迭代初值为2,精确到0.0001。
(注意:
㏑x是以e为底的自然对数)(提示:
牛顿切线法的计算公式为x=x-f(x)/f′(x)).
#include"stdio.h"
#include"math.h"
voidmain()
{floatx0,x1;
x0=2;
x1=x0-(x0+log(x0)-1.56)/(1+1/x0);
while(fabs(x0-x1)>1e-4)
{x0=x1;
x1=x0-(x0+log(x0)-1.56)/(1+1/x0);
}
printf("x=%8.4f\n",x1);
}
运行结果:
x=1.2987
6.编写程序,用牛顿切线法求方程f(x)=x^3+2x^2-14=0(其中^表示幂运算),在区间(0,5)上的近似实根r,迭代初值自选,精确到0.0001。
{提示:
牛顿切线法的计算公式为x=x-f(x)/f’(x)}.
#include"stdio.h"
#include"math.h"
voidmain()
{floatx0,x1;
x0=2.5;
x1=x0-(x0*x0*x0+2*x0*x0-14)/(3*x0*x0+2*2*x0);
while(fabs(x0-x1)>1e-4)
{x0=x1;
x1=x0-(x0*x0*x0+2*x0*x0-14)/(3*x0*x0+2*2*x0);
}
printf("x=%10.4f\n",x1);
}
运行结果:
x=1.8957
7.要求:
编写程序,用梯形法求一元函数f(x)=㏑(x+1)+x/3,在区间[1,4]上的积分近似值S,保留3位小数(小区间数n=20,此参数不能改动)。
(注意:
㏑x是以e为底的自然对数)
在运行程序时,使用文本框或InputBox函数输入n值,并用适当的方法输出运算结果。
#include"stdio.h"
#include"math.h"
doublef(doublex)
{doubley;
y=log(x+1)+x/3.0;
returny;
}
voidmain()
{doublea,b,s,x,h;
intn=20,i;
a=1.0;b=4.0;
h=fabs(b-a)/n;
s=(f(a)+f(b))/2.0;
for(i=1;i<=n-1;i++)
{x=a+i*h;s=s+f(x);}
s=s*h;
printf("s=%8.3f\n",s);
}
运行结果:
s=6.160
8.编写程序,用梯形法求一元函数f(x)=7x^3+2x^2-12x-16(其中^表示幂运算),在区间[3,5]上的积分近似植S,保留2位小数(小区间数n=25,此参数不能改动,否则影响答案)
#include"stdio.h"
#include"math.h"
doublef(doublex)
{doubley;
y=7*x*x*x+2*x*x-12*x-16;
returny;
}
voidmain()
{doublea,b,s,x,h;
intn=25,i;
a=3.0;b=5.0;
h=fabs(b-a)/n;
s=(f(a)+f(b))/2.0;
for(i=1;i<=n-1;i++)
{x=a+i*h;s=s+f(x);}
s=s*h;
printf("s=%8.2f\n",s);
}
运行结果:
s=889.52
方法二:
#include"stdio.h"
doublef(doublex)
{
doubley;
y=7*x*x*x+2*x*x-12*x-16;
returny;
}
voidmain()
{
doublea,b,x,y1,y2,h,s;
inti,n;
n=25;
a=3;b=5;
h=(b-a)/n;
s=0;
x=a;
for(i=1;i<=n;i++)
{
y1=f(x);
y2=f(x+h);
s=s+(y1+y2)*h/2;
x=x+h;
}
printf("s=%.2f\n",s);
}
9.编写程序,用普通迭代法求方程f(x)=x+㏒x-3.18=0的近似实根r,迭代初值为2.5,要求结果保留4位小数。
(注意:
㏒x是以10为底常用对数)(提示:
必须把方程f(x)=0化成其等价形式x=g(x))(本题允许使用其他迭代法)
要求:
在运行程序时,使用文本框或InputBox函数输入迭代初值,并用适当的方法输出运算结果
#include"stdio.h"
#include"math.h"
voidmain()
{floatx0,x1;
x0=2.5;
x1=3.18-log10(x0);
do
{x0=x1;
x1=3.18-log10(x0);}
while(fabs(x0-x1)>1e-4);
printf("x=%8.4f\n",x1);
}
运行结果:
x=2.7419
10.编写程序,用普通迭代法求方程f(x)=x+lgx-3.18=0的近似实根r,迭代初值为2.5,精确到0.0001。
(注意:
lgx是以10为底的常用对数)[提示:
必须把方程f(x)=0化成其等价形式x=g(x)](本题允许使用其他迭代法)
#include"stdio.h"
#include"math.h"
voidmain()
{floatx0,x1;
x0=2.5;
x1=3.18-log10(x0);
do
{x0=x1;
x1=3.18-log10(x0);}
while(fabs(x0-x1)>1e-4);
printf("x=%8.4f\n",x1);
}
运行结果:
x=2.7419
11.编写程序,用二分法求一元非线性方程f(x)=x+cosx-2.8=0在区间(0,5)上的近似实根r,精确到0.0001。
#include"stdio.h"
#include"math.h"
doublef(doublex)
{doubley;
y=x+cos(x)-2.8;
returny;
}
doublexpoint(doublex1,doublex2)
{doubley;
y=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1));
returny;
}
doubleroot(doublex1,doublex2)
{doublex,y,y1;
y1=f(x1);
do
{x=xpoint(x1,x2);
y=f(x);
if(y*y1>0){y1=y;x1=x;}elsex2=x;
}while(fabs(y)>=0.0001);
returnx;
}
voidmain()
{doublex,x1,x2;
x1=0;x2=5;
if(f(x1)*f(x2)>0)printf("此区间无根");
elsex=root(x1,x2);
printf("x=%8.4f\n",x);
}
运行结果:
x=3.6657
12.编写程序,计算出1到500之间所有满足下列条件的整数的和:
该整数的所有因子
(包括1,但不包括整数本身)之和等于整数本身。
#include"stdio.h"
voidmain()
{intsum=0,i,j,s;
for(i=1;i<=500;i++)
{s=0;
for(j=1;j<=i/2;j++)
if(i%j==0)s=s+j;
if(i==s)sum=sum+i;
}
printf("sum=%d\n",sum);
}
运行结果:
sum=530
13.编写程序,界面如下。
统计在所有3位数中,其个位、十位、百位上的数码相加等于9的数据个数。
点击“运行“按钮输出结果。
〈image.gif>
#include"stdio.h"
voidmain()
{inti,a,b,c,sum=0;
for(i=100;i<=999;i++)
{a=i/100;
b=(i-100*a)/10;/*b=(i%100)/10;*/
c=i-100*a-10*b;/*c=i%10;*/
if(a+b+c==9)sum++;
}
printf("sum=%d",sum);
}
运行结果:
sum=45
14.设计如图所示的运行界面,从键盘输入一批不少于10个数的任意数据,点击“计算”按钮,将实现如下功能:
去掉其中的最大数和最小数,输出剩余数据的平均值(保留两位小数)。
〈image001.gif>
#include"stdio.h"
voidmain()
{inti;
floatx,min,max,sum=0,ave;
printf("输入10个数:
\n");
scanf("%f",&x);
max=x;min=x;sum=sum+x;
for(i=1;i<10;i++)
{scanf("%f",&x);sum=sum+x;
if(x>max)max=x;
if(x}
ave=(sum-max-min)/(i-2);
printf("sum=%10.2f\n",ave);
}
运行结果:
15.编写程序,计算出300到810之间所有满足下列条件的整数的平方根和:
整数能被其每位数字的和整除。
要求:
运行程序,将结果四舍五入保留4位小数,并采用适当的方式输出。
#include"stdio.h"
#include"math.h"
voidmain()
{inti,a,b,c;
floatsum=0;
for(i=300;i<=810;i++)
{a=i/100;
b=(i-100*a)/10;/*b=(i%100)/10;*/
c=i-100*a-10*b;/*c=i%10;*/
if(i%(a+b+c)==0)sum=sum+sqrt(i);
}
printf("sum=%10.4f\n",sum);
}
运行结果:
sum=2368.6831
16.编写程序,计算出1000到5000之间能被3整除但不能被13整除的整数的所有的整数的平方根的和。
保留4位小数
#include"stdio.h"
#include"math.h"
voidmain()
{inti;floatsum=0;
for(i=1000;i<=5000;i++)
if(i%3==0&&i%13!
=0)sum=sum+sqrt(i);
printf("sum=%10.4f\n",sum);
}
运行结果:
sum=65994.6641
17.编写程序,界面如下。
统计在所有3位数中,其个位、十位、百位上的数码相加等于21的数据个数。
点击“运行”按钮输出结果。
〈image115.gif>
#include"stdio.h"
voidmain()
{inti,a,b,c,sum=0;
for(i=100;i<=999;i++)
{a=i/100;
b=(i-100*a)/10;/*b=(i%100)/10;*/
c=i-100*a-10*b;/*c=i%10;*/
if(a+b+c==21)sum++;
}
printf("sum=%d\n",sum);
}
运行结果:
sum=28
18.编写程序,计算出1000到9900之间所有能被3和7同时整除的整数之和。
#include"stdio.h"
voidmain()
{inti;
longsum=0;
for(i=1000;i<=9900;i++)
if(i%3==0&&i%7==0)sum=sum+i;
printf("sum=%ld\n",sum);
}
运行结果:
sum=2310288
19.编写程序,从键盘输入一个3位正整数,试求其个、十、百位数之和(例如:
136的各位数之和为10)。
要求:
用可视化程序设计出如下界面,点击“确认”按钮输出运算结果
#include"stdio.h"
voidmain()
{inti,a,b,c,sum=0;
printf("enteri:
");
scanf("%d",&i);
a=i/100;
b=(i-100*a)/10;/*b=(i%100)/10;*/
c=i-100*a-10*b;/*c=i%10;*/
sum=a+b+c;
printf("i=%d,sum=%d",i,sum);
}
运行结果:
i=123,sum=6
20.编写程序,计算并输出下面数列前n(设n=45)项中所有偶数项的和。
1*2*3,3*4*5,5*6*7,……,(2n-1)*2n*(2n+1),……
#include"stdio.h"
voidmain()
{intn;
longsum=0;
for(n=2;n<=45;n=n+2)
sum=sum+(2*n-1)*(2*n)*(2*n+1);
printf("sum=%ld\n",sum);
}
运行结果:
sum=4095564
21.编写程序,计算下面数列前n项(设n=50)中奇数项的和。
结果取4位小数。
1/(1*2*3),1/(2*3*4),1/(3*4*5),……,1/(n(n+1)(n+2),……
#include"stdio.h"
voidmain()
{intn;
floatsum=0;
for(n=1;n<=50;n=n+2)
sum=sum+1.0/(n*(n+1)*(n+2));
printf("sum=%10.4f\n",sum);
}
运行结果:
sum=0.1931
22.编写程序,计算并输出下面数列前n(设n=15)项的和。
用科学技术法表示结果,尾数取4位小数。
1!
,2!
,3!
,4!
,……,n!
,……(其中,!
表示求阶乘)。
#include"stdio.h"
voidmain()
{intn;
floatsum=0,p=1;
for(n=1;n<=15;n++)
{p=p*n;sum=sum+p;}
printf("sum=%15.4e\n",sum);
}
运行结果:
sum=1.4016e+012
23.编写程序,计算并输出下面数列前30项的和。
1*2*3,3*4*5,5*6*7,……,(2n-1)*2n*(2n+1),……
#include"stdio.h"
voidmain()
{intn;
longsum=0;
for(n=1;n<=30;n++)
sum=sum+(2*n-1)*(2*n)*(2*n+1);
printf("sum=%ld\n",sum);
}
运行结果:
sum=1728870
24.编写程序,计算并输出下面数列前40项的和,结果取6位小数,小数点后第5位四舍五入。
2/3,4/5,6/7,8/9,10/11,12/13,14/15,……,(2n)/(2n+1)
要求:
在运行程序时,使用文本框或InputBox函数输入n值,并用适当的方法输出运算结果。
#include"stdio.h"
voidmain()
{intn;
floatsum=0;
for(n=1;n<=40;n++)
sum=sum+2.0*n/(2*n+1);
sum=(int)(sum*10000+0.5)/10000.0;
printf("sum=%f\n",sum);
}
运行结果:
sum=38.161500
25.编写程序,求下面数列前40项的和。
结果取4位小数。
1,1/2^4,1/3^4,1/4^4,……,1/n^4,……(其中,^表示幂运算)
#include"stdio.h"(1.0823)
#include"math.h"
voidmain()
{intn;
floatsum=0;
for(n=1;n<=40;n++)
sum=sum+1.0/pow(n,4);
printf("sum=%10.4f\n",sum);
}
运行结果:
sum=1.0823
26.编写程序,计算并输出下面数列前n项(设n=50)的和。
1*2,-2*3,3*4,-4*5,……,(-1)^(n-1)*n*(n+1),……(其中,^表示幂运算)
#include"stdio.h"
voidmain()
{intn,s=1;
intsum=0;
for(n=1;n<=50;n++)
{sum=sum+s*n*(n+1);s=-s;}
printf("sum=%d\n",sum);
}
运行结果:
sum=-1300
27.编写程序,计算并输出下面数列前n(设n=45)项中所有奇数项的和。
1*2,2*3,3*4,4*5,……,n*(n+1),……
#include"stdio.h"
voidmain()
{intn;
intsum=0;
for(n=1;n<=45;n=n+2)
sum=sum+n*(n+1);
printf("sum=%d\n",sum);
}
运行结果:
sum=16744
28.编写程序,计算下面数列前n项(设n=50)中奇数的和。
结果取4位小数。
1/(1*2*3),1/(2*3*4),1/(3*4*5),……,1/(n(n+1)(n+2)),……
#include"stdio.h"
voidmain()
{intn;
floatsum=0;
for(n=1;n<=50;n=n+2)
sum=sum+1.0/(n*(n+1)*(n+2));
printf("sum=%8.4f\n",sum);
}
运行结果:
sum=0.1931
29.编写程序,求下面数列前50项的和。
结果取4位小数。
1,1/(3*3),1/(5*5),1/7*7),……,1/(2n-1)*(2n-1),……
#include"stdio.h"
voidmain()
{intn;
floatsum=0;
for(n=1;n<=50;n++)
sum=sum+1.0/((2*n-1)*(2*n-1));
printf("sum=%10.4f\n",sum);
}
运行结果:
sum=1.2287
30.编写程序,计算并输出如下数列前35项的和。
-1*2*3,2*3*4,-3*4*5,……,(-1)^n*(n*(n+1)*(n+2)),……
(其中,(-1)^n表示-1的n次方)
#include"stdio.h