首页 > 代码库 > 六道题 : 1.设计一个函数,用来计算b的n次方 2.(n! = 1*2*3*4*...n) 3.(1! + 2! + 3! + 4! + ... + n!) 4.成绩 5. 数组中的元素逆序存放 6.九九乘法口诀

六道题 : 1.设计一个函数,用来计算b的n次方 2.(n! = 1*2*3*4*...n) 3.(1! + 2! + 3! + 4! + ... + n!) 4.成绩 5. 数组中的元素逆序存放 6.九九乘法口诀

/*

设计一个函数,用来计算bn次方

 

 递归的2个条件:

 1.函数自己调用自己

 2.必须有个明确的返回值

*/

#include <stdio.h>

int pow2(int b, int n);

 

int main()

{

    int c = pow2(3, 2);

    

    printf("%d\n", c);

    return 0;

}

 

/*

 pow2(b, 0) == 1

 pow2(b, 1) == b == pow2(b, 0) * b

 pow2(b, 2) == b*b == pow2(b, 1) * b

 pow2(b, 3) == b*b*b == pow2(b, 2) * b

 

 1> n0,结果肯定是1

 2> n>0pow2(b, n) == pow2(b, n-1) * b

 */

 

int pow2(int b, int n)

{

    if (n <= 0) return 1;

    return pow2(b, n-1) * b;

}

 

/*

int pow2(int b, int n)

{

    // 用来保存计算结果

    int result = 1;

    

    

    //result *= b;

    //result *= b;

    //result *= b;

    //result *= b;

    //....

    

    //n

 

    

    for (int i = 0; i<n; i++)

    {

        result *= b;

    }

    

    return result;

}*/

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/*第一题:
 提示用户输入一个正整数n,求出并输出其阶乘值n! = 1*2*3*4*...n
 要求:用递归的方式编写一个函数实现n的阶乘
*/
 
#include <stdio.h>
 
int jieCheng(int n);
 
int main()
{
    // 1.定义变量存储用户输入的整数
    int n = 0;
     
    // 2.判断n是否为正整数
    while (n <= 0)
    {
        // 2.1 提示输入
        printf("输入一个正整数:\n");
         
        // 2.2 让用户输入
        scanf("%d", &n);
    }
     
    // 3.计算阶乘
    int result = jieCheng(n);
     
    printf("%d! = %d\n", n, result);
    return 0;
}
 
int jieCheng(int n)
{
    // 如果n为1,那么阶乘值就是1
    if (n == 1) return 1;
     
    // jieCheng(n) = n! = 1*2*3*...*(n-1)*n
    // jieCheng(n-1) = (n-1)! = 1*2*3*...*(n-1)
    // jieCheng(n) = jieCheng(n-1) * n
    return jieCheng(n-1) * n;
}

  

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
/*第二题
 提示用户输入一个正整数n,求出并输出下列结果:1! + 2! + 3! + 4! + ... + n!
 要求:用至少两种方式实现(函数名自拟,函数个数不限)
 1> 非递归
 2> 递归
*/
#include <stdio.h>
int pieAdd(int n);
 
int main()
{
    // 1.定义变量存储用户输入的整数
    int n = 0;
     
    // 2.判断n是否为正整数
    while (n <= 0)
    {
        // 2.1 提示输入
        printf("输入一个正整数:\n");
         
        // 2.2 让用户输入
        scanf("%d", &n);
    }
     
    // 3.计算结果
    int result = pieAdd(n);
     
    printf("结果是%d\n", result);
     
    return 0;
}
 
// ------------------非递归的方式----------------
int pieAdd(int n)
{
    // 1.定义变量保存总和
    int sum = 0;
     
    // 2.需要累加n次,每次累加的都是一个阶乘值
    for (int i = 1; i<=n; i++)
    {
        // 3.计算阶乘i!
        // 3.1 定义变量保存阶乘的结果
        int multi = 1;
        for (int j = 1; j<=i; j++)
        {
            multi *= j;
        }
         
        // 4.累加每次的阶乘结果
        sum += multi;
    }
     
    // 5.返回和
    return sum;
}
 
/*
// ------------------递归的方式----------------
// 为了代码方便和性能,额外定义一个函数求阶乘
int jieCheng(int n)
{
    // 如果n为1,那么阶乘值就是1
    if (n == 1) return 1;
     
    // jieCheng(n) = n! = 1*2*3*...*(n-1)*n
    // jieCheng(n-1) = (n-1)! = 1*2*3*...*(n-1)
    // jieCheng(n) = jieCheng(n-1) * n
    return jieCheng(n-1) * n;
}
 
int pieAdd(int n)
{
    // 1.如果n是1,计算结果就是1
    if (n == 1) return 1;
     
    // pieAdd(n) = 1! + 2! + ... + (n-1)!+ n!
    // pieAdd(n-1) = 1! + 2! + ... + (n-1)!
    // pidAdd(n) = pieAdd(n-1) + n!
    return pieAdd(n - 1) + jieCheng(n);
}*/

  

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/* 第三题:
提示输入5个学生的成绩(保证分数在0~100之间),算出平均分、最高分、最低分,然后输出
*/
#include <stdio.h>
// 学生的个数
#define kCount 5
 
int main()
{
    // 1.定义一个数组保存5个学生的分数
    // 初始化一下,默认都是-1分,只要默认值不是0~100都行
    int scores[kCount] = {-1, -1, -1, -1, -1};
     
    // 2.定义变量保存总分、最高分(默认是0分)、最低分(默认是100分)
    int sum = 0, max = 0, min = 100;
     
    // 3.提示输入
    for (int i = 0; i<kCount; i++)
    {
        // 3.1 如果学生的成绩不在0~100内,就重新提示输入
        while (scores[i]<0 || scores[i]>100)
        {
            // 3.1.1 提示输入
            printf("请输入第%d个学生的成绩(0~100):\n", i + 1);
             
            // 3.1.2 接收输入
            scanf("%d", &scores[i]);
        }
         
        // 3.2 累加成绩
        sum += scores[i];
         
        // 3.3 判断最高分
        if (scores[i] > max)
        {
            max = scores[i];
        }
         
        // 3.4 判断最低分
        if (scores[i] < min)
        {
            min = scores[i];
        }
    }
     
    // 4.输出结果
    printf("平均分是%d,最高分是%d,最低分是%d\n", sum/kCount, max, min);
}

  

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/*第四题
设计一个函数:将一维整型数组中的元素逆序存放。比如本来是1,3,4,2,逆序存放就变成了:2,4,3,1
*/
#include <stdio.h>
void reverse(int array[], int len);
 
int main()
{
    int ages[4] = {1, 3, 4, 2};
     
    reverse(ages, 4);
     
    for (int i = 0; i<4; i++)
    {
        printf("%d\n", ages[i]);
    }
     
    return 0;
}
 
// 第一个参数是数组,第二个参数是数组长度
// 不需要返回值
// 因为改变了形参数组就相当于修改了外面的实参数组
void reverse(int array[], int len)
{
    // 思路:以数组中间为轴,交换左右对称元素的值
    // 比如array[0] array[1] array[2] array[3] array[4] array[5]
    // 交换array[0]和array[5]的值
    // 交换array[1]和array[4]的值
    // 交换array[2]和array[3]的值
     
    // 左边元素的下标(默认是最左边)
    int left = 0;
    // 右边元素的下标(默认是最右边)
    int right = len - 1;
     
    // 如果左边元素的下标 < 右边元素的下标
    while (left < right)
    {
        // 利用中间变量交换两个元素的值
        int temp = array[left];
        array[left] = array[right];
        array[right] = temp;
         
        // 交换一次后,左边元素下标增加,右边元素下标减小
         
        left++;
        right--;
    }
}

  

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/*第五题:
输出99乘法表
 1x1=1
 2x1=2  2x2=4
 3x1=3  3x2=6   3x3=9
 4x1=4  4x2=8   4x3=12  4x4=16
 5x1=5  5x2=10  5x3=15  5x4=20  5x5=25
 6x1=6  6x2=12  6x3=18  6x4=24  6x5=30  6x6=36
 7x1=7  7x2=14  7x3=21  7x4=28  7x5=35  7x6=42  7x7=49
 8x1=8  8x2=16  8x3=24  8x4=32  8x5=40  8x6=48  8x7=56  8x8=64
 9x1=9  9x2=18  9x3=27  9x4=36  9x5=45  9x6=54  9x7=63  9x8=72  9x9=81
*/
#include <stdio.h>
int main()
{
    // 一共有多少行
    for (int row = 1; row<=9; row++)
    {
        // 一共有多少列(其实列数==行数)
        for(int column = 1; column<=row; column++)
        {
            // \t是tab键,目的是保持每列之间有相同的距离
            printf("%dx%d=%d\t", row, column, row * column);
        }
         
        // 换行
        printf("\n");
    }
}