栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【C语言第七章】用函数实现模块化程序设计(上部分)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【C语言第七章】用函数实现模块化程序设计(上部分)

C语言学习日记(3)
#include
int main() {
void print_star(); //声明:写函数声明时,可以简单复制已定义的函数的首行,再加一个分号,就构成函数的声明
void print_message();
print_star();//调用
print_message();
print_star();
return 0;
}
void print_star() { //无参函数
printf(“*******************************n”);

}
void print_message() {
printf(“Hi! World!n”); //void空类型无返回值,不写return
}

C程序的执行是从main 函数开始的,在main函数中调用其它函数,调用结束后返回main函数,结束运行。
函数间可以相互调用,但是不能调用main函数,main函数是被操作系统调用的。

从用户使用角度看,函数有两种:
1.库函数(系统提供,直接使用);
2.用户自己定义的函数。

从函数的形式看,有两种:
1.无参函数 (主调函数不向被调用函数传递数据)
2.有参函数(主调函数通过参数向被调用函数传递数据)

#include
int max(int x, int y) { //形参
int z;
z = x > y ? x : y;
return(z);
}
int main() {
int max(int x, int y);
int a, b, c;
printf(“请输入两个整数:”);
scanf_s(“%d%d”, &a, &b);
c = max(a, b); //实参
printf(“最大值为%dn”, c);
return 0;
}
实参与形参的类型应相同或赋值兼容

函数调用时的数据传递
1.形式参数:定义函数时函数后面括号中的变量名称。
2.实际参数:主函数调用函数时,函数名后面括号中的参数。
在调用函数时,系统会把实参的值传递给被调用的形参,在调用期间有效。

函数调用的过程
形参,在未出现函数调用时并不分配内存单元,被调用时,才临时分配内存单元。形参的值发生改变,不影响主调函数的实参的值。
实参和形参在内存中占用不同的存储单元,实参无法得到形参的值。

函数的返回值
通过函数中的return语句获得,如果需要从被调用函数带回一个函数值供主调函数使用,被调用函数中必须包含return语句。
函数类型决定返回值类型。不带回值的函数应定义为空(void)类型。

函数的嵌套调用
输入4个整数,找出其中最大的数

#include
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);

函数的递归调用
学生的年龄依次减小,递归求第一个学生的年龄。

#include
int age(int n) {
	int c;
	if (n == 1) c = 10;
	else c=age(n - 1) + 2;
	return c;
}
int main() {
	int age(int n);
	printf("第五个人的年龄为:%d", age(5));
	return 0;
}

递归方法求n的阶乘

#include
int fac(int n) {
	int f=0;
	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;
}
数组作为函数参数

数组元素作为函数实参
例题:输入10个数,输出最大值并输出是数组第几位数

//输入10个数,判断大小,输出最大数所在位置
#include
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;
}
m存放最大值,n存放这个数的位置

一维数组名作函数参数
用数组元素作为实参时,向形参变量传递的是数组元素的值,用数组名作函数实参时,向形参(数组名或指针变量)传递的是数组首元素的地址。
例题:一维数组score内放10个学生成绩,求平均成绩

#include
float average(float array[10]) { //array是形参数组名
	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;  //score是实参数组名
	int i;
	printf("请输入10个人的成绩");
	for (i = 0; i < 10; i++) {
		scanf_s("%f", &score[i]);
	}
	aver = average(score); //数组名作函数实参参数
	printf("平均成绩为:%5.2fn", aver);
	return 0;
}

例题:求两个班级学生的平均成绩

#include
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.2fn", average(score1, 4));
	printf("B班的平均成绩为%5.2fn", average(score2, 10));
	return 0;
}

用数组名作函数实参时,不是把数组元素的值传递给形参,而是把实参数组的首元素地址传递给形参数组,这样**两个数组就共占一段内存单元==形参数组中各元素的值发生变化会使实参数组的值发生变化。

例题:选择排序(重点掌握)

#include
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
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;
			

	
}

多维数组名作函数参数

//3X4矩阵求最大值
#include
int max_value(int array[][4])
{
	int i, j, max;
	max =array [0][0];
	for (i = 0; i < 3; i++) 
	for (j = 0; j < 4; j++)
			if (array[i][j] > max) max = array[i][j];//和当前max进行比较,大于就把最大值赋给max
		return max;
	
}
int main() {
	int max_value(int array[][4]);
	int a[3][4] = { {1,3,7,11},{2,5,8,13},{4,7,7,10} };
	printf("最大的值为%dn", max_value(a));
	return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/968578.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号