C C++最全【C++笔试强训】第二天_左对齐,4个精度(2),C C++开发基础自学

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

C 6,7
D 3,5

这里有const,我们来了解两个概念:

  • 常量指针:指针所指空间的值不能发生改变,不能通过指针解引用修改指针所指空间的值,但是指针的指向可以发生改变。
  • 指针常量:指针本身是一个常量,指针的指向不能发生改变,但是指针所指空间的值可以发生改变,可以通过指针解引用改变指针所指空间的值。

区分:const *的相对位置

  • const 在 * 的左边,常量指针
  • const 在 * 的右边,指针常量

1 2 是常量指针,区别是2进行了初始化

因为是常量指针,所以指针指向可以改变,所以3是对的,但不能通过解引用改变所指空间的值,所以6是错的

4是指针常量,所以可以改变所指空间的值,所以5是对的,但不能改变指针的指向,所以7是错的

所以这道题的答案是C


💦第三题

下面叙述错误的是()

char acX[]="abc";
char acY[]={'a','b','c'};
char \*szX="abc";
char \*szY="abc";


A acX与acY的内容可以修改
B szX与szY指向同一个地址
C acX占用的内存空间比acY占用的大
D szX的内容修改后,szY的内容也会被更改

这道题acX和acY都是字符数组,只不过初始化的方式不同,szX和szY都是指针,指向同一个常量字符串,B正确

字符数组定义的内容实在栈上开辟的,是可以修改的,A正确

acX是字符串初始化,acY是数组初始化,字符串最后有个\0,所以C正确

szX的内容改变指的是szX的指向发生了改变,并不是字符数组发生了改变,所以szY不会发生改变,所以D错误

这道题的答案选D


💦第四题

在头文件及上下文均正常的情况下,下列代码的运行结果是()

	int a[] = {1, 2, 3, 4};
	int \*b = a;
	\*b += 2;
	\*(b + 2) = 2;
	b++;
	printf("%d,%d\n", \*b, \*(b + 2));

A 1,3
B 1,2
C 2,4
D 3,2

我们一条语句一条语句分析,int *b = a,定义了一个指针b指向数组首元素

*b += 2 的优先级高于+=,所以b先解引用得到1,再1+2=3,所以数组首元素的值变为3

*(b+2)= 2,由于括号的优先级高,先向右偏移两个位置,再将所指向的元素改变为2;

b++ 从数组首元素偏移到下一位

所以现在数组的元素是 3 2 2 4 ,b指向第二个元素

所以这道题的答案是2 4,选C


💦第五题

下列关于C/C++的宏定义,不正确的是()

A 宏定义不检查参数正确性,会有安全隐患
B 宏定义的常量更容易理解,如果可以使用宏定义常量的话,要避免使用const常量
C 宏的嵌套定义过多会影响程序的可读性,而且很容易出错
D 相对于函数调用,宏定义可以提高程序的运行效率

这道题主要是考验对宏的理解,宏是没有安全检测的,所以A正确

B选项恰好说反了,宏是没有安全检测的,并且在预处理阶段进行宏替换,所以是无法进行调试的,所以要尽量使用const常量

宏定义很容易导致优先级出错,所以C正确

宏定义相对于函数调用来说,没有创建函数栈帧,没有函数压栈的开销,是可以提高程序的运行效率,所以D是正确的

这道题的答案是B


💦第六题

有以下定义:

int a[10];
char b[80];

函数声明为:

void sss(char[],int[]);

则正确的函数调用形式是()
A sss(a,b);
B sss(char b[],int a[]);
C sss(b[],a[]);
D sss(b,a);

函数在调用的时候传入的参数如果是数组类型,调用的时候我们只需要传入数组名,即数组的地址

A的类型写反了,B传入的参数写了数据类型,这是不需要的的,C不应该加[]

这道题的答案是D


💦第七题

用变量a给出下面的定义:一个有10个指针的数组,该指针指向一个函数,该函数有一个整形参数并返回一个整型数()

A int *a[10];
B int (*a)[10];
C int (*a)(int);
D int (*a[10])(int);

A选项[]的优先级高于*,所以表面这是一个数组,数组里面存放的是int类型的指针,是一个指针数组

B是一个数组指针,指向int类型的数组,大小为10

C是一个指针函数,这个函数有一个int参数,返回值类型是int

D是函数指针数组,有一个整形参数并返回一个int类型的值,满足题意

这道题的答案是D


💦第八题

以下 C++ 函数的功能是统计给定输入中每个大写字母的出现次数(不需要检查输入合法性,所有字母都为大写),则应在横线处填入的代码为()

void AlphabetCounting(char a[], int n) 
{
	int count[26] = {}, i, kind = 10;
	for (i = 0; i < n; ++i)
		_________________;
	for (i = 0; i < 26; ++i) 
	{
		printf("%c=%d", _____, _____);
	}
}

A ++count[a[i]-‘Z’]
‘Z’-i
count[‘Z’-i]

B ++count[‘A’-a[i]]
‘A’+i
count[i]

C ++count[i]
i
count[i]

D ++count[‘Z’-a[i]]
‘Z’-i
count[I]

先看A选项,a[i] - ‘Z’ 的ASCII值是小于0的,但是数组下标不能小于0,所以A是错误的

B选项和A同理,‘A’ - a[i]的ASCII值也是小于0

C选项用i做下标,但是i的值是取决于n的,所以这个字符数组有可能是比count记录的大的,所以不满足题意,会出现越界,所以c是错的

D选项就是每一个下标对应一个字母,所以可以用来统计字数,‘Z’ - i ,是对应的每个字母,count[i]存储的是每个字母出现的次数,所以D是对的

所以这道题的答案是D


💦第九题

在32位cpu上选择缺省对齐的情况下,有如下结构体定义:

struct A{
unsigned a : 19;
unsigned b : 11;
unsigned c : 4;
unsigned d : 29;
char index;
};

则sizeof(struct A)的值为()

A 9
B 12
C 16
D 20

这道题的:数字表示位断,假设开辟4个字节,32个比特位,a占19个字节,如果b的位置够的话还是会放在这四个字节里面,不需要重新开辟空间。

请添加图片描述
根据内存对齐原则,所以得到这个结构体的长度为16字节

所以这道题的答案是16,选C


💦第十题

下面代码会输出()

int main()
{
	int a[4]={1,2,3,4};
	int \*ptr=(int\*)(&a+1);
	printf("%d",\*(ptr-1));
}

A 4
B 1
C 2
D 3

这道题给了一个整形数组,定义了一个指针ptr,利用数组给他赋值,&a + 1 会偏移数组类型个大小,即从数组首元素偏移4位,指向最后一个数据的下一个位置,所以*(ptr-1)指向的是数组的最后一个位置

所以这道题的答案是4,选A


编程题

🔥第一题

链接:排序子序列

牛牛定义排序子序列为一个数组中一段连续的子序列,并且这段子序列是非递增或者非递减排序的。牛牛有一个长度为n的整数数组A,他现在有一个任务是把数组A分为若干段排序子序列,牛牛想知道他最少可以把这个数组分为几段排序子序列.
如样例所示,牛牛可以把数组A划分为[1,2,3]和[2,2,1]两个排序子序列,至少需要划分为2个排序子序列,所以输出2

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

递增或者非递减排序的。牛牛有一个长度为n的整数数组A,他现在有一个任务是把数组A分为若干段排序子序列,牛牛想知道他最少可以把这个数组分为几段排序子序列.
如样例所示,牛牛可以把数组A划分为[1,2,3]和[2,2,1]两个排序子序列,至少需要划分为2个排序子序列,所以输出2

[外链图片转存中…(img-BJQZClJg-1715700567368)]
[外链图片转存中…(img-nJOYl3Q9-1715700567369)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值