c语言第一次练习题

练习:
1.给定一个整型数a,设置a的bit3(为1),保证其他位不变。
2.给定一个整形数a,设置a的bit3~bit7,保持其他位不变。
3.给定一个整型数a,清除a的bit15,保证其他位不变。
4.给定一个整形数a,清除a的bit15~bit23,保持其他位不变。
5.给定一个整形数a,取出a的bit3~bit8。
6.用C语言给一个整形数的bit7~bit17赋值937(其余位不受影响)。
7.用C语言将一个整形数的bit7~bit17中的值加17(其余位不受影响)。
8.用C语言给一个整形数的bit7~bit17赋值937,同时给bit21~bit25赋值17.

第一题:

#include<stdio.h>


int main(void)
{
        int a = 0x12345678;
        a = (a | (0x1 << 3));
        printf("0x%x",a);
}

运行结果:0x12345678
8表示为二进制是 1000
1是它的第三位
1 | 1 = 1

第二题:

#include<stdio.h>


int main(void)
{
int a = 0x12345678;     //给一个整数十六进制12345678 
a = a | (0b11111<<3); //将3到7位的数值设定为1 
printf("0x%x",a);
}

运行结果:0x123456f8
3到7位本来是01111
11111 | 01111 = 11111
f代表十六进制的15

第三题:

#include<stdio.h>


int main(void)
{
        int a = 0x12345678;       //给一个整数十六进制12345678 
        a = a = (a & (~(0b1<<15)));  //将第15位的数清零 
        printf("0x%x",a);
} 

运行结果:0x12345678
5的二进制是0101
第十五位本来就是0
清零之后任然是0

第四题:

#include<stdio.h>


int main(void)
{
        int a = 0x12345678;        //给一个整数十六进制12345678 
        a = a = (a & (~(0x1ff<<15)));  //将第15位到23位的数清零 
        printf("0x%x",a);
}

运行结果:0x12005678

第五题:

#include<stdio.h>


int main(void)
{
        int a = 0x12345678;   //给一个整数十六进制12345678 
        a = (a & (0x3f<<3));   //取出第3个到第8个数值
        a >>= 3;
        printf("0x%x",a);
} 

运行结果:0x78
01111000
取出第三个到第八个是01111
打印成十六进制就是78

第六题:
给你三个整形数据,找出其中最大的整数

#include<stdio.h>


int main(void)
{
    int a = 22;
    int b = 33;
    int c = 44;
    int max; 
    if(a > b)
    {
        if(a > c)
        {
            max = a; 
        }
        else
        {
            max = c;    
        } 

    }
    else
    {
        if(b > c)
        {
            max = b;
        }
        else
        {
            max = c;
        }
    }
    printf("max=%d",max);   

}

第七题:求1+2!+3!+4!+…….+20!的和

#include<stdio.h>

int main(void)
{   
int i;
    int s = 1;  
    int sum = 0; 
    for(i=1; i<=20; i++) 
    {
        s = s * i;
        sum = sum + s;
    } 
printf("sum = %d",sum);
}

第八题:求1-1/2+1/3-1/4…….+1/99-1/100的数值
本来写的程序:

int main(void)
{
    int i;
    int sum = 0;
    for(i=1; i<=100; i++)
    {
        if((i%2)==0)    //把2 4 6 ....100变成负数
        {
            i = i * (-1);
        }
            else
        {
            i = i;    //1 3 5 7 还是正数
        } 
        sum = sum + (1/i);   
    }
    printf("sum = %d",sum);
}

结果这个程序出不来 我觉得应该是有分数 所以我把数据类型改成float

#include<stdio.h>


int main(void)
{
    float i;
    float sum;
    for(i=1; i<=100; i++)
    {
        if((i%2)==0)
        {
            i = i * (-1);
        }
        else
        {
            i = i;
        }
        sum = sum + (1/i);
    }
    printf("sum = %f",sum);
}

转换成浮点型之后取余就不可以用了!尴尬!
我把两项看成一项算了一下如下:

int main(void)
{
    float i;
    float sum = 0;
    for(i=1; i<=100; i+=2)
    {
        sum = sum + (1/(i*(i+1)));
    }
    printf("sum = %f",sum);
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值