C语言学习日记(2)

**

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;
			

	
}

结果:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值