1、函数一,两个数字的大小比较
#include<stdio.h>
int max(int x,int y){ //定义函数
if(x>y)
return x;
else
return y;
}
int main(){ //main函数主体,应用函数
int n=max(4,6);
printf("%d %d\n",n,max(20,n));
return 0;
}
输出结果为:
6 20
2、判断是否为素数
#include<stdio.h>
#include <stdbool.h> //c89中要导入这个头部文件,否则直接使用bool会报错,unknown type
bool IsPrime(unsigned int n)
{
if(n<=1)
return false;
for(int i=2;i<n;i++)
if(n%i==0)
return false;
return true;
}
int main(){
printf("%d %d %d %d\n",IsPrime(3),IsPrime(2),IsPrime(4),IsPrime(5));
}
3、
函数使用实例3 : 已知三角形三个顶点位置, 求边长
给定平面上不共线的三个点,其坐标都是整数,编写程序,求它们构成的三 角形的三条边的长度。输入是6个整数: x1,y1,x2,y2,x3,y3代表三个点的坐标 ,以任意顺序输出三条边的长度均可。
采用了数组的方式;
#include<stdio.h>
#include<math.h>
#define PW(a) ((a)*(a))
int main(){
double a[3][2];
double A,B,C;
for(int i=0;i<3;i++)
for(int j=0;j<2;j++)
scanf("%lf",&a[i][j]);
A=sqrt(PW(a[1][0]-a[0][0])+PW(a[1][1]-a[0][1]));
B=sqrt(PW(a[2][0]-a[0][0])+PW(a[2][1]-a[0][1]));
C=sqrt(PW(a[2][0]-a[1][0])+PW(a[2][1]-a[1][1]));
printf("%lf %lf %lf\n",A,B,C);
return 0;
}
sample1:
0 0 1 0 0 1
1.000000 1.000000 1.414214
sample 2:
0 0 0 1 1.7320508 0
1.000000 1.732051 2.000000
Program ended with exit code: 0
方法二:采用函数调用的方式
#include<stdio.h>
#include<math.h>
#define pw(a) a*a
double distance(double x1,double y1,double x2,double y2){
return sqrt(pw(x1-x2)+pw(y1-y2));
}
int main(){
int x1,x2,x3,y1,y2,y3;
scanf("%d %d %d %d %d %d",&x1,&y1,&x2,&y2,&x3,&y3);
printf("%lf %lf %lf",distance(x1,y1,x2,y2),distance(x2,y2,x3,y3),distance(x1,y1,x3,y3));
return 0;
}
4、返回值为void的函数
void DrawCircle(double x,double y,double r)
{
//下面的代码在屏幕上以(x,y)点为圆心,r为半径画圆 …
return;
}
调用:
DrawCircle(0,0,1);
#include<stdio.h>
void swap(int a,int b)
{
int tmp;
tmp=a;
a=b;
b=tmp;
printf("in swap:a=%d,b=%d\n",a,b);
}
int main(){
int a=4;
int b=5;
swap(a,b);
printf("after swaping a=%d,b=%d\n",a,b);
return 0;
}
in swap:a=5,b=4 //这里确实变化了
after swaping a=4,b=5 //最后结果没有变
Program ended with exit code: 0``
函数的形参是实参的一个拷贝,且形参的改变不会影响到实参 (除非形参类型是
数组引用 --- 引用的内容本课不涉及)
***一维数组作为函数的参数***
一维数组作为形参时的写法如下: 类型名 数组名[ ]
不用写出数组的元素个数。例如: void PrintArray( int a[ ]) { }
数组作为函数参数时,是传引用的,即形参数组改变了,实参数组也会改变。
一维数组作为函数的参数
编写一个求整型数组最大值的函数
#include<stdio.h>
int findmax(int a[],int length){
int mx=a[0];
for(int i=0;i<length;i++)
if(mx<a[i])
mx=a[i];
return mx;
}
int main(){
int a1[4]={4,15,6,9};
int a2[]={3,18,56,40,78}; //可以不写元素个数
printf("%d\n",findmax(a1,sizeof(a1)/sizeof(a1[0])));
printf("%d\n",findmax(a2,sizeof(a2)/sizeof(a2[0])));
return 0;
}
调用把每个数组的元素变为0
#include<stdio.h>
int a1[4]={4,15,6,9};
void settozero(int a[],int length){ //函数不需要返回值,返回类型可以写成
for(int i=0;i<length;i++)
a[i]=0;
}
int main(){
settozero(a1,4);
for(int i=0;i<4;i++)
printf("%d ",a1[i]);
}