《C语言教程》14章 函数

[复制链接]
823|3
 楼主| niuyaliang 发表于 2015-3-17 20:22 | 显示全部楼层 |阅读模式
一、函数、参数、返回值

学习C语言就一直在和函数打交道,例如main函数、printf函数等。其它语言中的过程和函数,在C语言里面都称为函数。所谓“过程”也就是没有返回值的函数。


 楼主| niuyaliang 发表于 2015-3-17 20:23 | 显示全部楼层
编写一个函数不要忘记功能说明,这是函数的一部分,小雅在后面的教程中将省略,大家在工作中不能省略。同时不要忘记return语句,即使什么也不做,也得在函数结束前加上return语句。

  1. #include <stdio.h>

  2. /**********************************
  3. * 功  能: 递归法求整数的阶层    *
  4. * 函数名: fact                  *
  5. * 参  数: int     一个整数      *
  6. * 返回值: int     整数的阶层    *
  7. **********************************/
  8. int fact(int n)
  9. {
  10.     //终止条件
  11.     if (n == 1) {
  12.         return 1;
  13.     }
  14.     //递归调用n-1的阶层
  15.     else {
  16.         return n * fact(n-1);
  17.     }
  18. }

  19. /**********************************
  20. * 功  能: 计算整数的阶层        *
  21. * 函数名: main                  *
  22. * 参  数: (void)                *
  23. * 返回值: (void)                *
  24. **********************************/
  25. int main(void)
  26. {
  27.     int num;
  28.     int result;

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

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

  34.     return 0;
  35. }

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| niuyaliang 发表于 2015-3-17 20:24 | 显示全部楼层
二、return和exit、assert的区别
return语句是结束当前函数。而exit是结束main()函数,即整个程序,一般都是在遇到非常错误时才调用exit()。assert()是一个宏定义,在assert.h中申明,用来在DEBUG方式诊断程序,当参数中的条件不成立时,中断main()函数。建议多多使用assert()。

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <assert.h>
  4. #include <string.h>

  5. /**********************************
  6. * 功  能: 申请内存空间          *
  7. **********************************/
  8. char *getMemory(size_t len)
  9. {
  10.     char *buffer;

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

  18.     return buffer;       //正常返回
  19. }

  20. /**********************************
  21. * 功  能: 教学测试主程序        *
  22. **********************************/
  23. int main(void)
  24. {
  25.     char *p;
  26.     int num;

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

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

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

  37.     return 0;
  38. }


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| niuyaliang 发表于 2015-3-17 20:25 | 显示全部楼层
三、函数的申明
上面的例子中,main()都放在最后,如果放在前面,编译时就会告知某函数未定义。解决此问题就需要在main()前面申明一个后面的函数。申明时,参数可以只用类型,而不用参数名,甚至参数类型也不写。
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <assert.h>
  4. #include <string.h>

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

  6. /**********************************
  7. * 功  能: 教学测试主程序        *
  8. **********************************/
  9. int main(void)
  10. {
  11.     char *p;
  12.     int num;

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

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

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

  22.     return 0;
  23. }

  24. /**********************************
  25. * 功  能: 申请内存空间          *
  26. **********************************/
  27. char *getMemory(size_t len)
  28. {
  29.     ......
  30. }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

212

主题

2427

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部