一 : C++编程练习-求出e的值
Description
利用公式e = 1 + 1/1! + 1/2! + 1/3! + ... + 1/n! 求e 。
Input
输入只有一行,该行包含一个整数n(2<=n<=15),表示计算e时累加到1/n!。
Output
输出只有一行,该行包含计算出来的e的值,要求打印小数点后10位。
Sample Input
10
Sample Output
2.7182*****1
Hint
1、e以及n!用double表示
2、要输出浮点数、双精度数小数点后10位数字,可以用下面这种形式:
参考代码
#include <iostream>
#include <cstring>
#include <iomanip>
usingnamespace std;
double&nbs“犇_嫑”p;fact(int n){
if(0 == n || 1 == n){
return 1.0;
}
return (double)n * fact(n - 1);
}
int main(){
int i,n;
double ds;
std::cin>>n;
ds = 0;
for(i = 0;i <= n;i ++){
ds += 1.0 / fact(i);
}
std::cout<<std::fixed<<std::setprecision(10)<<ds<<std::endl;
return 0;
}
二 : 浙江大学数值分析C语言编程习题
C语言编程习题
第二章
习题2-2
5. 用二分法编程求 6x4 -40x2+9=0 的所有实根。[www.61k.com)
#include <stdio.h>
#include <math.h>
#define N 10000
double A,B,C;
double f(double x)
{
return (A*x*x*x*x+B*x*x+C);
}
void BM(double a,double b,double eps1,double eps2)
{
int k;
double x,xe;
double valuea = f(a);
double valueb = f(b);
if (valuea > 0 && valueb > 0 || valuea <0 && valueb < 0) return;
printf("Finding root in the range: [%.3lf, %.3lf]\n", a, b); for(k=1;k<=N;k++) {
x=(a+b)/2;
xe=(b-a)/2;
if(fabs(xe)<eps2 || fabs(f(x))<eps1) {
printf("The x value is:%g\n",x);
printf("f(x)=%g\n\n",f(x));
return;
}
if(f(a)*f(x)<0) b=x;
else a=x;
}
printf("No convergence!\n");
}
1
c语言课后练习答案 浙江大学数值分析C语言编程习题
int main()
{
double a,b,eps1,eps2,step,start;
printf("Please input A,B,C:\n");
scanf("%lf %lf %lf",&A,&B,&C);
printf("Please input a,b, step, eps1,eps2:\n");
scanf("%lf %lf %lf %lf %lf",&a,&b,&step,&eps1,&eps2);
for (start=a; (start+step) <= b; start += step) { double left = start;
double right = start + step;
BM(left, right, eps1, eps2);
}
return 0;
}
运行:
Please input A,B,C:
6 -40 9
Please input a,b, step, eps1,eps2:
-10 10 1 1e-5 1e-5
Finding root in the range: [-3.000, -2.000]
The x value is:-2.53643
f(x)=-0.00124902
Finding root in the range: [-1.000, 0.000]
The x value is:-0.482857
f(x)=0.00012967
Finding root in the range: [0.000, 1.000]
The x value is:0.482857
f(x)=0.00012967
Finding root in the range: [2.000, 3.000]
The x value is:2.53643
f(x)=-0.00124902
有时若把判别语句
2
c语言课后练习答案 浙江大学数值分析C语言编程习题
if(fabs(xe)<eps2 || fabs(f(x))<eps1)
改为
if(fabs(xe)<eps2 && fabs(f(x))<eps1)
会提高精度,对同一题运行结果:
Finding root in the range: [-3.000, -2.000]
The x value is:-2.53644
f(x)=-4.26496e-007
Finding root in the range: [-1.000, 0.000]
The x value is:-0.482861
f(x)=-7.3797e-006
Finding root in the range: [0.000, 1.000]
The x value is:0.482861
f(x)=-7.3797e-006
Finding root in the range: [2.000, 3.000]
The x value is:2.53644
f(x)=-4.26496e-007
习题2-3
5. 请用埃特金方法编程求出x=tgx在4.5(弧度)附近的根。[www.61k.com]#include <stdio.h>
#include <math.h>
#define N 100
#define PI 3.1415926
void SM(double x0,double eps)
{
int k;
double x;
double x1,x2;
for(k=1;k<=N;k++) {
x1=sin(x0)/cos(x0);
x2=sin(x1)/cos(x1);
x=x0-(x1-x0)*(x1-x0)/(x2-2*x1+x0);
if(fabs(x-x0)<eps) {
3
c语言课后练习答案 浙江大学数值分析C语言编程习题
printf("The x value is:%g\n",x); return;
}
x0=x;
}
printf("No convegence!\n");
}
int main()
{
double eps,x0;
printf("Please input eps,x0:\n");
scanf("%lf %lf",&eps,&x0);
SM(x0,eps);
return 0;
}
运行:
Please input eps,x0:
1e-5 4.5
The x value is:4.49341
习题2-4
11.请编出用牛顿法求复根的程序,并求出 P(z)=z4-3z3+20z2+44z+54=0
接近于z0=2.5+4.5i 的零点。(www.61k.com)
#include <cstdio>
#include <cmath>
#define MAX_TIMES 1000
typedef struct {
double real, image;
} COMPLEX;
COMPLEX Aa[5]={{54,0},{44,0},{20,0},{-3,0},{1,0}}; COMPLEX Bb[4]={{44,0},{40,0},{-9,0},{4,0}};
COMPLEX zero = {0, 0};
4
c语言课后练习答案 浙江大学数值分析C语言编程习题
double eps1=1e-6;
double eps2=1e-6;
COMPLEX multi(COMPLEX a,COMPLEX b) {
COMPLEX result;
www.61k.com = a.real * b.real - a.image * b.image; result.image = a.image * b.real + a.real * b.image; return result;
}
COMPLEX Div(COMPLEX a,COMPLEX b){ COMPLEX z3;
double s;
s=(b.real*b.real)+(b.image*b.image);
www.61k.com =b.real;
z3.image=-b.image;
z3=multi(a,z3);
www.61k.com = www.61k.com ;
z3.image=z3.image/s;
return z3;
}
COMPLEX add(COMPLEX a,COMPLEX b) {
COMPLEX result;
www.61k.com = a.real + b.real;
result.image = a.image + b.image;
return result;
}
COMPLEX subtract(COMPLEX a, COMPLEX b) {
COMPLEX result;
www.61k.com = a.real - b.real;
result.image = a.image - b.image;
return result;
}
COMPLEX times(COMPLEX z,int n){
int i;
COMPLEX result={1, 0};
for (i=0;i<n;i++) result=multi(result,z); return result;
}
5
c语言课后练习答案 浙江大学数值分析C语言编程习题
double distance(COMPLEX a, COMPLEX b) {
return sqrt((a.real - b.real) * (a.real - b.real) + (a.image - b.image) * (a.image - b.image)); }
double complex_abs(COMPLEX a) {
return sqrt(a.real * a.real + a.image * a.image);
}
COMPLEX f(COMPLEX x)
{
int i;
COMPLEX result=zero;
for (i=0;i<5;i++){
result=add(result,multi(Aa[i],times(x,i)));
}
return result;
}
COMPLEX ff(COMPLEX x) {
int i;
COMPLEX result=zero;
for (i=0;i<4;i++){
result=add(result,multi(Bb[i],times(x,i)));
}
return result;
}
int main(){
COMPLEX z0,z1,result;
double x,y;
int k;
printf("please input x,y\n");
scanf("%lf %lf",&x,&y);
www.61k.com =x; z0.image=y;
for(k=0; k<MAX_TIMES; k++) {
z1 = subtract(z0, Div(f(z0), ff(z0)));
result = f(z1);
if (distance(z0,z1)<eps1 || complex_abs(result)<eps2){
printf("The root is: z=(%.3f + %.3fi), f(z)=(%e + %ei)\n", www.61k.com ,z1.image, www.61k.com , result.image);
return 0;
6
三 : C语言练习题精选
1. 从键盘上输入两个整数,求出它们的和
#include "stdio.h"
void main()
{
int x,y,s;
scanf("%d",&x);
scanf("%d",&y);
s=x+y;
printf("\\n s=%d",s);
}
2. 已知三角形的底和高,求出三角形的面积。
#include "stdio.h"
void main()
{
int x,y;
float s;
x=4;
y=5;
s=x*y/2.0;
printf("\\n s=%f",s);
}
3. 从键盘上输入三角形的底和高,求出三角形的面积。
#include "stdio.h"
void main()
{
int x,y;
float s;
scanf("%d",&x);
scanf("%d",&y);
s=x*y/2.0;
printf("\\n s=%f",s);
}
4. 已知三角形的三边长,求出三角形的面积。
#include "stdio.h"
#include "math.h"
void main()
{
int a,b,c;
float p,s;
a=3;
b=4;
c=5;
p=(a+b+c)/2.0;
s=sqrt(p*(p-a) *(p-b) *(p-c));
printf("\\n s=%f",s);
}
5. 已知二元一次方程的三个系数,求方程的一个根。
#include "stdio.h"
#include "math.h"
void main()
{
int a,b,c;
float root;
a=3;
b=4;
c=5;
root=(-b-sqrt(pow(b,2)-4*a*c))/(2.0*a);
printf("\\n root=%f",root);
}
6. 编程实现符号函数。当x <0 ,则sgn(x)=-1, 当x >0 ,则sgn(x)=+1, 当x =0 ,则sgn(x)=0
#include "stdio.h"
void main()
{
float x;
int y;
scanf("%f",&x);
if (x>0);
y=1;
if (x==0);
y=0;
if (x<0);
y=-1;
printf("\\n x=%f ,sgn(x)=%d",x,y);
}
或者:
#include "stdio.h"
void main()
{
float x;
int y;
scanf("%f",&x);
if (x>0);
y=1;
else if (x==0);
y=0;
else;
y=-1;
printf("\\n x=%f ,sgn(x)=%d",x,y);
}
或者:
#include "stdio.h"
void main()
{
float x;
int y;
scanf("%f",&x);
y=(x>0) ? 1: (x==0) ? 0 : -1;
printf("\\n x=%f ,sgn(x)=%d",x,y);
}
7. 从键盘上输入数字星期,在屏幕上显示英文星期。
#include "stdio.h"
void main()
{
float x;
scanf("%f",&x);
switch( x )
{
case 0 :printf("Sunday.\\n");break;
case 1 :printf("Monday.\\n");break;
case 2 :printf("Tuesday.\\n");break;
case 3 :printf("Wednesday.\\n");break;
case 4 :printf("Thursday.\\n");break;
case 5 :printf("Friday.\\n");break;
case 6 :printf("Saturday.\\n");break;
default :printf("不存在这个星期!\\n");
}
}
8. 从键盘输入三角形的三边长,判断出这三边能否构成三角形
#include "stdio.h"
void main()
{
int a,b,c;
scanf("%d",&a);
scanf("%d",&b);
scanf("%d",&c);
if ((a+b>c) && (a+c)>b) && (b+c)>a )
printf("这三边能构成三角形!");
else
printf("这三边不能构成三角形!");
}
9. 从键盘输入三个整数,将这三个数按从大到小的顺序排列起来
#include "stdio.h"
void main()
{
int a,b,c,temp;
scanf("%d",&a);
scanf("%d",&b);
scanf("%d",&c);
if ((a>b) && (a>c) && (b>c))
printf("这三数从大到小的顺序为:%d,%d,%d",a,b,c);
if ((a>b) && (a>c) && (b<c))
printf("这三数从大到小的顺序为:%d,%d,%d",a,c,b);
if ((b>a) && (b>c) && (a>c))
printf("这三数从大到小的顺序为:%d,%d,%d",b,a,c);
if ((b>a) && (b>c) && (c>a))
printf("这三数从大到小的顺序为:%d,%d,%d",b,c,a);
if ((c>b) && (c>a) && (a>b))
printf("这三数从大到小的顺序为:%d,%d,%d",c,a,b);
if ((c>b) && (c>a) && (b>a))
printf("这三数从大到小的顺序为:%d,%d,%d",c,b,a);
}
或者这样写:
#include "stdio.h"
void main()
{
int a,b,c,temp;
scanf("%d",&a);
scanf("%d",&b);
scanf("%d",&c);
if (a<b)
{
temp=a;
a=b;
b=temp;
}
if (a<c)
{
temp=a;
a=c;
c=temp;
}
if (b<c)
{
temp=b;
b=c;
c=temp;
}
printf("这三数从大到小的顺序为:%d,%d,%d",a,b,c);
}
10. 从键盘输入二个整数,求出最大值。
#include "stdio.h"
void main()
{
int a,b,temp;
scanf("%d",&a);
scanf("%d",&b);
if (a>b)
temp=a;
else
temp=b;
printf("这二个整数最大值为%d",temp);
}
11. 从键盘输入三个实数,求出最大值。
#include "stdio.h"
void main()
{
float a,b,c,temp;
scanf("%f",&a);
scanf("%f",&b);
scanf("%f",&c);
if (a>b)
temp=a;
else
temp=b;
if (temp<c)
temp=c;
printf("这三数最大值为%f",temp);
}
12. 从键盘输入三个整数,在一个程序中既要求出最大值,还要求出最小值。
#include "stdio.h"
void main()
{
int a,b,c,max,min;
scanf("%d",&a);
scanf("%d",&b);
scanf("%d",&c);
if (a>b)
{max=a; min=b;}
else
{max=b;min=a;}
if (max<c)
max=c;
if (min>c)
min=c;
printf("这三个整数最大值为:%d,最小值为:%d.",max,min);
}
13. 使用for循环编程求出1到100的和
#include "stdio.h"
void main()
{
int i,s=0;
for (i=1;i<=100;i++)
s=s+i;
printf("\\ns= %d",s);
}
14. 使用当循环编程求出1到100的和
#include "stdio.h"
void main()
{
int i=1,s=0;
while (i<=100)
{
s=s+i;
i++;
}
printf("\\ns= %d",s);
}
15. 使用当循环编程求出1到100的和
#include "stdio.h"
void main()
{
int i=1,s=0;
do
{
s=s+i;
i++;
}
while (i<=100);
printf("\\ns= %d",s);
}
16. 从键盘输入10个实数,求出最大值
#include "stdio.h"
void main()
{
int i;
float x,max;
scanf("%f",&x);
max=x;
for (i=0;i<9;i++)
{
scanf("%f",&x);
if (max<x)
max=x;
}
printf("这十数中的最大值为:%f",max);
}
15. 从键盘输入10个整数,求出最小值
#include "stdio.h"
void main()
{
int i x,min;
scanf("%d",&x);
min=x;
for (i=0;i<9;i++)
{
scanf("%d",&x);
if (min>x)
min=x;
}
printf("这十整数中的最小值为:%d",min);
}
16. 从键盘输入10个整数,求出它们的平均值
#include "stdio.h"
void main()
{
int i a[10],s=0;
float aver=0.0;
for (i=0;i<10;i++)
{
scanf("%d",&a[i]);
s=s+i;
}
aver=s/10.0;
printf("这十整数中的平均值为:%f",aver);
}
17. 编程在屏幕上输出具有7行的正三角形
*
***
*****
*******
*********
***********
*************
#include "stdio.h"
void main()
{
int i , j;
for (i=0;i<7;i++)
{
for (j=0; j<6-i; j++)
printf(" ");
for (j=0; j<=2*i+1; j++)
printf("*");
printf("\\n");
}
}
18. 求出8的阶乘。
#include "stdio.h"
void main()
{
int i ;
long p=1;
for (i=1;i<9;i++)
p=p*i;
printf("\\n8的阶乘值为:%ld",p);
}
从键盘输入20个整数,求出不大于90所有数的和
#include "stdio.h"
void main()
{
int i ,s=0,x;
for (i=0;i<20;i++)
{
scanf("%d",&x);
if (x<=90)
s=s+x;
}
printf("\\n不大于90所有数的和:%d",s);
}
从键盘输入一个整数,判断这个数是否为素数
#include "stdio.h"
void main()
{
int i ,x,flag=1;
scanf("%d",&x);
for (i=2;i<x;i++)
{
if ( x % i ==0)
{
flag=0;
break;
}
}
if (flag==1)
printf("\\n该数是素数");
else
printf("\\n该数不是素数");
}
从键盘输入20个整数,求出它们的和
#include "stdio.h"
void main()
{
int i ,s=0,x[20];
for (i=0;i<20;i++)
{
scanf("%d",&x[i]);
s=s+x[i];
}
printf("\\n所有数的和:%d",s);
}
从键盘输入20个整数,求出它们的平均值及比平均值大的数
#include "stdio.h"
void main()
{
int i ,s=0,x[20];
float aver=0.0;
for (i=0;i<20;i++)
{
scanf("%d",&x[i]);
s=s+x[i];
}
aver=s/20.0;
printf("平均为:%f\\n",aver);
for (i=0;i<20;i++)
{
if (x[i]>aver)
printf("比平均大的数为:[%d]=%d\\n",i,x[i]);
}
}
已知五个整数3,-5,8,2,9,求出最大值
#include "stdio.h"
void main()
{
int i ,x[5]={ 3,-5,8,2,9},max;
max=x[0];
for (i=0;i<20;i++)
if (x[i]>max)
max=x[i];
printf("最大值为:%d\\n",max);
}
从键盘输入20个整数,求出它们的最小值,并求最小值所在位置
#include "stdio.h"
void main()
{
int i ,min,x[20],pos=0;
for (i=0;i<20;i++)
scanf("%d",&x[i]);
min=x[0];
pos=0;
for (i=1;i<20;i++)
if (x[i]>min)
{
min=x[i];
pos=i;
}
printf("最小值为:%d,最小值位置为:%d\\n",min,pos);
}
已知五个整数3,-5,8,2,9,按从大到小的顺序排列起来
#include "stdio.h"
void main()
{
int j ,k, t , b[5]={ 3,-5,8,2,9};
for (j=0; j<4; j++)
for (k=j-1; k<5; k++)
if (b[j]<b[k])
{
t= b[j];
b[j]= b[k];
b[k]=t;
}
for (j=0; j<5; j++)
printf("\\n %d,",b[j]);
}
从键盘输入10个实数,按从大到小的顺序排列起来
#include "stdio.h"
void main()
{
int i, j ,k;
float b[10],t;
for (i=0;i<20;i++)
scanf("%d",&b[i]);
for (j=0; j<9; j++)
for (k=j-1; k<10; k++)
if (b[j]<b[k])
{
t= b[j];
b[j]= b[k];
b[k]=t;
}
for (j=0; j<9; j++)
printf("\\n %f,",b[j]);
}
某班有43名学生,某门考试结束后,请按10段统计出各分数段的人数
#include "stdio.h"
void main()
{
int j , x[43],fragment[12];
for (j=0; j<43; j++)
scanf("%d",&x[j]);
for (j=0; j<43; j++)
fragment[x[j]/10]= fragment[x[j]/10]+1;
for (j=0; j<11; j++)
printf("\\n各分数段人数为 %d", fragment[j]);
}
或者写成:
#include "stdio.h"
void main()
{
int j , x[43],t ,fragment[12];
for (j=0; j<43; j++)
scanf("%d",&x[j]);
for (j=0; j<43; j++)
{
t= x[j]/10;
fragment[t]= fragment[t]+1;
}
for (j=0; j<11; j++)
printf("\\n各分数段人数为 %d", fragment[j]);
}
从键盘上输入两个字符串,并将它们交换后输出
#include "stdio.h"
#include "string.h"
void main()
{
int j ,k;
char ch1[81],ch2[81],t[81];
scanf("%s",ch1);
scanf("%s",ch2);
strcpy(t , ch1);
strcpy(ch1 , ch2);
strcpy( ch2 ,t);
printf("\\n %s,%s\\n,",ch1,ch2);
}
已知五个字符串"China","American","Japan","France","Australia",编程将它们按从小到大的顺序排列起来
#include "stdio.h"
#include "string.h"
void main()
{
int j ,k;
char t[81], b[5][81]= {"China","American","Japan","France","Australia"};
for (j=0; j<4; j++)
for (k=j-1; k<5; k++)
if ( strcmp(b[j]>b[k]) )
{
strcpy(t , b[j]);
strcpy(b[j] , b[k]);
strcpy( b[k] ,t);
}
for (j=0; j<9; j++)
printf("\\n %s,",b[j]);
}
本文标题:
c语言指针编程练习题-C++编程练习-求出e的值 本文地址:
http://www.61k.com/1080968.html