文章目录
- 1.选择题
- 2.代码题
- 2.1 模拟实现strncat
- 2.2 模拟实现strncpy
- 2.3 编写判断大小端程序
- 2.4 模拟实现atoi
- 2.5 BC38 变种水仙花数
- 2.6 BC98 序列中删除指定数字
今天我们一起来看一些题目
1.选择题
解析如下:
正确选项:B
A.参数错误;D.返回值类型错误。
解析如下:
正确选项:A
B.返回值为int,不是函数指针;
C.返回的函数指针没有设置参数;
D.返回的函数指针没有返回值。
解析如下:
正确选项:C
A,第一个括号定义一个数组,成员是int*,因此后面括号里的int*就很奇怪,四不像;
BD.如果是数组,p只能在[ ]右边;
C.如下图所示。
解析如下:
根据回调函数的定义,可以判别D项错误,正确的描述为回调函数是调用函数指针指向的函数。
回调函数是一种在编程中常见的概念,它是指将一个函数作为参数传递给另一个函数,并在特定的条件或事件发生时被调用执行的函数。
具体来说,回调函数是作为参数传递给其他函数的函数指针或函数对象。当满足特定条件或事件发生时,调用该函数指针或函数对象,以执行预定义的操作或逻辑。
正确选项:C
C项,字符串中没有\0,strlen会继续往后读取直到遇见\0,可能计算出随机值。
正确选项:C
二维数组传参可以省略行,但不能省略列,A项错误;
数组名传参,数组名是数组首元素的地址,如下图,二维数组每一个元素可以看作一维数组,arr[0]地址的类型是int(*arr)[5]
,C项正确。
正确选项:B.D
数组传参,第一种可以传数组,D选项正确。
第二种是数组首元素的地址,数组首元素类型是char*,一级指针char *的地址是二级指针char **,因此B项正确。
也可以是void test(char * arr[ ]);
正确选项:B
如下图所示,ptr被强转为int*,-1后解引用访问一个字节,即1;a+1解引用得到4.
正确选项:A
如下图.
正确选项:C
如下图所示.
正确选项:B
解析如下图所示.
正确选项:A
解析如下图所示.
正确选项:C
解析如下图所示.
正确选项:C
unsigned char取值范围-128~127,a+b=300,以%d打印,结果就是300,因为int是存得下300的;如下图所示,c存不下300,127+1变成-128,127+128+45=300,因此结果是44.
正确选项:C
a的成员为-1,-2,…,-127,128,…,1,0(如上题图)
strlen遇’\0’停止计算,-1,-2,…,-127,128,…,1共255个数。
正确选项:D
是变量名,不是类型名。
正确选项:C
结构体students的内存分布如下所示.
正确选项:D
sizeof是计算大小的.
正确选项:B
.的优先级高于*,因此,B项对p.a解引用,p.a是结构体成员,不能解引用。
正确选项:C
如下图所示,所有成员最大对齐数是4,大小是4的倍数,因此是12.
正确答案:C
如下图所示,A,B的大小分别是16,12.
- 下面代码的结果是:( )
#pragma pack(4)/*编译选项,表示4字节对齐 平台:VS2013。语言:C语言*/
//假设long 是4个字节
int main(int argc, char* argv[])
{struct tagTest1{short a;char d; long b; long c; };struct tagTest2{long b; short c;char d;long a; };struct tagTest3{short c;long b;char d; long a; };struct tagTest1 stT1;struct tagTest2 stT2;struct tagTest3 stT3;printf("%d %d %d", sizeof(stT1), sizeof(stT2), sizeof(stT3));return 0;
}
#pragma pack()
A.12 12 16
B.11 11 11
C.12 11 16
D.11 11 16
正确选项:A
如下图所示.
- 有如下宏定义和结构定义
#define MAX_SIZE A+B
struct _Record_Struct
{unsigned char Env_Alarm_ID : 4;unsigned char Para1 : 2;unsigned char state;unsigned char avail : 1;
}*Env_Alarm_Record;
struct _Record_Struct *pointer = (struct _Record_Struct*)malloc(sizeof(struct _Record_Struct) * MAX_SIZE);
当A=2, B=3时,pointer分配( )个字节的空间。
A.20
B.15
C.11
D.9
正确选项:D
首先分析位段_Record_Struct的大小,如下图所示,共三个字节,3*2+3=9.
2.代码题
2.1 模拟实现strncat
char* my_strncat(char* dest, const char* src, int n)
{char* p = dest;while (*p)p++;int i = 0;for (; *src != '\0' && i < n; i++)p[i] = src[i];p[i] = '\0';return dest;
}
2.2 模拟实现strncpy
char* my_strncpy(char* dest, const char* src, int n)
{int i = 0;for (; *src != '\0' && i < n; i++)dest[i] = src[i];dest[i] = '\0';return dest;
}
2.3 编写判断大小端程序
写一个函数判断当前机器是大端还是小端,如果是小端返回1,如果是大端返回0.
int check_sys()
{int i = 1;return (*(char *)&i);
}
2.4 模拟实现atoi
自行了解库函数atoi的功能,学习使用,并模拟实现atoi函数。
文档链接:atoi - C++ Reference (cplusplus.com)
#include <stdio.h>
#include <ctype.h>
#include <assert.h>
int state = 0;
int my_atoi(const char* str)
{assert(str!=NULL);if (*str == '\0')return 0;int flag = 1;while (isspace(*str))str++;if (*str == '-'){flag = -1;str++;}else if (*str == '+')str++;else;long long ret = 0;while (*str!='\0'){if (isdigit(*str)){ret = flag * (*str - '0') + ret * 10;if (ret > INT_MAX)return INT_MAX;else if (ret < INT_MIN)return INT_MIN;else;}elsereturn (int)ret;str++;}//正常结束if (*str == '\0')state = 1;return (int)ret;
}
int main()
{printf("%d\n", my_atoi("123"));return 0;
}
2.5 BC38 变种水仙花数
BC38 变种水仙花数
#include <stdio.h>
int main()
{for (int i = 10000; i <=99999; i++){int sum = 0;for(int j=10;j<=10000;j*=10)sum+=(i%j)*(i/j);if (sum == i)printf("%d ", i);}return 0;
}
2.6 BC98 序列中删除指定数字
BC98 序列中删除指定数字
#include <stdio.h>
int main() {int arr[50]={0};int n,del,j=0;scanf("%d",&n);for(int i=0;i<n;i++)scanf("%d",&arr[i]);scanf("%d",&del);for(int i=0;i<n;i++){if(arr[i]!=del){arr[j]=arr[i];j++;}}for(int i=0;i<j;i++)printf("%d ",arr[i]);return 0;
}