C语言——简单的相关测试题

来源:互联网 发布:电脑微信群发软件 编辑:程序博客网 时间:2024/03/29 17:48

1、 请编码实现以下功能的函数
功能:实现对一个8 bit数据(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操作


#include<stdio.h>
void bit_set(unsigned char *p_data, unsigned int position, int flag)
{
 if (flag)
 {
  *p_data = *p_data | (1 << (position - 1));
 }
 else
 {
  *p_data = *p_data &(~(1 << (position - 1)));
 }
}
int main()
{
 unsigned char tmp = 15;
 unsigned char* p = &tmp;
    unsigned int position = 0;
 while (position>8||position==0)
 {
  printf("请输入操作位数》\n");
  scanf("%d", &position);
 }
 bit_set(p,position,0);
 printf("%d", tmp);
 system("pause");
 return 0;
}
2、 请实现字符串右循环移位函数,比如:“abcdefghi”循环右移2位就是“hiabcdefg”.
函数原型:void RightLoopMove(char *pStr, unsigned short steps)
函数参数说明:

pStr : Point to a ‘\0’ terminated string
   steps : The rotate shift numbers
#include<stdio.h>
void Reverse(char* left, char*right) //翻转字符串函数
{
 char tmp = 0;
 while (left < right)
 {
  tmp = *left;
  *left++ = *right;
  *right-- = tmp;
 /* left++; right--;*/
 }
}
void RightLoopMove(char *str, unsigned short steps)
{
 int len = strlen(str);
 Reverse(str, str + len - 1);  //整体翻转
 Reverse(str, str + steps - 1);  //前steps个翻转
 Reverse(str + steps, str + len - 1);  //后面的全部翻转
}
int main()
{
 char p[] = "abcdefghi";
 unsigned short steps = 2;
 RightLoopMove(p, steps);
 printf("%s", p);
 system("pause");
 return 0;
}
3. 请编写程序实现字符串到整数的转换,例如输入字符串“12345”,输出整数12345
即实现atoi;

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
int My_atoi(char*str)
{
 int flag = 0;
 long long int ret=0;
 assert(str != NULL);  //1.NULL指针
 if (!*str) //2.空字符串
  return 0;
 //首先判断第一个数字+-,还是其他,其他停下,数字继续走,遇见不是数字的停下。
 if ((*str == '+')||((*str<='9')&&(*str>='0')))
  flag = 1;
 if (*str == '-')
  flag = -1;
 if (flag)   //如果flag等于0,证明第一个字符不是+-,也不是数字。
 {
  if (*str == '+' || *str == '-')
   str++;
  while ((*str <= '9') && (*str >= '0'))
  {
   ret *= 10;
   ret += (*str - '0');
   *str++;
   if (ret > INT_MAX)
   break;
  }  
  ret = ret*flag;
  if (ret > INT_MAX) return INT_MAX;
  if (ret < INT_MIN) return INT_MIN;
  return ret;
 }
 return 0;
}
int main()
{
 char *p = "1232";
 int a=My_atoi(p);
 printf("%d", a);
 system("pause");
 return 0;
}