C语言复习 1月30日:函数应用

五、实参求值的顺序

#include <stdio.h>
void main()
{ int f(int a,int b);
    int I=2,p;
    p=f(I,++I);
    printf("%d",p);}

int f(int a,int b)
{ int c;
    if(a>b) c=1;
    else if(a==b) c=0;
    else c=-1;
    return(c) ;
}

湖北专升本考试题目中通常按:大端序 将参数从右向左依次压入栈。

分析:如果从左到右顺序求实参的值,f(2,3),程序运行的结果为 -1
本题按从右到左的顺序求实参的值,f(3,3),程序运行的结果为 0

六、函数的递归调用

有 5 个人坐在一起,问第 5 个人多少岁?
他说比第 4 个人大 2 岁。
第 4 个人比第 3 个人大 2 岁。
第 3 个人比第 2 个人大 2 岁。
第 2 个人比第 1 个人大 2 岁。
第 1 个人 10 岁。

#include <stdio.h>
int age(int n)
{ int c;
if(n==1)  /*n表示第一个人*/
c=10;
else
c=age(n-1)+2;
return(c);
}
void main()
{printf("%d",age(5));}

age(5) 5 是实参,传递值给形参 n

c = age(5-1) + 2 = age(4) + 2
当 n==1 时,第一个人的年龄 c=10

age(2) = age(1) + 2 = 12
age(3) = age(2) + 2 = 14
age(4) = age(3) + 2 = 16
age(5) = age(4) + 2 = 18

七、数组作为函数参数

注:数组名也可以作实参和形参,传递的是数组首元素的地址

例:有一个一维数组 score,内放 10 个学生成绩,求平均成绩

#include <stdio.h>
int main()
{ float average(float array[10]);
    float score[10],aver;
    int I;
    for(I=0;I<10;I++)
        scanf("%f",&score[I]);  aver = average(score);
    printf("%f",aver);}
float average(float array[10])
{ int I;
    float aver,sum=array[0];
    for(I=1;I<10;I++)
        sum=sum+array[I];
    aver=sum/10;
    return(aver);}

八、局部变量和全局变量

(1) 局部变量:在一个函数内部定义的变量,只能在本函数内使用。
(2) 全局变量:从定义变量的位置开始到本源文件结束。

第一种:外部变量(全局变量)和局部变量同名,在局部变量的作用范围内,外部变量被“屏蔽”,即它不起作用。

#include <stdio.h>
int  a=3,b=5;
int main(){
    int max(int a,int b);
    int a=8;
    printf("%d",max(a,b));
    return 0;
}
int max(int a,int b)
{ int c;
    c=a>b?a:b;
    return(c);}

//a=8;

九、auto 变量

自动变量

十、用 static 声明局部变量(或 register)——累加值

main()
{ int f(int);
int a=2,I;
for(I=0;I<3;I++)
printf("%d",f(a));}

int f(int a)
{ auto int b=0;
static int c=3;
b=b+1;
c=c+1;
return(a+b+c);}

1f1a6677b6f331c4711201378825a6fc

十一、内部函数和外部函数

内部函数:
static 类型标识符 函数名(形参表);

外部函数:
extern 类型标识符 函数名(形参表);

习题:

上一篇 C语言复习 循环语句
Keason

Keason管理员

flag{fkxqsVIVO50tmgbd}

本月创作热力图