最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

C程序设计(第四版)_谭浩强_第四章_课后习题答案

来源:动视网 责编:小OO 时间:2025-09-27 11:35:37
文档

C程序设计(第四版)_谭浩强_第四章_课后习题答案

选择结构程序设计P08.1一无二次方程求根的二分支.#include#includeintmain(){doublea,b,c,disc,x1,x2,p,q;scanf("%lf%lf%lf",&a,&b,&c);disc=b*b-4*a*c;if(discb){t=a;a=b;b=t;}printf("%5.2f,%5.2f\\n",a,b);return0;}P0884.3三个数按大小输出.#includeintmain()//此程序代表按大小顺序输出.{floata,b,c,t;sc
推荐度:
导读选择结构程序设计P08.1一无二次方程求根的二分支.#include#includeintmain(){doublea,b,c,disc,x1,x2,p,q;scanf("%lf%lf%lf",&a,&b,&c);disc=b*b-4*a*c;if(discb){t=a;a=b;b=t;}printf("%5.2f,%5.2f\\n",a,b);return0;}P0884.3三个数按大小输出.#includeintmain()//此程序代表按大小顺序输出.{floata,b,c,t;sc
选择结构程序设计

P086   4.1   一无二次方程求根的二分支.

#include 

#include 

int main()   

{

    double a,b,c,disc,x1,x2,p,q;

    scanf("%lf %lf %lf",&a,&b,&c);

    disc=b*b-4*a*c;

    if(disc<0) //这是选择结构和其判断条件的示例.

        printf("This equation hasn't real roots\\n");

    else

    {

    p=-b/(2.0*a);

    q=sqrt(disc)/(2.0*a);

    x1=p+q;

    x2=p-q;

    printf("x1=%7.2f\\nx2=%7.2f",x1,x2);

    }

    return 0;

}

P087   4.2   二个数按大小输出.

#include 

int main()   //此程序代表按大小顺序输出.

{

    float a,b,t;

    scanf("%f %f",&a,&b);   //出错时,注意检查这里是否按格式输入了.比如有个逗号.

    if(a>b)

    {

        t=a;

        a=b;

        b=t;

    }

    printf("%5.2f,%5.2f\\n",a,b);

    return 0;

}

P088   4.3   三个数按大小输出.

#include 

int main()   //此程序代表按大小顺序输出.

{

    float a,b,c,t;

    scanf("%f %f %f",&a,&b,&c);   

    if(a>b) //此处执行后,a为小者.

    {

        t=a;

        a=b;

        b=t;

    }

    if(a>c) //此处执行后,a为小者.

    {

        t=a;

        a=c;

        c=t;

    }

    if(b>c) //上面已经搞定a是最小者,现在对比得出次小者,并且已经归到变量中.

    {

        t=b;

        b=c;

        c=t;

    }

    printf("%5.2f,%5.2f%5.2f\\n",a,b,c);

    return 0;

}

P099   4.4   判断输入字符,并最终按小写输出.

#include 

int main()

{

    char ch;

    scanf("%c",&ch);

ch=(ch>='A'&&ch<='Z')?(ch+32):ch;   //条件运算符,真取前,假取后.

    printf("%c\\n",ch);   

    return 0;

}

P100   4.5   按要求输出相应的Y值.

#include 

int main()

{

    int x,y;

    scanf("%d",&x);

    if(x>=0)

    {

        if(x>0)   //这个范围要基于x>=0来判断.

        {

            y=1;

        }

        else

        {

            y=0;

        }

    }

    else   //这个是x<0的范围.

    {

        y=-1;

    }

    printf("x=%d,y=%d",x,y);

    return 0;

}

P102   4.6   switch的简单应用.

#include 

int main()

{

    char grade;

    scanf("%c",&grade);

    printf("Your score:");

    switch(grade)

    {

    case'a':printf("85-100\\n");break;   //当多分支结构过于多时,可以用switch来解决.

    case'b':printf("70-84\\n");break;

    case'c':printf("60-69\\n");break;

    case'd':printf("<60\\n");break;

    default:printf("Enter data error!\\n");

    }

    return 0;

}

P104   4.7   按输入执行操作,并且不分大小写.

#include 

void action1(int x,int y)

{

    printf("x+y=%d\\n",x+y);

}

void action2(int x,int y)

{

    printf("x*y=%d\\n",x*y);

}

int main()

{

    char ch;

    int a=15,b=23;

    ch=getchar();

    switch(ch)

    {

    case'a':

    case'A':action1(a,b);break;   //a,A共用一个执行语句.

    case'b':

    case'B':action2(a,b);break;

    default:putchar('\\a');   //'\\a'可以控制电脑发出蜂鸣声.

    }

    return 0;

}

P106   4.8   用if的分支来做闰年问题

#include 

int main()

{

    int year,leap;   

    printf("Please input the year:\\n");

    scanf("%d",&year);

    if(year%4==0)   //400年里,在100个可除尽4的年里计算,以下是在全范围内计算.

    {   

        if(year%100==0)   //既是100个内的,又是可以除尽100的,算是且.

        {

            if(year%400==0)   //相当于且了两次,只余下唯一一个.

            {

                leap=1;

            }

            else   //400年里只有1个除得尽,其它都不是.

            {

                leap=0;

            }

        }

        else   //这里的范围是(year%4==0)&&(year%100!=0)

        {

            leap=1;   //在合法的100内,又不是2100,2200一类的,当然属闰年.

        }

    }

    else

    {

        leap=0;

    }

    if(leap)

    {

        printf("%d is ",year);

    }

    else

    {

        printf("%d is not ",year);

    }

    printf("a leap year !");   //不管上面如何判断,最后还是会输出这一句.

    return 0;

}

P108   4.9   一元二次等式的全计算过程.

#include 

#include 

int main()

{

    double a,b,c,disc,x1,x2,realpart,imagpart;

    scanf("%lf %lf %lf",&a,&b,&c);

    printf("The equation ");

    if(fabs(a)<=1e-6) //fabs是绝对值, le-6,即是的负六次方,接近或是等于零.

    {

        printf("is not a quadratic !\\n");   

        printf("x1=x2=%lf",-c/b);

    }

    else

    {

        disc=b*b-4*a*c;

        if(fabs(disc)<=1e-6) //指数形式,数字1.

        {

            printf("has two equal roots : %lf\\n",-b/(2*a));

        }

        else

        {

            if(disc>1e-6)

            {

                x1=(-b+sqrt(disc))/(2*a);

                x2=(-b-sqrt(disc))/(2*a);

                printf("has distinct real roots : %lf and %lf \\n",x1,x2);

            }

            else

            {

                realpart=-b/(2*a);

                imagpart=sqrt(-disc)/(2*a);

                printf("has complex roots: \\n");

                printf("%lf + %lfi\\n",realpart,imagpart);

                printf("%lf + %lfi\\n",realpart,imagpart);

            }

        }

    }

    return 0;

}

P109   4.10   关于多个区间的计算,运费问题为例.

#include 

int main()

{

    double p,w,s,d,f;

    printf("p,w,s\\n");

    scanf("%lf %lf %lf",&p,&w,&s);

    if(s<250)

    {

        d=0.0;

        f=p*w*s*(1-d);

        printf("%lf",f);

    }

    else if(s<500)

    {

        d=0.02;

        f=p*w*s*(1-d);

        printf("%lf",f);

    }

    else if(s<1000)

    {

        d=0.05;

        f=p*w*s*(1-d);

        printf("%lf",f);

    }

    else if(s<2000)

    {

        d=0.08;

        f=p*w*s*(1-d);

        printf("%lf",f);

    }

    else if(s<3000)

    {

        d=0.1;

        f=p*w*s*(1-d);

        printf("%lf",f);

    }

    else

    {

        d=0.15;

        f=p*w*s*(1-d);

        printf("%lf",f);

    }

    return 0;

}

P0112   0.4   键盘输入三个数,输出最大者.

#include 

int mina,mida,maxa;

int max(int a,int b,int c)

{

    int m;

    if(a>b) //凡是比较中,大于号代表升序排列.

    {

        m=a;

        a=b;

        b=m;

    }

    if(a>c)

    {

        m=a;

        a=c;

        c=m;

    }

    if(b>c)

    {

        m=a;

        a=c;

        c=m;

    }

    return (c);   //此排序后,a,b,c由小到大.所以c是返回中最大的.

}

int main()

{

    int a,b,c;

    printf("Please input 3 numbers :");

    scanf("%d %d %d",&a,&b,&c);

    printf("The max is %d !\\n",max(a,b,c));

    return 0;

}   

P0112   0.5   一个小于1000的数,有判定条件.

#include 

#include 

int main()

{

    double a,b;

    printf("Please input a number :");

    scanf("%lf",&a);

    if(a<1000)

    {

        b=sqrt(a);

    }

    else

    {

        printf("\\a");   //控制蜂鸣声

        printf("Please input a number again :");

        scanf("%lf",&a);11

        b=sqrt(a);

    }

    printf("%.0lf",b);   //按要求,只取整数.

    return 0;

}

P0112   0.9   一个不多于5位的数,按条件输出.

#include 

#include 

int main()

{

    int i,a,b[4],count=0;

    printf("Please input a number (five-digit number) :");   //意思是五位数以内. 

    scanf("%d",&a);

    for(i=0;i<=4;i++)

    {

        b[i]=a%10;   //是%10,不是/10000,结果就是b[0]至b[4]中存着个,十,百,千,万位.

        a=a/10;   // /10后得到的结果去掉了个数.

        if(b[i]!=0)

        {

            count=count+1;

        }

    }

    printf("%d位数.\\n",count);

    printf("分别输出每一位数字,如下:");

    for(i=4;i>=0;i--)

    {

        printf("%d  ",b[i]);

    }

    printf("\\n");

    printf("倒序输出这一个数字,如下:");

    for(i=0;i<=4;i++)

    {

        printf("%d",b[i]);

    }

    printf("\\n");

    return 0;   

}   

P0112   0.10   按要求提成奖金(if写法).

#include 

int main()

{

    double a,b;

    printf("Please input profit amount :");

    scanf("%lf",&a);

    if(a<=10) //这个是整个if 的基础.

    {

        b=a*0.1;

    }

    else if(a<=20) //以上面为基础,这已经代表了10-20间了!!!

    {

        b=1+(a-10)*0.075;

    }

    else if(a<=40) //同理,这是20-40间.

    {

        b=1+0.75+(a-20)*0.05;

    }

    else if(a<=60)

    {

        b=1+0.75+0.1+(a-40)*0.03;

    }

    else if(a<=100)

    {

        b=1+0.75+0.1+0.06+(a-60)*0.15;

    }

    else   //这里是大于100的.

    {

        b=1+0.75+0.1+0.06+(a-100)*0.01;

    }

    printf("The reward is %lf !\\n",b);

    return 0;

}   

P0112   0.10   按要求提成奖金(switch写法).

#include 

double GetProfit(double c)   

{

    printf("Please input profit amount :");

    scanf("%lf",&c);

    return (c);   //返回本身了,如果有进一步的计算结果,将值赋给其它变量,也可以返回.

}

int main()

{

    double a;

    char c;

    printf("Your choice :\\nA : 0-10 ;\\nB : 10-20 ;\\nC : 20-40 ;\\nD : 40-60 ;\\nE : 60-100 ;\\nF : 100-1000 ;\\n");

    scanf("%c",&c);   //不同档时,应照档的规定数值进行输入,否则结果不会是正确的.

    switch(c)   //前三后三用于比较调用函数.

    {    //GetProfit(c)引入的实参没有意义,返回值和引入的实参没关系,反而由键盘获得.

    case'A':{ printf("The reward is %lf !\\n",GetProfit(c)*0.1);};break;                             //0-10       0.100

    case'B':{ printf("The reward is %lf !\\n",1+(GetProfit(c)-10)*0.075);}break;                     //10-20      0.075

    case'C':{ printf("The reward is %lf !\\n",1+0.75+(GetProfit(c)-20)*0.05);}break;                 //20-40      0.050

    case'D':{printf("Please input profit amount :");scanf("%lf",&a);printf("The reward is %lf !\\n",1+0.75+0.1+(a-40)*0.03);}break;                               //40-60      0.030

    case'E':{printf("Please input profit amount :");scanf("%lf",&a);printf("The reward is %lf !\\n",1+0.75+0.1+0.6+(a-60)*0.15);}break;                          //60-100     0.015

    case'F':{printf("Please input profit amount :");scanf("%lf",&a);printf("The reward is %lf !\\n",1+0.75+0.1+0.6+0.6+(a-100)*0.01);}break;                      //100-1000   0.010

    default:printf("Error data !");break;   //可以有一个执行体,用{}包括起来.

    }

    return 0;

}   

P0112   0.11   键盘输入数值,然后排序输出.

#include 

int main()

{

    int a[10],i,j,m,n;   //变量可以在写代码过程中再回来临时添加.

    printf("请输入数值的个数: (十个以内)");

    scanf("%d",&m);   //到这里需要变量来承载数值的个数,设m,回头去定义变量那写上m.

    printf("请分别输入相对应个数的数值:");

    for(i=0;i    {

        scanf("%d",&a[i]);

    }

    for(i=0;i    {

        for(j=i+1;j        {

            if(a[i]>a[j]) //这是选择排序法.升序.

            {   

                n=a[i];   //这里需要一个用于临时变量的n,所以回头去写上.

                a[i]=a[j];

                a[j]=n;

            }

        }

    }

    for(i=0;i    {

        printf("%d",a[i]);

    }

    return 0;

}

文档

C程序设计(第四版)_谭浩强_第四章_课后习题答案

选择结构程序设计P08.1一无二次方程求根的二分支.#include#includeintmain(){doublea,b,c,disc,x1,x2,p,q;scanf("%lf%lf%lf",&a,&b,&c);disc=b*b-4*a*c;if(discb){t=a;a=b;b=t;}printf("%5.2f,%5.2f\\n",a,b);return0;}P0884.3三个数按大小输出.#includeintmain()//此程序代表按大小顺序输出.{floata,b,c,t;sc
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top