C Primer Plus 第六版 章节课后编程练习答案(下)(缘更)

接上次写的前五章的答案,这次更新后面章节的
PS:目录在左边袄┗|`O′|┛ ~~

第六章

6.1

#include <stdio.h>
int main(void)
{
    char letters[26];
    int i;

    for(i=0;i<26;i++)
    {
        letters[i]='a'+i;
        printf("%c ",letters[i]);
    }
    printf("\n");

    return 0;
} 

另一种(我觉得这种没有上面的代码好)

#include <stdio.h>
int main(void)
{
    char letters[26];
    char num_letters;
    int i;

    num_letters='a';
    for(i=0;i<26;i++)
    {
        letters[i]=num_letters;
        num_letters=num_letters+1;
        printf("%c ",letters[i]);
    } 

    return 0;
}

6.2

#include <stdio.h>
int main(void)
{
    int i,j;
    for(i=1;i<6;i++)
    {
        for(j=1;j<i+1;j++)
        printf("$");
        printf("\n");
    }
} 

6.3

#include <stdio.h>
int main(void)
{
    int i,j;
    char c;

    for(i=1;i<7;i++)
    {
        c='F';
        for(j=0;j<i;j++)
            printf("%c",c--);
        printf("\n");
    }

    return 0;
} 

6.4

#include <stdio.h>
int main(void)
{
    int i,j;
    char c;

    c='A' ;
    for(i=0;i<6;i++)
    {
        for(j=0;j<i+1;j++)
        {
         printf("%c",c);
         c=c+1;
        } 
        printf("\n");
    }


    return 0; 
}

6.5

#include <stdio.h>
int main(void)
{
    int i,j,num;
    char c;

    printf("Please enter a letter:\n");
    scanf("%c",&c);
    num=c-65;
    for(i=0;i<num+1;i++)
    {
        for(j=0;j<num-i;j++)
        {
            printf(" ");
        } 

        c='A'; 
        for(j=0;j<i+1;j++)
        {
            printf("%c",c++);
        } 
        c=c-1;
        for(j=0;j<i;j++)
        {
            printf("%c",--c);
        } 
        printf("\n");
        }

    return 0; 
}

6.6

#include <stdio.h>
int main(void)
{
    int num,low,hig;
    long square,cube;

    printf("Please enter the low number\n");
    scanf("%d",&low);
    printf("Now,please enter the higher number:\n");
    scanf("%d",&hig);
    if(low>hig)
    printf("Oh!Shit,mather f**k,you can't enter those number!");
    else
    {
        printf("  integer   square     cube\n");
        for(;low<=hig;low++)
        printf("%9d%9d%9d\n",low,low*low,low*low*low);
    }

    return 0;
}

6.7

#include <stdio.h>
#include <string.h>
int main(void)
{
    char word[20];
    int num;

    printf("Please enter a word:\n");
    scanf("%s",word);
    for(num=strlen(word)-1;num>=0;num--) 
    printf("%c",word[num]);

    return 0;
}

6.8

#include <stdio.h>
int main(void)
{
    int jud;
    float num1,num2,ans;

    printf("please enter two numbers:\n");
    jud=scanf("%f %f",&num1,&num2);
    while(jud)
    {
        printf("(%f-%f)/(%f*%f)=%f\n",num1,num2,num1,num2,(num1-num2)/(num1*num2));
        printf("please enter two numbers:(q to quit)\n");
        jud=scanf("%f %f",&num1,&num2);
    }

    return 0;
}

6.9

#include <stdio.h>
float fun(float a,float b);
int main(void)
{
    float num1,num2;

    printf("Please enter two numbers:\n");
    while(scanf("%f %f",&num1,&num2))
    {
        printf("%f\n",fun(num1,num2));
        printf("Please enter two numbers:(q to quit)\n");
    }

    return 0;
}
float fun(float a,float b)
{
    float ans;
    ans=(a-b)/(a*b);
    return ans;
}

6.10

#include <stdio.h>
int main(void)
{
    int low,upp;
    int low1;
    unsigned long s_sum=0;

    printf("Enter lower and upper integer limits:");
    scanf("%d %d",&low,&upp);
    if(low>=upp)
    ;
    else
    {
        low1=low;
        for(;low<=upp;low++)
        s_sum+=(low*low);
        printf("The sums of the squares from %d to %d is %ld\n",low1*low1,upp*upp,s_sum);


        printf("Enter next set of limits:");
        scanf("%d %d",&low,&upp);
        while(low<upp)
        {
            s_sum=0;
            low1=low;
            for(;low<=upp;low++)
            s_sum+=(low*low);
            printf("The sums of the squares from %d to %d is %ld\n",low1*low1,upp*upp,s_sum);
            printf("Enter next set of limits:");
            scanf("%d %d",&low,&upp);
         }
    }


    return 0;
}

6.11

#include <stdio.h>
int main(void)
{
    int i,num[8];

    for(i=0;i<8;i++)
    {
        printf("please enter a num:");
        scanf("%d",&num[i]);
    }
    for(;i>0;i--)
    printf("%d ",num[i-1]);

    return 0;
}

6.12.1

#include <stdio.h>
int main(void)
{
    int num,i;
    float sum=0;

    printf("please enter a num:");
    scanf("%d",&num);
    for(i=1;i<=num;i++)
    {
        sum+=(float)1/i;
    }
    printf("ans=%f",sum);

    return 0;
}

6.12.2

#include <stdio.h>
int main(void)
{
    int num,i,j;
    float sum=0;

    printf("please enter a num:");
    scanf("%d",&num);
    for(i=1,j=-1;i<=num;i++)
    {
        j=-j;
        sum+=(float)j/i;
    }
    printf("ans=%f",sum);

    return 0;
}

6.13

#include <stdio.h>
int fun(int a);
int main(void)
{
    int i,num[8];

    for (i=0;i<8;i++)
    {
        printf("Please enter a num:");
        scanf("%d",&num[i]);
    }
    i=0;
    do 
    {
        printf("%ld ",fun(num[i++]));
    }
    while(i<8)

    return 0;
}
int fun(int a)
{
    unsigned mult=2;

    for(;a>1;a--)
    mult*=2;

    return mult;
}

6.14

#include <stdio.h>
int main(void)
{
    double num1[8],num2[8];
    int i;

    for(i=0;i<8;i++)
    {
        printf("Please enter a num:");
        scanf("%lf",&num1[i]);
    }
    for(i=0;i<8;i++)
    {
        printf("%f ",num1[i]);
    }
    num2[0]=num1[0];
    printf("\n%f\n",num2[0]);

    for(i=1;i<8;i++)
    {
        num2[i]=num2[i-1]+num1[i];
        printf("%f\n",num2[i]);
    }
   return 0;
}

6.15

#include <stdio.h>
int main(void)
{
    char ch,c[255];
    int i=0;

    printf("please enter something:\n");
    ch=getchar();
    while(ch!='\n')
    {
        c[i]=ch;
        ch=getchar();
        i++;
    }
    while(i-->=1)
    {
        printf("%c",c[i]);
    }

    return 0;
}

6.16

#include <stdio.h>
#define fuli 1.05
int main(void)
{
    float fina1=100.0,fina2=100.0;
    int i=0;

    do 
    {
        fina1+=10;
        fina2*=fuli;
        i++;
    }
    while(fina2<fina1);
    printf("%d",i);

    return 0;
}

6.17

#include <stdio.h>
#define rate 1.08
int main(void)
{
    int i=0;
    float fina=100.0;

    do 
    {
        fina=fina*rate-10;
        i++;
    }
    while(fina>=0);
    printf("%d",i);
}

6.18

#include <stdio.h>
int main(void)
{
    int fnum=5,i=1;

    while(fnum<=150)
    {
        fnum=2*(fnum-(i++));
    }
    printf("%d",i);
}

第七章

7.1

#include <stdio.h>
#include <ctype.h>
int main(void)
{
    char ch;
    int num1,num2,num3;

    num1=num2=num3=0;
    printf("please enter something:\n");
    while((ch=getchar())!='#')
    {
        if(ch==' ')
        {
            num1++;
        }
        else
        {
            if(ch=='\n')
            num2++;
            else
            num3++;
        }
    }
    printf("space:%d\n",num1);
    printf("return:%d\n",num2);
    printf("others:%d\n",num3);

    return 0;
}

7.2

#include <stdio.h>
int main(void)
{
    const int n=8;
    int ch=0,i=0;

    while((ch=getchar())!='#')
    {
        printf("%c-%d ",ch,ch);
        i++;
        if((i%n)==0)
        printf("\n");
    }

    return 0;
}

7.3

#include <stdio.h>
int main(void)
{
    int i=0,j=0,num;
    float sum1,sum2;

    sum1=sum2=0;
    printf("Please enter some number,0 to quit\n");
    while(scanf("%d",&num)==1&&num!=0)
    {
        if(num%2==0)
        {
            i++;
            sum1+=num;
        }
        else
        {
            j++;
            sum2+=num;
        }
    }
    printf("奇数的个数:%d\n",j);
    printf("奇数的平均值:%.2f\n",sum2);
    printf("偶数的个数:%d\n",i);
    printf("偶数的平均值:%.2f\n",sum1);
}

7.4

#include <stdio.h>
int main(void)
{
    char ch;
    int i;

    while((ch=getchar())!='#')
    {
        if(ch=='.')
        {
            printf("!");
        }
        else
        {
            if(ch=='!')
            {
                printf("!!");
            }
            else
            {
                putchar(ch);
            }
        }
    }

    return 0;
}

7.5

#include <stdio.h>
int main(void)
{
    char ch;

    while((ch=getchar())!='#')
    {
        switch(ch)
        {
            case '.':printf("!");
                        break;
            case '!':printf("!!");
                        break;
            default:putchar(ch);
        }
    }

    return 0;
}

7.6

#include <stdio.h>
int main(void)
{
    char ch;
    int i=0;
    printf("please enter something(# to quit):\n");

    while((ch=getchar())!='#')
    {
        if(ch='e')
        {
            ch=getchar();
            if(ch='i')
            {
                i++;
            }
        }
    }
    printf("%d",i);

    return 0;
}

7.7

#include <stdio.h>
#define LIM1 300
#define LIM2 150
#define SALA 10.0
int main(void)
{
    float hours,salary,tax;

    printf("Please enter you work hours per week:\n");
    scanf("%f",&hours);
    if(hours>40)
    {
        hours=(hours-40)*1.5+40;
    }
    salary=hours*SALA;
    if(salary>LIM1)
    {
        if(salary>LIM1+LIM2)
        {
            tax=(salary-LIM1-LIM2)*0.25+75;
        }
        else
        {
            tax=(salary-LIM1)*0.2+45;
        }
    }
    else
    {
        tax=salary*0.15;
    }
    printf("The sum of salary is %.1f,tax is %.1f,available is %.1f",salary,tax,salary-tax);
}

7.8

#include <stdio.h>
#define ONE 8.75
#define TWO 9.33
#define THREE 10.00
#define FOUR 11.20
#define LIM1 300
#define LIM2 150
int main(void)
{
    int i,num,jud;
    float SALA,salary,tax,hours; 

    for(i=0;i<61;i++)
    printf("*");
    printf("\n\nEnter the number corresponding to desired pay rate or action:\n");
    printf("1) $%.2f/hr                       2) $%.2f/hr\n",ONE,TWO);    
    printf("3) $%.2f/hr                      4) $%.2f/hr\n",THREE,FOUR); 
    printf("5) quit\n");
    for(i=0;i<61;i++)
    printf("*");
    printf("\n");
    scanf("%d",&num);
    while(num!=5)
    {
        switch(num)
        {
            case 1:SALA=ONE;
                     break;
            case 2:SALA=TWO;
                     break;
            case 3:SALA=THREE;
                     break;
            case 4:SALA=FOUR;
                     break;
            default :printf("Please enter 1-5 numbers thank u!!!\n");
        }
        if(num==1||num==2||num==3||num==4)
        {
            printf("Please enter you work hours per week:\n");
            scanf("%f",&hours);
            if(hours>40)
            {
                hours=(hours-40)*1.5+40;
            }
            salary=hours*SALA;
            if(salary>LIM1)
            {
                if(salary>LIM1+LIM2)
                {
                    tax=(salary-LIM1-LIM2)*0.25+75;
                }
                else
                {
                    tax=(salary-LIM1)*0.2+45;
                }
            }
            else
            {
                tax=salary*0.15;
            }
            printf("The sum of salary is %.1f,tax is %.1f,available is %.1f",salary,tax,salary-tax);
        }
        printf("\nplease enter the number corresponding to desired pay rate or action:\n");
        scanf("%d",&num);
    }

    return 0;
}

7.9

#include <stdio.h>
#include <math.h>
int sushu(int x);
int main(void)
{
    int x,y,i;

    printf("Please enter a number you want(positive number):");
    scanf("%d",&x);
    for(i=2;i<=x;i++)
    {
        if(sushu(i))
        {
            printf("%d ",i);
        }
    }

    return 0; 
} 
int sushu(int x)
{
    int i,n=1;
    double half;

    half=sqrt(x);
    for(i=2;i<=half;i++)
    {
        if(x%i!=0)
        {
            continue;
        }
        else
        {
            n=0;
            break;
        }
    }

    return n;
}

7.10

#include <stdio.h>
#define ONE 17850
#define TWO 23900
#define THREE 29750
#define FOUR 14875
#define RATE1 0.15
#define RATE2 0.28 
float fun(float a);
int main(void)
{
    float salary,level=0,r_salary;
    int i,num; 

    for(i=0;i<50;i++)
    printf("*");
    printf("\n\n");
    printf("1) 单身                            2) 户主\n",ONE,TWO); 
    printf("3) 已婚,共有                      4) 已婚,离异\n",THREE,FOUR);  
    printf("5) 退出\n");
    for(i=0;i<50;i++)
    printf("*");
    printf("\n\n");
    printf("请选择您的类别:");
    scanf("%d",&num);
    while(num!=5)
    {
        switch(num)
        {
            case 1:level=ONE;
                   break;
            case 2:level=TWO;
                   break;
            case 3:level=THREE;
                   break;
            case 4:level=FOUR;
                   break;
            default:printf("请输入1~5的数字,靴靴\n");
                   break; 
        }
        fun(level);
        printf("请选择您的类别:");
        scanf("%d",&num);
        level=0;
    } 
    printf("Bye哟\n"); 

    return 0;
}
float fun(float level)
{
    float salary,tax;

    if(level)
    {
        printf("请把你的收入输入一下靴靴:");
        scanf("%f",&salary);
        if(salary>level)
        {
            tax=level*RATE1;
            tax=(salary-level)*RATE2+tax;
        }
        else
        {
            tax=salary*RATE1;
        }
        printf("所以你需要缴纳的税金是:%.1f$\n",tax);
    }
}

7.11

#include <stdio.h>
#define A 2.05
#define B 1.15
#define C 1.09 
#define LIM1 5
#define LIM2 20
#define FEE1 6.5
#define FEE2 14
#define DISCOUNT 0.95 
void fun(int a,int b,int c);
int main(void)
{
    int i,weight,a,b,c,d,e,f; 
    char ch;

    a=b=c=d=e=f=0;
    for(i=0;i<70;i++)
    printf("*");
    printf("\n"); 
    printf("                         ABC邮购杂货店\n");
    printf("a) 洋蓟   $%.2f每磅                      b) 甜菜   $%.2f每磅\n",A,B);    
    printf("c) 胡萝卜 $%.2f每磅                      d) 邮费、包装费及折扣详情\n",C);  
    printf("e) 结账付款                              f) 溜了溜了,买不起买不起\n"); 
    for(i=0;i<70;i++)
    printf("*");
    printf("\na、b、c可以反复添加\n请输入相关选项:");
    while((ch=getchar())!='e')
    {
        switch(ch)
        {
            case 'a':if(d==0)
                     {
                        printf("请问您想要购买多少磅的洋蓟呢?");
                        scanf("%d",&weight);
                        a=weight;
                        d++;
                     }
                     else
                     {
                        printf("请问您还想要再添加多少磅洋蓟呢?");
                        scanf("%d",&weight);
                        a+=weight;
                     }
                     printf("请继续输入:") ;
                     break; 

            case 'b':if(e==0)
                     {
                        printf("请问您想要购买多少磅甜菜呢?");
                        scanf("%d",&weight);
                        b=weight;
                        e++;
                     }
                     else
                     {
                        printf("请问您还想要再添加多少磅甜菜呢?");
                        scanf("%d",&weight);
                        b+=weight;
                     }
                     printf("请继续输入:") ;
                     break;                  

            case 'c':if(f==0)
                     {
                        printf("请问您想要购买多少磅胡萝卜呢?");
                        scanf("%d",&weight);
                        c=weight;
                        f++;
                     }
                     else
                     {
                        printf("请问您还想要再添加多少磅胡萝卜呢?");
                        scanf("%d",&weight);
                        c+=weight;
                     }
                     printf("请继续输入:") ;
                     break;

            case 'd':printf("总订单少于或等于5磅收取6.5美元的运费和包装费。\n");
                     printf("总订单在5-20磅收取14美元的运费和包装费。\n");
                     printf("总订单超过20磅在14美元的基础上运费和包装费续重0.5美元每磅。\n");
                     printf("当订单超过100美元将享受95%的折扣\n") ; 
                     printf("您还可以继续输入:") ;
                     break;

            case 'f':printf("逗你玩呢,本店强制购买谢谢合作。请继续输入:") ;
                     break;

            default:printf("输入错误,请重新输入:");
                     break;              
        }
        getchar();
    } 
    printf("您现在的购物车里一共有%d磅的洋蓟,%d磅甜菜,%d磅胡萝卜\n\n\n",a,b,c);

    fun(a,b,c);

    return 0; 
} 

void fun(int a,int b,int c)
{
    float price,delivery;

    price=a*A+b*B+c*C;
    printf("商品的总价是%.1f\n",price);
    if(price>=100)
    {
        price*=DISCOUNT;
        printf("   您的订单超过了100美元,您折后的总价是%.1f",price);
    } 
    if(a+b+c>=LIM1)
    {
        if(a+b+c>=LIM2)
        {
            delivery=FEE2+(a+b+c-LIM2);
        }
        else
        {
            delivery=FEE2;
        }
    }
    else
    {
        delivery=FEE1;
    }
    printf("您需要支付的运费和包装费为:%.1f\n",delivery);
}

第十章

10.1

#include <stdio.h>
#define MONTHS 12    //一年的月份数
#define YEARS  5     //年数
int main(void)
{
    //用2010-2014年的降水量数据初始化数组
    const float rain[YEARS][MONTHS] =
    {
        { 4.3f, 4.3f, 4.3f, 3.0f, 2.0f, 1.2f, 0.2f, 0.2f, 0.4f, 2.4f, 3.5f, 6.6f },
        { 8.5f, 8.2f, 1.2f, 1.6f, 2.4f, 0.0f, 5.2f, 0.9f, 0.3f, 0.9f, 1.4f, 7.3f },
        { 9.1f, 8.5f, 6.7f, 4.3f, 2.1f, 0.8f, 0.2f, 0.2f, 1.1f, 2.3f, 6.1f, 8.4f },
        { 7.2f, 9.9f, 8.4f, 3.3f, 1.2f, 0.8f, 0.4f, 0.0f, 0.6f, 1.7f, 4.3f, 6.2f },
        { 7.6f, 5.6f, 3.8f, 2.8f, 3.8f, 0.2f, 0.0f, 0.0f, 0.0f, 1.3f, 2.6f, 5.2f }
    };
    int year, month;
    float subtot, total;
    const float (*pt)[12];

    pt = rain;
    printf(" YEAR      RAINFALL  (inches)\n");
    for (year = 0, total = 0; year < YEARS; year++)
    {
        for (month = 0, subtot = 0; month < MONTHS; month++)
            subtot += *(*(pt + year) + month);
        printf("%5d %15.1f\n", 2010 + year, subtot);
        total += subtot;
    }
    printf("\nThe yearly average is %.1f inches.\n\n", total / YEARS);
    printf("MONTHLY AVERAGES:\n\n");
    printf(" Jan  Feb  Mar  Apr  May  Jun  Jui  Aug  Swp  Oct ");
    printf(" Nov  Dec\n");

    for (month = 0; month < MONTHS; month++)
    {
        for (year = 0, subtot = 0; year < YEARS; year++)
            subtot += *(*(pt + year) + month);
        printf("%4.1f ", subtot / YEARS);
    }
    printf("\n\n");

    return 0;
}

10.2

#include <stdio.h>
#define SIZE 5
void copy_arr(double target[], double source[], int num);
void copy_ptr(double * target, double * source, int num);
void copy_ptrs(double * target, double * source0, double * source1);
void print_array(double arr[], int num);
int main(void)
{
    double source[SIZE] = { 1.1, 2.2, 3.3, 4.4, 5.5 };
    double target1[SIZE];
    double target2[SIZE];
    double target3[SIZE];

    copy_arr(target1, source, SIZE);
    copy_ptr(target2, source, SIZE);
    copy_ptrs(target3, source, source + SIZE);
    print_array(target1,SIZE);
    print_array(target2,SIZE);
    print_array(target3,SIZE);

    return 0;
}
void copy_arr(double target[], double source[], int num)
{
    int i;

    for (i = 0; i < num; i++)
    {
        target[i] = source[i];
    }
}
void copy_ptr(double * target, double * source, int num)
{
    int i;

    for (i = 0; i < num; i++)
    {
        *(target++) = *(source++);
    }
}
void copy_ptrs(double * target, double * source0, double * source1)
{
    int i;

    for (i=0;source0<source1;i++)
    {
        *(target++) = *(source0++);
    }
}
void print_array(double arr[], int num)
{
    int i;
    for (i = 0; i < num; i ++ )
    {
        printf("  %1.1f", arr[i]);
    }
    printf("\n");
}
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值