函数
函数其实是子程序
分类:库函数、自定义函数
一、库函数
IO函数:printf scanf getchar putchar
字符串操作函数:strcmp strlen
字符操作函数:toupper
内存操作函数:memcpy memcmp memset
时间、日期函数:time
数学函数:sqrt pow
其他库函数:
二、自定义函数
char *strcpy(char*strDestination,const char*strSourse)
函数的返回类型 函数名 函数的参数
自定义函数和库函数一样,有函数名、返回值类型、函数参数,可以由程序员自己设计,给了我们很大的发挥空间。
函数的组成:函数名、返回类型、函数参数、函数体
//交换两个变量的值的函数
#include<stdio.h>
void swap(int* pa, int* pb)
{
int z = 0;
z = *pa;
*pa = *pb;
*pb = z;
}
int main()
{
int a = 10;
int b = 20;
int* pa = &a;//pa就是一个指针变量
printf("交换前:a = % d, b = % d\n", a, b);
swap(&a, &b);
printf("交换后:a = % d, b = % d \n", a, b);
}
当要改变函数的值的时候要用指针传址调用
三、函数的参数
实际参数
真实传给函数的参数叫实参,必须要有确定的值来进行传递。可以是常量、变量、表达式、函数等。
形式参数
函数名称后面括号中的变量叫形参,只有在函数被调用的过程中才会实例化(分配内存单元),调用后就被自动销毁了,只在函数内有效。
#include<stdio.h>
void Swap(int x, int y)
{
int t=0;
t = x;
x = y;
y = t;
}
//Swap被调用的时候,实参传递给形参,其实形参是实参的一份临时拷贝。改变形参不能改变实参
传值调用
四、函数的调用
传值调用
传址调用:将外部变量的内存地址传递给函数参数,可以将函数内和函数外部的变量建立联系
//写一个函数判断是不是素数
#include<math.h>
int is_prime(int n)
{
int j = 0;
for(j=2;j<n;j++)
{
if (n % j == 0)
return 0;
}
return 1;
}
int main()
{
int i = 0;
int count = 0;
for (i = 100; i <= 200; i++)
{
if (is_prime(i) == 1)
{
count++;
printf("%d ", i);
}
}
printf("\ncount=%d\n", count);
return 0;
}
//判断一年是不是闰年的函数
#include<stdio.h>
int is_leap_year(int n)
{
int j = 0;
if (n % 400 == 0 || (n % 4 == 0 && n % 100 != 0))
{
return 1;
}
return 0;
}
int main()
{
int count = 0;
int y = 0;
for (y = 1000; y <= 2000; y++)
{
if (is_leap_year(y) == 1)
{
count++;
printf("%d ", y);
}
}
printf("%d\n", count);
return 0;
}