经典练习
来源:互联网 发布:mac运行windows 发热 编辑:程序博客网 时间:2024/05/22 00:15
1.编写函数:
unsigned int reverse_bit(unsigned int value);
这个函数的返回值value的二进制位模式从左到右翻转后的值。
如:
在32位机器上25这个值包含下列各位:
00000000000000000000000000011001
翻转后:(2550136832)
10011000000000000000000000000000
程序结果返回:
2550136832
#include<stdio.h>
#include<stdlib.h>
unsigned int reverse_bit(unsigned int X)
{
int ret = 0;
int i = 0;
int bit = 0;
for(i=0;i<32;i++)
{
ret=ret<<1;//左移一位,保存前一位
bit=X&1;//取出最后一位
X=X>>1;//值右移一位
ret=ret|bit;//ret前面的保持不变,将取出X的最后一位赋给ret
}
return ret;
}
int main()
{
int x=0;
int ret = 0;
scanf("%d",&x);
ret=reverse_bit(x);
printf("%u\n",ret);
system("pause");
return 0;
}
2.不使用(a+b)/2这种方式,求两个数的平均值。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d %d",&a,&b);
printf("a+b=%d\n",((a&b)+((a^b)>>1)));
system("pause");
return 0;
}
3.编程实现:
一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。
请找出这个数字。(使用位运算)
#include<stdio.h>
#include<stdlib.h>
#define SZ sizeof(arr)/sizeof(arr[0])
int main()
{
int arr[9]={1,2,3,4,1,2,3,4,5};
int i = 0;
int j = 0;
for(i=0;i<SZ;i++)
{
j=j^arr[i];
}
if(j==0)
printf("%d成对出现\n",j);
else
printf("%d单独出现\n",j);
system("pause");
return 0;
}
4.
有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student".
要求:
不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
void rvrse_msg(char *start,char* end)
{
while(start<end)
{
char temp=0;
temp=*start;
*start=*end;
*end=temp;
end--;
start++;
}
}
void exchange_msg(char *msg,int sz)
{
char *fast=msg;//定义一个快指针一个慢指针
char *slow=msg;
while(*fast!='\0')
{
if(isspace(*fast))//如果快指针为空格,停下来,快指针指向的前一个和慢指针指的进行交换
{
rvrse_msg(slow,fast-1);
fast++;//一个单词进行完后进行下一个单词的交换
slow=fast;//慢指针和快指针同一个位置
}
else
{
fast++;
}
}
rvrse_msg(slow,fast-1);//实现最后一个单词的内容互换
rvrse_msg(msg,fast-1);//整体的单词互换
}
int main()
{
char msg[]="student a am i";
int sz=sizeof(msg)/sizeof(msg[0]);
exchange_msg(msg,sz);
printf("%s",msg);
system("pause");
return 0;
}
unsigned int reverse_bit(unsigned int value);
这个函数的返回值value的二进制位模式从左到右翻转后的值。
如:
在32位机器上25这个值包含下列各位:
00000000000000000000000000011001
翻转后:(2550136832)
10011000000000000000000000000000
程序结果返回:
2550136832
#include<stdio.h>
#include<stdlib.h>
unsigned int reverse_bit(unsigned int X)
{
int ret = 0;
int i = 0;
int bit = 0;
for(i=0;i<32;i++)
{
ret=ret<<1;//左移一位,保存前一位
bit=X&1;//取出最后一位
X=X>>1;//值右移一位
ret=ret|bit;//ret前面的保持不变,将取出X的最后一位赋给ret
}
return ret;
}
int main()
{
int x=0;
int ret = 0;
scanf("%d",&x);
ret=reverse_bit(x);
printf("%u\n",ret);
system("pause");
return 0;
}
2.不使用(a+b)/2这种方式,求两个数的平均值。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d %d",&a,&b);
printf("a+b=%d\n",((a&b)+((a^b)>>1)));
system("pause");
return 0;
}
3.编程实现:
一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。
请找出这个数字。(使用位运算)
#include<stdio.h>
#include<stdlib.h>
#define SZ sizeof(arr)/sizeof(arr[0])
int main()
{
int arr[9]={1,2,3,4,1,2,3,4,5};
int i = 0;
int j = 0;
for(i=0;i<SZ;i++)
{
j=j^arr[i];
}
if(j==0)
printf("%d成对出现\n",j);
else
printf("%d单独出现\n",j);
system("pause");
return 0;
}
4.
有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student".
要求:
不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
void rvrse_msg(char *start,char* end)
{
while(start<end)
{
char temp=0;
temp=*start;
*start=*end;
*end=temp;
end--;
start++;
}
}
void exchange_msg(char *msg,int sz)
{
char *fast=msg;//定义一个快指针一个慢指针
char *slow=msg;
while(*fast!='\0')
{
if(isspace(*fast))//如果快指针为空格,停下来,快指针指向的前一个和慢指针指的进行交换
{
rvrse_msg(slow,fast-1);
fast++;//一个单词进行完后进行下一个单词的交换
slow=fast;//慢指针和快指针同一个位置
}
else
{
fast++;
}
}
rvrse_msg(slow,fast-1);//实现最后一个单词的内容互换
rvrse_msg(msg,fast-1);//整体的单词互换
}
int main()
{
char msg[]="student a am i";
int sz=sizeof(msg)/sizeof(msg[0]);
exchange_msg(msg,sz);
printf("%s",msg);
system("pause");
return 0;
}
阅读全文
0 0
- 经典练习
- 【练习】经典算法练习
- oracle 经典练习
- java经典练习
- java经典练习
- oracle经典练习
- UILTView经典知识点练习
- OC经典练习
- Mysql 经典练习
- PL/SQL经典练习
- mysql经典查询练习
- 经典python题目练习
- 经典SQL练习
- 经典排序算法练习
- sql-经典例子练习
- 练习:经典搜索题
- 循环的经典练习
- plsql经典测试题--练习
- 织梦DEDECMS后台登录掉线返回
- spring的启动过程——spring和springMVC父子容器的原理
- 颜色空间RGB与HSV(HSL)的转换
- Hibernate Validator5.4.2--分组约束
- hibernate关系映射管理(一对多,多对一,一对一,多对多)
- 经典练习
- EasyPlayer播放海康大华RTSP流时RTSPClient客户端连接兼容问题的解决
- spring,hibernate,struts2三大框架的整合秘籍
- DedeCMS中MySQL修复表的两个小技巧
- hibernate常见面试题详解
- Python基础【02】———创建线程时的传参问题
- Unity优化技巧
- Linux查找命令Find和Grep
- 写给新手程序员的几个小建议!