1.一个工程中,可以有多个.c文件,但是只能有一个main函数
2.函数分类:
a.库函数:https://cplusplus.com/
b.自定义函数
自定义函数结构:
ret_type fun_name(para1, * )
{
statement;//语句项
}
ret_type 返回类型
fun_name 函数名
para1 函数参数
【例】自定义一个函数交换两个整形变量的内容
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void Swap(int* px, int* py)
{
int tmp = 0;
tmp = *px; //tmp = a;
*px = *py; //a = b;
*py = tmp; //b = tmp;
}//当实参传递给形参的时候,形参是实参的一份临时拷贝
//对形参的修改不能改变实参
int main()
{
int a = 1;
int b = 2;
Swap(&a, &b);
//实参
printf("Swap::a = %d b = %d\n", a, b);
return 0;
}
3.函数参数
分类:实际参数:真实传给函数的参数
形式参数:只有在函数被调用的过程中才实例化(分配内存单元)
[注]形参实例化之后其实相当于实参的一份临时拷贝,对形参的修改不改变实参
4.传值调用 传址调用
#include <stdio.h>
void Swap1(int x, int y)
{
int z = 0;
z = x;
x = y;
y = z;
}
void Swap2(int *px, int *py)
{
int tmp = 0;
tmp = *px;
*px = *py;
*py = tmp;
}
int main()
{
int a = 10;
int b = 20;
scanf("%d%d",&a,&b);
printf("交换前:a=%d b=%d\n",a,b);
//传值调用
Swap1(a,b);
//传址调用
Swap2(&a,&b);
printf("交换后:a=%d b=%d\n",a,b);
return 0;
}
练习:写一个函数可以判断一个数是不是素数。
非函数写法:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
//打印100-200之间的素数
int main()
{
int i = 0;
for (i = 100; i <= 200; i++)
{
//判断i是否为素数,是就打印此数
//素数:只能被1和它本身整除的数
//用2~i-1之间的数字去试除i
int flag = 1; //flag是1表示是素数
int j = 0;
for (j = 2; j <= i - 1; j++)
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag == 1)
printf("%d ", i);
}
return 0;
}
优化:使用数学库函数 sqrt-----开平方
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
//打印100-200之间的素数
int main()
{
int i = 0;
for (i = 101; i <= 200; i+=2)
{
//判断i是否为素数,是就打印此数
//素数:只能被1和它本身整除的数
//用2~i-1之间的数字去试除i
int flag = 1; //flag是1表示是素数
int j = 0;
for (j = 2; j <= sqrt(i); j++)
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag == 1)
printf("%d ", i);
}
return 0;
}
函数写法:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
//打印100-200之间的素数
//是素数返回1,不是返回0
int is_prime(int n)
{
int j = 0;
for (j = 2; j <= sqrt(n); j++)
{
if (n % j == 0)
{
return 0;
}
}
return 1;
}
int main()
{
int i = 0;
for (i = 101; i <= 200; i+=2)
{
//判断i是否为素数,是就打印此数
//素数:只能被1和它本身整除的数
//用2~i-1之间的数字去试除i
if(is_prime(i))
printf("%d ", i);
}
return 0;
}