求数列2/1,3/2,/5/3……..前20项之和。
# include <stdio.h>
#include <math.h>
void main(){
float f1 = 1,f2 = 2,f3,i,n;
float sum = 0;
printf("请任意输入一个整数:\n");
scanf("%f",&n);
getchar();
for(i = 1;i <= n;i++){
sum += f2/f1;
f3 = f1 + f2;
f1 = f2;
f2 = f3;
}
printf("\n结果是%f",sum);
getchar();
}
生兔子的简化版(斐波那契数题):
# include <stdio.h>
#include <math.h>
void main(){
int f1 = 1,f2 = 1,f3,i,n;
int sum = 0;
printf("请任意输入一个整数:\n");
scanf("%d",&n);
getchar();
for(i = 1;i <= n;i++){
if( i <= 2 ){
sum =1; //第一个月不生,第二个月不生
}else{
sum = f1 + f2; //第三个月后每个月生一对
f3 = f1 + f2;
f1 = f2;
f2 = f3;
}
}
printf("\n结果是%d",sum);
getchar();
}
函数:
错误示例:
void main(){
}
void add(int a,int b){
return a+b
};
上述代码问题:返回值类型与类型名不符
函数类型:
1,无参数无返回值
2,有参数无返回值
3,无参数有返回值
4,有参数有返回值
今日重点A:
1,形参变量只有在被调用的时候才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。
2,实参可以是常量,变量,表达式,函数等,无论实参是何种类型的量,在进行函数调用时,他们都必须具有确定的值,以便把这些值传送给实参。
3,函数调用中发生的数据传送是单向的“值传递”。即只能把实参的值传送给形参而不能把形参的值反向的传送给实参。在内存中,形参与实参占用不同的单元,在函数调用时给形参分配储存单元,并将实参对应的值传递给形参,调用结束后形参单元被释放实参单元仍保留原值。因此在函数调用的过程中,形参的值发生变化,而实参中的值不会变化。
今日重点B:
头文件的自定义调用,避免重定义的问题。
创建一个名字形同的.h头文件,和.c源文件。
在头文件中声明函数,在源文件中定义并实现函数。
递归:
函数递归核心
重复调用自己
一定要有边界,
写算法。
题目:
递归实现十进制二进制的转换
递归实现1加到100的和
递归实现1到100之间的偶数的和
全天回顾
1,什么是函数,函数的机构和定义
2,函数的组成部分。
3,函数的四种形式。
4,头文件的自定义和使用。
5,头疼的递归
中午玩耍的例子:打开百度,监控键盘