【C语言】用函数实现模块化程序设计

这篇具有很好参考价值的文章主要介绍了【C语言】用函数实现模块化程序设计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:如果把所有的程序代码都写在一个主函数(main函数)中,就会使主函数变得庞杂、头绪不清,使阅读和维护程序变得困难。此外,有时程序中要多次实现某一功能,如果重新编写实现此功能就会使得程序冗长、不精炼。

💖 博主CSDN主页:卫卫卫的个人主页 💞
👉 专栏分类:C程序设计谭浩强版本 👈
💯代码仓库:卫卫周大胖的学习日记💫
💪关注博主和博主一起学习!一起努力!
【C语言】用函数实现模块化程序设计,C程序设计谭浩强版本,c语言,开发语言



怎样定义函数

为什么要定义函数

C语言要求,在程序中所用到的所有函数,必须“先定义,后使用”。例如max函数去求两个数的较大者,必须事先先按规范对它进行定义,指定它的名字、函数返回值类型、函数实现的功能以及参数的个数与类型,将这些信息通知编译系统。这样,在程序执行max时,编译系统就会按照定义时所指定的功能执行。如果事先不定义,编译系统怎么能知道max是什么、要实现什么功能。

定义函数应包括以下几个内容

  1. 指定函数的名字,以便以后按名调用
  2. 指定函数的类型,即函数的返回值类型
  3. 指定函数的参数的名字和类型,以便在调用函数时向它们传递数据。对无参函数不需要这项。
  4. 指定函数应当完成什么操作,也就是函数是做什么的,即函数的功能。这是最重要的,是在函数体中解决的。

定义函数的方法

  1. 定义无参函数

注:函数名后面括号内的void表示"",即函数没有参数。
函数体内包括声明部分语句部分


  1. 定义有参函数
    类型名 函数名()
    {
    函数体
    }
    函数体包括声明部分和语句部分


    类型名 函数名(void)
    {
    函数体
    }

以下定义的max函数是有参函数:

int max(int x,int y)
{
	int z;    //声明部分
	z = x > y? x:y;
	return z;

类型名 函数名(形式参数列表)
{
函数体
}

函数体包含声明部分和语句部分


  1. 定义空函数
void dummy()  //类型名:void,函数名:dummy
{}

调用函数

函数调用的形式

函数调用一般形式为:
函数名(实参列表)

  1. 函数调用语句
    把函数调用单数作为一个语句。例如:
void print()
{
	printf("***********\n");
}
int main()
{
	print();//此时函数不带回任何值
	return 0;
}

  1. 函数表达式
    函数调用出现在另一个表达式中,例如c=max(a,b); max(a,b) 是一次函数调用,它是赋值表达式的一部分。这时函数带回一个确定的值以参加运算。例如:
c = max(a,b);//将a和b中的较大值赋给c值

3.函数参数
函数调用作为另一个函数调用时的实参。例如:

m = max(a,max(b,c));//将b,c中的较大值与a比较,在将他们的最大值赋值给m

函数调用时的数据传递

1.形式参数和实际参数
在调用有参函数时,主调函数和被调用函数之间有数据传递关系。从前面已知:在定义函数时函数名后面括号中的变量名称为"形式参数"(简称形参)或"虚拟参数"。在主函数中调用一个函数时,函数名后面括号中的参数称为"实际参数"(简称实参)。实际参数可以是常量、变量或表达式。
2. 实际参数和形参间的数据传递
在调用函数的过程中,系统会把实参的值传递给被调用函数的形参。或者说,形参从实参得到了一个值。该值在函数调用期间有效,可以参加该函数的运算。


例题:输入两个整数,要求输出其中值较大者。要求用函数来找到大数。

int Max(int x, int y)
{
	return x > y ? x : y;
}
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int ret = Max(a, b);
	printf("max = %d\n", ret);
	return 0;
}

运行结果:
【C语言】用函数实现模块化程序设计,C程序设计谭浩强版本,c语言,开发语言


函数调用的过程

  1. 在定义函数中指定的形参,在未出现函数调用时,它们并不占内存中的存储单元。在发生函数调用时,函数max的形参才被临时分配内存单元。可以通俗的理解成,形参是对实参的一份临时拷贝。
  2. 将实参的值传递给对应的形参。
  3. 在执行max函数期间,由于形参已经有值,就可以利用形参进行有关的运算。
  4. 通过return语句将函数值带回主调函数。且应当注意返回值的类型与函数类型一致。如果函数不需要返回值,则不需要return语句。这时函数的类型定义为void类型。
  5. 调用结束,形参单元被释放。注意:实参单元仍保留并维持原值,没有改变。

函数的返回值

通常,希望通过函数调用使用主调函数能得到一个确定的值,这就是函数值(函数的返回值)。

  1. 函数的返回值是通过函数中的return语句获得的。
  2. 函数值的类型。既然函数有返回值,这个值当然应属于某一个确定的类型,应当在定义函数时指定函数值的类型。
  3. 在定义函数时指定的函数类型一般应该和return语句中的表达式一致。

习题练习

例题1:写两个函数分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数并输出结果。

int common_divisor(int x, int y)
{
	int max = x > y ? x : y;
	int min = x < y ? x : y;
	while (min)
	{
		if (x % min  == 0 && y % min == 0)//将它们两个数的较小的数往下除
		{
			return min;
		}
		min--;
	}
}
int common_multiple(int x, int y)
{
	int n = 1;
	while (n * x % y != 0)//最小公倍数一定是他们两个的倍数
	{
		n++;
	}
	return n * x;
}
int main()
{
	int num1 = 0;
	int num2 = 0;
	scanf_s("%d %d", &num1, &num2);
	int divisor = common_divisor(num1, num2);//最大公约数
	int multiple = common_multiple(num1, num2);//最小公倍数
	printf("divisor = %d multiple = %d\n", divisor,multiple);
	return 0;
}

运行结果:
【C语言】用函数实现模块化程序设计,C程序设计谭浩强版本,c语言,开发语言


例题2:写一个判素数的函数,在主函数输入一个整数,输出是否为素数的信息。

void prime_number(int x)//素数只有1和它本身能被整除
{
	int flag = 0;
	int i = 0;
	if (x == 1)//如果该数是1就直接返回素数
	{
		printf("是素数\n");
	}
	else if (x == 0)//是0就返回不是
	{
		printf("不是素数\n");
	}
	else
	{
		for (i = 2; i < x; i++)//从2开始到它本身看是否有能被整除的数
		{
			if (x % i == 0)
			{
				flag = 1;
				break;
			}
		}
		if (flag)
		{
			printf("不是素数\n");
		}
		else
		{
			printf("是素数\n");
		}
	}
}
int main()
{
	int n = 0;
	scanf_s("%d", &n);
	prime_number(n);
	return 0;
}

运行结果:
【C语言】用函数实现模块化程序设计,C程序设计谭浩强版本,c语言,开发语言


例题3:写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。

void reverse_arr(char* str, int len)//逆序字符串
{
	char* left = str;//保存左边的地址
	char* right = str + len - 1;//保存右边的地址
	while (left < right)//两两进行交换
	{
		char tmp = *left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}
int main()
{
	char arr[100] = { 0 };
	gets(arr);
	printf("initial:%s\n", arr);
	int len = strlen(arr);
	reverse_arr(arr,len);
	int i = 0;
	printf("reverse:%s\n", arr);
	return 0;
}

运行结果:
【C语言】用函数实现模块化程序设计,C程序设计谭浩强版本,c语言,开发语言


结语:今天的内容就到这里吧,谢谢各位的观看,如果有讲的不好的地方也请各位多多指出,作者每一条评论都会读的,谢谢各位。文章来源地址https://www.toymoban.com/news/detail-719184.html

🫵🫵🫵 祝各位接下来好运连连 💞

到了这里,关于【C语言】用函数实现模块化程序设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【前端JS交互篇】函数、参数、返回值、闭包函数、递归函数、内存、模块化编程

    函数可以封装一些功能,可以供外部去重复的调用。所以,一般我们把函数叫做具有重复功能的代码块。 JavaScript 基础到高级 Canvas游戏开发 原生JavaScipt案例合集 JavaScript +DOM基础 假设饭店就是一个函数,饭店的功能就是做各种各样的菜,但是具体做什么菜,需要用户来点,用

    2024年02月15日
    浏览(26)
  • 07-微信小程序-注册页面-模块化

    07-微信小程序-注册页面 对于小程序中的每个页面,都需要在页面对应的 js 文件中进行注册,指定页面的初始数据、生命周期回调、事件处理函数等。 简单的页面可以使用 Page() 进行构造。 Page(Object) 函数用来注册一个页面。接受一个 Object 类型参数,其指定页面的初始数据、

    2024年02月12日
    浏览(11)
  • 【Unity】程序集Assembly模块化开发

    笔者按:使用Unity版本为2021.3LTS,与其他版本或有异同。请仅做参考 一、简述。 本文是笔者在学习使用Unity引擎的过程中,产学研的一个笔记。由笔者根据官方文档Unity User Manual 2021.3 (LTS)/脚本/Unity 架构/脚本编译/程序集定义相关部分结合自身经验所做,有不足之处,还请指正

    2024年02月15日
    浏览(21)
  • 【C语言】扫雷小游戏详细分析(模块化编程)——内附源码

    . 🚀write in front🚀 🔎大家好,我是gugugu。希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 🆔本文由 gugugu 原创 CSDN首发🐒 如需转载还请通知⚠ 📝个人主页:gugugu—CSDN博客 🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​ 📣系列专栏:gugugu的系列专栏——

    2024年02月14日
    浏览(18)
  • 【Go 基础篇】Go语言包详解:模块化开发与代码复用

    在Go语言中, 包(Package) 是一种用于组织代码的机制,用于将相关的函数、类型和变量等组织在一起,以便于模块化开发和代码复用。包的使用能够使程序结构更加清晰、可维护性更高,同时也是Go语言强调的一项重要特性。本篇博客将深入探讨Go语言中包的相关知识,包括

    2024年02月11日
    浏览(10)
  • Python面向对象编程,实现模块化开发

    面向对象编程(Object Oriented Programming,OOP)是一种编程范式,它将真实世界中的事物抽象成程序中的对象,并通过对象之间的相互作用来完成程序的逻辑。 封装 (Encapsulation) 封装是指把数据和行为结合成一个相对独立的整体,防止程序中其他部分直接访问或修改这个整体,而

    2024年02月05日
    浏览(57)
  • Rust之构建命令行程序(三):重构改进模块化和错误处理

    Windows 10 Rust 1.74.1   VS Code 1.85.1 这次创建了新的工程minigrep. 为了改进我们的程序,我们将修复与程序结构及其处理潜在错误的方式有关的四个问题。首先,我们的 main 函数现在执行两项任务:解析参数和读取文件。随着我们程序的增长, main 处理的独立任务的数量也会增加。随

    2024年01月18日
    浏览(17)
  • 探究 Node.js 中的模块化实现方式

    简介 : 在现代的软件开发中,模块化是一种重要的编程范式。Node.js作为一种基于 JavaScript 运行时的环境,也支持模块化开发。本文将深入探讨 Node.js 中的模块化实现方式,包括 CommonJS 规范和 ES 模块规范,并介绍它们的特点、使用方法以及在实际开发中的应用。 正文: Co

    2024年02月08日
    浏览(33)
  • 微信小程序:tabbar、事件绑定、数据绑定、模块化、模板语法、尺寸单位

    目录 1. tabbar 1.1 什么是tabbar  1.2 配置tabbar  2. 事件绑定 2.1 准备表单 2.2 事件绑定 2.3 冒泡事件及非冒泡事件  3. 数据绑定 3.1 官方文档 4. 关于模块化 5. 模板语法 6. 尺寸单位 下图中标记出来的部分即为tabbar:    官方说明文档:   说明: pagePath中指定的页面,必须在app.jso

    2024年02月04日
    浏览(25)
  • 【微信小程序开发】学习小程序的模块化开发(自定义组件和分包加载)

    模块化开发是一种将复杂的应用程序分解为一系列独立的模块,每个模块负责完成特定的功能的开发方式。模块化开发可以提高代码的可维护性和可复用性,使开发过程更加高效和灵活。 模块化开发在软件开发领域中被广泛应用,其重要性和优势不言而喻。 首先,模块化开

    2024年02月05日
    浏览(19)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包