C/C++ 学习笔记(二)——函数

in 分享编程技术 with 0 comment
//
// Created by imbytecat on 2020/5/18.
// 编写一个函数,将华氏温度(f)转化成摄氏温度(c),转换公式为:c=(5/9)(f-32)。
//

#include <iostream>

using namespace std;

int main() {
    double degreeF;
    double degreeC;
    printf("输入华氏温度:");
    cin >> degreeF;
    degreeC = 5 * (degreeF - 32) / 9;
    cout << "摄氏温度:" << degreeC << endl;
    return 0;
}
//
// Created by imbytecat on 2020/5/18.
// 斐波纳契数列(Fibonacci Sequence)又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……
// 在数学上,斐波纳契数列以如下递归的方法定义:F0=0,F1=1,Fn=Fn-1+Fn-2(n>=2,n∈N*)。
// 请用递归函数计算斐波那契数列第 n 项的值。
//

#include <cstdio>

int Fibonacci(int n) {
    if (n == 1 || n == 2) {
        return 1;
    } else {
        return Fibonacci(n - 1) + Fibonacci(n - 2);
    }
}


int main() {
    int n;
    printf("please input n: ");
    scanf("%d", &n);
    printf("Result: %d\n", Fibonacci(n));
    return 0;
}
//
// Created by imbytecat on 2020/5/18.
// 利用重载函数编写一个程序,用来求两个整数或三个整数中的最大数。
// 如果输入两个整数,程序就输出这两个整数中的最大数;如果输入三个整数,程序就输出这三个整数中的最大数。
//

#include <cstdio>

int getMax(int a, int b) {
    return a > b ? a : b;
}

int getMax(int a, int b, int c) {
    return getMax(a, b) > c ? getMax(a, b) : c;
}

int main() {
    int a, b, c;
    printf("你想比较几个数字(2 或 3):");
    scanf("%d", &a);
    if (a == 2) {
        printf("请输入第一个数字:");
        scanf("%d", &a);
        printf("请输入第二个数字:");
        scanf("%d", &b);
        printf("两个数字中最大的数字是:%d\n", getMax(a, b));
    } else if (a == 3) {
        printf("请输入第一个数字:");
        scanf("%d", &a);
        printf("请输入第二个数字:");
        scanf("%d", &b);
        printf("请输入第三个数字:");
        scanf("%d", &c);
        printf("三个数字中最大的数字是:%d\n", getMax(a, b, c));
    }
    return 0;
}
//
// Created by imbytecat on 2020/5/18.
// 用冒泡法对 5 个数进行由小到大排序,排序功能请在自定义函数中实现。
//

#include <cstdio>

#define N 5

// n 为数组 a 的元素个数
void getBubbleSort(int a[], int n) {
    // 最多进行 N-1 轮比较
    for (int i = 0; i < n - 1; i++) {
        bool isSorted = true;
        // 每一轮比较前 n-1-i 个,即已排序好的最后 i 个不用比较
        for (int j = 0; j < n - 1 - i; j++) {
            if (a[j] > a[j + 1]) {
                isSorted = false;
                int temp = a[j];
                a[j] = a[j + 1];
                a[j + 1] = temp;
            }
        }
        // 如果没有发生交换,说明数组已经排序好了
        if (isSorted) break;
    }
}


int main() {
    int num[N] = {11, 22, 33, 44, 55};
    getBubbleSort(num, N);
    for (int i : num) {
        printf("%d ", i);
    }
    return 0;
}
//
// Created by imbytecat on 2020/5/18.
// 定义一个函数,实现用筛选法输出 1-100 之间的所有素数。
//

#include <cstdio>
#include <cmath>


int main() {
    int i, j, n, a[101];
    // 初始化操作,给数组元素赋初值
    for (i = 1; i <= 100; i++)
        a[i] = i;
    // a[1] 的值为 1,1 不为素数(定义判断),先将其排除
    a[1] = 0;
    // 判断 2-100 内的元素是否为素数
    for (i = 2; i < sqrt(100); i++) {
        // 用 i 循环除以之后的元素,如果整除则该数不为素数,否则该数为素数
        for (j = i + 1; j <= 100; j++) {
            if (a[i] != 0 && a[j] != 0) {
                // 用 i 除以 i 之后的所有元素(j=i+1),这些操作仅仅需要对半操作,不需要进行若干次循环比较
                if (a[j] % a[i] == 0) {
                    // 为素数将该数组的元素值设为 0
                    a[j] = 0;
                }
            }
        }
    }
    // 从 2 开始是因为数组中第一个元素 arr[0] 没有值,第二个元素为 0 所以直接从 3 开始(数组索引从 0 开始)
    for (i = 2, n = 0; i <= 100; i++) {
        if (a[i] != 0) {
            printf("%d ", a[i]);
            n++;
        }
    }
    return 0;
}
Responses