谭浩强《C程序设计》书后习题 第五章

本文档提供了C和C++编程语言基础练习题的详细解答,包括逻辑表达式评估、寻找最大值、分段函数计算等。通过具体示例帮助读者理解选择结构程序设计的概念。

最近要复习一下C和C++的基础知识,于是计划把之前学过的谭浩强的《C程序设计》和《C++程序设计》习题重新做一遍。

编译环境为:操作系统32位Win7,编译工具VC++6.0

第五章:选择结构程序设计

5.3)写出下列逻辑表达式的值

#include<stdio.h>

void main()
{
    auto x, y;
    int a = 3, b = 4, c = 5;
    
    printf("%d\n", a + b > c && b == c);
    printf("%d\n", a || b + c && b - c);
    printf("%d\n", !(a > b) && !c || 1);
    printf("%d\n", !(x = a) && (y = b) || 0);
    printf("%d\n", !(a + b) + c - 1 && b + c / 2);
}

220055_IYKj_1425762.png

5.4)输入三个数,输出其中最大值

#include<stdio.h>

void main()
{
    int a, b, c, max;
    printf("Please enter a b and c: ");
    scanf("%d%d%d", &a, &b, &c);
    max = a > b ? a : b;
    max = max > c ? max : c;
    printf("max: %d\n", max);
}

5.5)求分段函数值:

y=x (x<1);

y=2x-1(1<=x<10);

y=3x-11(x>=10)

输入x值,输出y值

#include<stdio.h>

double f(double x)
{
    if(x < 1)
    {
        return x;
    }
    else if(x < 10)
    {
        return 2 * x - 1;
    }
    else
    {
        return 3 * x - 11;
    }
}

void main()
{
    double x;
    scanf("%lf", &x);
    printf("%f\n", f(x));
}

5.6)根据得分输出成绩

90分以上为A,80-90为B,70-80为C,60-70为D,60以下为E

#include<stdio.h>

void main()
{
    int score;
    char level;
    scanf("%d", &score);

    if(score >= 90) level = 'A';
    else if (score >= 80) level = 'B';
    else if (score >= 70) level = 'C';
    else if (score >= 60) level = 'D';
    else level = 'E';

    printf("Level: %c\n", level);
}

5.7)给出一个不多于5位的正整数,要求

①求出它是几位数

②分别输出每一位数字

③按逆序输出各位数字

#include<stdio.h>

void main()
{
    int num;
    scanf("%d", &num);
    
    //判断输入数字的位数
    int n1, n2, n3, n4, n5;
    n1 = num / 10000;
    n2 = num % 10000 / 1000;
    n3 = num % 1000 / 100;
    n4 = num % 100 / 10;
    n5 = num % 10;

    if(n1 == 0 && n2 == 0 && n3 == 0 && n4 == 0)
    {
        printf("1位数\n");
    }
    else if(n1 == 0 && n2 == 0 && n3 == 0)
    {
        printf("2位数\n");
    }
    else if(n1 == 0 && n2 == 0)
    {
        printf("3位数\n");
    }
    else if(n1 == 0)
    {
        printf("4位数\n");
    }
    else
    {
        printf("5位数\n");
    }

    //分别输出每一位数字
    printf("万位:%d\n", n1);
    printf("千位:%d\n", n2);
    printf("百位:%d\n", n3);
    printf("十位:%d\n", n4);
    printf("个位:%d\n", n5);

    //逆序输出各位数字
    printf("逆序输出:%d%d%d%d%d\n", n5, n4, n3, n2, n1);
}

5.8)给出利润计算奖金

if语句实现

#include<stdio.h>

void main()
{
    double money, bonus;
    scanf("%lf", &money);
    printf("输入金额:%lf\n", money);

    //根据利润计算奖金
    if(money <= 100000)
    {
        bonus = money * .1;
    }
    else if(money <= 200000)
    {
        bonus = 100000 * .1 + (money - 100000) * .075;
    }
    else if(money <= 400000)
    {
        bonus = 100000 * .175 + (money - 200000) * .05;
    }
    else if(money <= 600000)
    {
        bonus = 100000 * .175 + 200000 * .05 + 
            (money - 400000) * .03;
    }
    else if(money <= 1000000)
    {
        bonus = 100000 * .175 + 200000 * .05 + 
            200000 * .03 + (money - 600000) * .03;
    }
    else 
    {
        bonus = 100000 * .175 + 200000 * .05 + 
            200000 * .03 + 40000 * .015 + 
            (money - 1000000) * .01;
    }

    printf("应得奖金: %.3lf\n", bonus);
}

switch语句实现

#include<stdio.h>

void main()
{
    double money, bonus;
    scanf("%lf", &money);
    printf("输入金额:%lf\n", money);

    //根据利润计算奖金
    char level;
    if(money <= 100000)
    {
        level = 'A';
    }
    else if(money <= 200000)
    {
        level = 'B';
    }
    else if(money <= 400000)
    {
        level = 'C';
    }
    else if(money <= 600000)
    {
        level = 'D';
    }
    else if(money <= 1000000)
    {
        level = 'E';
    }
    else 
    {
        level = 'F';
    }

    switch(level)
    {
    case 'A':
        {
            bonus = money * .1;
        }
        break;
    case 'B':
        {
            bonus = 100000 * .1 + (money - 100000) * .075;
        }
        break;
    case 'C':
        {
            bonus = 100000 * .175 + (money - 200000) * .05;
        }
        break;
    case 'D':
        {
            bonus = 100000 * .175 + 200000 * .05 + 
                (money - 400000) * .03;
        }
        break;
    case 'E':
        {
            bonus = 100000 * .175 + 200000 * .05 + 
                200000 * .03 + (money - 600000) * .03;
        }
        break;
    case 'F':
        {
            bonus = 100000 * .175 + 200000 * .05 + 
                200000 * .03 + 40000 * .015 + (money - 1000000) * .01;
        }
        break;
    }

    printf("应得奖金: %.3lf\n", bonus);
}

5.9)输入四个整数,要求按由小到大顺序输出

使用if语句实现的代码

#include<stdio.h>

void main()
{
    int a, b, c, d;
    scanf("%d%d%d%d", &a, &b, &c, &d);

    //abcd
    if(a >= b && b >= c && c >= d)
    {
        printf("%d %d %d %d\n", c, b, d, a);
    }
    //abdc
    else if(a >= b && b >= d && d >= c)
    {
        printf("%d %d %d %d\n", c, d, b, a);
    }
    //acbd
    else if(a >= c && c >= b && b >= d)
    {
        printf("%d %d %d %d\n", d, b, c, a);
    }
    //acdb
    else if(a >= c && c >= d && d >= b)
    {
        printf("%d %d %d %d\n", b, d, c, a);
    }
    //adbc
    else if(a >= d && d >= b && b >= c)
    {
        printf("%d %d %d %d\n", c, b, d, a);
    }
    //adcb
    else if(a >= d && d >= c && c >= b)
    {
        printf("%d %d %d %d\n", b, c, d, a);
    }
    //bacd
    else if(b >= a && a >= c && c >= d)
    {
        printf("%d %d %d %d\n", d, c, a, b);
    }
    //badc
    else if(b >= a && a >= d && d >= c)
    {
        printf("%d %d %d %d\n", c, d, a, b);
    }
    //bcad
    else if(b >= c && c >= a && d >= d)
    {
        printf("%d %d %d %d\n", d, a, c, b);
    }
    //bcda
    else if(b >= c && c >= d && d >= a)
    {
        printf("%d %d %d %d\n", a, d, c, b);
    }
    //bdac
    else if(b >= d && d >= a && a >= c)
    {
        printf("%d %d %d %d\n", c, a, d, b);
    }
    //bdca
    else if(b >= d && d >= c && c >= a)
    {
        printf("%d %d %d %d\n", a, c, d, b);
    }
    //cabd
    else if(c >= a && a >= b && b >= d)
    {
        printf("%d %d %d %d\n", d, b, a, c);
    }
    //cadb
    else if(c >= a && a >= d && d >= b)
    {
        printf("%d %d %d %d\n", b, d, a, c);
    }
    //cbad
    else if(c >= b && b >= a && a >= d)
    {
        printf("%d %d %d %d\n", d, a, b, c);
    }
    //cbda
    else if(c >= b && b >= d && d >= a)
    {
        printf("%d %d %d %d\n", a, d, b, c);
    }
    //cdab
    else if(c >= d && d >= a && a >= b)
    {
        printf("%d %d %d %d\n", b, a, d, c);
    }
    //cdba
    else if(c >= d && d >= b && b >= a)
    {
        printf("%d %d %d %d\n", a, b, d, c);
    }
    //dabc
    else if(d >= a && a >= b && b >= c)
    {
        printf("%d %d %d %d\n", c, b, a, d);
    }
    //dacb
    else if(d >= a && a >= c && c >= b)
    {
        printf("%d %d %d %d\n", b, c, a, d);
    }
    //dbac
    else if(d >= b && b >= a && a >= c)
    {
        printf("%d %d %d %d\n", c, a, b, d);
    }
    //dbca
    else if(d >= b && b >= c && c >= a)
    {
        printf("%d %d %d %d\n", a, c, b, d);
    }
    //dcab
    else if(d >= c && c >= a && a >= b)
    {
        printf("%d %d %d %d\n", b, a, c, d);
    }
    //dcba
    else if(d >= c && c >= b && b >= a)
    {
        printf("%d %d %d %d\n", a, b, c, d);
    }
}

5.10)有四个圆塔,圆心分别为 (2,2),(-2,2),(-2,-2),(2,-2) ,圆半径为1,这4个塔高度为10米,塔外无建筑物(高度为0米)。现输入任一点坐标,输出对应高度。

#include<stdio.h>

void main()
{
    float a, b;
    scanf("%f%f", &a, &b);

    //只考虑第一象限情况
    if(a < 0) a = -a;
    if(b < 0) b = -b;

    //将坐标平移到原点与圆心重合
    a -= 2;
    b -= 2;

    if(a * a + b * b <= 1)
    {
        printf("10\n");
    }
    else
    {
        printf("0\n");
    }
}

END

转载于:https://my.oschina.net/Tsybius2014/blog/306522

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值