61阅读

c语言指针编程练习题-C++编程练习-求出e的值

发布时间:2017-08-14 所属栏目:c语言课后练习答案

一 : 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

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1