Lab03-数据类型、关系运算符、逻辑运算符
1. 输入格式【简单】
编写程序读取两组输入数据:
第一组值为:2 3 4回车
第二组值为:2,3,4回车
输出从键盘读入到的信息。
【输入】
2 3 4
7, 8, 9
【输出】
2 3 4
7 8 9
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
printf("%d %d %d\n",a,b,c);
scanf("%d,%d,%d",&a,&b,&c);
printf("%d %d %d\n",a,b,c);
return 0;
}
2. 较大的数【简单】
在一行中输入用一个空格分隔的两个整数,输出两个整数中的较大的那个数。
【input】两个整数
【output】两个整数较大的数
【input】 2 3
【output】3
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a,b;
scanf("%d %d",&a,&b);
if(a>b)
printf("%d",a);
else
printf("%d",b);
return 0;
}
3. 返回x中第p位开始的n位数【中等】
用户输入无符号整数x, p, n的值,请实现返回x中从右边数第p位至第p-n+1位(二进制位)的值。(假设:最右边的二进制位第0位)
【输入】x p n (p的取值在0-31之间)(1<=n<=p+1)
【输出】x中第p位开始的n位数
【输入】 5 1 2(截取5的从第1位开始到第0位的所有信息)
【输出】1
说明:5存储的信息为:0000 0000 0000 0000 0000 0000 0000 0101
返回从右边数的第1位到第0位之间的值:
结果为:
0000 0000 0000 0000 0000 0000 0000 0001
【输入】 106 7 4(截取5的从第7位开始到第4位的所有信息)
【输出】6
说明106的存储信息为:0000 0000 0000 0000 0000 0000 01101010
返回从右边数的第7位到第4位之间的值:
0000 0000 0000 0000 0000 0000 0000 0110
#include <stdio.h>
#include <stdlib.h>
int main(){
unsigned int x,p,n,i,o=0;
scanf("%u %u %u",&x,&p,&n);
for (i=p;i+n-1>=p;i--){
o<<=1;
o+=(x>>i)&1;
}
printf("%u\n",o);
}
4. x中的第p位开始的n个bit求反【中等】
(选做)用户输入无符号整数x, p, n的值,请实现:将x中的右边数第p位至第p-n+1位的值求反,x的其余各位保持不变。
【输入】x p n
【输出】x中第p位开始的n位数求反,其余不变
【输入】 5 1 2(5的从第1位开始到第0位的所有信息求反)
【输出】6
说明:5存储的信息为:0000 0000 0000 0000 0000 0000 0000 0101
从右边数的第1位到第0位之间的值求反:
结果为:
0000 0000 0000 0000 0000 0000 0000 0110
【输入】 106 7 4(106的从第7位开始到第4位的所有信息取反)
【输出】154
说明106的存储信息为:0000 0000 0000 0000 0000 0000 01101010
从右边数的第7位到第4位之间的值求反:
0000 0000 0000 0000 0000 0000 10011010
#include <stdio.h>
#include <stdlib.h>
int main(){
unsigned int x,p,n;
scanf("%u %u %u",&x,&p,&n);
printf("%u",x^(~(~0<<n)<<(p-n+1)));
return 0;
}