函数

几个库函数
strcpy
在这里插入图片描述
使用库函数时,注意一定要包含include头文件
//通过函数的方法找出两个数中较大的一个
//创建一个名为GetMax的数,找出其中较大的数
#include<stdio.h>
#include<windows.h>
int GetMax(int x, int y)
{
//进行判断,将较大的数返回
//需要注意这种写法,当return 后面的括号满足时,返回第一个数,当return后面的括号不满足时,返回第二个数
return(x > y) ? (x) : y;
}
int main()
{
//创建两个变量当做实参
int x=0;
int y = 0;
printf(“请输入两个你要交换的数”);
scanf_s("%d %d", &x, &y);
//通过调用函数找出两个数中的较大的一个
//调用的函数的名字起名为GetMax()
int max = GetMax(x, y);
printf(“这两个数中较大的数为:%d”, max);
system(“pasue”);
return 0;
}
//通过函数的方法来交换两个数的位置
//创建一个Exchange函数来进行变量的交换
#include<stdio.h>
#include<windows.h>
void Exchange(int x, int y)
{
int tmp = x;
x = y;
y = tmp;
}
int main()
{
int x = 0;
int y = 0;
printf(“请输入两个你要交换位置的数:”);
scanf_s("%d %d", &x, &y);
//通过调用Exchange函数来达到交换两个变量的目的
Exchange(x, y);
printf(“交换之后的两个数的值为:%d %d”,x,y);
getchar();
return 0;
}
但是在程序运行之后我们发现,实参a与b的值并未发生交换
所以,我们必须注意
函数的形参其实是实参的副本(分身)
函数的形参和实参分别处于不同的内存块,对形参进行的一系列操作,不会对实参产生影响
形参在函数中发生任何变化,是对实参不产生影响的
解决方法,通过指针直接将函数与实参本身相关联起来.
#include<stdio.h>
#include<windows.h>
//用指针来保存实参的地址
void Exchange(int *x, int *y)
{
//这种操作称之为解引用,即根据房间号(内存地址),来获取房间中的数据内容
//这样就可以达到对实参的直接控制
int tmp = *x;
*x = *y;
*y = tmp;
}
int main()
{
int x = 0;
int y = 0;
printf(“请输入两个你要交换位置的数:”);
scanf_s("%d %d", &x, &y);
//通过调用Exchange函数来达到交换两个变量的目的
//取x和y的地址,传入函数之中
Exchange(&x, &y);
printf(“交换之后的两个数的值为:%d %d”,x,y);
getchar();
return 0;
}
#include<stdio.h>
#include<windows.h>
int Division(int x, int y)
{
//当 y为0时就return 0
if (y == 0)
{
return 0;
}
int result = x / y;
return result;
}
int main()
{
int x = 10;
int y = 0;
//调用函数Division进行计算
int ret = Division(10, 2);
printf(“这两个数相除之后的结果为%d”, ret);
system(“pause”);
return 0;
}
注意在y为0的情况之下,这个除法是没有意义的,所以在函数之中我们将y为0的情况返回了0,但是这样就无法将计算结果为0和y为0这两种情况相区分了,所以我们需要对程序进行修改,修改结果如下
#include<stdio.h>
#include<windows.h>
int Division(int x, int y,int *success)
{
//当 y为0时就return 0
//但此处就无法判断是y为0的情况使得函数无意义而输出0,还是计算之后的值本身就为0
//所以我们这儿借助指针,通过函数中对指针的控制,达到判断的目的
if (y == 0)
{
return 0;
}
//如果没有执行if语句就会使得解引用后的值为1,无论是计算结果为0,还是其他情况
*success = 1;
int result = x / y;
return result;
}
int main()
{
int x = 10;
int y = 0;
//调用函数Division进行计算
//创建一个变量在函数中用指针控制
int success = 0;
int ret = Division(0, 2,&success);
printf(“这两个数相除之后的结果为%d,success=%d”, ret,success);
system(“pause”);
return 0;
}
在这里插入图片描述
在这里插入图片描述
这就是通过解引用的方式来进行一个判断.象success这样的参数,我们称这样的参数为输出型参数
函数的嵌套调用与链式访问
具体我们可以看打印一个菱形的部分
函数的声明
当我们把调用的函数放在main函数的后面时,会出现什么情况那
#include<stdio.h>
#include<windows.h>

int main()
{
int x = 10;
int y = 0;
//调用函数Division进行计算
//创建一个变量在函数中用指针控制
int succse = 0;
int ret = Division(10, 0,&succse);
printf(“这两个数相除之后的结果为%d,succse=%d”, ret,succse);
system(“pause”);
return 0;
}
int Division(int x, int y, int *succse)
{
//当 y为0时就return 0
//但此处就无法判断是y为0的情况使得函数无意义而输出0,还是计算之后的值本身就为0
//所以我们这儿借助指针,通过函数中对指针的控制,达到判断的目的
if (y == 0)
{
return 0;
}
//如果没有执行if语句就会使得解引用后的值为1,无论是计算结果为0,还是其他情况
*succse = 1;
int result = x / y;
return result;
}
运行结果如下
在这里插入图片描述
//因为c语言编译器的运行规律是自上向下的
//所以当调用的函数在主函数之后时,就会出现无法找到调用函数的情况
//所以我们需要在主函数之前进行函数的声明
//函数声明
int Division(int x, int y, int *succse);
int main()
{
int x = 10;
int y = 0;
//调用函数Division进行计算
//创建一个变量在函数中用指针控制
int succse = 0;
int ret = Division(10, 0,&succse);
printf(“这两个数相除之后的结果为%d,succse=%d”, ret,succse);
system(“pause”);
return 0;
}
int Division(int x, int y, int *succse)
{
//当 y为0时就return 0
//但此处就无法判断是y为0的情况使得函数无意义而输出0,还是计算之后的值本身就为0
//所以我们这儿借助指针,通过函数中对指针的控制,达到判断的目的
if (y == 0)
{
return 0;
}
//如果没有执行if语句就会使得解引用后的值为1,无论是计算结果为0,还是其他情况
*succse = 1;
int result = x / y;
return result;
}
我们也可以将函数的声明写在一个头文件中
![在这里插入图片描述](https://img-blog.youkuaiyun.com/20181018162640542?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JpbmdYeHg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70
所以当文件中代码量较多时,在这里插入图片描述
通过魔块化方式来拆分代码
所以当代码的量较多时,我们尽量使用这种写法可以简化代码量
注意 函数的声明可以声明很多次,但是函数的定义只能定义一次
//test.h
//注意c语言中的头文件只能被编译一次,即被#include一次
//我们可以通过预编译指令,来达到头文件只包含一次的情况
//通过预编译指令来达到头文件只包含一次的情况
#pragma once
int Division(int x, int y, int *succse);
链接错误找到了函数的声明,但是没有找到函数的定义

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值