C考卷编译

来源:互联网 发布:315怎么投诉淘宝卖家 编辑:程序博客网 时间:2024/06/03 00:12
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操作
#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 != NULL);
assert(position >= 1 || position <= 8);
if (flag == 1)
{
*p_data = *p_data | (1 << (position - 1));
}
else if (flag == 0)
{
*p_data = *p_data &~(1 << (position - 1));
}
}


int main()
{
unsigned char num = 0;
bit_set(&num, 4, 1);
printf("%d\n", num);
bit_set(&num, 4, 0);
printf("%d\n", num);
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
方法1:暴力移位法
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
void RightLoopMove(char *pStr, unsigned short steps)
{
assert(pStr != NULL);
int len = strlen(pStr);
while (steps > 0)
{
int i = 0;
char tem;
tem = *(pStr+len-1);
for (i=len-1; i >0; i--)
{
*(pStr+i) = *(pStr+i-1);
}
*pStr = tem;
steps--;
}


}
int main()
{
char arr[] = "abcdefghi";
unsigned short step;
printf("请输入右移位数:\n");
scanf("%u", &step);
RightLoopMove(&arr, step);
printf("%s\n", arr);
system("pause");
return 0;
}
方法2:翻转法
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
void reverse(char *left, char *right)
{
assert(left != NULL);
assert(right != NULL);
while (left < right)
{
char temp;
temp = *left;
*left = *right;
*right = temp;
left++;
right--;
}
}
void RightLoopMove(char *pStr, unsigned short steps)
{
assert(pStr != NULL);
int len = strlen(pStr);
reverse(pStr, pStr + len - 1 - steps);
reverse(pStr + len - steps, pStr + len - 1);
reverse(pStr, pStr + len - 1);
}
int main()
{
char arr[] = "abcdefghi";
int step = 0;
printf("请输入右移位数:\n");
scanf("%d", &step);
RightLoopMove(&arr, step);
printf("%s\n", arr);
system("pause");
return 0;
}




 3. 请编写程序实现字符串到整数的转换,例如输入字符串“12345”,输出整数12345
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
#include<ctype.h>
NULL
""
+ -
异常字符
溢出
enum Status
{
valid,//合法
invalid//非法
};
enum Status status = invalid;
int my_atoi(char* str)
{
assert(str != NULL);
long long ret = 0;
int flag = 1;
if (*str=='\0')
{
return 0;
}
空白字符
while (isspace(*str))
{
str++;
}
+ -
if (*str == '-')
{
flag = -1;
str++;
}
else if (*str == '+')
{
str++;
}
while (*str)
{
if (isdigit(*str))
{
ret = ret * 10 + flag*(*str - '0');
if (ret > INT_MAX || ret < INT_MIN)
{
if (flag == 1)
{
return INT_MAX;
}
else
{
return INT_MIN;
}
}
}
else
{
return (int)ret;


}
str++;
}
status = valid;
return (int)ret;
}
int main()
{
char* p = "      -123451";
int num = my_atoi(p);
printf("%d\n", num);
system("pause");
return 0;
}
阅读全文
0 0
原创粉丝点击