C Primer Plus(第6版)第七章答案

1.
#include <stdio.h>

int main (void)
{
    int space = 0, line = 1, other = 0;
    char a;

    printf ("input a string finished by \"#\": ");
    while ((a = getchar ()) != '#')
        if (a == ' ')
            space++;
        else if (a == '\n')
            line++;
        else
            other++;

    printf ("space: %d\nline: %d\nother: %d", space, line, other);

    return 0;
}


2.

#include <stdio.h>

int main (void)
{
    int num = 0;
    char a;

    while ((a = getchar ()) != '#')
    {
        printf ("%d ", a);
        num++;
        if (num % 8 == 0)
            printf ("\n");
    }

    return 0;
}

3.

#include <stdio.h>

int main (void)
{
    int num;
    int odd = 0, even = 0;
    int odd_sum = 0, even_sum = 0;

    while (1)
    {
        scanf ("%d", &num);
        if (num == 0)
            break;
        else if (num % 2 == 0)
        {
            even++;
            even_sum += num;
        }
        else if (num % 2 == 1)
        {
            odd++;
            odd_sum += num;
        }

    }

    printf ("odd: %d average: %f\n", odd, (float)odd_sum / odd);
    printf ("even: %d average: %f", even, (float)even_sum / even);

    return 0;
}

4.

#include <stdio.h>

int main (void)
{
    char a;
    int num1 = 0, num2 = 0;

    while ((a = getchar ()) != '#')
    {
        if (a == '.')
        {
            putchar ('!');
            num1++;
        }
        else if (a == '!')
        {
            putchar ('!');
            putchar ('!');
            num2++;
        }
        else putchar (a);
    }

    printf ("'.' to '!': %d\n'!' to '!!': %d", num1, num2);

    return 0;
}

5.

#include <stdio.h>

int main (void)
{
    char ch;

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

    return 0;
}

6.

#include <stdio.h>

int main (void)
{
    char ch1, ch2;
    int num = 0;

    while ((ch1 = getchar ()) != '#')
    {
        if ((ch1 == 'i') && (ch2 == 'e'))
            num++;
        ch2 = ch1;
    }

    printf ("%d", num);
    return 0;
}

7.

#include <stdio.h>
#define base 1000
#define lv1 300 * 0.15
#define lv2 150 * 0.2

int main (void)
{
    int time;
    float money1, money2;

    printf ("Enter your work time: ");
    scanf ("%d", &time);
    if (time <= 40)
    {
        money1 = base * time;
        money2 = money1 - lv1 - lv2 - (money1 - 300 - 150) * 0.25;
    }
    else
    {
        money1 = base * 40 + (time - 40) * 1.5 * base;
        money2 = money1 - lv1 - lv2 - (money1 - 300 - 150) * 0.25;
    }

    printf ("%f\n%f\n%f", money1, money1 - money2, money2);

    return 0;
}

8.

#include <stdio.h>
#define base 1000
#define lv1 300 * 0.15
#define lv2 150 * 0.2

int main (void)
{
    int time;
    int choice;
    int i;
    float wages;
    float money1, money2;

    for (i = 0; i < 65; i++)
        printf ("*");
    printf ("\nEnter the number corresponding to the desired pay rate or action:\n");
    printf ("1) $8.75/hr                                2) $9.33/hr\n");
    printf ("3) $10.00/hr                               4) $11.20/hr\n");
    printf ("5) quit\n");
    for (i = 0; i < 65; i++)
        printf ("*");
    printf ("\n");


    scanf ("%d", &choice);
    while (choice != 5)
    {
        switch (choice)
        {
        case 1:
            wages = 8.75;
            break;
        case 2:
            wages = 9.33;
            break;
        case 3:
            wages = 10.00;
            break;
        case 4:
            wages = 11.20;
            break;
        }
        printf ("Enter your work time: ");
        scanf ("%d", &time);


        if (time <= 40)
            money1 = time * wages;
        else
            money1 = 40 * wages + (time - 40) * 1.5 * wages;


        if (money1 <= 300)
            money2 = money1 * (1 - 0.15);
        else if (money1 <= 450)
            money2 = money1 - lv1 - (money1 - 300) * 0.2;
        else
            money2 = money1 - lv1 - lv2 - (money1 - 450) * 0.25;
        printf ("%f\n%f\n%f\n", money1, money1 - money2, money2);


        printf ("Enter the number(5 to quit): ");
        scanf ("%d", &choice);
    }

    return 0;
}

9.

#include <stdio.h>

int su (int num);

int main (void)
{
    int num;
    int i;

    printf ("Enter a number: ");
    scanf ("%d", &num);

    while (num > 0)
    {
        for (i = 2; i < num; i++)
            if(su (i))
                printf ("%d\n", i);

        printf ("Enter a number(< 0 to quit): ");
        scanf ("%d", &num);
    }
    return 0;
}


int su (int num)
{
    int i;

    for (i = 2; i * i <= num; i++)
        if (num % i == 0)
            return 0;
    return 1;
}

10.

#include <stdio.h>

void mo (int ch, float mon);
void no (float mon);

int main (void)
{
    int choice;
    float money1;

    for (int i = 0; i < 60; i++)
        printf ("*");
    printf ("\nEnter your choice:\n");
    printf ("1) single                        2) householder\n");
    printf ("3) married share                 4) married divorce\n");
    for (int i = 0; i < 60; i++)
        printf ("*");
    printf ("\n");


    scanf ("%d", &choice);
    while ((choice >= 1) && (choice <= 4))
    {
        printf ("Enter your money:\n");
        scanf ("%f", &money1);
        mo (choice, money1);
        printf ("Enter your choice:\n");
        scanf ("%d", &choice);
    }
}


void mo (int ch, float mon)
{
    float base;

    switch (ch)
    {
    case 1:
        base = 17850;
        break;
    case 2:
        base = 23900;
        break;
    case 3:
        base = 29750;
        break;
    case 4:
        base = 14875;
        break;
    }
    if (mon <= base)
        printf ("%f\n", mon * 0.15);
    else
        printf ("%f\n", base * 0.15 + (mon - base) * 0.28);

    return;
}

11.

#include<stdio.h>
#define huluobo 1.09
#define yangji 2.05
#define tiancai 1.15
#define youhuizhongliang 100
#define youhui 0.05
#define lv1 6.5
#define lv2 14
#define lv3 0.5

int main (void)
{
    char ch;//选项
    int zhongliang = 0.0;//重量
    int zongzhongliang = 0.0;//总重量
    float shucaifeiyong = 0.0;//蔬菜费用
    int zongfeiyong = 0.0;//总费用
    float zhekou = 0.0;//折扣
    float yunfei = 0.0;//运费和包装费
    int zonge = 0.0;//总额
    int danjia = 0.0;//单价

    printf("Please enter the letter of the vegetable: \n");
    printf("a. Artichoke                 2.05\n"
           "b. Beet                      1.15\n"
           "c. Carrot                    1.09\n"
           "q. quit\n");
           scanf("%c", &ch);
    while(ch != 1)
    {
        zhongliang = 0;
        switch(ch)
        {
        case 'a':
            danjia = yangji;
            break;
        case 'b':
            danjia = tiancai;
            break;
        case 'c':
            huluobo;
            break;
        case 'q':
            break;
        }
        if(ch =='q')
            break;
        printf("Please enter the weight of vegetable: \n");
        scanf("%d", &zhongliang);
        zongzhongliang += zhongliang;
        shucaifeiyong += zhongliang * danjia;
        printf("Please enter the letter of the vegetable: \n");
        scanf("%c", &ch);
        ch = getchar();
    }
    if(shucaifeiyong > 100)
    {
        shucaifeiyong *= 0.95;
        zhekou = shucaifeiyong * 0.05;
    }
    if(zongzhongliang <= 5)
        yunfei = 6.5;
    else if(zongzhongliang <= 20)
        yunfei = 14;
    else
        yunfei = 14 + (zongzhongliang - 20) * 0.5;
    printf("weight: %d\ncost: %f\ndiscount: %f\nfreight: %f\n", zongzhongliang, shucaifeiyong, zhekou, yunfei);
}

猜你喜欢

转载自blog.csdn.net/sirius_black_tea/article/details/75194024