学习内容:
1.函数的定义
- 函数是一块代码,接收零个或多个参数,做一件事情,并返回零个或一个值
2.调用函数
- 函数名(参数值);
- ()起到了表示函数调用的重要作用
- 即使没有参数也需要()
- 如果有参数,则需要给出正确的数量和顺序
- 这些值会被按照顺序依次用来初始化函数中的参数
- 可以传递给函数的值是表达式的结果,这包括:字面量,变量,函数的返回值,计算的结果。
3.函数先后关系
4.函数原型
double max(double a,double b);
int main()
{
int a,b,c;
a = 5;
b = 6;
c = max(10,12);
printf("%d\n",c);
max(12,13);
return 0;
}
- 函数头,以分号“;”结尾,就构成了函数的原型
- 函数原型的目的是告诉编译器这个函数长什么样
- 名称
- 参数(数量及类型)
- 返回类型
5.类型不匹配?
- 调用函数时给的值与参数的类型不匹配是C语言传统上最大的漏洞
- 编译器总是悄悄替你把类型转换好,但是这很可能不是你所期望的
- 后续的语言,C++/Java在这方面很严格
6.传值
- ·每个函数有自己的变量空间,参数也位于这个独立的空间中,和其他函数没有关系
- 过去,对于函数参数表中的参数,叫做“形式参数”,调用函数时给的值,叫做“实际参数”
- 由于容易让初学者误会实际参数就是实际在函数中进行讦算的参数,误会调用函数的时候把变量而不是值传进去了,所以我们不建议继续用这种古老的方式来称呼它们
- 我们认为,它们是参数和值的关系
7. 本地变量
- 函数的每次运行,就产生了一个独立的变量空间,在这个空间中的变量,是函数的这次运行所独有的,称作本地变量
- 定义:在函数内部的变量就是本地变量
- 参数也是本地变量
8.变量的生存期和作用域
- 生存期:什么时候这个变量开始出现了,到什么时候它消亡了
- 作用域:在(代码的)什么范围内可以访问这个变量(这个变量可以起作用)
- 对于本地变量,这两个问题的答案是统一的:大括号内——块
9.本地变量的规则
- 本地变量是定义在块内的
- 它可以是定义在函数的块内。
- 也可以定义在语句的块内
- 甚至可以随便拉一对大括号来定义变量
- 程序运行进入这个块之前,其中的变量不存在,离开这个块,其中的变量就消失了
- 块外面定义的变量在里面仍然有效
- 块里面定义了和外面同名的变量则掩盖了外面的
- 不能在一个块内定义同名的变量
- 本地变量不会被默认初始化
- 参数在进入函数的时候被初始化了
8.二维数组
- int a[3][5];
- 通常理解为a是一个3行5列(或5行3列)的矩阵
9.二维数组的遍历
for(i=0;i<3;i++){
for(j=0;j<5;j++){
a[i][j]=i*j;
}
}
- a [i] [j] 是一个int
- 表示第i行第j列上的单元
10.二维数组的初始化
int a[][5] ={
{0,1,2,3,4},
{2,3,4,5,6},
};
- 列数是必须给出的,行数可以由编译器来数
- 每行一个{},逗号分隔
- 最后的逗号可以存在,有古老的传统
- 如果省略,表示补零
学习产出:
1.求和函数
#include<stdio.h>
void sum(int begin, int end)
{
int i;
int sum=0;
for( i=begin;i<=end;i++){
sum+=i;
}
printf("%d到%d的和是%d\n",begin,end,sum);
}
int main()
{
sum(1,10);
sum(20,30);
sum(35,45);
return 0;
}
2.统计
#include<stdio.h>
int main()
{
int x;
int count[10];
int i;
for (i=0;i<10;i++){
count[i]=0;
}
scanf("%d",&x);
while(x!=-1){
if(x>=0 && x<=9){
count[x]++;
}
scanf("%d",&x);
}
for(i=0;i<10;i++){
printf("%d:%d\n,i,count[i]");
}
return 0;
}