C语言函数的调用

函数调用(Function Call),就是使用已经定义好的函数。

函数调用的一般形式为:

functionName(param1, param2, param3 ...);

functionName 是函数名称,param1, param2, param3 …是实参列表。实参可以是常数、变量、表达式等,多个实参用逗号,分隔。

C语言中,函数调用的方式有多种,例如:

//函数作为表达式中的一项出现在表达式中
z = max(x, y);
m = n + max(x, y);//函数作为一个单独的语句
printf("%d", a);
scanf("%d", &b);//函数作为调用另一个函数时的实参
printf( "%d", max(x, y) );
total( max(x, y), min(m, n) );

函数的嵌套调用

函数不能嵌套定义,但可以嵌套调用,也就是在一个函数的定义或调用过程中允许出现对另外一个函数的调用。

示例:计算sum = 1! + 2! + 3! + … + (n-1)! + n!

分析:可以编写两个函数,一个用来计算阶乘,一个用来计算累加的和。

实现

#include <stdio.h>//求阶乘
long factorial(int n){int i;long result=1;for(i=1; i<=n; i++){result *= i;}return result;
}// 求累加的和
long sum(long n){int i;long result = 0;for(i=1; i<=n; i++){//在定义过程中出现嵌套调用result += factorial(i);}return result;
}int main(){printf("1!+2!+...+9!+10! = %ld\n", sum(10));  //在调用过程中出现嵌套调用return 0;
}

运行结果:

1!+2!+...+9!+10! = 4037913

sum() 的定义中出现了对 factorial() 的调用,printf() 的调用过程中出现了对 sum() 的调用,而 printf() 又被 main() 调用,它们整体调用关系为:

main() --> printf() --> sum() --> factorial()

如果一个函数 A() 在定义或调用过程中出现了对另外一个函数 B() 的调用,那么我们就称 A() 为主调函数或主函数,称 B() 为被调函数。

当主调函数遇到被调函数时,主调函数会暂停,CPU 转而执行被调函数的代码;被调函数执行完毕后再返回主调函数,主调函数根据刚才的状态继续往下执行。

一个C语言程序的执行过程可以认为是多个函数之间的相互调用过程,它们形成了一个或简单或复杂的调用链条。这个链条的起点是 main(),终点也是 main()。当 main() 调用完了所有的函数,它会返回一个值(例如return 0;)来结束自己的生命,从而结束整个程序。

函数是一个可以重复使用的代码块,CPU 会一条一条地挨着执行其中的代码,当遇到函数调用时,CPU 首先要记录下当前代码块中下一条代码的地址(假设地址为 0X1000),然后跳转到另外一个代码块,执行完毕后再回来继续执行 0X1000 处的代码。整个过程相当于 CPU 开了一个小差,暂时放下手中的工作去做点别的事情,做完了再继续刚才的工作。

从上面的分析可以推断出,在所有函数之外进行加减乘除运算、使用 if…else 语句、调用一个函数等都是没有意义的,这些代码位于整个函数调用链条之外,永远都不会被执行到。这样使用是错误的。

示例

#include <stdio.h>int a = 10, b = 20, c;
//错误:不能出现加减乘除运算
c = a + b;//错误:不能出现对其他函数的调用
printf("www.baidu.com");int main(){return 0;
}

扫一扫获取更多资讯哟!!!
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/565054.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习之线性回归(matlab)

目录 一、基本概念 二、概念的数学形式表达 三、确定w和b 1.读取或输入数据 2.归一化、标准化 2.1 均值 2.2 归一化 2.3 标准化 3.求解w和b 1.直接解方程 2.最小二乘法&#xff08;least square method&#xff09;求解&#xff1a; 4. 评估回归模型 四、regress线…

C语言函数声明以及函数原型

C语言代码由上到下依次执行&#xff0c;原则上函数定义要出现在函数调用之前&#xff0c;否则就会报错。但在实际开发中&#xff0c;经常会在函数定义之前使用它们&#xff0c;这个时候就需要提前声明。 函数声明&#xff08;Declaration&#xff09;&#xff0c;就是告诉编译…

python(20)之读写文件

目录 读写文件 1.简单介绍 2.从文件中读取单行数据 3.从文件中读取多行 4.把 string&#xff08;字符串&#xff09; 的内容写入文件 5.写入其他类型的对象 本节知识总结 mode 参数 file 对象 读写文件 1.简单介绍 最常用的参数有两个: open(filename, mode) f op…

C语言全局变量和局部变量深入

局部变量 定义在函数内部的变量称为局部变量&#xff08;Local Variable&#xff09;&#xff0c;它的作用域仅限于函数内部&#xff0c; 离开该函数后就是无效的&#xff0c;再使用就会报错。 示例 int f1(int a){int b,c; //a,b,c仅在函数f1()内有效return abc; } int ma…

python实例之 67,68

目录 67.题目&#xff1a;输入数组&#xff0c;最大的与第一个元素交换&#xff0c;最小的与最后一个元素交换&#xff0c;输出数组。 68.题目&#xff1a;有 n 个整数&#xff0c;使其前面各数顺序向后移 m 个位置&#xff0c;最后 m 个数变成最前面的 m 个数 今天这个不知道…

C语言块级变量

代码块&#xff0c;就是由{ }包围起来的代码。代码块在C语言中随处可见&#xff0c;例如函数体、选择结构、循环结构等。不包含代码块的C语言程序根本不能运行&#xff0c;即使最简单的C语言程序也要包含代码块。 C语言允许在代码块内部定义变量&#xff0c;这样的变量具有块级…

python实例 69,70

69.题目&#xff1a;有n个人围成一圈&#xff0c;顺序排号。从第一个人开始报数&#xff08;从1到3报数&#xff09;&#xff0c;凡报到3的人退出圈子&#xff0c;问最后留下的是原来第几号的那位。 先看一下第一种实现方式 nmax 50 n int(input(请输入总人数:)) num [] f…

C语言递归调用

一个函数在它的函数体内调用它自身称为递归调用&#xff0c;这种函数称为递归函数。执行递归函数将反复调用其自身&#xff0c;每调用一次就进入新的一层&#xff0c;当最内层的函数执行完毕后&#xff0c;再一层一层地由里到外退出。 递归函数不是C语言的专利&#xff0c;Java…

python实例 71,72

目录 71.编写input()和output()函数输入&#xff0c;输出5个学生的数据记录。 72.题目&#xff1a;创建一个列表。 71.编写input()和output()函数输入&#xff0c;输出5个学生的数据记录。 #71 N 3 #stu # num : string # name : string # score[4]: list student [] for i…

Dev-C++ 常用快捷键大全

最近开始用Dev-C在Window下编程&#xff0c;感觉Dec-C是一款挺不错的C编译器。我总结了一些使用技巧。 Dev-C 的一些常用快捷键 恢复 CtrlZ 重做 CtrlY 剪切 CtrlX 拷贝 CtrlC 粘贴 CtrlV 搜索替换内容 CtrlF 选择全部 CtrlA 编译 F9 运行 F10 编译运行 F11 设置注释 Ctrl/…

python实例 73,74

目录 73.题目&#xff1a;反向输出一个链表。 74.题目&#xff1a;列表排序及连接。 73.题目&#xff1a;反向输出一个链表。 #73 ptr [] for i in range(5):num int(input(请输入一个数字:))ptr.append(num) print (输入原顺序列表,ptr) ptr.reverse() print (输入反顺序…

C语言简单计算器

用C语言实现简单的计算器功能。 简单计算器&#xff0c;实现简单的加减乘除功能&#xff0c;选择对应的运算符输出运算符对应的编号&#xff0c;然后输入我们要计算的两个数&#xff0c;程序会给出计算结果。 效果演示 简单计算器代码 /* 简单计算器 name:zsh */ #include…

python实例 75,76

目录 75.判断情人节 76. 题目&#xff1a;编写一个函数&#xff0c;输入n为偶数时&#xff0c;调用函数求1/21/4...1/n,当输入n为奇数时&#xff0c;调用函数1/11/3...1/n 75.判断情人节 #75 import timeif __name____main__:datetime.strftime(%m-%d,time.localtime())if d…

python实例 77,78

目录 77.题目&#xff1a;循环输出列表 78.找到年龄最大的人&#xff0c;并输出。 77.题目&#xff1a;循环输出列表 #77 s ["man","woman","girl","boy","sister"] for i in s:print(i) 返回&#xff1a; 或者是 s …

python实例 79,80

目录 79.字符串排序 80.猴子分桃 79.字符串排序 #79 list1[] str1input(请输入第一个字符串&#xff1a;) str2input(请输入第二个字符串&#xff1a;) str3input(请输入第三个字符串&#xff1a;) list1.extend([str1,str2,str3]) list1.sort() print (排序后的字符串为&am…

C语言带参数的宏定义

C语言允许宏带有参数。在宏定义中的参数称为“形式参数”&#xff0c;在宏调用中的参数称为“实际参数”&#xff0c;这点和函数有些类似。 对带参数的宏&#xff0c;在展开过程中不仅要进行字符串替换&#xff0c;还要用实参去替换形参。 带参宏定义的一般形式为&#xff1a…

python实例 81,82

目录 81.题目&#xff1a;809*??800*??9*?? 其中??代表的两位数, 809*??为四位数&#xff0c;8*??的结果为两位数&#xff0c;9*??的结果为3位数。求??代表的两位数&#xff0c;及809*??后的结果。 82.题目&#xff1a;八进制转换为十进制 81.题目&#xf…

C语言带参宏定义和函数的区别

带参数的宏和函数区别&#xff1a; 宏展开仅仅是字符串的替换&#xff0c;不会对表达式进行计算&#xff1b;宏在编译之前就被处理掉了&#xff0c;它没有机会参与编译&#xff0c;也不会占用内存。而函数是一段可以重复使用的代码&#xff0c;会被编译&#xff0c;会给它分配内…

python实例 83,84

目录 83.题目&#xff1a;求0—7所能组成的奇数个数。 84.题目&#xff1a;连接字符串 83.题目&#xff1a;求0—7所能组成的奇数个数。 程序分析&#xff1a; 组成1位数是4个。 组成2位数是7*4个。 组成3位数是7*8*4个。 组成4位数是7*8*8*4个。 ...... #83 sum 0 …

C语言条件编译详解

我们要开发一个C语言程序&#xff0c;让它输出红色的文字&#xff0c;并且要求跨平台&#xff0c;在 Windows 和 Linux 下都能运行&#xff0c;怎么办呢&#xff1f; 这个程序的难点在于&#xff0c;不同平台下控制文字颜色的代码不一样&#xff0c;我们必须要能够识别出不同的…