**
1.用递归求阶乘
**
#include<stdio.h>
int 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的阶乘为%d\n",n,x);
return 0;
}
需要注意的是,int类型的取值范围,阶乘正整数最大为12,。
2.函数嵌套求最大值
**
#include<stdio.h>
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);
3.和尚搬盘子问题
//汉诺(hanoi)塔问题
//把从小到大的一堆盘子从A座移动到C座,保持从小到大堆放,一次只能移动一个,可借助B座。
//小和尚:将n-1个盘子从一座上移动到另一座上
//大和尚:将1个盘子从一个座上移动到另一个座上
#include<stdio.h>
void 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-->%c\n", 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个数,判断大小,输出最大数所在位置
#include<stdio.h>
int 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个人的平均成绩
#include<stdio.h>
float 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.2f\n", aver);
return 0;
}
6.用一个average函数求两个班的学生成绩
#include<stdio.h>
float 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.2f\n", average(score1, 4));
printf("B班的平均成绩为%5.2f\n", average(score2, 10));
return 0;
}
结果:
7.选择排序
#include<stdio.h>
void 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;
}
结果: