经典笔试题123

原创 2016年05月30日 11:03:23

1.实现对一个8bit位数据(unsigned char 类型)的指定位(例如第n位)的置0或置1操作,并保持其他位不变。

函数原型:

void bit_set(unsigned char *p_data,unsigned char position,int flag)

函数参数说明:P_data是指定的原数据,position是指定位(取值范围为1~8),flag表示是置0还是置1.

举例说明一下,比如数字15,q它的二进制序列为0000 1111


代码实现:

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>

void bit_set(unsigned char *p_data,unsigned char position,int flag)
{
    assert(p_data);
	assert((position>=1)&&(position<=8));
	if(flag==1)//置1操作
	{
	    *p_data |= (1<<(position-1));
	}
	else if(flag==0)//置0操作
	{
	    *p_data &= ~(1<<(position-1));
	}
	
	else
	{
	    printf("flag参数错误!\n");
	}
}
int main()
{
   unsigned char num=0;
   unsigned char pos=0;
   int flag=0;
   printf("请输入各自的值:num pos flag\n");
   scanf("%d %d %d",&num,&pos,&flag);
   bit_set(&num,pos,flag);
   printf("%d\n",num);
   system("pause");
   return 0;
}


2.将一个字符串循环右移n位

函数原型:

void RightLoopMove(char *pStr,unsigned short steps)
下面用常用的两种方法实现



代码实现:

<pre name="code" class="cpp">#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
//void reverse(char *left,char *right)//翻转函数
//{
//    assert(left);
//	assert(right);
//	while(left<right)
//	{
//	    char tmp=*left;
//		*left=*right;
//		*right=tmp;
//		left++;
//		right--;
//	}
//}
//void RightLoopMove(char *pStr,unsigned short steps)//三步翻转法
//{
//    int len=strlen(pStr);
//if(steps>len)//防止给出的翻转位数大于字符串长度
//	{
//	     steps%=len;
//	}
//	reverse(pStr,pStr+len-1-steps);
//	reverse(pStr+len-steps,pStr+len-1);
//	reverse(pStr,pStr+len-1);
//}
void RightLoopMove(char *pStr,unsigned short steps)//循环右移
{
	int len=strlen(pStr);
	assert(pStr);
	if(steps>len)//防止给出的翻转位数大于字符串长度
	{
	     steps%=len;
	}
	while(steps)
	{
	   int cur=0;
	   char tmp=pStr[len-1];
     for(cur=len-1; cur>0; cur--)
	 {
		 pStr[cur]=pStr[cur-1];
	 }
	pStr[cur]=tmp;
	steps--;
	}
}
int main()
{
    char arr[]="abcdef";/*因为参数需要修改,必须采用数组传参,
	                   指针传参为字符串的首地址,不能被修改*/
	unsigned short steps=0;
	printf("请输入你要循环右移的位数:");
	scanf("%d",&steps);
	RightLoopMove(arr,steps);
	printf("%s\n",arr);
	system("pause");
	return 0;

}



3,编写程序实现字符串到整数的转换,如"12345"---->12345.

代码实现:

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
#include<ctype.h>//isspace isdigit的库函数


enum State//判断程序是否正常结束
{
   INVALID,//值为0,表示非正常结束
   VALID//值为1,表示正常结束
};
enum State state;//定义枚举类型的变量
int my_atoi(char *str)
{
   int flag=1;//符号位
   long long ret=0;//设置一个较大的数保存返回值,防止溢出
   assert(str);
   state=INVALID;//先赋值为非正常结束
   while(isspace(*str))//判断字符串是否为空白字符
   {
       str++;
   }
   if(*str=='\0')//空字符串,直接结束
   {
       return 0;
   }
   if(*str=='-')//第一个字符为‘-’,转换后为负数
   {
       flag=-1;
	   str++;
   }
   else if(*str=='+')//正数的情况
   {
       str++;
   }
   while(isdigit(*str))//判断是否为数字字符
   {
       ret=ret*10+flag*(*str-'0');
	   if(ret>INT_MAX || ret<INT_MIN)//判断数据是否溢出,若溢出,直接返回
	   {
	       return 0;
	   }
	   str++;
   }
   if(*str=='\0')//表示正常结束,找到字符串的'\0'
   {
       state=VALID;
	   return (int)ret;
   }
   else//异常结束
   {
     return ret;//可能丢掉一部分数据
   }

}
int main()
{
   char *p="12345";
   int ret=my_atoi(p);
   printf("%d\n",ret);
   system("pause");
   return 0;
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

实现一个数的反转,即“123”,输出时变为“321”

如果是明确的三位数,那么很容易实现,使用取余数和整除即可分离出每一位,代码如下: #include using namespace std; int main() { int a; cin>>a;...
  • Aphysia
  • Aphysia
  • 2016年11月02日 22:48
  • 520

Java入门123:一个老鸟的Java学习心得(二维码版)

Java入门123:一个老鸟的Java学习心得(二维码版)清华大学出版社
  • a3333333sdas
  • a3333333sdas
  • 2015年07月10日 13:36
  • 786

对数据库中的123范式的理解

关系数据库中的函数依赖。 定义如下:一个属性集的全集U,设R(U)是属性集U上的关系模式。X,Y是U的子集。若对于R(U)的所有具体关系r都满足如下约束:对于X的每一个具体值,Y有唯一的具体...
  • chenpidaxia
  • chenpidaxia
  • 2017年06月07日 22:48
  • 418

equals和==的区别

equals和==的区别 博客分类: Java学习笔记 equals==值传递引用传递         这两天一直在看数据结构和算法,看到一些内容就想起了龙哥曾经讲过的“eq...
  • hewusheng10
  • hewusheng10
  • 2013年01月29日 13:09
  • 291

系统管理123总结

半年来,我直接管辖的三大系统,都遭受了重创,但任然没有大事故出现,是运气好,是运气好,还是运气好呢? 2016.12.19  ERP (SAP ECC6 EHP7 ORACLE AIX)  ...
  • ot512csdn
  • ot512csdn
  • 2017年05月07日 00:09
  • 569

java50中经典算法

最近因为要准备实习,还有一个蓝桥杯的编程比赛,所以准备加强一下算法这块,然后百度了一下java基础算法,看到的都是那50套题,那就花了差不多三个晚自习的时间吧,大体看了一遍,做了其中的27道题,有一些...
  • u011563331
  • u011563331
  • 2016年05月26日 18:11
  • 2484

字符串转换为整数”123“->123

字符串转换为整数”123“->123 题目描述: 输入一个由数字组成的字符串,把它转换成整数并输出。例如:输入字符串"123",输出整数123。 给定函数原型 int StrToInt(const ...
  • u010555622
  • u010555622
  • 2014年08月09日 02:01
  • 1571

把一个整数颠倒过来,123变成321

后续会继续改进,增加一些边际条件。颠倒算法初步实现,其中有三种计算位数的方法。 //#define _CRT_SECURE_NO_WARNINGS #include #include //①fo...
  • MC_007
  • MC_007
  • 2017年11月07日 20:41
  • 167

123茶楼,众筹...

一万块,你想干什么?   如果投资一万,你想获得什么? 100倍的回报?给不了 一年分红2000?有意思吗? 现在有个机会,投资一万块 五年不分红,不能退股(可转让),玩亏自负 你敢一起...
  • crown_0726
  • crown_0726
  • 2015年01月02日 15:04
  • 542

大端法、小端法、网络字节序 转

关于字节序(大端法、小端法)的定义 《UNXI网络编程》定义:术语“小端”和“大端”表示多字节值的哪一端(小端或大端)存储在该值的起始地址。小端存在起始地址,即是小端字节序;大端存在起始地址,即是大...
  • li_yangyang_li
  • li_yangyang_li
  • 2016年04月12日 16:03
  • 487
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:经典笔试题123
举报原因:
原因补充:

(最多只允许输入30个字)