顺序程序设计,循环结构程序设计
分类:高并发

习题3.1

例题3.1

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

/*
时间:2011年10月12日11:32:14
题目:习题3.1 假如我国国民生产总值的年增长率为9%,计算十年后我国国民生产总值与现在相比增长多少百分比
备注:计算公式为 p=(1+r)^n r为年增长率,n为年数,p为与现在相比的倍数
*/
# include <stdio.h>
# include <math.h>

/*
时间:2011年9月29日15:42:23
题目:例3.1, 将华氏法测出的温度转换为摄氏法测出的温度
备注:转换公式为 c = 5/9*(f-32)
*/
# include <stdio.h>

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

int main()
{
    double r,p;
    int n;

int main()
{
    float f,c;
    
    printf("输入华氏温度n");
    scanf("%f",&f);
//  c = (5.0/9)*(f-32);            //注意这里的5.0
    c = (f-32)*5/9;                //这样写也可以
    printf("华氏%f度 相当于 摄氏%f度n", f,c);
    
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
输入华氏温度
64
华氏64.000000度 相当于 摄氏17.777778度
Press any key to continue
————————————
*/

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

    r = 9.0/100;
    n = 10;
    p = pow(1+r,n);
    printf("十年后我国国民生产总值与现在相比增长了%lf%n",p*100);    //如果想输出半角的%,需要敲两次

 

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;
}

    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
十年后我国国民生产总值与现在相比增长了236.736367%
Press any key to continue
————————————
*/

例题3.2

//求最小公倍数
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
————————————
*/

 

/*
时间:2011年9月29日16:36:27
题目:分别计算三种存款方式下的存款利息
备注:r1为活期存款年利率0.0036,r2为一年期定期存款的年利率0.0225,r3为半年期定期存款的年利率0.0198
*/
# include <stdio.h>
# include <math.h>
# define R1 0.0036            //指定用一个标识符代表一个常量,一般用大写,最好能见名知意
                            //注意末尾没有分号

 

习题3.2

int main()
{
    float p0;
    int y;
    float p1,p2,p3;
    float r2=0.0225;                //有时会出警告 warning C4305: 'initializing' : truncation from 'const double' to 'float'
                                    //这是因为visual c++将所有实型常量都作为双精度数来处理,初始化时将双精度数赋值给单精度变量系统会警告精度可能损失
                                    //可以忽略警告继续进行连接
    
    const float r3 = 0.0198;        //定义常变量
    
    printf("请输入本金金额(元)n");
    scanf("%f",&p0);
    printf("请输入存款几年?n");
    scanf("%d",&y);

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

/*
时间:2011年10月12日13:53:14
题目:习题3.2 存款利息的计算
*/
# include <stdio.h>
# include <math.h>

    p1 = p0*pow((1+R1),y);
    p2 = p0*pow((1+r2),y);
    p3 = p0*pow((1+r3/2),2*y);

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

int main()
{
    int b=1000;
    double r1=4.14/100;
    double r2=4.68/100;
    double r3=5.4/100;
    double r5=5.85/100;
    double r0=0.72/100;
    double p5,p23,p32,p1,p0;

    printf("按"活期"方式存款,t%f元的本金%d年之后将获得本息共计%f元n",p0,y,p1);
    printf("按"一年期定期"方式存款,t%f元的本金%d年之后将获得本息共计%f元n",p0,y,p2);
    printf("按"半年期定期"方式存款,t%f元的本金%d年之后将获得本息共计%f元n",p0,y,p3);

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
————————————
*/

    p5 = b*(1+r5*5);
    p23 = b*(1+r2*2)*(1+r3*3);
    p32 = b*(1+r3*3)*(1+r2*2);
    p1 = b*pow(1+r1,5);
    p0 = b*pow(1+r0/4,4*5);

    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
请输入本金金额(元)
1000
请输入存款几年?
1
按"活期"方式存款,       1000.000000元的本金1年之后将获得本息共计1003.599976元
按"一年期定期"方式存款, 1000.000000元的本金1年之后将获得本息共计1022.500000元
按"半年期定期"方式存款, 1000.000000元的本金1年之后将获得本息共计1019.898010元
Press any key to continue
————————————
*/

 

    printf("一次存5年期的本息和为:tt%fn",p5);
    printf("先存2年期再存3年期的本息和为:t%fn",p23);
    printf("先存3年期再存2年期的本息和为:t%fn",p32);
    printf("存1年期、连存5年的本息和为:t%fn",p1);
    printf("存活期的本息和为:tt%fn",p0);

 

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

    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
一次存5年期的本息和为:         1292.500000
先存2年期再存3年期的本息和为:  1270.763200
先存3年期再存2年期的本息和为:  1270.763200
存1年期、连存5年的本息和为:    1224.863989
存活期的本息和为:              1036.622300
Press any key to continue
————————————
*/

例题3.3

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

 

/*
时间:2011年10月8日16:33:28
题目:例题3.3 给定一个大写字母要求用小写字母输出
*/
# 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
————————————
*/

习题3.3

int main()
{
    char c1,c2;

 

/*
时间:2011年10月12日14:28:44
题目:习题3.3 购房从银行贷一笔款d,每月还p,月利率为r,计算多少个月还清,保留一位小数
备注:计算公式 m=(logp-log(p-d*r))/log(1+r)
*/
# include <stdio.h>
# include <math.h>

    c1 = 'A';
    printf("%c,%dn",c1,c1);    //字符数据是以ASCII码存储在内存的,形式与整数的形式相同,所以字符型数据与其他算数型数据之间可以互相赋值和运算
    c2 = c1+32;        //把字符变量c1的值(是字符'A'的ASCII代码),与整数32相加
    printf("%c,%dn",c2,c2);

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

int main()
{
    int d=300000;
    int p=6000;
    double r=1.0/100;
    double m;

    
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
A,65
a,97
Press any key to continue
————————————
*/

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

    m = log10(p/(p-d*r)) / log10(1+r);            //求以e为底对数的函数是log(x),求以10为底对数的函数是log10(x),
    printf("需要还款的时间是%-.1lf个月n",m);

 

double factoria (int x);

    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
需要还款的时间是69.7个月
Press any key to continue
————————————
*/

例题3.4

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;
}

 

/*
时间:2011年10月9日9:49:11
题目:给出三角形三边长,求出三角形面积
备注:海伦公式 area=sqrt(s*(s-a)*(s-b)*(s-c)),其中s=(a+b+c)/2
*/
# include <stdio.h>
# include <math.h>

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
————————————
*/

习题3.4

int main()
{
    double a,b,c;                                //定义变量
    double s,area;
    
    do
    {
        printf("请输入三角形三条边的长度:n");    //输入三角形三条边长
        printf("a = ");
        scanf("%lf",&a);
        printf("b = ");
        scanf("%lf",&b);
        printf("c = ");
        scanf("%lf",&c);
        
        if (a+b>c && b+c>a && a+c>b)            //判断输入是否满足三角形条件
        {
            break;
        }
        else
        {
            printf("输入错误n");
        }
    }
    while (1);
    
    s = (a+b+c)/2;                                //赋值计算
    area = sqrt(s*(s-a)*(s-b)*(s-c));
    
    printf("三角形的面积为 area = %lfn",area);    //输出结果
    
    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
请输入三角形三条边的长度:
a = 1
b = 2
c = 3
输入错误
请输入三角形三条边的长度:
a = 3
b = 4
c = 5
三角形的面积为 area = 6.000000
Press any key to continue
————————————
*/

5.8 输出所有的水仙花数

/*
时间:2011年10月12日14:58:53
题目:习题3.4 分析下面程序
*/
# include <stdio.h>

 

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

int main()
{
    char c1,c2;
    c1 = 97;
    c2 = 98;
    printf("c1=%c,c2=%cn",c1,c2);        //显示97和98对应的ASCII码
    printf("c1=%d,c2=%dn",c1,c2);

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

    char c3,c4;
    c3 = 197;
    c4 = 198;
    printf("c3=%c,c4=%cn",c3,c4);        //输出问号,因为超过了127的范围
    printf("c3=%d,c4=%dn",c3,c4);        //输出-59,-58.也就是197-256和198-256

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

    int c5,c6;
    c5 = 97;
    c6 = 98;
    printf("c5=%c,c6=%cn",c5,c6);        //和用char定义变量效果一样
    printf("c5=%d,c6=%dn",c5,c6);

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
————————————
*/

    int c7,c8;
    c7 = 197;
    c8 = 198;
    printf("c7=%c,c8=%cn",c7,c8);        //输出问号
    printf("c7=%d,c8=%dn",c7,c8);        //输出197,198

 

    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
c1=a,c2=b
c1=97,c2=98
c3=?c4=?
c3=-59,c4=-58
c5=a,c6=b
c5=97,c6=98
c7=?c8=?
c7=197,c8=198
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>

习题3.5

bool IsPerfectNumber (int val,int * pArr);

/*
时间:2011年10月12日15:19:25
题目:用下面的scanf函数输入数据使a=3,b=7,x=8.5,y=71.82,c1='A',c2='a'
*/
# include <stdio.h>

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;
}

int main()
{
    int a,b;
    float x,y;
    char c1,c2;

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
————————————
*/

    scanf("a=%db=%d",&a,&b);    //输入时a=3b=7。除了格式符的部分必须原样输入,回车结束
    scanf("%f%e",&x,&y);        //输入8.5 71.82之间用空格格开,输完不能回车,否则会车会被下面的语句当成一个字符赋值给c1,同样也不能输入空格
    scanf("%c%c",&c1,&c2);        //在71.82后面直接输入Aa。中间不能加空格,否则空格会被当成一个字符赋值给c2

 

    printf("a=%d,b=%dn",a,b);
    printf("x=%f,y=%en",x,y);
    printf("c1=%c,c2=%cn",c1,c2);

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

    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
a=3b=7
8.5 71.82Aa
a=3,b=7
x=8.500000,y=7.182000e+001
c1=A,c2=a

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

Press any key to continue

如果71.82后面输入回车
a=3b=7
8.5 71.82
Aa
a=3,b=7
x=8.500000,y=7.182000e+001
c1=
,c2=A

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
————————————
*/

Press any key to continue

如果71.82后面输入空格
a=3b=7
8.5 71.82 Aa
a=3,b=7
x=8.500000,y=7.182000e+001
c1= ,c2=A

 

Press any key to continue

如果A和a中间输入空格
a=3b=7
8.5 71.82A a
a=3,b=7
x=8.500000,y=7.182000e+001
c1=A,c2=
Press any key to continue
————————————
*/

 

习题3.6

/*
时间:2011年10月12日15:35:26
题目:习题3.6 编程序将"China"译成密码"Glmre",分别用putchar和printf函数输出
备注:密码规律为 加4
*/
# include <stdio.h>

int main()
{
    char c1='C';
    char c2='h';
    char c3='i';
    char c4='n';
    char c5='a';

    c1 += 4;
    c2 += 4;
    c3 += 4;
    c4 += 4;
    c5 += 4;

    printf("%c%c%c%c%cn",c1,c2,c3,c4,c5);
    putchar(c1);
    putchar(c2);
    putchar(c3);
    putchar(c4);
    putchar(c5);
    putchar('n');

    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
Glmre
Glmre
Press any key to continue
————————————
*/

 

习题3.7

/*
时间:2011年10月12日15:58:03
题目:习题3.7 求圆周长,圆面积,球表面积,球体积,圆柱体积,scanf输入,输出要有说明,保留2位小数
*/
# include <stdio.h>

int main()
{
    double r,h;
    double pi=3.1415926;
    double c,s,sq,vq,vz;

    printf("输入半径:");
    scanf("%lf",&r);
    printf("输入圆柱的高:");
    scanf("%lf",&h);

    c = 2*pi*r;
    s = pi*r*r;
    sq = 4*pi*r*r;
    vq = 4/3*pi*r*r*r;
    vz = pi*r*r*h;

    printf("半径为%lf的圆的周长=ttt%.2lfn",r,c);
    printf("半径为%lf的圆的面积=ttt%.2lfn",r,s);
    printf("半径为%lf的球的表面积=ttt%.2lfn",r,sq);
    printf("半径为%lf的球的体积=ttt%.2lfn",r,vq);
    printf("半径为%lf、高为%lf的圆柱的体积=t%.2lfn",r,h,vz);

    

    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
输入半径:1.5
输入圆柱的高:3
半径为1.500000的圆的周长=                       9.42
半径为1.500000的圆的面积=                       7.07
半径为1.500000的球的表面积=                     28.27
半径为1.500000的球的体积=                       10.60
半径为1.500000、高为3.000000的圆柱的体积=       21.21
Press any key to continue
————————————
*/

 

习题3.8

/*
时间:2011年10月13日10:46:28
题目:习题3.8 编程序,用getchar读字符,分别用putchar和printf函数输出
*/
# include <stdio.h>

int main()
{
    char c1,c2;
    printf("请输入两个字符n");
    c1=getchar();
    c2=getchar();
    putchar(c1);
    putchar(c2);
    putchar('n');
    printf("%c%cn",c1,c2);
    printf("%d,%dn",c1,c2);    //想输出ASCII码值只能用printf
    putchar(getchar());            //将之前用以结束输入的回车输出,避免对后面读字符产生影响

    int c3,c4;                    //c定义为字符型还是整型没什么区别
    printf("请输入两个字符n");
    c3=getchar();
    c4=getchar();
    putchar(c3);
    putchar(c4);
    putchar('n');
    printf("%c%cn",c3,c4);
    printf("%d,%dn",c3,c4);
    putchar(getchar());    

    int c5,c6;                    //c定义为整形后用printf函数输入也可以
    printf("请输入两个整数n");
    scanf("%d%d",&c5,&c6);        //输入的整数是有范围的,不能大于127
    putchar(c5);
    putchar(c6);
    putchar('n');
    printf("%c%cn",c5,c6);
    printf("%d,%dn",c5,c6);
    putchar(getchar());    

    return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
请输入两个字符
ab
ab
ab
97,98

请输入两个字符
ab
ab
ab
97,98

请输入两个整数
97 98
ab
ab
97,98

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,,10)之间的根 2X^3-4X^2+3X-6=0

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

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
————————————
*/

 

5.16 输出菱形图案

/*
时间: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
————————————
*/

 

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

/*
时间: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>

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
————————————
*/

本文由10bet手机官网发布于高并发,转载请注明出处:顺序程序设计,循环结构程序设计

上一篇:构建一个datatable,通过datatable获得表的主键 下一篇:没有了
猜你喜欢
热门排行
精彩图文