06==函数(头文件,声明,封装)
来源:互联网 发布:网络用语盘点 编辑:程序博客网 时间:2024/06/03 17:14
#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_) */
- 06==函数(头文件,声明,封装)
- 头文件里的函数,只是声明
- 查找头文件中相同函数声明--用shell实现
- c/c++常见函数及其声明的头文件
- C语言头文件函数声明是否加extern
- 头文件重复声明,变量重复声明
- 头文件和前置声明
- 头文件的两个声明
- memory.h头文件封装
- <C语言>头文件封装
- C++ primer 摘要《extern、变量函数声明与定义、头文件、动态分配与释放》20090119
- 函数的声明和实现都在头文件中的问题——个人小结
- c++模板类/模板函数的声明与定义应该放在头文件里
- 有关多平台的延时函数应用例子和声明的头文件
- 在类的头文件中声明成员变量和成员函数。
- c++模板类/模板函数的声明与定义应该放在头文件里
- 编程好习惯4——在头文件中提供函数声明
- c++模板类/模板函数的声明与定义应该放在头文件里
- hdu5412--CRB and Queries(整体二分)
- 05==数组(查找,添加,删除,排序)
- ZOJ3876 May Day Holiday
- VC中基于Windows的精确定时
- javamail发送邮件
- 06==函数(头文件,声明,封装)
- c#中整型转为字符串型
- UI初级第七课 表视图的使用——iOS学习连载22
- 求余
- java初体验和基本语法问题记录
- Spring MVC form handling example
- Console.Read();
- Rust之语法<1>变量绑定
- 第一篇博客