C语言函数-笔记-2016-3-28

来源:互联网 发布:达芬奇家具 知乎 编辑:程序博客网 时间:2024/05/21 21:41

1、定义函数:

***只实现特定功能而不需返回值时:可以定义void类型函数,若有返回值定义其他类型

例如eg1中没有语句“return 0;”编译时就会警告:warning C4716: 'max' : must return a value

***一个函数可以调用另一个函数,但是不能在函数体内定义另一个函数

类型   函数名()

{可执行语句}

eg1:无参数

float max(void)

{

printf("Hello world\n");

return 0;

}

void main()

{

max();

printf("这里还有个Hello world\n");

}

类型  函数名(类型 形参1,类型 形参2,..)

{可执行语句}

eg2:有参数

#include<stdio.h>

int max(int m,int n)

{

int t;

t=m>n?m:n;

return t;

}

void main()

{

int a=1,b=2;

printf("较大值为:%d\n",max(a,b));

}


2、全局变量和局部变量

全局变量:作用域为其定义位置起到程序末尾,生存期为程序开始至结束;

局部变量:全局变量和局部变量重名时,局部变量在其作用域内会掩盖全局变量;


3、传值方式将函数实参传给形参;

***形参函数名可以和实参相同,但是形参值的变化不会影响到实参;

***传值方式中return语句只能返回一个值!

***形参的类型和个数必须和实参一致;

eg:

#include<stdio.h>
void swp(int m,int n)
{
int t;
t=m;
m=n;
n=t;
printf("m=%d,n=%d\n",m,n);//输出:m=20,n=10
}
void main()
{
int m=10,n=20;
swp(m,n);//将实参的值传递给形参然后输出形参值,但是实参中m和n的值不会改变
printf("主函数输出结果m=%d,n=%d\n",m,n);//输出:m=10,n=20
}


4、传址方式将函数实参传给形参:

***形参值的变化会影响实参的值;

***实参可以为:变量地址或指针名、一维数组、字符数组或多维数组;

eg1:变量地址为实参

#include<stdio.h>
void f(int *p1,int *p2)
{
int t;
t=*p1;
*p1=*p2;
*p2=t;
printf("形参输出:%d,%d\n",*p1,*p2);//形参输出:20,10
}
void main()
{
int m=10,n=20;
f(&m,&n);//调用f()函数,实参的地址传给形参
printf("实参输出:%d,%d\n",m,n); //实参输出:20,10
}

eg2:数组名(表示数组首地址)为实参

#include<stdio.h>
void bijiao(char a[],char b[])
{
int i=0;
while(a[i]==b[i]&&a[i]!='\0')
i++;
if(a[i]=='\0'&&b[i]=='\0')
printf("两个字符串数组相同\n");
else
printf("NO:incorrect!");
}
void main()
{
char s[20],m[20];
printf("请输入两个字符串:\n");
gets(s);
gets(m);
bijiao(s,m);
}

eg3:字符串作实参(形参应为字符型的指针变量)

#include<stdio.h>

void f(char *s)//此处使用f(char s[])也正确,对比eg2

{

int i=0,n=0;

while(s[i]!='\0')

{

if(s[i]=='s')

n++;

i++;

}

printf("字符串中s的个数为:%d\n",n);

}

void main()

{

char s[50];

gets(s);

f(s);

}


5、函数的嵌套和递归

函数的嵌套:一个函数调用其他函数

eg1:计算1^5+2^5+3^5+...+x^5

#include<stdio.h>
long c(int x)
{
long p=1;
int i;
for(i=0;i<5;i++)
p=p*x;
return p;
}
long s(int x)
{
long s=0;
int i;
for(i=1;i<=x;i++)
s=s+c(i);
return s;
}
void main()
{
int x;
scanf("%d",&x);
printf("输入值为%d,输出5次方之和为:%d\n",x,s(x));
}

函数的递归:一个函数调用本身函数

eg:前N个斐波那契数列之和;

#include<stdio.h>

long f(int n)

{

long a[n];

a[1]=1;

a[2]=1;

a[n]=a[n-1]+a[n-2];

void main()

{ long n;

long s[n];

printf("请输入N的值:%d",n);

scanf("%d",&n);

printf("斐波那契数列前N项之和为:\n");

if(n==1)

s[1]==1;

else if(n==2)

s[2]==2;







0 0
原创粉丝点击