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_) */



0 0
原创粉丝点击