打印

《C语言教程》14章 函数

[复制链接]
520|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
niuyaliang|  楼主 | 2015-3-17 20:23 | 只看该作者
编写一个函数不要忘记功能说明,这是函数的一部分,小雅在后面的教程中将省略,大家在工作中不能省略。同时不要忘记return语句,即使什么也不做,也得在函数结束前加上return语句。

#include <stdio.h>

/**********************************
* 功  能: 递归法求整数的阶层    *
* 函数名: fact                  *
* 参  数: int     一个整数      *
* 返回值: int     整数的阶层    *
**********************************/
int fact(int n)
{
    //终止条件
    if (n == 1) {
        return 1;
    }
    //递归调用n-1的阶层
    else {
        return n * fact(n-1);
    }
}

/**********************************
* 功  能: 计算整数的阶层        *
* 函数名: main                  *
* 参  数: (void)                *
* 返回值: (void)                *
**********************************/
int main(void)
{
    int num;
    int result;

    printf("请输入一个整数:");
    scanf("%d", &num);     //输入一个整数

    //求整数的阶层
    result = fact(num);
    printf("%d的阶层=%d\n", num, result);

    return 0;
}

使用特权

评论回复
板凳
niuyaliang|  楼主 | 2015-3-17 20:24 | 只看该作者
二、return和exit、assert的区别
return语句是结束当前函数。而exit是结束main()函数,即整个程序,一般都是在遇到非常错误时才调用exit()。assert()是一个宏定义,在assert.h中申明,用来在DEBUG方式诊断程序,当参数中的条件不成立时,中断main()函数。建议多多使用assert()。

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>

/**********************************
* 功  能: 申请内存空间          *
**********************************/
char *getMemory(size_t len)
{
    char *buffer;

    //len>=15时正常运行,否则异常退出
    assert(len >= 15);
   
    buffer = (char *)malloc(len);
    if (!buffer) {       //未申请到空间则异常退出
        exit(-1);
    }

    return buffer;       //正常返回
}

/**********************************
* 功  能: 教学测试主程序        *
**********************************/
int main(void)
{
    char *p;
    int num;

    while (1) {
        printf("请输入一个整数:");
        scanf("%d", &num);    //输入一个整数

        //申请空间
        p = getMemory(num);

        //拷贝字符串并输出
        strcpy(p, "www.quanxue.cn");
        printf("%s\n", p);
        free(p);     //这句千万不能忘记
    }

    return 0;
}


使用特权

评论回复
地板
niuyaliang|  楼主 | 2015-3-17 20:25 | 只看该作者
三、函数的申明
上面的例子中,main()都放在最后,如果放在前面,编译时就会告知某函数未定义。解决此问题就需要在main()前面申明一个后面的函数。申明时,参数可以只用类型,而不用参数名,甚至参数类型也不写。
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>

char *getMemory(size_t);    //申明后面要用的函数

/**********************************
* 功  能: 教学测试主程序        *
**********************************/
int main(void)
{
    char *p;
    int num;

    while (1) {
        printf("请输入一个整数:");
        scanf("%d", &num);    //输入一个整数

        //申请空间
        p = getMemory(num);

        //拷贝字符串并输出
        strcpy(p, "www.quanxue.cn");
        printf("%s\n", p);
    }

    return 0;
}

/**********************************
* 功  能: 申请内存空间          *
**********************************/
char *getMemory(size_t len)
{
    ......
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

212

主题

2427

帖子

7

粉丝