第 1.3 节

C/C++公共基础一卷考核题

作者
董佳辉的头像董佳辉
协作者
房梓豪的头像房梓豪
发布于 2025/02/07更新于 2026/08/20

考核完毕后,请将所写的所有文件压成一个压缩包,压缩包名字的格式为 专业班级+姓名(例如:机电2104李三),发到邮箱tungchiahui@gmail.com。

一、选择题(每题3分,共33分)

题目答案写在记事本中,以.txt的形式提交。

1.全局变量储存在以下哪个内存区内?( )

A.静态存储区 B.栈区 C.堆区 D.代码区

2.指针类型的全局变量如果没有进行初始化,那么程序会讲该变量自动初始化为?()

A.0 B.随机数 C.'0' D.NULL

3.在C/C++中,0b开头的数表示的是指值的16进制()

A.对 B.错

4.在C/C++中,0x开头的数表示的是指值的2进制()

A.对 B.错

5.如果定义了一个数组arr[4],那么arr代表的意思是()

A.单纯只是数组的名字 B.数组所有元素的值

C.数组0号元素的值 D.数组0号元素的地址(指针)

6.结构体struct变量所占的内存大小为( )

A.4字节 B.所占内存最大的成员变量的大小

C.根据不同的字长,拥有不同的大小 D.所有成员变量所占内存大小之和

7.联合体union变量所占的内存大小为( )

A.4字节 B.所占内存最大的成员变量的大小

C.根据不同的字长,拥有不同的大小 D.所有成员变量所占内存大小之和

8.一般,头文件的扩展名是( )

A.c B.cpp C.h** ** D.sln

9.一般,C/C++的头文件的作用是( )

A.声明函数与变量 B.进行业务代码的编写

C.进行预处理代码的编写 D.多此一举,没有啥实质作用

10.以下说法正确的是(多选)( )

A. C++兼容C语言,且可以在C++工程中使用C语言** **

B.C语言不兼容C++,不可以在C语言工程中使用C++

C.C语言兼容C++,可以在C语言工程中使用C++

D.C语言不兼容C++,但可以在C语言工程中使用C++

11.分析下面代码中g_spi1_handler变量的类型( )

SPI_HandleTypeDef g_spi1_handler; /* SPI1句柄 */
/**
 * @brief       SPI初始化代码
 *   @note      主机模式,8位数据,禁止硬件片选
 * @param       无
 * @retval      无
 */
void spi1_init(void)
{
    SPI1_SPI_CLK_ENABLE(); /* SPI1时钟使能 */

    g_spi1_handler.Instance = SPI1_SPI;                                /* SPI1 */
    g_spi1_handler.Init.Mode = SPI_MODE_MASTER;                        /* 设置SPI工作模式,设置为主模式 */
    g_spi1_handler.Init.Direction = SPI_DIRECTION_2LINES;              /* 设置SPI单向或者双向的数据模式:SPI设置为双线模式 */
    g_spi1_handler.Init.DataSize = SPI_DATASIZE_8BIT;                  /* 设置SPI的数据大小:SPI发送接收8位帧结构 */
    g_spi1_handler.Init.CLKPolarity = SPI_POLARITY_HIGH;               /* 串行同步时钟的空闲状态为高电平 */
    g_spi1_handler.Init.CLKPhase = SPI_PHASE_2EDGE;                    /* 串行同步时钟的第二个跳变沿(上升或下降)数据被采样 */
    g_spi1_handler.Init.NSS = SPI_NSS_SOFT;                            /* NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制 */
    g_spi1_handler.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256; /* 定义波特率预分频的值:波特率预分频值为256 */
    g_spi1_handler.Init.FirstBit = SPI_FIRSTBIT_MSB;                   /* 指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始 */
    g_spi1_handler.Init.TIMode = SPI_TIMODE_DISABLE;                   /* 关闭TI模式 */
    g_spi1_handler.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;   /* 关闭硬件CRC校验 */
    g_spi1_handler.Init.CRCPolynomial = 7;                             /* CRC值计算的多项式 */
    HAL_SPI_Init(&g_spi1_handler);                                     /* 初始化 */

    __HAL_SPI_ENABLE(&g_spi1_handler); /* 使能SPI1 */

    spi1_read_write_byte(0XFF); /* 启动传输, 实际上就是产生8个时钟脉冲, 达到清空DR的作用, 非必需 */
}

A.常量 B.结构体 C.指针变量 D.浮点型

image\.png

二、程序题(每题10分,第15题17分,共67分)

提交源文件.cpp,源文件以题号命名。

第15题提交压缩包,压缩包内要有main.cpp和库的文件,压缩包以题号命名。

11.编写一个函数,使用 while 循环计算从 1 到给定正整数 n 的所有整数的和。在主函数中,接受用户输入的一个正数 n,然后调用函数计算和,并输出结果。

image\.png

12.请使用联合体(共同体)来完成输入一个字母,并打印他的ascii码。 (特殊要求:该联合体变量必须定义为局部变量)

image3\.png

13.创建一个名为“Student”的结构体,其中包含三个成员变量:name(字符串类型)、age(整型)和score(浮点型)。定义一个函数,该函数返回值为void,函数的作用是给Student类型的结构体中的所有成员变量进行赋值。请创建一个Student结构体,并使用函数给该结构体进行赋值,最后打印所有成员变量。(特殊要求:使用typedef对结构体类型进行重命名)

image\.png

image\.png

14.冒泡排序:编写一个函数,作用是使用冒泡排序算法对给定的整数数组进行升序排序。在主函数中,创建一个含有5个元素的整数数组并初始化,然后调用该函数对数组进行排序,并在主函数中输出排序后的结果。

image\.png

15.编写自己的库并调用

主函数写在main.cpp文件中,然后新建1个C++的库,库名叫my_lib。

my_lib库用来定义一个命名空间叫four_oper,该命名空间里有一个my_multi函数,该函数返回值为int,入口参数是两个int类型的变量,作用是把两个入口参数进行相乘并return。该命名空间中还有两个整形变量a和b(必须要定义,初始化无所谓)。

请在主函数里给four_oper命名空间里的a和b赋值(随便赋值),并调用my_multi函数将a和b两值相乘的结果算出来,然后打印出来。

image\.png

image\.png

16.编写一个名为 calculate 的函数,该函数接受两个单精度浮点数为参数,并返回它们相乘的结果。然后,重载该函数,使其能够接受三个整形参数,其中第三个参数为默认值为0的整数。当使用两个参数调用该函数时,函数应该返回这两个整数的和;当使用三个参数调用该函数时,函数应该返回前两个整数的和加上第三个整数。在主函数中,请定义5个变量,(整形x,y,z,浮点型p和q,随便赋值一个数),分别使用 calculate 函数计算并打印出①p和q相乘后的值,②x和y相加后的值,③x,y和z相加后的值。

image\.png

image\.png