博客主页:https://blog.youkuaiyun.com/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)实参与形参必须个数相等、顺序相等、类型匹配。实参和形参的数据类型必须相同或赋值兼容。
函数的嵌套调用
函数的定义是独立的,在一个函数中不能嵌套定义另外一个函数。但是,函数可以嵌套调用,即可以在一个函数中调用另一个函数。
例如下面这个例子:
#include <stdio.h>
int 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=%d\n",num_01,ch,num_02,result);
return 0;
}
这个就是一个函数嵌套调用计算器简单应用,在主函数main()中调用子函数cal(),而在子函数cal()中调用+-*/函数,虽然较为简单,但是很能说明函数的嵌套调用问题。值得仔细研磨。
今日作业1 判断素数,一个简单的函数调用
#include <stdio.h>
int 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块钱。问最多可以喝到多少瓶饮料?
#include <stdio.h>
int 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 递归实现计算每位数的和
#include <stdio.h>
int 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)。
妈妈告诉名名每天可以吃一块或者两块巧克力。
假设名名每天都吃巧克力,问名名共有多少种不同的吃完巧克力的方案。
很明显,这是一道经典的斐波那契数列的函数应用题
#include <stdio.h>
int 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);
}
今日总结完毕。