第 1 节

C/C++公共基础练习题

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

本练习题可供大家练习考核。做完做懂这近30道题,C/C++基本知识就差不多了。

一、程序题

C++的HelloWorld!

image\.png

输入一个圆半径( r )当r>=0时,计算并输出圆的面积和周长,如果r<0输出input error字符串。(PI取3.14159)

image\.png

输入10个整形数,并按从小到大输出这10个数。

image\.png

如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。

例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数 编写程序打印出所有的水仙花数

image\.png

将Shandong University of Technology字符串实现逆序输出(用数组)

image\.png

定义一个返回值是float函数,输入圆的半径,计算圆的面积。并在主函数内输出该函数计算出的面积。(用宏定义 pi = 3.14159)

image\.png

定义函数fun的功能是:根据输入的三个边长(整型值),判断能否构成三角形;构成的是等边三角形,还是等腰三角形。若能构成等边三角形函数返回3,若能构成等腰三角形函数返回2,若能构成三角形函数返回1,若不能构成三角形函数返回0。

并调用该函数实现判断三角形的功能:例如,输入的值为" 3 4 5 ",则输出为" 1 ",若输入的值为" 3 5 9 ",则输出的值为" 0 "。

image\.png

输入n(奇数)个数,这n个数用scanf或者cin输入,要求输入的所有元素中, 其中只有一个数出现了奇数次,其他数都出现了偶数次,请找出这个数。(提示:位操作符)

image\.png

题目:使用C语言的头文件stdio.h中的scanf(如果编译器报错用scanf_s)和printf在.cpp文件中进行混合编程,需要输入一个浮点型数a,并打印该浮点型数并保留2位小数。

image1\.png

题目:创建一个命名空间ns1,在该命名空间中有一个函数swap,他的作用是交换两个数的值,返回值是void。请调用这个函数,交换两个数的值。

image2\.png

**题目:请使用联合体来完成输入一个字母,并打印他的ascii码。 **

image3\.png

题目:编写一个自己的库(.cpp和.h) :请创建一个文件out_test.cpp,请在该文件中定义一个短整型变量a,并赋值5,在该文件中继续定义一个函数print_short(short int x),该函数的功能是打印一个短整型变量。请在主函数中调用out_test.cpp中的print_short函数并打印变量a。

image4\.png

**题目: 请创建一个结构体student_stru,其有2个成员变量name和math_score,一个存姓名,一个存数学分数,请在主函数中用****stu student1;**创建一个结构体变量student1(需要用typedef),然后name赋值李华,math_score赋值70。然后创建一个函数change_score,返回值为void,该函数的作用是把math_score改成80,把姓名改成李丽。然后在主函数先打印没调用该函数之前的结果,然后再调用该函数,并在主函数中打印调用函数后的name和math_score。

image5\.png

在许多数据协议中,数据串都是以字节(uint8_t)为单位发送的。但是1个字节的数据只能存放8位二进制数据,有的数据需要16位甚至更多二进制才能存放,所以我们在传送一个数据的时候,通常要连续发送若干个字节,这若干个字节构成一个数据。 现在,我们需要处理我们接收到的数据串,一共有2个字节,该协议规定,第一个字节为数据的高8位(DH),第二个字节为数据的低8位(DL)。请创建一个函数 ' int16_t data_calc(uint8_t DH,uint8_t DL) ' ,该函数的作用是将这两个字节的数据串,进行数据处理,处理成一个有符号短整型(int16_t)的数据。DH我们规定是0x50,DL是0x2E。[tips: uint8_t就是unsigned char的别名,int16_t就是short int的别名,都是由typedef关键字起别名而来,C++头文件中自带该别名,可以直接使用]

image\.png

C++函数重载:定义3个的函数print,一个print用来打印整形,第二个用来打印双精度浮点数,第三个用来打印字符串。

image\.png

函数模板:定义1个的函数模板print,使该函数模板完成上一题的要求。

image\.png

内存管理:请用不定长数组,完成以下要求:输入已知数量的若干的整数,并打印出其相加后的结果。

image\.png

题目(选做,因为要用到C++模板):创建一个结构体stu,内有成员name和math_score,一个存放名字,一个存放数学成绩。请使用智能指针创建一个结构体指针变量pstudent,并使用指针给该结构体变量中的成员变量赋值,并打印出来。

image6\.png

class(类):请创建一个class circle(圆类),该类通过构造函数传入双精度浮点数类型的半径参数,有两个公开(public)的方法,分别是print_circumference()和print_area(),第一个方法用来打印圆的周长,第二个方法用来打印圆的面积,该类还有析构函数用来打印字符串“析构函数运行完毕!”。请使用该类计算一个圆的周长和面积,并打印。(圆周率取3.1415926)

image\.png

智能指针:请用shared_ptr创建一个第五题的类对象指针,并使用指针来完成第五题的要求。

image\.png

混合编译

写一个C语言的工程,但是要求调用C++的库。

主函数写在main.c文件中,然后新建两个C++的库,分别是main_inherit.cpp、main_inherit.h和test_lib.cpp,test_lib.h。

test_lib库用来定义一个命名空间叫ns_demo,该命名空间里有一个swap函数,返回值是void,用来交换两个整形的值。

main_inherit库里定义一个main_mix_com函数,该函数会被main函数调用,该函数的作用是输入X,Y的值,并调用test_lib库里的swap函数进行交换X,Y的值,最后打印X,Y的值。

main.c中用来调用main_mix_com函数。

image\.png

友元函数

请创建一个class circle(圆类),该类通过构造函数传入双精度浮点数类型的半径参数,有一个公开(public)的方法,是print_circumference(),有三个私有(private)的变量,分别是radius(半径),cirumference(周长)和area(面积),通过该类里的方法用来计算圆的周长并把结果存放到circumference中,然后并打印circumference的值,该类还有析构函数用来打印字符串“析构函数运行完毕!”。然后新建一个外部函数print_area(),使该函数是该类的友元函数,通过该函数可以计算圆的面积,并把结果存放到上面类中的area变量中,并打印area变量。

请创建一个类对象,然后打印周长和面积。

image\.png

友元类

请创建一个class circle(圆类),该类通过构造函数传入双精度浮点数类型的半径参数,有两个公开(public)的方法,分别是calc_circumference()和calc_area(); 有三个私有(private)的变量,分别是radius(半径),cirumference(周长)和area(面积)。第一个方法用来计算圆的周长并把结果存放到circumference中,不打印circumference的值,第二个方法用来可以计算圆的面积,并把结果存放到上面类中的area变量中,不打印area变量。该类还有析构函数用来打印字符串“析构函数运行完毕!”。

请再创建第二个类class big_circle(大圆类),该类是circle的友元类,里面有1个方法,用来打印circle类中circumference和area变量。

image\.png

运算符重载

请创建一个class circle(圆类),该类通过构造函数传入双精度浮点数类型的半径参数,有两个公开(public)的方法,分别是calc_circumference()和calc_area(); 有三个***公开(public)***的变量,分别是radius(半径),cirumference(周长)和area(面积)。第一个方法用来计算圆的周长并把结果存放到circumference中,并打印circumference的值,第二个方法用来可以计算圆的面积,并把结果存放到上面类中的area变量中,并打印area变量。该类还有析构函数用来打印字符串“析构函数运行完毕!”。

请先创建3个circle对象,cir1,cir2,cir3,并重载加法运算符,使两个类中的面积和周长都分别想加,并储存在第三个类中对应的变量中。然后在主函数中输出第三个类中的周长和面积(也用输出cout重载)。

image\.png

继承1

创建一个父类(基类) class shape,该类中有两个公开方法分别是setwidth(int w)和setheight(int h),还有两个受保护的变量,width和height。这两个方法的作用是将这两个函数的入口参数w赋值给width,h赋值给height。

再创建一个衍生类class Rectangle,该类继承父类class Shape,该类中有一个公开的方法print_area是用来计算宽乘高,并打印面积的。

请创建一个class Rectangle对象,并输入宽和高,并打印面积。

image\.png

继承2

创建一个父类(基类) class shape,该类的构造函数有参,负责给width和height传值。其中有1个公开方法是getarea(),还有三个受保护的变量,width,height,area。方法getarea是用来输出area的值

再创建一个衍生类class Rectangle,该类继承父类class Shape,也拥有构造函数,负责给父类构造函数传参,该类中有一个公开的方法getarea是用来计算矩形,宽乘高,但是不打印面积的。

请再创建一个衍生类class Triangle,该类继承父类class Shape,有构造函数,负责直接给width和height变量传参,该类中有一个公开的方法getarea,用来计算三角形的面积,不打印。

请在主函数中在堆区创建两个对象,一个是rectangle类对象,一个是triangle类对象,分别输入宽和高,并分别输出面积。

image\.png

多态

(禁止使用智能指针)创建一个基类class Person,该类有构造函数,功能为打印“基类构造函数运行调用”,有一个公开的整形指针变量per_,该变量指向堆区整形地址。还有析构函数,功能为打印“基类析构函数调用”并打印per_的值,并最后释放per_。

然后创建一个派生类class Student,该类有构造函数,功能为打印“派生类构造函数运行调用”,有一个公开的整形指针变量stu_,该变量指向堆区整形地址。还有析构函数,功能为打印“派生类析构函数调用”并打印stu_的值,并最后释放stu_。

请用Person *ptr = new Student在堆区创建一个对象。然后并释放堆区内存,不要有任何内存泄露。

image\.png

类模板

创建一个MyArray类模板,该模板的功能是在堆区创建一个不定长数组,通过构造函数规定数组的长度,通过析构函数释放数组的内存。有两个私有变量,arr和index,分别表示数组0号元素的地址和数组元素的序号。还应有两个方法,一个方法用来给对应序号的数组元素赋值,另一个方法用来取出对应序号数组元素的值。

请在主函数中用智能指针创建一个该类模板,来创建一个int16_t的不定长数组,并给序号为0的数组元素赋值 并 打印序号为0的数组元素的值。

image\.png

综合

①请定义一个叫stru_lib的库(stru_lib.cpp和stru_lib.h)。

②stru_lib库内有一个命名空间叫ns_demo。

③ns_demo命名空间中使用typedef声明定义了一个结构体类型别名叫stu。stu该结构体成员变量有name(学生姓名),age年龄,gpa(平均学分绩点)。

④ns_demo命名空间中还有两个函数分别是scan_student_info和print_student_info。

scan_student_info函数的返回值为void,用于给stu类型的结构体变量的所有成员变量赋值。

print_student_info函数用于打印stu类型的结构体变量的所有成员变量。

⑤请在main.cpp的主函数中在堆区创建n个stu类型的结构体变量(n由键盘输入),然后给这n个stu类型的变量都赋值,并打印。

image\.png

现代C++之基础

要求:

  • 定义基类 BaseCalculator,成员函数:

void do_calculation(int x, int y);
  • 这个函数里面会调用一个储存在该类里的私有的回调函数(std::function<int(int,int)>),并打印回调结果。

  • 该类里的所有成员函数不准直接出现两个数据相加的功能。

  • 该基类里可能不止一个成员函数,这算是一个提示。

  • 里面所有的打印请使用现代C++里的std::print或者std::println。

  • 如果编译器支持标准库模块化的话,可以选择使用modules。(标准库模块化在C++26将全面支持,而在C++20,C++23中仅MSVC编译器支持比较好)

  • 定义派生类 AddCalculator,继承 BaseCalculator,在这个类里实现能让两个数据相加的功能。

  • main() 里,创建 AddCalculator 对象,调用基类的 do_calculation(10, 20),打印结果。

这题至少两种写法,尽量可以写出2种写法。

image\.png