/*
设计一个函数,用来计算b的n次方
递归的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> n为0,结果肯定是1
2> n>0,pow2(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 5int 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"); }} |
原文地址:http://www.cnblogs.com/sunyao/p/3754901.html