博客主页:https://blog.csdn.net/weixin_46094737?spm=1000.2115.3001.5343
欢迎评论⭐留言 如有错误敬请指正!
本文由小学生廉原创,首发于 csdn
未来很长,值得我们全力奔赴更美好的生活!
换羽重生,首战必胜,奥利给!!!
首先总结一下函数的声明吧,这是一个细微的问题,容易被忽视,但是在规范性和可读性上还是要注意。
函数定义的位置是在该函数被调用之前。如果要把函数定义的位置放在调用它的函数的后面,应该在主调函数中进行函数的声明。函数的声明是把函数的信息(函数名、函数类型、参数个数和类型)提前通知编译系统,以便编译系统对程序进行编译时,检查被调用函数是否正确存在。
1.函数声明的方法
函数定义时的首行称为函数原型,函数声明时只需要在函数的原型后面加上“ ; ”。
例如: int add(int x,int y);
编译系统在检查函数调用时要求函数名、函数类型、参数个数和参数顺序必须与函数声明一致,实参类型必须与形参类型相同或赋值兼容。由于不检查参数名,因此在函数声明时,形参名可以省略。例如: int add( int ,int );
2.函数声明的位置
函数声明的位置有以下两种情况。
(1)函数声明在主调函数的外部,此时函数可以被声明之后出现的所有函数调用。
(2)函数声明在主调函数的内部。此时函数只能被主调函数调用。
函数的递归调用
在函数的嵌套调用中,如果函数嵌套调用的是自己,这就是函数的递归调用。例如:
在调用fun函数时,又要调用fun函数,这就是fun函数的递归调用。但是,这里的fun函数的调用是无终止的,故函数的递归调用必须要设置终止条件,通常在函数定义时通过if语句控制。
参数的传递方式
(1)形式参数和实际参数
在定义有参函数时,函数名后面括号中的参数称为“形式参数”,简称“形参”。在调用该有参函数时,函数名后面括号中参数称为“实际参数”,简称“实参”。
(2)参数的传递方式
在调用有参函数时,实参传递值给形参。需要说明以下两点。
(1)实参可以是常量、变量或表达式,但是必须有确定的值。
(2)实参与形参必须个数相等、顺序相等、类型匹配。实参和形参的数据类型必须相同或赋值兼容。
函数的嵌套调用
函数的定义是独立的,在一个函数中不能嵌套定义另外一个函数。但是,函数可以嵌套调用,即可以在一个函数中调用另一个函数。
例如下面这个例子:
#includeint add(int a,int b) { int num_01; num_01=a+b; return num_01; } int del(int a,int b) { int num_02; num_02=a-b; return num_02; } int cheng(int a,int b) { int num_03; num_03=a*b; return num_03; } int chu(int a,int b) { int num_04; num_04=a/b; return num_04; } int cal(int a, char ch, int b) { int z=0; switch(ch) { case '+': z=add( a, b); break; case '-': z=del( a, b); break; case '*': z=cheng( a, b); break; case '/': z=chu( a, b); break; } } int main() { int num_01,num_02,result=0; char ch; printf("请输入您要计算的算式:n"); scanf("%d",&num_01); ch = getchar(); scanf("%d",&num_02); result=cal(num_01,ch,num_02); printf("%d %c %d=%dn",num_01,ch,num_02,result); return 0; }
这个就是一个函数嵌套调用计算器简单应用,在主函数main()中调用子函数cal(),而在子函数cal()中调用+-*/函数,虽然较为简单,但是很能说明函数的嵌套调用问题。值得仔细研磨。
今日作业1 判断素数,一个简单的函数调用
#includeint main() { int num,ret; printf("请输入您要判断的整数:n"); scanf("%d",&num); ret=count(num); return 0; } int count(int x) { int num_01; int num_02=0; for(num_01=1;num_01<=x;num_01++) { if(x%num_01==0) num_02 += 1; else ; } if(num_02==2) printf("该值是素数"); else printf("该值不是素数"); }
今日作业2
给20块钱买饮料,每瓶饮料3块钱,喝完之后退瓶子可以换回1块钱。问最多可以喝到多少瓶饮料?
#includeint main() { int a; a=count(); return 0; } void count(n) { int count_01=0; for(n=20;n>3;n -= 2) { count_01++; } printf("小明可以买%d瓶饮料",count_01); }
此题容易犯经验主义错误,一瓶3元矿泉水,买一瓶水,瓶子可以兑换1元,换言之一瓶水就是2元,20元就能买10瓶,这就犯了大忌了!!!
今日作业3 递归实现计算每位数的和
#includeint main() { int a,ret; printf("请输入一位整数:n"); scanf("%d",&a); ret=count(a); return 0; } void count(int x) { int a,b,c,d,e; if(x<10) printf("该值各位数的和为:%d",x); else if(x>=10&x<100) { b=x%10; c=x/10; a=b+c; printf("该值各位数的和为:%d",a); } else if(x>=100&&x<1000) { b=x/100; c=(x%100)/10; d=x%10; a=b+c+d; printf("该值各位数的和为:%d",a); } else if(x>=1000&&x<10000) { b=x%10; c=(x%100)/10; d=(x%1000)/100; e=x/1000; a=b+c+d+e; printf("该值各位数的和为:%d",a); } else printf("您输入的值有误!!!"); }
今日作业4 名名的妈妈从外地出差回来,带了一盒好吃又精美的巧克力给名名(盒内共有 N 块巧克力,20 > N >0)。
妈妈告诉名名每天可以吃一块或者两块巧克力。
假设名名每天都吃巧克力,问名名共有多少种不同的吃完巧克力的方案。
很明显,这是一道经典的斐波那契数列的函数应用题
#includeint main() { int N,ret,num; printf("请输入名名现有的巧乐力数量:n"); scanf("%d",&N); ret=fun(N); printf("共有%d种方案",ret); return 0; } int fun(int x) { if(x<3&&x>=1) { if(x==1) return 1; else if(x==2) return 2; else return 3; } else return fun(x-2)+fun(x-1); }
今日总结完毕。
暑期编程PK赛 得CSDN机械键盘等精美礼品!


