1. 函数:

(1) 一个大型程序中的某部分代码。由一个或多个语句块组成。负责完成某项特定的任务,而且相较于其他代码,具备相对独立性。

(2) 提供过程封装和细节的隐藏。

#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

int ADD(int x, int y)
{
int z = x + y;
return z;
}

int main()
{
int a = 10;
int b = 12;
int sum = ADD(a, b);
printf("%d\n", sum);
return 0;
}

C语言学习——lesson 5 函数(1)_链式访问

  1. 函数的分类:

(1) 库函数:cplusplus.com   cpprefernce.com

IO函数

<stdio.h>

字符串操作函数

<string.h>

字符操作函数


内存操作函数


时间/日期函数


数学函数

<math.h>

其他


////字符串库函数学习
//#include <string.h>
//int main()
//{
// //strcpy :字符串拷贝
// //strlen :计算字符串长度
// char arr1[] = "abcdef";
// char arr2[10] = "**********";
// strcpy(arr2, arr1); //arr1中的字符串拷贝到arr2中
// printf("%s\n", arr2);
//
// return 0;
//}

C语言学习——lesson 5 函数(1)_嵌套使用_02

////内存操作库函数
////memset :内存设置
//int main()
//{
// char arr[] = "hello world";
// int a = 0;
// memset(arr, '*', 5);
// printf("%s\n", arr);
// a = strlen(arr);
// printf("%d\n", a);
// return 0;
//}

C语言学习——lesson 5 函数(1)_函数_03

(2)自定义函数

1)函数的组成

返回类型  函数名(函数参数)

{

函数体;

}

//自定义函数:获取两个数的较大值

//int Max(int x, int y)
//{
// if (x > y)
// {
// return x;
// }
// else
// {
// return y;
// }
//
//}
//int main()
//{
// int num1 = 0;
// int num2 = 0;
// int max = 0;
// printf("输入两个数:");
// scanf("%d%d", &num1, &num2);
// max = Max(num1, num2);
// printf("max=%d\n", max);
// return 0;
//}

C语言学习——lesson 5 函数(1)_嵌套使用_04

2)函数的参数

实参——>实际参数:真实传给函数的参数(常量、变量、表达式、函数等)

(函数调用时,必须要有确定的值,以便把这些值传给调用的函数的形参)

形参——>形式参数:函数名后括号内的变量。(只在函数内有效)

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

3)函数的调用

a.传值调用:形参和实参占用不同的内存块,对形参的修改不改变实参    (不改变值时使用)

b.传址调用:把函数外部创建的变量内存地址传给函数参数。内部变量改变,会导致外部变量改变    (要改变变量时使用)

可以让函数和函数外边的变量建立真正的联系,函数内部可以直接操作外部变量

//交换两个整型变量的值
void Swap1(int x, int y)
//x与主函数中的a、 y与主函数中的b未关联起来
//x、y为形式参数
{
int tem = 0;
tem = x;
x = y;
y = tem;

}
void Swap2(int* pa,int* pb)
//与主函数a、b建立真的联系
{
int tem = 0;
tem = *pa;
*pa = *pb;
*pb = tem;
}
int main()
{
int a = 1;
int b = 2;
int t = 0;
t = a;
a = b;
b = t;
printf("主函数a=%d b=%d\n", a, b);
//传值调用
Swap1(a, b); //存在问题,没有交换成功
//a、b为实际参数,有确定的值
printf("调用函数1:a=%d b=%d\n", a, b);
//传值调用,改变形参xy,不改变实参ab

//传址调用
Swap2(&a, &b);//&a、&b为实际参数, 有确定的值
printf("调用函数2:a=%d b=%d\n", a, b);
//调用函数内部变量改变,导致调用函数外部变量改变
return 0;
}

C语言学习——lesson 5 函数(1)_函数_05

  1. 函数的嵌套使用和链式访问:

(1)嵌套使用:函数与函数之间可以有机的组合

(2)链式访问:把一个函数的返回值,作为另一个函数的参数

int len=strlen(“abc”);  

printf(“%d\n”,len);       ==   printf(“%d\n”,strlen(“abc”));

#include <stdio.h>
#include <math.h>

////写一个子函数:判断一个数是不是素数
//int is_prime(int n) //是素数返回1,不是返回0
//{
// int s = 0;
// int i = 0;
// s = sqrt(n);
// for (i = 2; i <= s; i++)
// {
// if (0 == n % i)
// {
// return 0;
// }
// }
// return 1;
//}

//////子函数:判断是否为闰年,
//int is_leap_year(int x) //闰年返回1,不是闰年返回0
//{
// if ( x % 4 == 0 && x % 100 != 0 || x % 400 == 0)
// {
// return 1;
// }
// else
// {
// return 0;
// }
//}

//////二分法查找:有序数组
//int find(int arr[], int k,int sz)
//{
//
// int left = 0;
// int right = sz - 1;
// int mid = 0;
// while(left <= right)
// {
// mid = (left + right) / 2;
// if (arr[mid] < k)
// {
// left = mid + 1;
// }
// else if (arr[mid] > k)
// {
// right = mid - 1;
// }
// else
// {
// return mid;
// }
// }
//}

////子函数:每调用一次函数,num+1
//void Add(int* p)
//{
// (*p)++;
//}

//int main()
//{
// int i = 0;
// int year = 0;
// int arr[] = { 1,2,3,4,5,6,7,8,9 };
// int k = 2;
// int sz = sizeof(arr) / sizeof(arr[0]);
// int b = 0;
// int num = 0;

// printf("素数:\n ");
// for (i = 2; i <= 100; i++)
// {
// if (is_prime(i) == 1)
// {
// printf(" %d", i);
// }
// }
// printf("\n");

// printf("闰年:\n ");
// for (year = 1949; year <= 2022; year++)
// {
// if (is_leap_year(year) == 1)
// {
// printf(" %d", year);
// }
// }
// printf("\n");

// printf("二分法查找:\n ");
// b = find(arr, k, sz);
// //arr[] = { 1,2,3,4,5,6,7,8,9 }; k = 2;
// if (b == -1)
// {
// printf("无");
// }
// else
// {
// printf("下标是:%d\n", b);
// }
// printf("\n");

// printf("每调用一次函数,num+1:\n ");
// Add(&num);
// Add(&num);
// Add(&num);
// printf("%d\n ", num);
// return 0;
//}

C语言学习——lesson 5 函数(1)_嵌套使用_06

////链式访问:
//int main()
//{
// printf("%d", printf("%d", printf("%d", 43))); //4321
//
// return 0;
//}

C语言学习——lesson 5 函数(1)_函数_07