**
1.用递归求阶乘**
#includeint fac(int n) { int f; if (n < 0) printf("请输入正整数!"); else if (n == 0 || n == 1) f = 1; else f = fac(n - 1) * n; return(f); } int main() { int fac(int n); int n; int x; printf("请输入一个正整数:");//int类型的取值范围:-2147483648~2147483647 scanf_s("%d", &n); x = fac(n); printf("%d的阶乘为%dn",n,x); return 0; }
需要注意的是,int类型的取值范围,阶乘正整数最大为12,。
2.函数嵌套求最大值**
#include3.和尚搬盘子问题int max4(int a, int b, int c, int d) { int max2(int a, int b); int m; m = max2(a, b); //调用max2函数,将a,b中最大值赋给m m = max2(m, c);//将a,b,c m = max2(m, d);//将a,b,c,d return m; } int max2(int a,int b) { if (a > b) return a; else return b; } int main() { int max4(int a, int b, int c, int d); int a, b, c, d, max; printf("请输入四个整数"); scanf_s("%d%d%d%d", &a, &b, &c, &d); max = max4(a, b, c, d); printf("最大值为%d", max); return 0; } //11, 12行可改为: return(a >= b ? a : b); //5 - 7行可改为:m = max(max2(max2(a, b), c), d);
//汉诺(hanoi)塔问题 //把从小到大的一堆盘子从A座移动到C座,保持从小到大堆放,一次只能移动一个,可借助B座。 //小和尚:将n-1个盘子从一座上移动到另一座上 //大和尚:将1个盘子从一个座上移动到另一个座上 #includevoid hanoi(int n, char one, char two, char three)//将盘子从one座借助two座移动到three座 { void move(char x, char y); if (n == 1) move(one, three); else { hanoi(n - 1, one, three, two); move(one, three); hanoi(n - 1, two,one, three); } } void move(char x, char y) { printf("%c-->%cn", x, y); } int main() { void hanoi(int n, char one, char two, char three); int m; printf("输入放盘子的数量:"); scanf_s("%d", &m); printf("移动盘子的步骤n", m); hanoi(m, 'A', 'B', 'C'); return 0; }
结果:
4.求10个数最大值并显示位置
//输入10个数,判断大小,输出最大数所在位置 #includeint max(int a, int b) { return(a > b ? a : b); } int main() { int max(int a, int b); int a[10], m, n, i; printf("请输入10个数"); for (i = 0; i < 10; i++) { scanf_s("%d", &a[i]); } for (i = 1, m = a[0], n = 0; i < 10; i++) { if (max(m, a[i]) > m) { m = max(m, a[i]); n = i; } } printf("最大数为%d, 在第%d位n", m, n + 1); return 0; }
5.求10个人的平均成绩
#includefloat average(float array[10]) { int i; float aver, sum = array[0]; for (i = 1; i < 10; i++) { sum = sum + array[i]; } aver = sum / 10; return(aver); } int main() { float average(float array[10]); float score[10], aver; int i; printf("请输入10个人的成绩"); for (i = 0; i < 10; i++) { scanf_s("%f", &score[i]); } aver = average(score); printf("平均成绩为:%5.2fn", aver); return 0; }
6.用一个average函数求两个班的学生成绩
#includefloat average(float array[], int n) { int i; float aver, sum = array[0]; for (i = 0; i < n; i++)//注意这个位置,需要用未知数n来决定循环次数,不然用实数结果会出现错误 sum = sum + array[i]; aver = sum / n; return(aver); } int main() { float average(float array[], int n); float score1[4] = { 76,34 ,45,43 }; float score2[10] = {24,65,70,24,76,43,76,23,12,67}; printf("A班的平均成绩为%5.2fn", average(score1, 4)); printf("B班的平均成绩为%5.2fn", average(score2, 10)); return 0; }
结果:
7.选择排序
#includevoid sort(int array[], int n) { int i, j, k, t; for (i = 0; i < n - 1; i++){ k = i; for (j = i + 1; j < n; j++) if (array[j] < array[k]) k = j; t = array[k]; array[k] = array[i]; array[i] = t; } } int main() { void sort(int array[], int n); int a[10], i; printf("输入数组"); for (i = 0; i < 10; i++) scanf_s("%d", &a[i]); sort(a, 10); printf("排序结果: n"); for (i = 0; i < 10; i++) printf("%d ", a[i]); printf("n"); return 0; }
结果:



