C语言程序设计算法题 -- lab05(R-W) 估算身高 实数除法 位求反 位运算与逻辑运算 位运算 平均数

R 估算身高

在这里插入图片描述

#include<stdio.h>

int main()
{
    char sex; double bone;
    scanf("%c %lf", &sex, &bone);
    printf("%.1lf", (sex == 'M') ? bone * 1.88 + 32 : bone * 1.94 + 28.7);
}

S 实数除法

两个实数 a 和 b的除法运算:
如果 b 是接近0(绝对值小于等于 )的数,则输出divisor near zero,否则输出 a/b 的结果值,结果保留小数点后十位。

#include<stdio.h>
#include<math.h>
int main()
{
    double a,b;
    scanf("%lf %lf", &a, &b);
    if(fabs(b) < 10e-8)//不是<=是<
        printf("divisor near zero");
    else
        printf("%.10lf", a / b);
    return 0;   
}

T 位求反

在这里插入图片描述
输入一个整数x (x为int),输出对 x 执行下列操作后的结果值:
将x 中从第 p 位开始右边的 b 个(二进制)位求反(1即变成0,0变成1), x的其余各位保持不变

#include<stdio.h>

int main()
{
    unsigned int inte;
    int p, n;
    scanf("%d %d %d", &inte, &p, &n);
    unsigned  int change = 1 << p + 1;
    //需要注意这里当位变化大于31的时候
    //设置为int会出现溢出问题
    int nn = change >> n;
    change -= nn ? nn : 1;

    int temp = inte;

    temp &= ~change;
    //temp 保留不变化的位
    inte &= change;
    inte = ~inte;
    inte &= change;
    // inte用于变化
    inte |= temp;
    printf("%u", inte);
    return 0;
}

U 位运算与逻辑运算

在这里插入图片描述

#include<stdio.h>

int main()
{
    int a,b;
    scanf("%d %d", &a, &b);
    printf("%d\n%d\n", a && b, a & b);
    unsigned c = a;
    if(b >= 0 && b < 32)
        printf("%d\n%d", a >> b, c >> b);
}

V 位运算

在这里插入图片描述
给定一个int型整数x ,将x 的二进制表示中第 i 位和第 j 位的值互换。 。

注意: x 的二进制表示的最右边为第0位。

#include<stdio.h>
int main()
{
    int x, i, j;
    scanf("%d %d %d", &x, &i, &j);
    int tempi = 1 << i;
    int tempj = 1 << j;
    int temp = x;
    temp &= ~tempi;
    temp &= ~tempj;
    //将i和j位归零
    tempi &= x;
    tempj &= x;
    int i2 = tempi && 1;
    int j2 = tempj && 1;
    //判断i和j是否需要互换
    
    if((i2 && j2) || (!i2 && !j2))
        printf("%d", x);
    else
    {
        i2 <<= j;
        j2 <<= i;
        temp |= j2;
        temp |= i2;
        printf("%d", temp);
    }
    
}

W 平均数

Input two integers a and b of type int, and output average integer of them. Test the program with data in range from INT_MIN to INT_MAX.

Note: only type int can be used in the program.

#include<stdio.h>
//虽然用longlong可以直接秒
//但是只能用int就考虑一下不同情况即可
int main()
{
    int a, b;
    scanf("%d %d", &a, &b);
    int res ;
    int posa = a >= 0;
    int posb = b >= 0;
    if(!(posa ^ posb))
    {
        res = a/2 + b/2;
        if(a&1 && b&1)
        {
            if(posa)
                res++;
            else
                res--;
        }
    }
    else
    {
        res = (a + b) / 2;
    }
    printf("%d", res);
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值