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_) */
练习:
/*
******************
*** ***
**** ****
******************
日历显示
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_) */
相关文章推荐
- Mootools 1.2教程 函数
- autoit InputBox 函数
- 文件遍历排序函数
- C#虚方法的声明和使用实例教程
- Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
- ASP下经常用的字符串等函数参考资料
- PostgreSQL教程(五):函数和操作符详解(1)
- DOS批处理 函数定义与用法
- asp Chr 函数 数字转字母的方法
- Lua中的函数精讲笔记
- Lua中的闭合函数、非全局函数与函数的尾调用详解
- Lua中调用C++函数示例
- Lua和C语言的交互详解
- Lua实现split函数
- Lua常用时间函数使用实例
- Lua函数与字符串处理简明总结
- Lua学习笔记之表和函数
- Lua中实现sleep函数功能的4种方法
- Lua函数用法研究
- Lua基础教程之赋值语句、表达式、流程控制、函数学习笔记