循环结构程序设计 习题

by admin on 2020年1月23日

一、自然级数

5.1 请画出例5.6中给出的3个程序段的流程图

5.3 输入两个正整数m和n,求其最大公约数和最小公倍数

代码:

/*
时间:2011年10月21日10:54:29
*/
# include <stdio.h>

/*
时间:2011年10月24日12:13:07
题目:习题5-3 输入两个正整数m和n,求其最大公约数和最小公倍数
备注:最小公约数(Least Common Multiple)简写为LCM;最大公约数(greatest
common divisor,简写为gcd
*/
# include <stdio.h>

#include<stdio.h>

int main()
{
    int i,j,n=0;
    for(i=1;i<=4;i++)
    {
        for(j=1;j<=5;j++,n++)
        {
            if(0==n%5)
            {
                printf(“n”);
            }
            printf(“%dt”,i*j);
        }
    }
    printf(“n”);
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————

int lcm (int x,int y);
int gcd (int x,int y);

main()

1       2       3       4       5
2       4       6       8       10
3       6       9       12      15
4       8       12      16      20
Press any key to continue
————————————
*/

int main()
{
    int a,b;
    int t;
    
    printf(“输入两个正整数:”);
    scanf(“%d%d”,&a,&b);
    
    if(a>b)
    {
        t=a;
        a=b;
        b=t;
    }
    
    printf(“最小公倍数是%dn”,lcm(a,b));
    printf(“最大公约数是%dn”,gcd(a,b));
    
    return 0;
}

{

 

//求最小公倍数
int lcm (int x,int y)
{
    int n=1;
    int lcm;
    for(lcm=x;0!=lcm%y;++n)
    {
        lcm = n*x;
    }
    return (lcm);
}
//求最大公约数
int gcd (int x,int y)
{
    
    int t;
    while(x!=0)
    {
        t = y%x;
        y = x;
        x = t;
    }
    return(y);
}
/*
在VC++6.0中的输出结果为:
————————————
输入两个正整数:12 18
最小公倍数是36
最大公约数是6
Press any key to continue
————————————
*/

         int
n;

图片 1

 

         float
t,x,e;

 

5.4 输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数

        

/*
时间:2011年10月21日11:44:06
*/
# include <stdio.h>

/*
时间:2011年10月24日13:48:26
题目:习题5-4
输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数
*/
# include <stdio.h>

        
e=1.0;

int main()
{
    int i,j,n=0;
    for(i=1;i<=4;i++)
    {
        for(j=1;j<=5;j++,n++)
        {
            if(0==n%5)
            {
                printf(“n”);
            }
            if(3==i && 1==j)
            {
                break;
            }
            printf(“%dt”,i*j);
        }
    }
    printf(“n”);
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————

int main()
{
    int space=0;
    int number=0;
    int letters=0;
    int other=0;
    char c;
    printf(“输入一串字符:”);
    
    
    while((c=getchar())!=’n’)
    {
        if((65<=c && c<=90) || (97<=c && c<=122))
        {
            ++letters;
        }
        else if(32==c)
        {
            ++space;
        }
        else if(48<=c && c<=57)
        {
            ++number;
        }
        else
        {
            ++other;
        }
    }
    
    printf(“空格有%d个n”,space);
    printf(“数字有%d个n”,number);
    printf(“字母有%d个n”,letters);
    printf(“其他字符有%d个n”,other);
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
输入一串字符:Bccn 2011.11.24
空格有1个
数字有8个
字母有4个
其他字符有2个
Press any key to continue
————————————
*/

        
x=1.0;

1       2       3       4       5
2       4       6       8       10

 

        
n=1;

4       8       12      16      20
Press any key to continue
————————————
*/

5.5 求Sn=a+aa+aaa+。。。aaaaa(n个a,)其中a是一个数字,n表示a的位数,例如:2+22+222+2222+22222

        
t=1.0;

 

/*
时间:2011年10月24日14:09:19
题目:习题5-5
求Sn=a+aa+aaa+。。。aaaaa(n个a,)其中a是一个数字,n表示a的位数
*/
# include <stdio.h>

        
while(t>0.000001)

图片 2

int main()
{
    int a,n;
    int sn=0;
    int term=0,i;
    
    printf(“输入a和n的值:n”);
    printf(“a=”);
    scanf(“%d”,&a);
    printf(“n=”);
    scanf(“%d”,&n);
    
    for(i=1;i<=n; ++i)
    {
        term = 10*term + a;
        sn += term;
    }
    
    printf(“当a=%d,n=%d时,sn=%dn”,a,n,sn);
    
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
输入a和n的值:
a=2
n=5
当a=2,n=5时,sn=24690
Press any key to continue
————————————
*/

        
{

 

 

                  
t=t*x/n;

/*
时间:2011年10月21日11:44:06
*/
# include <stdio.h>

5.6 求1!+2!+3!+…..+20!

                  
e=e+t;

int main()
{
    int i,j,n=0;
    for(i=1;i<=4;i++)
    {
        for(j=1;j<=5;j++,n++)
        {
            if(0==n%5)
            {
                printf(“n”);
            }
            if(3==i && 1==j)
            {
                continue;
            }
            printf(“%dt”,i*j);
        }
    }
    printf(“n”);
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————

/*
时间:2011年10月24日14:39:40
题目:求1!+2!+3!+…..+20!
*/
# include <stdio.h>

                  
n=n+1;

1       2       3       4       5
2       4       6       8       10
6       9       12      15
4       8       12      16      20
Press any key to continue
————————————
*/

double factoria (int x);

        
}

 

int main()
{
    int max=20;
    int i;
    double sn=0;    //注意这里用double型
    
    for (i=1; i<=max; ++i)
    {
        sn += factoria(i);
    }
    printf(“sn=%22.15en”,sn);
    return 0;
}

        
printf(“E is %f”,e);

图片 3

double factoria (int x)
{
    int i;
    double factoria=1;
    
    for(i=1; i<=x; ++i)
    {
        factoria *= i;
    }
    return (factoria);
}
/*
在VC++6.0中的输出结果为:
————————————
sn=2.561327494111820e+018
Press any key to continue
————————————
*/

 

 

5.8 输出所有的水仙花数

        
getch();

5.2 请补充例5.7程序,分别统计当“fabs(t)>=1e-6”和“fabs(t)>=1e-8“时执行循环体的次数

/*
时间:2011年10月24日17:00:12
题目:习题5.8 输出所有的水仙花数(3位)
*/
# include <stdio.h>
# include <math.h>

}

/*
时间:2011年10月24日11:36:47
题目:习题5-2
*/
# include <stdio.h>
# include <math.h>

bool IsNarcissus (int number);
int n=3;   //这里只求3位数的水仙花数

二、π级数

int main()
{
    int sign=1;
    double pi=0.0,term;
    int n=0;
    
    while(fabs(term)>=1e-8)
    {
        ++n;
        term = 1.0/(2*n-1)*sign;
        pi += term;
        sign = -sign;
    }
    pi *= 4;
    printf(“pi的近似值是%lfn”,pi);
    printf(“循环体循环了%d次n”,n);
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
fabs(term)>=1e-6
pi的近似值是3.141595
循环体循环了500001次

int main()
{
    int i;
    for(i=pow(10,n-1); i<pow(10,n); ++i)
    {
        if (IsNarcissus (i))
        {
            printf(“%d n”,i);
        }    
    }
    return 0;
}

代码:

Press any key to continue

fabs(term)>=1e-8
pi的近似值是3.141593
循环体循环了50000001次
Press any key to continue
————————————
*/

 

5.3 输入两个正整数m和n,求其最大公约数和最小公倍数

/*
时间:2011年10月24日12:13:07
题目:习题5-3 输入两个正整数m和n,求其最大公约数和最小公倍数
备注:最小公约数(Least Common Multiple)简写为LCM;最大公约数(greatest
common divisor,简写为gcd
*/
# include <stdio.h>

int lcm (int x,int y);
int gcd (int x,int y);

int main()
{
    int a,b;
    int t;
    
    printf(“输入两个正整数:”);
    scanf(“%d%d”,&a,&b);
    
    if(a>b)
    {
        t=a;
        a=b;
        b=t;
    }
    
    printf(“最小公倍数是%dn”,lcm(a,b));
    printf(“最大公约数是%dn”,gcd(a,b));
    
    return 0;
}

//求最小公倍数
int lcm (int x,int y)
{
    int n=1;
    int lcm;
    for(lcm=x;0!=lcm%y;++n)
    {
        lcm = n*x;
    }
    return (lcm);
}
//求最大公约数
int gcd (int x,int y)
{
    
    int t;
    while(x!=0)
    {
        t = y%x;
        y = x;
        x = t;
    }
    return(y);
}
/*
在VC++6.0中的输出结果为:
————————————
输入两个正整数:12 18
最小公倍数是36
最大公约数是6
Press any key to continue
————————————
*/

 

5.4 输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数

/*
时间:2011年10月24日13:48:26
题目:习题5-4
输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数
*/
# include <stdio.h>

int main()
{
    int space=0;
    int number=0;
    int letters=0;
    int other=0;
    char c;
    printf(“输入一串字符:”);
    
    
    while((c=getchar())!=’n’)
    {
        if((65<=c && c<=90) || (97<=c && c<=122))
        {
            ++letters;
        }
        else if(32==c)
        {
            ++space;
        }
        else if(48<=c && c<=57)
        {
            ++number;
        }
        else
        {
            ++other;
        }
    }
    
    printf(“空格有%d个n”,space);
    printf(“数字有%d个n”,number);
    printf(“字母有%d个n”,letters);
    printf(“其他字符有%d个n”,other);
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
输入一串字符:Bccn 2011.11.24
空格有1个
数字有8个
字母有4个
其他字符有2个
Press any key to continue
————————————
*/

 

5.5 求Sn=a+aa+aaa+。。。aaaaa(n个a,)其中a是一个数字,n表示a的位数,例如:2+22+222+2222+22222

/*
时间:2011年10月24日14:09:19
题目:习题5-5
求Sn=a+aa+aaa+。。。aaaaa(n个a,)其中a是一个数字,n表示a的位数
*/
# include <stdio.h>

int main()
{
    int a,n;
    int sn=0;
    int term=0,i;
    
    printf(“输入a和n的值:n”);
    printf(“a=”);
    scanf(“%d”,&a);
    printf(“n=”);
    scanf(“%d”,&n);
    
    for(i=1;i<=n; ++i)
    {
        term = 10*term + a;
        sn += term;
    }
    
    printf(“当a=%d,n=%d时,sn=%dn”,a,n,sn);
    
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
输入a和n的值:
a=2
n=5
当a=2,n=5时,sn=24690
Press any key to continue
————————————
*/

 

5.6 求1!+2!+3!+…..+20!

/*
时间:2011年10月24日14:39:40
题目:求1!+2!+3!+…..+20!
*/
# include <stdio.h>

double factoria (int x);

int main()
{
    int max=20;
    int i;
    double sn=0;    //注意这里用double型
    
    for (i=1; i<=max; ++i)
    {
        sn += factoria(i);
    }
    printf(“sn=%22.15en”,sn);
    return 0;
}

double factoria (int x)
{
    int i;
    double factoria=1;
    
    for(i=1; i<=x; ++i)
    {
        factoria *= i;
    }
    return (factoria);
}
/*
在VC++6.0中的输出结果为:
————————————
sn=2.561327494111820e+018
Press any key to continue
————————————
*/

 

5.7
图片 4

/*
时间:2011年10月28日13:12:51
题目:习题5-7
备注:原来编的效率不高,看坛友ppfly的代码后修改。
参考:
*/
# include <stdio.h>

int main ()
{
    int i;
    double sum1=0,sum2=0,sum3=0;
    
    for(i=1; i<=100; ++i)
    {
        sum1 += i;
        if(i<=50)
        {
            sum2 += i*i;
        }
        if(i<=10)
        {
            sum3 += 1.0/i;
        }
        
    }
    printf(“sn=%lfn”,sum1+sum2+sum3);
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
sn=47977.928968
Press any key to continue
————————————
*/

 

5.8 输出所有的水仙花数

/*
时间:2011年10月24日17:00:12
题目:习题5.8 输出所有的水仙花数(3位)
*/
# include <stdio.h>
# include <math.h>

bool IsNarcissus (int number);
int n=3;   //这里只求3位数的水仙花数

int main()
{
    int i;
    for(i=pow(10,n-1); i<pow(10,n); ++i)
    {
        if (IsNarcissus (i))
        {
            printf(“%d n”,i);
        }    
    }
    return 0;
}

bool IsNarcissus (int number)
{
    int sum=0;
    int x=number;
    while(x!=0)
    {
        sum += pow((x%10),n);
        x /= 10;
    }
    if (sum == number)
    {
        return true;
    }
    else
    {
        return false;
    }
}
/*
在VC++6.0中的输出结果为:
————————————
153
370
371
407
Press any key to continue
————————————
*/

 

5.9 编程序找出1000以内所有完数

/*
时间:2011年10月25日14:43:51
题目:习题5.9 编程序找出1000以内所有完数
备注:要求输出格式为6 its factors are 1,2,3
*/
# include <stdio.h>

bool IsPerfectNumber (int val,int * pArr);

int main()
{
    int i,k=0;
    int a[100]={0};
    for(i=2;i<1000;++i)
    {
        if(IsPerfectNumber(i,a))
        {
            printf(“%d its factors are 1”,i);
            for(k=0; k<7; ++k)
            {
                if(a[k]!=0)
                {
                    printf(“,%d”,a[k]);
                }
            }
            printf(“n”);
        }
    }
    return 0;
}

bool IsPerfectNumber (int val,int * pArr)
{
    int i,j,k=0;
    int sum = 1;
    for(j=2;j<=val;++j)
    {
        if(j==val || val%j!=0)
        {
            continue;
        }
        else
        {
            sum += j;
            *(pArr+k)=j;
            ++k;
        }
    }
    if (sum == val)
    {
        return true;
    }
    else
    {
        for(i=0; i<=k; ++i)
        {
            *(pArr+i)=0;
        }
        return false;
    }
}
/*
在VC++6.0中的输出结果为:
————————————
6 its factors are 1,2,3
28 its factors are 1,2,4,7,14
496 its factors are 1,2,4,8,16,31,62,124
Press any key to continue
————————————
*/

 

5.10 有一个分数数列 2/1,3/2,5/3,8/5,13/8,21/13…求前20项的和

/*
时间:2011年10月25日15:09:21
题目:习题5.10 求分数数列前20项和
备注:分数数列为2/1,3/2,5/3,8/5,13/8…
*/
# include <stdio.h>

int main()
{
    int i,n=20;
    double a=2,b=1,sum=0;
    double t;
    
    for(i=1; i<=n; ++i)
    {
        sum += a/b;
        t = a;
        a += b;
        b = t;
    }
        printf(“前20项和为%lfn”,sum);
    
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
前20项和为32.660261
Press any key to continue
————————————
*/

 

5.11 有一个球从100米高落下,每次反弹一半,求第10次落地时经过多长距离,第10次反弹多高

/*
时间:2011年10月25日15:30:44
题目:习题5.11
有一个球从100米高落下,每次反弹一半,求第10次落地时经过多长距离,第10次反弹多高
*/
# include <stdio.h>

int main()
{
    double sum = 100.0;
    double high = sum/2;
    int n;
    
    for(n=2; n<=10; ++n)
    {
        sum += 2*high;
        high /= 2;
    }
    printf(“第10次落地时小球经过%lf米,第10次反弹的高度是%lf米n”,sum,high);
    
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
第10次落地时小球经过299.609375米,第10次反弹的高度是0.097656米
Press any key to continue
————————————
*/

 

5.12猴子吃桃问题。猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了

一个。第2天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天

剩下的一半零一个。到第10天早上想再吃时,就只剩一个桃子了。求第1天共摘多少个

桃子。

/*
时间:2011年10月25日15:44:20
题目:习题5.12
猴子吃桃问题。猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了
      一个。第2天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天
      剩下的一半零一个。到第10天早上想再吃时,就只剩一个桃子了。求第1天共摘多少个桃子。
*/
# include<stdio.h>

int main()
{
    int peach=1;
    int day;
    
    for(day=9; day>0; –day)
    {
        peach =2*(peach+1);
    }
    printf(“第1天猴子摘了%d个桃子n”,peach);
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
第1天猴子摘了1534个桃子
Press any key to continue
————————————
*/

 

5.13 用迭代法求平方根

/*
时间:2011年10月25日16:08:06
题目:习题5.13 用迭代法求平方根
公式:Xn+1=(Xn+a/Xn)/2
要求:两次求出的x的差的绝对值小于1e-5
*/
# include <stdio.h>
# include <math.h>

int main()
{
    double a;
    double x0,x1=1;
    
    printf(“输入a的值:”);
    scanf(“%lf”,&a);
    
    do
    {
        x0 = x1;
        x1=(x0+a/x0)/2;
    }
    while(fabs(x1-x0)>=1e-5);
    printf(“%lf的平方根是%lfn”,a,x1);
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
输入a的值:2
2.000000的平方根是1.414214
Press any key to continue
————————————
*/

 

5.14 用牛顿迭代法求下面方程在1.5附近的根 2X^3-4X^2+3X-6=0

/*
时间:2011年10月26日8:55:22
题目:用牛顿迭代法求下面方程在1.5附近的根 2X^3-4X^2+3X-6=0
*/
# include <stdio.h>
# include <math.h>

int main()
{
    double x0,x1=1.5;
    double fx,fd;

    do
    {
    x0=x1;
    fx=((2*x0-4)*x0+3)*x0-6;
    fd=(6*x0-8)*x0+3;
    x1=x0-fx/fd;
    }
    while(fabs(x1-x0)>=1e-5);

    printf(“方程在1.5附近的根是%lfn”,x1);
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
方程在1.5附近的根是2.000000
Press any key to continue
————————————
*/

 

5.15 用二分法求下面方程在(-10

bool IsNarcissus (int number)
{
    int sum=0;
    int x=number;
    while(x!=0)
    {
        sum += pow((x%10),n);
        x /= 10;
    }
    if (sum == number)
    {
        return true;
    }
    else
    {
        return false;
    }
}
/*
在VC++6.0中的输出结果为:
————————————
153
370
371
407
Press any key to continue
————————————
*/

#include<stdio.h>

 

#include<math.h>

5.9 编程序找出1000以内所有完数

 

/*
时间:2011年10月25日14:43:51
题目:习题5.9 编程序找出1000以内所有完数
备注:要求输出格式为6 its factors are 1,2,3
*/
# include <stdio.h>

main()

bool IsPerfectNumber (int val,int * pArr);

{

int main()
{
    int i,k=0;
    int a[100]={0};
    for(i=2;i<1000;++i)
    {
        if(IsPerfectNumber(i,a))
        {
            printf(“%d its factors are 1”,i);
            for(k=0; k<7; ++k)
            {
                if(a[k]!=0)
                {
                    printf(“,%d”,a[k]);
                }
            }
            printf(“n”);
        }
    }
    return 0;
}

         double
pai=1,p=1,t=1;

bool IsPerfectNumber (int val,int * pArr)
{
    int i,j,k=0;
    int sum = 1;
    for(j=2;j<=val;++j)
    {
        if(j==val || val%j!=0)
        {
            continue;
        }
        else
        {
            sum += j;
            *(pArr+k)=j;
            ++k;
        }
    }
    if (sum == val)
    {
        return true;
    }
    else
    {
        for(i=0; i<=k; ++i)
        {
            *(pArr+i)=0;
        }
        return false;
    }
}
/*
在VC++6.0中的输出结果为:
————————————
6 its factors are 1,2,3
28 its factors are 1,2,4,7,14
496 its factors are 1,2,4,8,16,31,62,124
Press any key to continue
————————————
*/

         int
n=2;

 

 

5.10 有一个分数数列 2/1,3/2,5/3,8/5,13/8,21/13…求前20项的和

        
while(fabs(t)>0.000001)

/*
时间:2011年10月25日15:09:21
题目:习题5.10 求分数数列前20项和
备注:分数数列为2/1,3/2,5/3,8/5,13/8…
*/
# include <stdio.h>

        
{

int main()
{
    int i,n=20;
    double a=2,b=1,sum=0;
    double t;
    
    for(i=1; i<=n; ++i)
    {
        sum += a/b;
        t = a;
        a += b;
        b = t;
    }
        printf(“前20项和为%lfn”,sum);
    
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
前20项和为32.660261
Press any key to continue
————————————
*/

                  
t=pow(-1.0,n+1)/(2*n-1);

 

                  
printf(“%lfn”,t);

5.11 有一个球从100米高落下,每次反弹一半,求第10次落地时经过多长距离,第10次反弹多高

                  
p=p+t;

/*
时间:2011年10月25日15:30:44
题目:习题5.11
有一个球从100米高落下,每次反弹一半,求第10次落地时经过多长距离,第10次反弹多高
*/
# include <stdio.h>

                  
n=n+1;     

int main()
{
    double sum = 100.0;
    double high = sum/2;
    int n;
    
    for(n=2; n<=10; ++n)
    {
        sum += 2*high;
        high /= 2;
    }
    printf(“第10次落地时小球经过%lf米,第10次反弹的高度是%lf米n”,sum,high);
    
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
第10次落地时小球经过299.609375米,第10次反弹的高度是0.097656米
Press any key to continue
————————————
*/

        
}

 

        
pai=4*p;

5.12猴子吃桃问题。猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了

        
printf(“Pai is %lfn”,pai);

一个。第2天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天

 

剩下的一半零一个。到第10天早上想再吃时,就只剩一个桃子了。求第1天共摘多少个

 

桃子。

}

/*
时间:2011年10月25日15:44:20
题目:习题5.12
猴子吃桃问题。猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了
      一个。第2天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天
      剩下的一半零一个。到第10天早上想再吃时,就只剩一个桃子了。求第1天共摘多少个桃子。
*/
# include<stdio.h>

 

int main()
{
    int peach=1;
    int day;
    
    for(day=9; day>0; –day)
    {
        peach =2*(peach+1);
    }
    printf(“第1天猴子摘了%d个桃子n”,peach);
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
第1天猴子摘了1534个桃子
Press any key to continue
————————————
*/

三、正弦函数级数

 

代码:

5.13 用迭代法求平方根

 

/*
时间:2011年10月25日16:08:06
题目:习题5.13 用迭代法求平方根
公式:Xn+1=(Xn+a/Xn)/2
要求:两次求出的x的差的绝对值小于1e-5
*/
# include <stdio.h>
# include <math.h>

#include <stdio.h>

int main()
{
    double a;
    double x0,x1=1;
    
    printf(“输入a的值:”);
    scanf(“%lf”,&a);
    
    do
    {
        x0 = x1;
        x1=(x0+a/x0)/2;
    }
    while(fabs(x1-x0)>=1e-5);
    printf(“%lf的平方根是%lfn”,a,x1);
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
输入a的值:2
2.000000的平方根是1.414214
Press any key to continue
————————————
*/

#include <stdlib.h>

 

#include <math.h>

5.14 用牛顿迭代法求下面方程在1.5附近的根 2X^3-4X^2+3X-6=0

 

/*
时间:2011年10月26日8:55:22
题目:用牛顿迭代法求下面方程在1.5附近的根 2X^3-4X^2+3X-6=0
*/
# include <stdio.h>
# include <math.h>

double Factorial(int n) //求阶乘

int main()
{
    double x0,x1=1.5;
    double fx,fd;

{

    do
    {
    x0=x1;
    fx=((2*x0-4)*x0+3)*x0-6;
    fd=(6*x0-8)*x0+3;
    x1=x0-fx/fd;
    }
    while(fabs(x1-x0)>=1e-5);

int i=0;

    printf(“方程在1.5附近的根是%lfn”,x1);
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
方程在1.5附近的根是2.000000
Press any key to continue
————————————
*/

double factorical=1;

 

if(n==0)

5.15 用二分法求下面方程在(-10,,10)之间的根 2X^3-4X^2+3X-6=0

return 1;

/*
时间:2011年10月26日9:43:48
题目:习题5.15 用二分法求下面方程在(-10,,10)之间的根
2X^3-4X^2+3X-6=0
*/
# include <stdio.h>
# include <math.h>

for(i=1;i<=n;i++)

int main()
{
    double x0=-10,x1=10,x2;
    double fx0,fx1,fx2;
    
    fx0=((2*x0-4)*x0+3)*x0-6;
    fx1=((2*x1-4)*x1+3)*x1-6;
    
    if(fx0*fx1<0)
    {
        do
        {    
            x2=(x0+x1)/2;
            fx2=((2*x2-4)*x2+3)*x2-6;
            if(fx2*fx1<0)
            {
                x0=x2;
            }
            else
            {
                x1=x2;
            }
            fx0=((2*x0-4)*x0+3)*x0-6;
            fx1=((2*x1-4)*x1+3)*x1-6;
        }
        while(fabs(fx2)>=1e-5);
        printf(“该范围内的根是%lfn”,x2);
    }
    else if(fx0*fx1==0)
    {
        if(fx0==0)
        {
            printf(“该范围有根%lfn”,x0);
        }
        if(fx1==0)
        {
            printf(“该范围有根%lfn”,x1);
        }
    }
    else
    {
        printf(“该范围内没有根n”);
    }
    
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
该范围内的根是2.000000
Press any key to continue
————————————
*/

factorical=factorical*i;

 

 

5.16 输出菱形图案

return factorical;

/*
时间:2011年10月26日10:56:44
题目:输出菱形图案
*/
# include <stdio.h>

 

void draw (int i);

}

int max=7,n=2;
int main()
{
    int i;
    
    for(i=1;i<max;i+=n)
    {
        draw(i);
    }
    for(i=max;i>0;i-=n)
    {
        draw(i);
    }
    return 0;
}

 

void draw (int i)
{
    int j,k;
    for(j=1;j<=(max-i)/2;++j)
    {
        printf(” “);
    }
    for(k=1;k<=i;++k)
    {
        printf(“*”);
    }
    printf(“n”);
}
/*
在VC++6.0中的输出结果为:
————————————
   *
  ***
 *****
*******
 *****
  ***
   *
Press any key to continue
————————————
*/

double Mysin(double x)

 

{

5.17 两个乒乓球队进行比赛,各出3人,甲队为A,B,C 3人.乙队为X.Y,Z 3人;已抽签决定比赛名单。有人向队员打听比赛的名单,A说他不和X比,C说他不和X.Z比,请编程序找出 3对赛手的名单。

    int m = 1,
sign = 1;

/*
时间:2011年10月26日11:24:58
题目:习题5.17 两个乒乓球队进行比赛,各出3人,甲队为A,B,C
3人.乙队为X.Y,Z
3人;已抽签决定比赛名单。有人向队员打听比赛的名单,A说他不和X比,C说他不和X.Z比,请编程序找出
3对赛手的名单。
*/
# include <stdio.h>

    double t,
sum = 0;

int main()
{
    
    char a,b,c;
    for(a=’y’;a<=’z’;++a)        //a不与x比
    {
        for(b=’x’;b<=’z’;++b)
        {
            c=’y’;            //c不与x和z比,则只能跟y比
            if(a!=b && b!=c
&& c!=a)    //a,b,c不会与相同的对手比赛
            {
                printf(“a VS %cn”,a);
                printf(“b VS %cn”,b);
                printf(“c VS %cn”,c);
            }
        }
    }
    
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
a VS z
b VS x
c VS y
Press any key to continue
————————————
*/

 

    while (
fabs(t = sign * pow(x, 2*m -1) / Factorial(2*m – 1)) >
1e-6)

    {

        sum +=
t;

       
++m;

        sign
*= -1;

    }

 

    return
sum;

}

 

int main()

{

 double
x;

 printf(“please input x: n”);

 scanf(“%lf”,&x);

   
printf(“%lfn”, Mysin(x));

   
system(“pause”);

    return
0;

}

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图