【C++笔试强训】第六天
创始人
2024-04-22 15:22:45

文章目录

    • 选择题
    • 编程题

选择题

1.十进制变量i的值为100,那么八进制的变量i的值为()

A 146

B 148

C 144

D 142

进制之间的转化,这不用多说了把

image-20221212002621734

2.执行下面语句后的输出为

int I=1;
if(I<=0)printf("****\n") ;
elseprintf("%%%%\n");

A %%

B ****

C 有语法错,不能正确执行

D %%%%

条件判断打印else的结果,我们在来看看:printf(格式化串,参数1,参数2,…)格式化串:printf第一个参数之后的参数按照什么格式打印。

printf(“%%%%\n”):格式串有一定规定,%之后跟上特定的字符才代表一定的格式化,%Q----->无效格式,编译器会忽略%,如printf(%Q)---->直接输出Q。所以这个地方,两个%只会输出一个%,答案选A

3.对于下面的C语言声明描述正确的一项是()

char (*p)[16]

A p是长度为16的字符指针数组

B p是包含16个字符的字符串

C p是指向长度为16的字符数组的指针

D p是长度为16的字符数组

p这里加了括号先和*结合,所以p是数组指针,指针指向长度为16的字符数组。答案选C。

4.数组a的定义语句为“float a[3][4];”,下列()是对数组元素不正确的引用方法

A a[i][j]

B *(a[i]+j)

C *(*(a+i)+j)

D *(a+i*4+j)

a[i]---->*(a+i)====访问数组a的第i个元素。

A是最普通的引用,对于B,a[i]是一维数组,+j拿到了第j个元素地址,解引用拿到了第i行第j列。C选项实际上和B选项等价。对于D:i*4这是不合理的写法,表示是错误的。

5.下面程序的输出结果是__________。

#include < iostream.h>
#define SQR(A) A*A
void main() {int x=6,y=3,z=2;x/=SQR(y+z)/SQR(y+z);cout< < x< < endl;
}

A 5

B 6

C 1

D 0

程序运行会经过预处理,编译,汇编,链接,在预处理阶段会将宏展开。宏函数最大的坑就是括号问题,最终是x/=3+2*3+2/3+2*3+2=0.

6.当n=5时,下列函数的返回值是()

int foo(int n){if(n<2){return n;}elsereturn 2*foo(n-1)+foo(n-2);
}

A 5

B 11

C 29

D 10

直接自己手动画一下展开结果显而易见:

image-20221213002917441

答案为29

7.以下对C语言的”指针“描述不正确的是()

A 32位系统下任何类型指针的长度都是4个字节

B 指针的数据类型声明的是指针实际指向内容的数据类型

C 野指针是指向未分配或者已释放的内存地址

D 当使用free释放掉一个指针内容后,指针变量的值被置为NULL

不正确的是D,free释放掉一个指针内容后,指针变量的值需要我们手动置为NULL,并不会被置为NULL。

8.数组定义为”int a[4][5];”, 引用”*(a+1)+2″表示()(从第0行开始)

A a[1][0]+2

B a数组第1行第2列元素的地址

C a[0][1]+2

D a数组第1行第2列元素的值

数组名是首元素的地址,a+1代表的是数组a中第一个元素的地址,解引用之后代表数组a中的第一个元素,a又是一个二维数组,二维数组中的每个元素都是一维数组,所以*(a+1)实际为一维数组,*(a+1)+2是当前一维数组的第二个元素。故答案选B。

9.有一个如下的结构体:

struct A{long a1;short a2;int a3;int *a4;
};

请问在64位编译器下用sizeof(struct A)计算出的大小是多少()

A 24

B 28

C 16

D 18

结构体内存对齐问题,我们实在是太熟悉了,对于64位编译器下,long—>4,short—>2,int—>4,int*—>8。VS的默认对齐数是8,linux的默认对齐数是4。a1:0-3,a2:4-5,a3:8-11,a4:16-23,答案选A。

#include 
using namespace std;
int f(int n){
if (n==1)
return 1;else
return (f(n-1)+n*n*n);
}
int main(){
int s=f(3);
cout<

运行结果是()

A 8

B 9

C 27

D 36

把递归展开即可:

image-20221213085431343

答案选D


编程题

不要二

image-20221205195032199

题目说了这么多,实际上最重要的是两个点:一个是二维数组,另一个是欧几里得距离:

image-20221213095632298

两个蛋糕的欧几里得距离不能等于2,根据上面的推导:我们可以知道,如果[i][j]位置放了蛋糕,那么[i+2][j] 和[i][j+2] 的位置就不可以放蛋糕了.我们可以定义count计数,把二维数组初始化为1,把不能放的位置置为0,统计count即可得出我们的结果,同时要防止[i+2]和[j+2]的越界,我们加个判断即可防止越界。

#include 
#include 
using namespace std;
int main() {int w,h,count=0;cin>>w>>h;vector> vv;vv.resize(w);for(auto& e:vv){e.resize(h,1);}for(size_t i = 0;i

把字符串转换成整数

image-20221213085818688

根据题意:我们首先需要去判断第一个字符是’+‘还是’-‘,需要去标记一下(同时,把第一个字符置为’0’,为了后面遍历字符串过滤掉)然后去遍历字符串,如果不是合法的数值,直接return。最终算出最后的值sum即可

class Solution {
public:int StrToInt(string str) {if(str.empty()){return 0;}int flag = 1;int sum = 0;if(str[0]=='+'){flag = 1;str[0] = '0';}else if(str[0]=='-'){flag = -1;str[0]='0';}for(size_t i = 0;i'9'){return 0;}sum = sum*10+str[i]-'0';}return flag*sum;}
};

相关内容

热门资讯

北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
阿西吧是什么意思 阿西吧相当于... 即使你没有受到过任何外语培训,你也懂四国语言。汉语:你好英语:Shit韩语:阿西吧(아,씨발! )日...