每日一学8
函数的参数及传递方式书本习题
函数的参数
函数的参数有两类——形式参数(简称形参)和实际参数(简称实参)。
函数定义时的参数称为形参,形参在函数为被调用时是没有确定值的,只是形式上的参数。
函数调用时使用的参数称为实参。
题1:将两个数由小到大排序输出
解:
#include<stdio.h>
int order(int a,int b) //a,b形参
{
int t;
if(a>b) //如果a>b,就执行以下3条语句,交换a,b的值
{
t=a;
a=b;
b=t;
}
printf("从小到大的顺序为:%d %d\n",a,b); //输出交换后的a,b的值
return a,b;
}
int main()
{
int x,y;
printf("请输入两个整数:"); //从键盘输入两个整数
scanf("%d%d",&x,&y);
order(x,y); //x,y是实参
return 0;
}
函数参数的传递方式
C语言规定,实参对形参的数据传递是“值传递”,即单向传递,只能把实参的值传递给形参,而不能把形参的值再传回给实参。
在内存当中,实参与形参是不同单元,不管名字是否相同,因此函数中对形参值的任何改变都不会影响实参的值。
题2:使用函数交换两个变量的值
解:
#include<stdio.h>
void swap(int a,int b) //定义swap函数
{
int temp;
temp=a;
a=b;
b=temp; //交换a,b值的3条语句
printf("a=%d,b=%d\n",a,b); //输出交换后的结果
}
int main()
{
int x,y;
printf("请输入两个整数:\n");
scanf("%d%d",&x,&y); //输入两个整数
printf("调用函数之前:\n");
swap(x,y); //调用函数swap()
printf("调用函数之后:\n");
printf("x=%d,y=%d\n",x,y); //输出调用swap函数之后x,y的值
return 0;
}
函数的调用方式
函数调用的一般形式有以下两种
1.函数语句
当C语言中的函数只进行了某些操作而不返回结果时,使用这种形式,该形式作为一条独立的语句
如:
函数名(实参列表); //调用有参函数,实参列表中有多个参数,中间用逗号隔开
或
函数名(); //调用无参函数
2.函数表达式
当所调用的函数有返回值时,函数的调用可以作为表达式中的运算分量,参与一定的运算。
题3:编写一个函数,求任意两个整数的最小公倍数
解:
#include<stdio.h>
int sct(int m,int n) //定义函数sct求最小公倍数
{
int temp,a,b;
if(m<n) //如果m<n,交换m,n的值,使m中存放较大的值
{
temp=m;
m=n;
n=temp;
}
a=m;
b=n; //保留m,n原来的数值
while(b!=0) //使用辗转相除法求两个数的最大公约数
{
temp=a%b;
a=b;
b=temp;
}
return (m*n/a); //返回两个数的最小公倍数,即两数相乘的积除以最大公约数
}
int main()
{
int x,y,g;
printf("请输入两个整数:");
scanf("%d%d",&x,&y);
g=sct(x,y); //调用sct函数
printf("最小公倍数为:%d\n",g); //输出最小公倍数
return 0;
}
#include <stdio.h>
int sct(int m, int n) { // 定义函数sct求最小公倍数
int temp, a, b;
a = m;
b = n;
// 求最大公约数
while (n != 0) {
temp = m % n;
m = n;
n = temp;
}
// 返回最小公倍数
return (a * b) / m;
}
int main() {
int x, y;
printf("请输入两个整数:\n");
scanf("%d%d", &x, &y); // 输入两个整数
int lcm = sct(x, y); // 求最小公倍数
printf("最小公倍数为:%d\n", lcm);
return 0;
}
**题1与题2分析总结:**
- **值传递特点:**
- 在C语言中,函数参数是通过值传递的。这意味着在函数内部对参数的修改不会影响调用时传入的实际参数。
- **题1:排序函数**
- 在排序函数中,形参`a`和`b`只是接收了实参的值,交换的只是它们在函数内部的顺序,对调用时的实参没有影响。
- **题2:交换函数**
- 同样地,swap函数中交换的也是形参`a`和`b`,实际上的`x`和`y`并未交换。因此在函数外`x`和`y`的值保持不变。
- **题3:求最小公倍数的函数**
- 通过传递参数`m`和`n`来计算,只需记得如果后续需要在调用函数后操作它们的新值,则必须有函数返回之类的额外处理(如最小公倍数结果返回)。
这些例子展示了参数传递的基本方式和计算处理逻辑。如果有不清楚的地方,请随时提问!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-12-2 15:20
**题1与题2分析总结:**
- **值传递特点:**
- 在C语言中,函数参数是通过值传递的。这意味着在函 ...
今天有个师兄给我提了一个这样的问题,他说#include<stdio.h>和#include"stdio.h"这两个有什么区别?我上网搜了一下看的一脸懵逼{:5_100:}。fishc能给我详细的解释一下这个问题吗 6bingame 发表于 2024-12-02 15:26
今天有个师兄给我提了一个这样的问题,他说#include和 ...
在C语言中,`#include <stdio.h>`和`#include "stdio.h"`是用来包含头文件的预处理指令,不过它们在查找头文件的路径上有所不同:
1. **`#include <stdio.h>`:**
- 这种形式主要用于引用系统库提供的头文件。
- 编译器会在系统默认的路径中查找`stdio.h`,即搜索路径通常是由编译器的环境配置所决定的,包含系统和编译器提供的标准库路径。
- 一般用于包含标准库的头文件。
2. **`#include "stdio.h"`:**
- 这种形式一般用于引用用户自定义或项目特定的头文件。
- 编译器首先会在当前源文件所在的目录查找`stdio.h`,如果未找到,再在系统默认的标准库路径中查找。
- 这种方式允许更加灵活地引用项目中的头文件,适合包含非标准路径中的文件。
**总结:**
- 当只是想引用标准库的头文件时,通常推荐使用`#include <stdio.h>`.
- 当需要引用自己项目中的头文件时,建议使用`#include "filename.h"`。
在大多数开发环境和配置中,这两种方式导致的效果可能是相同的,尤其是在标准库的头文件被很稳妥地处理的情况下。但是,为了避免潜在的路径冲突或误解,以形成良好的代码习惯,推荐像上面那样使用。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-12-2 15:26
在C语言中,`#include `和`#include "stdio.h"`是用来包含头文件的预处理指令,不过它们在查找头文件的 ...
就是一般用于包含标准库的头文件就用#include <stdio.h>,要是自定义的头文件就用双引号是吧 6bingame 发表于 2024-12-02 15:29
就是一般用于包含标准库的头文件就用#include ,要是 ...
是的,正如你所总结的:
- **`#include `:** 用于包含标准库的头文件。编译器在系统默认目录中查找这些文件。
- **`#include "filename.h"`:** 用于包含自定义的头文件。编译器首先在当前目录查找,然后在系统默认目录中查找。
这个规则有助于区分系统库和本地项目文件,同时也使代码更加清晰和易于维护。希望这个解释能帮到你!如果还有疑问,欢迎继续提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-12-2 15:29
是的,正如你所总结的:
- **`#include `:** 用于包含标准库的头文件。编译器在系统默认目录中查找 ...
ok了解,蟹蟹啦{:5_110:} 6bingame 发表于 2024-12-02 15:31
ok了解,蟹蟹啦{:5_110:}
不客气!很高兴能帮助到你!如果还有其他问题,随时欢迎来问哦!祝你学习顺利!{:5_137:}
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 感谢分享~
页:
[1]