1)函数
通过函数可以把一个任务分为若干个小任务。
#include<stdio.h>
#include<math.h>
int main(){
float a =0,b = 0,c = 0,p = 0,s = 0;
scanf("%s %s %s",&a,&b,&c);
if(a+b<=c || a+c<=b || b+c<=a){
return -1;
}
float p = (a+b+c)/2.0
float s = sqrt(p*(p-a)*(p-b)*(p-c));
printf("%s",s);
return 0;
}
对以上程序进行函数封装
#include<stdio.h>
#include<math.h>
float trianglearea(float x,float y,float z)//函数定义:函数返回类型,函数名,形参列表
{
float area = -1;
if(x+y>z && x+z>y && z+y>x)//对三角形的三边关系添加限定关系
{
float w = (a+b+c)/2.0;//半周长
float area = sqrt(p*(p-a)*(p-b)*(p-c));
return area;//返回面积
}
else {
return area;//若不符合限定关系则返回负一
}
}
int main(){
float a,b,c,s;//实参,要跟形参区分开;
scanf("%f %f %f",&a,&b,&c);//要输入的就是函数中的形参
printf("%f",trianglearea(a,b,c));//要输出的就是函数中要返回的类型
return 0;
}
2)(可见性)作用域和生存期
如上图:源文件同过预编译、编译、链接之后会形成可执行文件,而程序运行的过程叫做进程,被分为四个区域:
1、代码区
2、数据区(ex:程序中的全局变量会在此开辟空间)
3、堆
4、栈(ex:局部变量会在此开辟空间)
作用域(可见性):指标识符能够被使用的范围;只有在作用域内标识符才可以被使用。此阶段针对编译和链接过程。
int a = 0;;
int main(){
int a = a+10;
int y = a+ z;//这里的z不能通过编译,因为对z的定义在下面
}
int z;//只对以下的部分有效,编译链接的时候并不是我们想的那样,全局变量就会全局有效
int fun(){
int z = 0;
}
同理
int z = 0;
int a = 0;
/*viod fun();需要在此加上声明*/
int main(){
int a = a+10;
int y = a+ z;
fun();//此时依然编译错误;因为没有对fun()函数进行声明;若想使用则需要在前面加上viod fun()
}
int fun(){
}
3)函数定义和声明的区别
很简单,举个例子
函数定义
long long fun(int mywallet){
}
声明函数
viod fun();
- ++a 和 a++ 的区别
c=a++
先把a赋值给c,然后再加加
c=++a
先给a++,然后再赋值给c