函数+经典例题(1)

本文详细介绍了C语言中的函数,包括基础知识、库函数如strcpy和memset的使用,自定义函数的创建,以及如何解决实际问题,如找出最大值、交换数字、打印素数和闰年等。此外,还探讨了函数参数、调用方式、嵌套调用和链式访问的概念,并通过例题加深理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数(1)

小白必看

基础知识+例题

函数

:子程序,输入参数有返回值,相对独立性
eg.
#include<stdio.h>
int Add(int x,int y)
{
int z=0;
z= x+y;
return z;
}
int main()
{
int a =10;
int b = 20;
int sum = Add(a,b);
printf("%d\n",sum);
return 0;
}

分类:

1.库函数(C语言本身提供)
2.自定义函数

库函数

IO函数
字符串操作函数
字符操作函数
内存操作函数
时间/日期函数
数学函数
其他库函数

strcpy

#include<stdio.h>
#include<string.h>
int mian()
{
char arr1[ ]=“Hellow“;
char arr2[20]=”###########";//’\0’也会拷贝过去
strcpy(arr2,arr1);
printf("%s\n",arr2);
//strcpy-string copy -字符串拷贝
//strlen -string lenth -字符串长度
return 0;
}

memset

内存-set-设置
#include<stdio.h>
#include<string.h>
int mian()
{
char arr[ ] = “hello world”;
memset(arr, ‘*’ , 5);
printf("%s\n",arr);
//***** world
return 0;
}

自定义函数

返回类型 函数名(函数参数)
{
语句项 //函数体,交代的是函数的实现

}
eg.
int Add(int x,int y)
{
int z=0;
z=x+y;
return z;
}

题1:找出两个数的最大值

int get-max(int x, int y)
{
if(x>y)
return x;
else
return y;
}
int main()
{
int a=20;
int b=19;
//函数的使用
int max = get-max(a,b);
printf(“max=%d\n”,max);
return 0;
}

题2:两数字交换

void Swap(int* x,int* y) //void–没有返回值
{
int tmp=0;
tmp=*x;
*x=*y;
*y=tmp;
}
int main()
{
int a=10;
int b=20;
printf(“a=%d,b=%d\n”,a,b);
Swap(&a,&b);//调用函数
printf(“a=%d,b=%d\n”,a,b);
return 0;
}
// 如果不用指针,函数内会自动申请一个新地址,无法返回值

函数的参数

实际参数:常量,变量,表达式,函数eg.Swap(&a,&b);
形式参数:变量eg.void Swap(int* x,int* y)

当实参传给形参时,形参时实参的一份临时拷贝,对形参的修改是不会改变实参的

函数的调用

传值调用
Swap(a,b);
传址调用 : 函数内部直接操作函数外部的变量
Swap(&a,&b);

练习

1.打印100-200的素数

//是素数返回91,不是返回0
int is-prime(int n)
{
// 2–>n-1
int j=0;
for(j=2 ; j<n ;j++)
{
if(n%j == 0)
return 0;
}
return 1;
}

int main()
{
int i=0;
for(i=100 ; i<=200 ;i++)
{
//判断i是否为素数
if(is-prime(i) == 1)
printf("%d",i);
}
return 0;
}

2.打印1000-2000的闰年

int is_leap_year(int y)
{
if((y%4 == 0) && (y%100 !=0) || (y%400 == 0))
return 1;
else
return 0;
}
int main()
{
int year =0;
for(year =1000 ; year<=2000 ; year++)
{
//判断year是否为闰年
if( 1== is_leap_year(year))
{
printf("%d",year);
}
}
return 0;
}

题3.有序数组的二分查找

int binary_search(int arr[ ], int k , int sz)
{
//算法实现
int left =0;
int right =sz-1;
while (left<=right)
{
int mid =(left +right )/2;//中间元素下标
if(arr[mid] < k)
{
left =mid +1;
}
else if(arr[mid] > k)
{
right =mid -1;
}
else
{
return mid ;
}
}
return -1;
}
int main()
{
//如果找到了返回,这个数的下标,找不到返回-1
int arr[ ] = {1,2,3,4,5,6,7,8,9,10};
int k =7;
int sz = sizeof(arr)/sizeof(arr[0]);
//传递过去的数组arr是首元素的地址,所以求数组个数不能在函数内进行
int ret =binary_search(arr[ ], k , sz)
if(ret == -1)
{
printf(“error”);
}
else
{
printf(“找到了,下标是%d\n”,ret);
}
return 0;
}

题4.函数调用一次,num加1

void Add(int* p)
{
(*p)++;
}
int main()
{
int num = 0;
Add(&num);
printf(“num=%d\n”,num);
Add(&num);
printf(“num=%d\n”,num);
return 0;
}

函数的嵌套调用和链式访问

嵌套调用

#include<stdio.h>
void new_line()
{
printf(“hehe\n”);
}
void three_line()
{ int i = 0;
for(i=0; i<3; i++)
{
new_line();
}
}
int main()
{
three_line();
return 0;
}

链式访问

把一个函数的返回值作为另一个函数的参数
#include int main()
{
printf("%d", printf("%d", printf("%d", 43)));
return 0
}
结果:4321
printf("%d", printf("%d", 43))----打印出字符的个数—2

函数的声明和定义

函数要先声明后使用
声明一般在头文件中

函数定义:

int Add(int x, int y)
{
return x+y;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值