您的位置:首页 > 编程语言 > C语言/C++

06==函数(头文件,声明,封装)

2015-08-26 08:26 477 查看
#include <stdio.h>

练习:

/*
 ******************
 ***                             ***
 ****          ****
 ******************

 

 日历显示
 1~30
 */
int main()
{
//课程简介
printf("********************\n");
printf("*** ***\n");
printf("*** ***\n");
printf("********************\n");
//日历
for(int i=1;i<=30;i++)
{
printf("%2d ",i);
if(i%7==0)
{
printf("\n");
}
}
}

1:

/*

 函数:
功能性代码的封装;

 函数的好处

 1:减少了重复代码;

 2:给main函数减负,main函数只确定调用流程;

 3:便于维护,方便阅读,扩展,移植;

 4:方便开发分工;

 */

void print_string()
{
printf("********************\n");
printf("<span style="font-size: 14px; font-family: Menlo;"> ***</span><span style="font-family:Heiti SC Light;font-size: 14px;">                             </span><span style="font-family:Menlo;font-size: 14px;">***</span>\n");
printf("<span style="font-size: 14px; font-family: Menlo;"> ***</span><span style="font-family:Heiti SC Light;font-size: 14px;">                             </span><span style="font-family:Menlo;font-size: 14px;">***</span>\n");
printf("********************\n");
}
void print_number()
{
for(int i=1;i<=30;i++)
{
printf("%2d ",i);
if(i%7==0)
{
printf("\n");
}
}
}
int main()
{
print_string();
print_number();
return 0;
}


2:

/*

 如何定义函数:

 

 返回值类型
函数名(参数列表)

 {

    //函数语句,函数体;函数体可以只有return语句,可以先写接口,调试过再写实现;

 }

 

 返回值类型

  返回关键字 return
语句可以有多条,但是以执行到的第一句为准;

 

 void 空类型,表示没什么东西返回;在调用函数的时候,不能用任何类型的数据来接受函数的返回值;

 

 int类型,或其他数据类型:return表达式的类型要和返回值类型保持一致;调用函数的时候定义的接收变量类型三者保持一致;

 

 函数名:要有意义(名字和干的事情相符合),符合标示符的定义;

 

 参数列表:可以有多个参数,也可以没有参数;

 (类型1
形参1,类型2
形参2,...)

 */

void print_number_count(int n)
{
for(int i=1;i<=n;i++)
{
printf("%2d ",i);
if(i%7==0)
{
printf("\n");
}
}
}

//增加参数,可以增加代码的扩展性;
void print_string()
{
printf("********************\n");
printf("****千锋是个好学校****\n");
printf("*****IOS 有前途*****\n");
printf("********************\n");
return ;//void类型的函数,return 语句可以省略;
}
int add(int a,int b)
{
return a+b;
}
int main()
{
int x=10,y=20,sum;
sum = add(x,y);
print_string();
printf("sum = %d\n",sum);
print_number_count(28);
add(x,y);//可以不用其他数据来接收返回值;函数调用会发生;
return 0;
}


3:

//函数执行过程

/*

 1:给形参分配空间;

 2:实参给形参赋值;

 3:形参参与运算;

 4:函数返回时,形参要销毁;

 */

int add(int a,int b)//形式参数;并没有自己的空间和内存;
{
return a+b;
}
//下面的函数不能完成交换,交换的是形参,形参返回时被销毁;
void swap(int a,int b)
{
int temp =a;
a = b;
b = temp;
}
int main()
{
int x=10,y=20;//实际参数;有确定的值和类型;
int sum;
sum = add(x,y);
printf("sum = %d\n",sum);
swap(x,y);
printf("x=%d,y=%d",x,y);
return 0;
}


//练习:是否是闰年,(只能被4正处,但是不能被100整除,或者能被400整除)

/*函数名:

 参数:入参,和出参
 更能:

 注意点:
 ...
 */

int isLeapYear(int year)
{
if (((year%4==0) || (year%400 == 0))
&& (year%100 != 0))
{
return 1;
}
else
{
return 0;
}
}
int main()
{
int n;
printf("请输入年份:\n");
scanf("%d",&n);
if(isLeapYear(n))
{
printf("%d是闰年",n);
}
else
{
printf("%d不是闰年",n);
}
return 0;
}


4:

/*

 函数在使用过程中注意点:

 1:函数的功能要单一

 2:命名要有意义

 3:参数要精简

 4:函数要合理注释

 */

/*
 main函数的2中写法;
 return 0;最好写一下,编程的规范性;
 */

int main(int argc,const char *argv[])
{
return 0;
}

int main()
{
return 0;
}


5:

/*

 变量的作用域

 局部变量和全局变量

 局部变量:定义在代码块中的变量叫局部变量,生命周期从定义开始,到定义所在的}结束;

 全部变量:不定义在{}里的变量;在编译的时候就存储了,全局都能用;能实现资源共享,但是很容易被其他函数修改;

 */

int add(int a,int b)
{
return a+b;
}
int main()
{
int x=10,y=20,sum;
sum = add(x,y);
printf("sum = %d\n",sum);
for(int i=0;i<4;i++)//在循环中定义的局部变量i,出循环不能访问;
{
printf("hello~\n");
}
{
int c=100;
printf("c = %d\n",c);//c = 100
}
// printf("c = %d\n",c);//不能访问;
{
int x=1000;
printf("x = %d\n",x);//访问代码块里面的内容 x = 1000
}//当遇到}里面定义的变量销毁;
return 0;
}


int gClassId = 1518;
int getId();//函数生命
int main()
{
printf("id = %d\n",gClassId);
getId();
return 0;
}
int getId()
{
return gClassId;
}

二:函数头文件

//

//  main.c

//四则运算,+,-,*,///可以将功能封装在main函数之外的.c文件里

#include <stdio.h>

#include "calculator.h”//调用函数声明的头文件

1:

/*

 如何声明:

 返回值类型
函数名(形参的类型列表);//形参可以只写类型,形参名只是参考文档;

 */

int main(int argc, const char * argv[]) {

int rst1,rst2,rst3,rst4;
rst1 = add(10,20);
rst2 = sub(21,10);
rst3 = mul(32,5);
rst4 = divl(32,2);

printf("add 10,20,rst=%d\n",rst1);
printf("sub 21,20,rst=%d\n",rst2);
printf("mul 32,5,rst=%d\n",rst3);
printf("divl 32,2,rst=%d\n",rst4);
gClassId = 100;//访问其他.c定义的全局变量;
return 0;
}

//

//  calculator.c//封装功能文件

#include "calculator.h"
int gClassId = 1518;//全局变量

int add(int a,int b)
{
return a+b;
}

int sub(int a,int b)
{
return a-b;
}

int mul(int a,int b)
{
return a*b;
}

int divl(int a,int b)
{
return a/b;
}

//

//  calculator.h//函数声明头文件

#ifndef _CALCULATOR_H_
//#ifndef:预编译指令,条件编译指令.如果没有定义这个头文件,那么就会执行#define到#endif;如果已经定义,就不会编译这个头文件;防止头文件重复包含引入的问题;
#define _CALCULATOR_H_

#include <stdio.h>
//extern 外部的,用来声明函数和变量,在声明函数的时候可以省略;声明变量的时候不可以省略
extern int add(int ,int );
int sub(int a,int b);
int mul(int a,int b);
int divl(int a,int b);
extern int gClassId;//声明了一个全局变量,
#endif /* defined(_CALCULATOR_H_) */
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息