2021年07月13日 笔记

函数

main(){

}

推动软件发展的动力

  • 软件的复用
  • 尽量接近自然语言

C语言可重用的粒度为函数

Java面向对象可重用的粒度为对象

函数的作用

封装一段功能,方便软件复用

函数的定义

1
2
3
返回类型 函数名(形参列表){
函数体;
}

变量不要使用单独的字母,特别是l和o,这两个字母和数字1和0容易分不清。

形参列表

如下返回值的写法否有语法错误

1
return a,b;

逗号表达式

1
表达式1,表达式2

先执行表达式1,再执行表达式2;

定义函数

1
2
3
4
5
int max(int a,int b)
{
if(a>b) return a;
return b;
}

更简单的写法

1
2
3
4
int max(int a,int b)
{
return a>b?a:b;
}

函数和普通数据类型都在栈空间,只有对象在堆空间。

调用

1
2
3
4
5
main()
{
int m=5,n=6;
int c=max(m,n);
}

编程题 写一个判断素数和闰年的函数

编程题 写一个日历

输入年月日,判断这个日期是年中的第几天。
判断星期几。
1990年1月1日,星期一

判断输入的日期到,1990年1月1日有多少天,然后在%7,即可得到星期。

传值 传地址 交换地址,交换地址的空间里面的内容

1
2
3
4
5
6
7
8
9
10
11
void swap(int a,int b){
int temp=b;
b=a;
a=temp
}
main(){
int a=5,b=6;
swap(a,b);
print a;
print b;
}

问,打印的a和b的值。

不会交换

1
2
3
4
5
6
7
8
9
10
11
void swap(int *a,int *b){
int *temp=b;
b=a;
a=temp
}
main(){
int a=5,b=6;
swap(&a,&b);
print a;
print b;
}

是否有交换?

不会交换,只交换地址而已,没有交换地址里面的数据。

1
2
3
4
5
6
7
8
9
10
11
void swap(int *a,int *b){
int temp=*b;
*b=*a;
*a=temp
}
main(){
int a=5,b=6;
swap(&a,&b);
print a;
print b;
}

是否有交换

有,交换了地址对应的空间里面的值

递归函数

double f(int n){
if(n==0||n==1) return 1;
return f(n-1)*n;
}

编程题 递归斐波那契第n项的值

String类

scanner.next(),以空格或回车作为结束符
scanner.nextLine(),以回车符作为结束符。