1.函数定义:函数是一个完成特定功能的代码模块,通常有参数,也可以没有参数;通常有返回值,也可以是空值。
2.一般形式:<数据类型><函数名称>(<形式参数说明>)
函数名称是一个标识符,要符合命名规则(以数字字母_组成,但不能以数字开头,不能是关键词)
3.数据类型是整个函数返回值的类型,不需要返回值时,数据类型可用void;
4.函数的优点:代码复用,模块化,便于维护,阅读。
5.形参可以是任意类型变量,各参数之间用逗号分隔,在进行函数调用时将赋予这些形参实际的值。
6.函数不可重复定义,并且不能嵌套定义。
7.被调用函数必须是已经声明的函数,或者被调函数的位置位于调用函数之前。
8.如果在调用函数前没有对函数进行声明,则编译系统会把第一次遇到的该函数形式(函数定义或函数掉用)作为函数的声明,并将函数返回值的类型默认为int;
9.函数调用:嵌套调用,递归调用(注意结束条件)。
10.全局变量的缺点:易被修改,生命周期长,占内存,易被屏蔽(在函数中重新赋值导致被覆盖)。
11作用域:1.{}内为局部 ;2全局:定义到程序结束
函数的返回值1.函数的返回值只能通过return 语句返回主函数,且只能返回一个值;
2.函数返回值的类型和函数定义的数据类型应保持一致,若不一致,则以函数定义中的类型为准,自动进行类型转换,没有返回值 ,可以定义为void类型。
一些例子 1.用函数求1+2+.......+n的和#include
int sum(int n)
{
if(n==0)
return 0;
return n+sum(n-1);//递归调用
}
int main(int argc, char *argv[])
{
int a;
a=sum(100);
printf("%d",a);
return 0;
}
#include
double work(double x,int n)
{
int i;
double m=x;
for(i=1;i
x=m*x;
}
return x;
}
int main(int argc, char *argv[])
{
double s;
double c;
int d;
scanf("%lf%d",&c,&d);
s=work(c,d);
printf("%f",s);
return 0;
}
#include
void number(int x,int y)
{
int i,j;
for(i=0;i<=x;i++)
{
for(j=0;j<=x;j++)
{
if(i+j==x&&2*i+4*j==y)
{
printf("兔的只数=%d鸡的只数=%dn",j,i);
return ;
}
}
}
printf("invail!n");
return;
}
int main(int argc, char *argv[])
{
int a,b,m;
printf("请输入总只数和总脚数n");
scanf("%d%d",&a,&b);
number(a,b);
return 0;
}
#include
int leapyear(int x)//判断闰年的函数
{
if(x%4==0&&(x%100!=0||x%400==0))
return 1;
}
int main(int argc, char *argv[])
{
int x,i;
printf("please input yearn");
scanf("%d",&x);
i=leapyear(x);
if(i==1)
printf("%d is a leap yearn",x);
else
printf("%d is not a leap yearn",x);
return 0;
}
#include
int prime(int x)//判断质数函数
{
int i;
for(i=2;i
if(x%i!=0)
{
return 1;
}
}
return 0;
}
int main(int argc, char *argv[])
{
int x,a;
printf("please input a numbern");
scanf("%d",&x);
a=prime(x);
if(a==1)
printf("the number is a prime numbern");
else
printf("the number is not a prime numbern");
return 0;
}
#include
#include
#include
int main(int argc, char *argv[])
{
int number;
int guess;
int i;
srand((unsigned)time(NULL));
number=rand()%100;
number++;
printf("guess number game!n");
printf("the range of number is 1-100n");
for(i=0;;i++)
{
printf("please input numbern");
scanf("%d",&guess);
if(guess>number)
{
printf("大了n");
}
else if(guess
else
{
printf("victory!n");
break;
}
}
return 0;
}
#include
int factorial(int n)//FOR循环求阶乘
{
int i;
for(i=n;i>1;i--)
{
n=n*(i-1);
}
return n;
}
int funtion(int n)//递归求阶乘
{
if(n==1)
return 1;
return n*funtion(n-1);
}
int main(int argc, char *argv[])
{
int n;
int sum;
printf("please input nn");
scanf("%d",&n);
//sum=factorial(n);
sum=funtion(n);
printf("%d的阶乘为%dn",n,sum);
return 0;
}
#include
void leapyear(int n)
{
int i;
for(i=n;i<=2000;i++)
{
if(i%4==0&&(i%100!=0||i%400==0))
printf("%-8d",i);
}
return;
}
int main(int argc, char *argv[])
{
leapyear(1000);
return 0;
}
#include
int sume(int n)
{
int i,j;
int sum=1;
int S=0;
for(i=1;i<=n;i++)
{
sum=sum*i;
S=S+sum;
}
return S;
}
int main(int argc, char *argv[])
{
int n,sum;
printf("输入你要求的阶乘数n");
scanf("%d",&n);
sum=sume(n);
printf("阶乘之和为%dn",sum);
return 0;
}
#include
int sume(int n)
{
int i,j;
int sum=1;
int S=0;
for(i=1;i<=n;i++)
{
sum=sum*i;
S=S+sum;
sum=(-1)*(sum);
}
return S;
}
int main(int argc, char *argv[])
{
int n,sum;
printf("输入你要求的阶乘数n");
scanf("%d",&n);
sum=sume(n);
printf("阶乘之和为%dn",sum);
return 0;
}
#include
#define password 1234
int system(int n)
{
int i=1;
int mm;
while(i<=n)
{
printf("input your passwordn");
scanf("%d",&mm);
if(mm==password)
{
return 1;
}
i++;
}
return 0;
}
int main(int argc, char *argv[])
{
int a;
a= system(3);
if(a==1)
printf("login succeeded!n");
else
printf("your password is wrong!login out systemn");
return 0;
} 12.求两个数的最大公约数
#include
int conven(int x,int y)
{
int i,r;
for(i=1;i<=x&&i<=y;i++)
{
if(x%i==0&&y%i==0)
r=i;
}
return r;
}
int main(int argc, char *argv[])
{
int x,y,a;
printf("input two numbern");
scanf("%d%d",&x,&y);
a=conven(x,y);
printf("%d和%d的最大公约数为%d",x,y,a);
return 0;
}



