C++ 核心编程练习:从基础语法到递归、重载与宏定义

🎬 个人主页艾莉丝努力练剑
专栏传送门 :《C语言》《数据结构与算法》《C/C++干货分享&学习过程记录
Linux操作系统编程详解》《笔试/面试常见算法:从基础到进阶》《Python干货分享

⭐️为天地立心,为生民立命,为往圣继绝学,为万世开太平


🎬 艾莉丝的简介:


文章目录

  • 题目及题解
    • [1 判定素数](#1 判定素数)
    • [2 统计奇偶数](#2 统计奇偶数)
    • [3 带默认参数的阶乘](#3 带默认参数的阶乘)
    • [4 求 a ! + b ! + c ! a! + b! + c! a!+b!+c!](#4 求 a ! + b ! + c ! a! + b! + c! a!+b!+c!)
    • [5 判定闰年](#5 判定闰年)
  • [6 递归求斐波那契数列](#6 递归求斐波那契数列)
  • [7 验证哥德巴赫猜想](#7 验证哥德巴赫猜想)
  • [8 函数重载 add](#8 函数重载 add)
    • [9 内联函数求和](#9 内联函数求和)
    • [10 头文件实现最大值](#10 头文件实现最大值)
    • [11 带参数的宏求乘积](#11 带参数的宏求乘积)
    • [12 递归逆序输出](#12 递归逆序输出)
  • 结尾

题目及题解

1 判定素数

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

cpp 复制代码
#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结束),编写函数,统计输入的整数序列中的奇数个数和偶数个数,在主函数中调用该函数并求输入的整数序列中的奇数个数和偶数个数。

cpp 复制代码
#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!,在主函数中调用两次该函数,一次给出实参,另一次不给实参,体会默认值的意义。

cpp 复制代码
#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 的值由主函数输入,最终得到的值在主函数中输出。

cpp 复制代码
#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 型函数实现。

cpp 复制代码
#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 递归求斐波那契数列

用递归函数求斐波那契数列中的第 n ( n = 1 , 2 , 3 , ...   ) n (n=1,2,3,\dots) n(n=1,2,3,...) 个数。斐波那契数列的特点是:第1、2个数为1,从第3个数开始,每个数是其前两个数之和。即 F 1 = 1 ( n = 1 ) F_1=1 \quad (n=1) F1=1(n=1) F 2 = 1 ( n = 2 ) F_2=1 \quad (n=2) F2=1(n=2) F n = F n − 1 + F n − 2 ( n ≥ 3 ) F_n=F_{n-1}+F_{n-2} \quad (n \ge 3) Fn=Fn−1+Fn−2(n≥3)

cpp 复制代码
#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,则程序结束。

cpp 复制代码
#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个整数之和的函数和求两个浮点数之和的函数,并编程实现。

cpp 复制代码
#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,用内联函数求和,并输出结果。

cpp 复制代码
#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

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

main.cpp

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 带参数的宏求乘积

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

cpp 复制代码
#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。

cpp 复制代码
#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;
}

结尾

uu们,本文的内容到这里就全部结束了,艾莉丝在这里再次感谢您的阅读!

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ### 艾莉丝努力练剑 C/C++ & Linux 底层探索者 | 一个正在努力练剑的技术博主 *** ** * ** *** 👀 【关注】 跟随我一起深耕技术领域,见证每一次成长。 ❤️ 【点赞】 让优质内容被更多人看见,让知识传递更有力量。 ⭐ 【收藏】 把核心知识点存好,在需要时随时查、随时用。 💬 【评论】 分享你的经验或疑问,评论区一起交流避坑! 不要忘记给博主"一键四连"哦! "今日练剑达成!" "技术之路难免有困惑,但同行的人会让前进更有方向。" |

结语:希望对学习C++相关内容的uu有所帮助,不要忘记给博主"一键四连"哦!

往期回顾

深度解析条件编译:#ifdef与#ifndef的本质区别与应用实践

🗡博主在这里放了一只小狗,大家看完了摸摸小狗放松一下吧!🗡 ૮₍ ˶ ˊ ᴥ ˋ˶₎ა

相关推荐
ambition202422 小时前
斐波那契取模问题的深入分析:为什么提前取模是关键的
c语言·数据结构·c++·算法·图论
鱼鳞_2 小时前
Java学习笔记_Day24(HashMAap)
java·笔记·学习
VOOHU 沃虎2 小时前
AI服务器多相电源设计:组合电感如何提升CPU/GPU供电效率
服务器·网络·信息与通信
ZhiqianXia2 小时前
PyTorch 笔记学习(15) : aot_autograd.py 解析
pytorch·笔记·学习
牢姐与蒯2 小时前
模板的进阶
c++
小樱花的樱花2 小时前
1 项目概述
开发语言·c++·qt·ui
Trouvaille ~2 小时前
【MySQL篇】从零开始:安装与基础概念
linux·数据库·mysql·ubuntu·c·教程·基础入门
Curtain_Gin2 小时前
windows vim 配置
linux·编辑器·vim
Dontla2 小时前
(龙虾)OpenClaw(原 Clawdbot / Moltbot)常见部署方式介绍(Linux部署、Windows桌面部署)
linux·运维·服务器