C语言设计(第五版) 第四章课后习题

第四章

4.1 什么是算术运算?什么是关系运算?什么是逻辑运算?

算术运算:对数字进行加减乘除取余操作
关系运算:指的是对两个操作数进行比较,判断它们之间的大小、相等性等关系
逻辑运算:指的是对两个或多个逻辑值进行操作,得到一个新的逻辑值

4.2 C语言中如何表示“真“和”假”? 系统如何判断一个量的“真“和“假”?

用1来表示真,0来表示假
系统会判断非0数为真,0为假

4.3写出下面各逻辑表达式的值。设 a=3,b=4,c=5

(1) a+b>c && b==c
(2) a || b+c && b—c
(3) !(a>b) && !c || 1
(4) !(x=a) && (y=b) && 0
(5) !(a+b)+c—1 && b+c/2

(1).  0
(2).  1
(3).  1
(4).  0
(5).  1

4.4 有3个整数 a,b,c,由键盘输入,输出其中最大的数。

#include <stdio.h>
int main()
{
    int a,b,c,max;
    scanf("%d %d %d", &a, &b, &c);

    max = a > b ? a : b;    //比较a,b赋最大值给max
    max = max > c ? max : c;   //比较c和max中的较大者赋值给max

    printf("%d", max); //输出a,b,c中最大值

    return 0;
}

4.5. 从键盘输人一个小于 1000的正数,要求输出它的平方根(如平方根不是整数,则输出其整数部分) 要求在输人数据后先对其进行检查是否为小于 1000 的正数。若不是.则要求重新输人。

#include <stdio.h>
#include <math.h>
int main()
{
    double num;
    printf("请输入一个大于0小于1000的数:");
    scanf("%lf", &num);         //输入

    while (!(num > 0 && num < 1000)) //检查是否为小于 1000 的正数。若不是.则要求重新输人。
    {
        printf("输出的数不符合,请重新输入:");
        scanf("%lf", &num);     //输入
    }

    printf("%d", (int) sqrt(num));  //输出整数部分

    return 0;
}

4.6 有一个函数

​ y = x (x<1)
​ y = 2x-1 (1 <= x && x < 10 )
​ y = 3
x-11 (x>=10)
写程序,输入x的值,输出y相应的值

#include <stdio.h>
int main()
{
    double x,y;       //定义x,y

    printf("请输入x:");
    scanf("%lf", &x); //输入x

    //根据x求y
    if(x<1)
    {
        y = x;
    }

    if(1 <= x && x < 10)
    {
        y = 2 * x - 1;
    }

    if (x >= 10)
    {
        y = 3 * x - 11;
    }

    printf("y的值为%.2lf", y);   //数

    return 0;
}

4.7 略

4.8 给出一百分制成绩,要求输出成绩等级’A’、‘B’、‘C’、‘D’、‘E’. 90分以上为’A’,80~89 分为’B’,70~79 分为’C’,60~69 分为’D’,60分以下为’E’。


#include<stdio.h>
int main()
{
    float score;    //定义score

    printf("请输入分数:");
    scanf("%f", &score);

    if (score >= 0 && score <= 100)
    {
        if (score >= 90)
        {
            printf("A");
        } else if (score >= 80 && score <= 89)
        {
            printf("B");
        } else if (score >= 70 && score <= 79)
        {
            printf("C");
        } else if (score >= 60 && score <= 69)
        {
            printf("D");
        } else if (score < 60)
        {
            printf("E");
        }
    }

    return 0;
}

4.9. 给一个不多于 5 位的正整数.要求:

求出它是几位数:
分别输出每一位数字;
按逆序输出各位数字,例如原数为 321,应输出 123。

#include <stdio.h>
int main()
{
    int num, i, t, j;
    int s[6];
    scanf("%d", &num);

    t = num;
    do
    {
        i++;
    } while ( t = t/10);
    printf("这是一个%d位数\n", i);

    t = num;
    for (j = i; j != 0; j--)
    {
        s[j] = t % 10;
        t /= 10;
    }

    printf("正序为:");
    for (j = 1; j <= i; ++j)
    {
        printf("%d", s[j]);
    }

    printf("\n反序为:");

    for (j = i; j != 0; j--)
    {
        printf("%d", s[j]);
    }

    return 0;
}

4.10 企业发放的奖金根据利润提成。利润Ⅰ低于或等于100000元的,奖金可提成10%;

利润高于100000元,低于200000元(100000<Ⅰ <=200000)时,低于100000元的部分按10%提成,高于100000元的部分,可提成7.5%:
200000<Ⅰ <=400000时,低于200000元的部分仍按上述办法提成(下同)。高于200000元的部分按5%提成;
400000<Ⅰ≤600000元时,高于400000元的部分按3%提成:
600000<Ⅰ≤1000000时,高于600000元的部分按1.5%提成;
Ⅰ>1000000时,超过1000000元的部分按1%提成。从键盘输人当月利润Ⅰ,求应发奖金总数。

#include <stdio.h>
int main()
{
    double I, salary,n1,n2,n3,n4,n5;

    scanf("%lf", &I);

    n1 = 100000 * 0.1;
    n2 = (200000 - 100000) * 0.075 + n1;
    n3 = (400000 - 200000) * 0.05 + n2;
    n4 = (600000 - 400000) * 0.03 + n3;
    n5 = (1000000 - 600000) * 0.015 + n4;

    if (I < 100000 )
    {
        salary = I * 0.1;
    }

    if (I >= 100000 && I < 200000)
    {
        salary = n1 + (I - 100000) * 0.075;
    }
    if (I >= 200000 && I < 400000)
    {
        salary = n2 + (I - 200000) * 0.05;
    }

    if (I >= 400000 && I < 600000)
    {
        salary = n3 + (I - 400000) * 0.03;
    }

    if (I >= 600000 && I < 1000000)
    {
        salary = n4 + (I - 600000) * 0.015;
    }

    if(I >= 1000000)
    {
        salary = n5 + (I - 1000000) * 0.01;
    }

    printf("%lf", salary);

    return 0;
}

4.11 输人 4 个整数.要求按由小到大的顺序输出

#include <stdio.h>
int main()
{
    int a[4], i, j, t;
    for (i = 0; i < 4; ++i)
    {
        scanf("%d", a+i);
    }
    for (i = 0; i < 4-1; ++i)
    {
        for (j = 0; j < 4 - i - 1; ++j)
        {
            if(a[j] > a[j+1])
            {
                t = a[j];
                a[j] = a[j + 1];
                a[j + 1] = t;
            }
        }
    }
    for (i = 0; i < 4; ++i)
    {
        printf("%2d", a[i]);
    }
    return 0;
}

4.12 有4个圆塔.圆心分别为(2,2)、(-2,2)、(-2,-2)、(2,-2)

圆半径为1,这 4个塔的高度为10m。
塔以外无建筑物。今输人 任一点的坐标.求 该点的建筑高度(塔外的高度为零)。


#include <stdio.h>
#include <math.h>
double distance(int x, int y, int x1, int y1)
{

    return  sqrt(pow((x - x1), 2) + pow((y - y1), 2));
}
int main()
{
    double  x, y;
    scanf("%lf %lf", &x, &y);
    if (distance(x, y, 2, 2) <= 1)
    {
        printf("高度为10");
    }else if (distance(x, y, 2, -2) <= 1)
    {
        printf("高度为10");
    }else if (distance(x, y, -2, 2) <= 1)
    {
        printf("高度为10");
    }else if (distance(x, y, -2, -2) <= 1)
    {
        printf("高度为10");
    }else {
        printf("高度为0");
    }

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值