C++从基础语法到递归、重载与宏定义

 更新时间:2026年04月10日 09:07:59   作者:艾莉丝努力练剑  
本文介绍了12个关于C++编程的练习题,涵盖素数判定、奇偶数统计、带默认参数的阶乘、递归求解、函数重载与内联函数等内容,每个练习旨在帮助理解函数的应用、递归、默认参数、函数重载、宏定义等概念,感兴趣的朋友跟随小编一起看看吧

题目及题解

1 判定素数

编写程序,用一个函数判定输入的某个数是否为素数。

#include <iostream>
#include <cmath>
// 判定素数函数
bool isPrime(int n) {
    if (n < 2) return false;
    for (int i = 2; i <= sqrt(n); ++i) {
        if (n % i == 0) return false;
    }
    return true;
}
int main()
{
    int num;
    std::cout << "输入一个整数: ";
    std::cin >> num;
    if (isPrime(num)) std::cout << num << " 是素数" << std::endl;
    else std::cout << num << " 不是素数" << std::endl;
    return 0;
}

2 统计奇偶数

从键盘依次输入一列整数(输入0结束),编写函数,统计输入的整数序列中的奇数个数和偶数个数,在主函数中调用该函数并求输入的整数序列中的奇数个数和偶数个数。

#include <iostream>
// 统计函数:通过引用返回结果
void countNumber(int &odd, int &even) {
    int val;
    while (std::cin >> val && val != 0) {
        if (val % 2 == 0) even++;
        else odd++;
    }
}
int main() 
{
    int oddCount = 0, evenCount = 0;
    std::cout << "请输入一列整数(0结束): " << std::endl;
    countNumber(oddCount, evenCount);
    std::cout << "奇数: " << oddCount << " 个,偶数: " << evenCount << " 个" << std::endl;
    return 0;
}

3 带默认参数的阶乘

定义一个带默认参数值的函数求 n ! n! n!,在主函数中调用两次该函数,一次给出实参,另一次不给实参,体会默认值的意义。

#include <iostream>
long long factorial(int n = 5) {
    long long res = 1;
    for (int i = 1; i <= n; ++i) res *= i;
    return res;
}
int main() 
{
    // 给出实参
    std::cout << "3! = " << factorial(3) << std::endl;
    // 不给实参,使用默认值 5
    std::cout << "默认(5!) = " << factorial() << std::endl;
    return 0;
}

4 求a ! + b ! + c ! a! + b! + c!a!+b!+c!

a ! + b ! + c ! a!+b!+c! a!+b!+c! 的值,要求用两个函数实现:函数 fac 求 n ! n! n!,函数 add 求三者之和。 a a a b b b c c c 的值由主函数输入,最终得到的值在主函数中输出。

#include <iostream>
long long fac(int n) {
    long long res = 1;
    for (int i = 1; i <= n; ++i) res *= i;
    return res;
}
long long add(long long x, long long y, long long z) {
    return x + y + z;
}
int main() 
{
    int a, b, c;
    std::cout << "输入 a, b, c: ";
    std::cin >> a >> b >> c;
    std::cout << "结果: " << add(fac(a), fac(b), fac(c)) << std::endl;
    return 0;
}

5 判定闰年

编写一个程序,判定用户输入的年份是否为闰年。闰年的判定用名为 isLeapYear 的 bool 型函数实现。

#include <iostream>
bool isLeapYear(int year) {
    return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
int main() 
{
    int y;
    std::cout << "输入年份: ";
    std::cin >> y;
    if (isLeapYear(y)) std::cout << "是闰年" << std::endl;
    else std::cout << "不是闰年" << std::endl;
    return 0;
}

6 递归求斐波那契数列

#include <iostream>
int fib(int n) {
    if (n == 1 || n == 2) return 1;
    return fib(n - 1) + fib(n - 2);
}
int main() 
{
    int n;
    std::cout << "输入 n: ";
    std::cin >> n;
    std::cout << "第 " << n << " 个数是: " << fib(n) << std::endl;
    return 0;
}

7 验证哥德巴赫猜想

写一个函数验证哥德巴赫猜想:一个不小于6的偶数可以分解为两个素数之和。要求:在主函数中输入一个偶数 n n n,判定 n n n 与6的大小。如果 n n n 不小于6,则调用函数 gotbaha,在 gotbaha 函数中再调用判定素数的函数 prime,并在主函数中输出“6=3+3”形式的结果。如果 n n n 小于6,则程序结束。

#include <iostream>
#include <cmath>
bool prime(int n) {
    if (n < 2) return false;
    for (int i = 2; i <= sqrt(n); i++) {
        if (n % i == 0) return false;
    }
    return true;
}
void gotbaha(int n) {
    for (int i = 2; i <= n / 2; i++) {
        if (prime(i) && prime(n - i)) {
            std::cout << n << "=" << i << "+" << (n - i) << std::endl;
            return;
        }
    }
}
int main() 
{
    int n;
    std::cout << "输入一个偶数: ";
    std::cin >> n;
    if (n >= 6 && n % 2 == 0) gotbaha(n);
    else std::cout << "程序结束" << std::endl;
    return 0;
}

8 函数重载 add

使用 add 作为重载函数名,分别定义求3个整数之和的函数和求两个浮点数之和的函数,并编程实现。

#include <iostream>
int add(int a, int b, int c) { return a + b + c; }
float add(float a, float b) { return a + b; }
int main() 
{
    std::cout << "3个整数和: " << add(1, 2, 3) << std::endl;
    std::cout << "2个浮点数和: " << add(1.5f, 2.5f) << std::endl;
    return 0;
}

9 内联函数求和

在主函数中输入两个数 m , n m, n m,n,用内联函数求和,并输出结果。

#include <iostream>
inline int getSum(int m, int n) { return m + n; }
int main() 
{
    int m, n;
    std::cin >> m >> n;
    std::cout << "和为: " << getSum(m, n) << std::endl;
    return 0;
}

10 头文件实现最大值

编写一个程序,将求两个实数中较大值的函数放在一个头文件中,在源程序文件中包含该头文件,并实现输入3个实数,求出最大值。

my_max.h

#ifndef MY_MAX_H
#define MY_MAX_H
inline double getMax(double a, double b) { return (a > b) ? a : b; }
#endif

main.cpp

#include <iostream>
#include "my_max.h"
int main() 
{
    double a, b, c;
    std::cin >> a >> b >> c;
    double res = getMax(getMax(a, b), c);
    std::cout << "最大值: " << res << std::endl;
    return 0;
}

11 带参数的宏求乘积

编写一个程序,输入两个整数,求它们的乘积。用带参数的宏实现。

#include <iostream>
#define MUL(a, b) ((a) * (b))
int main() 
{
    int x, y;
    std::cin >> x >> y;
    std::cout << "乘积: " << MUL(x, y) << std::endl;
    return 0;
}

12 递归逆序输出

编写一个递归函数,将整数的每个位上的数字按相反的顺序输出。例如,输入5678,输出8765。

#include <iostream>
void reverse(int n) {
    if (n == 0) return;
    std::cout << n % 10;
    reverse(n / 10);
}
int main() 
{
    int n;
    std::cout << "输入整数: ";
    std::cin >> n;
    if (n == 0) std::cout << "0";
    else reverse(n);
    std::cout << std::endl;
    return 0;
}

结尾

到此这篇关于C++从基础语法到递归、重载与宏定义的文章就介绍到这了,更多相关C++递归、重载与宏定义内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++多进程环境下的日志管理策略和最佳实践

    C++多进程环境下的日志管理策略和最佳实践

    在复杂的C++应用系统中,特别是涉及多进程架构时,日志管理是一个至关重要但常被忽视的环节,一个设计良好的日志系统不仅能帮助开发者快速定位问题,还能为系统运行状态提供可视化的监控,本文将详细探讨C++多进程环境下的日志管理策略和最佳实践,需要的朋友可以参考下
    2025-05-05
  • Clion2020.2.x最新激活码破解版附安装教程(Mac Linux Windows)

    Clion2020.2.x最新激活码破解版附安装教程(Mac Linux Windows)

    Clion2020增加了很多新特性,修复了大量bug,大大提高了开发效率。这篇文章主要介绍了Clion2020.2.x最新激活码破解版附安装教程(Mac Linux Windows),需要的朋友可以参考下
    2020-11-11
  • C++之预处理功能详解

    C++之预处理功能详解

    预处理器是 C++ 编译器提供的一个工具,允许程序员在编译之前对源代码文件做出修改,本文将给大家通过代码示例详细介绍C++的预处理功能,需要的朋友可以参考下
    2023-05-05
  • C语言实现魔方阵算法(幻方阵 奇魔方 单偶魔方实现)

    C语言实现魔方阵算法(幻方阵 奇魔方 单偶魔方实现)

    魔方阵是指由1,2,3……n2填充的,每一行、每一列、对角线之和均相等的方阵,阶数n = 3,4,5…。魔方阵也称为幻方阵,看下面的实现方法吧
    2013-11-11
  • 详解C++编程中类的声明和对象成员的引用

    详解C++编程中类的声明和对象成员的引用

    这篇文章主要介绍了详解C++编程中类的声明和对象成员的引用,是C++入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • MFC控件之CListCtrl的应用实例教程

    MFC控件之CListCtrl的应用实例教程

    这篇文章主要介绍了MFC控件中CListCtrl的应用方法,包括了针对表格的一些操作,是MFC中比较重要的一个控件类,需要的朋友可以参考下
    2014-08-08
  • C++ 中国象棋的实现流程详解

    C++ 中国象棋的实现流程详解

    中国象棋是起源于中国的一种棋,属于二人对抗性游戏的一种,在中国有着悠久的历史。由于用具简单,趣味性强,成为流行极为广泛的棋艺活动
    2021-11-11
  • 输入一个字符串,取出其中的整数(实现代码)

    输入一个字符串,取出其中的整数(实现代码)

    输入一个字符串,内含所有数字和非数字字符。将其中连续的数字作为一个整数,依次存放到一个数组中,统计共有多少个整数,并输出这些数
    2013-09-09
  • C++实现N个骰子的点数算法

    C++实现N个骰子的点数算法

    这篇文章主要介绍了C++实现N个骰子的点数算法,用两种方法实现了该功能,是非常实用的技巧,需要的朋友可以参考下
    2014-09-09
  • 详解C语言中write函数

    详解C语言中write函数

    write函数,是一个C语言函数,功能为将数据写入已打开的文件内,这篇文章主要介绍了C语言中write函数,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08

最新评论