【笔试强训】Day 6

简介: 【笔试强训】Day 6

🌈选择题


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

A 146

B 148

C 144

D 142


本题很简单:100除8,取余数,直到商为零,最后反向的串起余数即可


0a2653c851af460fa595bd959398a8f1.png


答案选C


执行下面语句后的输出为()


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


A %%

B ****

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

D %%%%


printf(格式化,参数1,参数2,…)

格式化串:printf第一个参数之后的参数要按照上面格式打印

%d——> 按照整形方式打印

%f—— > 按照float方式打印


格式串有一定的规定,%之后跟上特定的字符才代表一定的格式化

%Q——>无效的格式——>编译器会忽略%

printf(“%Q”) ;——>直接输出Q

printf(“%%%%\n”)可想而知输出的就是%%


答案是A


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

char (*p)[16]

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

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

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

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


p是一个指针,指向的是长度为16的字符数组 也叫作数组指针

答案是C


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

A a[i][ j]

B *(a[i]+j)

C ((a+i)+j)

D (a+i4+j)


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

二维数组a中的每个元素都是一个一维数组,很明显ABC都正确

答案选D


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


#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/=SQR(y+z)/SQR(y+z) == x/=3+2 * 3+2 /3+2*3+2 按顺序算得出等于0

答案选D


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


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


A 5

B 11

C 29

D 10


考察递归算法,画递归图算出f1、f2、f3等的数值,最后相加即可

答案选C


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

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

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

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

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


int* p(int*)malloc(4); free(p)


free释放后,只是将p所在的内存空间释放了,并没有将p指针置为空,需要手动置空


数组定义为”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+1)表示数组a中第一个元素

*(a+1)+2是对一维数组后移两个单位;表示的是a数组第1行第2列元素的地址

答案选B


有一个如下的结构体:


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


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


老对手了,结构体对齐

本题有疏漏,没有告诉是在什么平台下运行,vs下默认对齐数是8,linux下默认对齐数是4


0a2653c851af460fa595bd959398a8f1.png


答案选A


#include <iostream>
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<<s<<endl;
  return 0;
}


运行结果是()

A 8

B 9

C 27

D 36


本题考查的是递归,f(3)= f(2)+333;f(2)=f(1)+222;f(1)=1;因此f(3)=1+222+333=36


因此答案选D


🌈编程题


1️⃣不要二

题目地址:传送


0a2653c851af460fa595bd959398a8f1.png


解题思路:


任意两个蛋糕的欧几里得距离不能等于2

根据对公式的推导得知:如果[i][j]位置放了蛋糕,那么[i+2][j] 和[i][j+2] 的位置就不可以放蛋糕了

定义count计数,先把二维数组遍历初始化为1,把不能放的位置置为0,最后输出count的数值就是可以放的蛋糕数了

注意要防止[i+2]和[j+2]的越界问题


2d65d23f6d4748949b924e4057485923.png


#include <iostream>
#include <vector>
using namespace std;
int main() {
    int w, h;
    cin >> w >> h;
    vector<vector<int>> arr;
    arr.resize(w);
    for (auto& e : arr) 
    {   
        e.resize(h, 1);//初始值都置为1
    }
    int count =0;
    for (int i = 0; i < w; i++) 
    {
        for (int j = 0; j < h; j++) 
        {
            if (arr[i][j] == 1) 
            {   
                //不能放的位置置为0
                count++;
                if (i + 2 < w) 
                {
                    arr[i + 2][j] = 0;
                }
                if (j + 2 < h) 
                {
                    arr[i][j + 2] = 0;
                }
            }
        }
    }
    cout << count << endl;
    return 0;
}


2️⃣把字符串转换成整数

题目链接:传送


4cebaac233b3433da32a72337a77fc60.png


解题思路:


考虑字符串是正、负、空的情况

怎么样把字符转换成数字呢?查看ascll码表可以得知:'1' - '0' = 1

关键表达式:sum = sum *10 + str[i] - '0'

ps:+是会直接令sum=0,所以判断完是+or-,就要置为零,也不影响下面的判断


6de278e6d6694ce5bb08e7e842b7e74b.png


class Solution {
public:
    int StrToInt(string str) {
        if(str.empty())
        {
            return false;
        }
        int flag = 1;
        if(str[0] == '+')
        {
            flag = 1;
            str[0] = '0';//防止后面+进入不了循环所以置0
        }
        if(str[0] == '-')
        {
            flag = -1;
            str[0] = '0';
        }
        int sum = 0;
        for(int i = 0; i < str.size(); i++)
        {
            //出现字母的情况
            if(str[i] < '0' || str[i] > '9')
            {
                sum = 0;
                break;
            }
            sum = sum*10 + str[i]-'0';
        }
        return flag * sum;
    }
};
相关文章
|
7月前
|
算法 C++
48天C++笔试强训 001(下)
48天C++笔试强训 001(下)
30 1
|
6天前
|
SQL 关系型数据库 MySQL
几道常见面试问题总结(二)
几道常见面试问题总结(二)
|
6天前
|
算法 前端开发 JavaScript
面试必会的几道算法
面试必会的几道算法
|
7月前
|
存储 C语言 C++
48天C++笔试强训 001(上)
48天C++笔试强训 001
37 0
|
11月前
|
存储 编译器 C++
笔试强训错题总结(一)(上)
笔试强训错题总结(一)
104 0
|
11月前
|
算法 编译器 C语言
笔试强训错题总结(一)(下)
笔试强训错题总结(一)
|
11月前
|
算法 数据库
笔试强训错题总结(二)(下)
笔试强训错题总结(二)
|
11月前
|
安全 编译器 C++
笔试强训错题总结(二)(上)
笔试强训错题总结(二)
|
人工智能 安全 测试技术
【笔试强训】Day_02
目录 一、选择题 1、 2、 3、 4、 5、 6、 7、 8、 9、 10、 二、编程题 1、排序子序列 2、倒置字符串
112 0
【笔试强训】Day_02
|
算法 C++
【笔试强训】Day_01
目录 一、选择题 1、 2、 3、 4、 5、 6、 7、 8、 9、 10、 二、编程题 1、组队竞赛 2、删除公共字符
76 0
【笔试强训】Day_01