1.函数的定义和声明

函数定义的语法:

函数类型 函数名(形式参数表){
函数体
}

函数的声明

函数返回值类型 函数名(变量1数据类型, 变量2数据类型,
变量n数据类型)

函数的调用

函数名(变量1, 变量2,
变量n)

函数调用时注意事项:

  • 函数调用的实参个数必须与形参个数相同。
  • 实参与形参按照在参数表中的位置一一对应传值,实参与形参的名称是否相同对调用传值无任何影响。
  • 实参与形参对应位置上的数据类型应该一致。
  • 对于无参数函数,即形参表为void的函数,函数调用时实参表必须为空,不能有任何内容。

当调用函数的位置在被调用函数之后,则可以不进行声明;反之则需要先声明,再调用。
以下案例可以不进行声明:

#include<stdio.h>double max(double a, double b) {return a > b ? a:b;
}
void main(){double a = 1.3;double b = -5.6;printf("%.1lf和%.1lf的较大值为%.1lf\n", a, b, max(a, b));
}

以下案例,则需要进行先声明,再调用:

#include<stdio.h>
double max(double, double);void main(){double a = 1.3;double b = -5.6;printf("%.1lf和%.1lf的较大值为%.1lf\n", a, b, max(a, b));
}
double max(double a, double b) {return a > b ? a:b;
}

2.递归函数

递归函数:在定义一个函数的过程中直接或间接地调用了被定义的函数本身。
递归函数一般分为两类:公式递归和非公式递归。

//公式递归
#include<stdio.h>
long l_sum(int n) {//求1至n的和if (n == 1) return 1;else{return  l_sum(n - 1) + n;}
}
//非公式递归
#include<stdio.h>
void hanoi(int n, char a, char b, char c) {// 汉塔诺问题if (n == 1) {printf("%c--->%c\n", a, b);}else{hanoi(n - 1, a, c, b);printf("%c--->%c\n", a, b);hanoi(n - 1, c, b, a);}
}void main(){hanoi(3, 'A','B' ,'C');
}

3.指针函数

函数返回值是指针类型的函数称为指针函数。语法如下:

数据类型 *函数名称(形参表) {
函数体
}

3.1 指针函数例子1——求字符串数组中最长字符串

#include<stdio.h>
#include<string.h>
char *max_string_len(char *string[], int n){// 求给定的字符的指针数组中,字符长度最长的字符串。n为指针数组个数int i, posion, max_l;posion=0;max_l=strlen(string[0]);for (i = 0; i < n; i++){if (strlen(string[i]) > max_l){max_l = strlen(string[i]);posion = i;}}return string[posion];
}void main(){char *pstring[4]={"abc", "peculiar", "accent", "rural"};printf("%s\n", max_string_len(pstring, 4));
}

3.2 指针函数例子1——求学生等级人数

#include<stdio.h>
#define N 6
void main(){int flag(int, int);void output(int *, int);int s1, s2, i;static int r[5];for (i = 0; i < N; i++){scanf("%d%d", &s1, &s2);r[flag(s1, s2)]++;}output(r,5);
}int flag( int s1, int s2){// 根据传入的两门课的成绩,求平均值,并返回对应的等级。int ave;ave = (s1 + s2) / 2;if (ave >= 90) return 0;else if (ave >= 80) return 1;else if (ave >= 70) return 2;else if (ave >= 60) return 3;else return 4;
}void output(int * p, int n){// 给定一个指针和整数n,从而实现逐个打印数组中元素的值int i;for (i = 0; i < n; i++){printf("%d  ", *(p + i));}
}

3.3 指针数组和数组指针

  • 数组指针:指向数组的指针,指针指向数组首元素地址的指针。例子: int (*p)[5]
  • 指针数组: 存放指针的数组,一般用来存放字符串。例子: char *p[5]。

4.函数案例分享

4.1 求1+2+…+n的和

int sum(int n){//求1+2+...+n的和int i, s = 0;for (i = 1; i <= n; i++){s = s + i;}return s;
}

4.2 绘制指定数量的*

void pstar(int n){// 绘制指定数量的*for (int i = 1; i <= n; i++){printf("*");}
}

4.3 求n的阶乘

long f(int n){//求n的阶乘long s = 1l;for (int i = 1; i <= n; i++){s = s * i;}return s;
}

4.4 绘制n个字符c

void pchar(char c, int n) {// 绘制n个字符cfor (int i = 1; i <= n; i++){printf("%c",c);}
}

4.5 交换两个变量的值

void swap(int *p1, int *p2){ //传的是指针,实际的地址参数,与实参共享空间,实际值会发生改变int temp;temp = *p1;*p1 = *p2;*p2 = temp;
}

4.6 哥巴赫猜想

任一大于2的偶数都可写成两个质数之和。

#include<stdio.h>
#include<math.h>
int is_prime(int n){ //判断是否为素数,如果是素数返回1,否则0int i;for (i = 2; i <= sqrt(n); i++){if (n % i == 0) return 0;}return 1;
}void main(void){int i, n;scanf("%d", &n);for(i = 3; i < n / 2 ; i += 2){if (is_prime(i) && is_prime(n - i)){printf("%d + %d = %d\n", i, n - i, n);break;}}
}

C语言中自定义函数的使用和案例分享相关推荐

  1. c语言中自定义函数返回数组,C语言自定义函数返回数组的方法(图文详解)

    C语言自定义函数返回数组的方法(图文详解) 最近看到一些同学问题,有提到说:如何在一个函数中返回数组呢? 能否直接在自定义 函数中,写成char *类型返回值,直接返回呢?,代码如下: 直接返回str ...

  2. C语言中自定义函数返回数组类型

    相信大家在C语言中写一些函数的返回值用到了void,int,char,double等等,但是好像没有遇到数组类型的,确实在C语言直接返回数组类型,是会报错的.具体的原因只要大家学习了指针还是可以理解的 ...

  3. c语言中自定义函数的流程图这么画,C语言问题:有函数调用的流程图怎么画?

    传统 C++ #include <assert.h> //设定插入点 #include <ctype.h> //字符处理 #include <errno.h> // ...

  4. R语言编写自定义函数自定义ggplot图像中的图例(legend)的位置、图例标题、键值、文本字体大小(title、text、key)、颜色标识的大小、点形状pch的大小

    R语言编写自定义函数自定义ggplot图像中的图例(legend)的位置.图例标题.键值.文本字体大小(title.text.key).颜色标识的大小.点形状pch的大小 目录

  5. R语言编写自定义函数、评估回归模型预测变量的相对重要性(Relative importance)、通过在所有可能的子模型中添加一个预测变量而获得的R方的平均增加、评估预测变量的重要度、并通过点图可视化

    R语言编写自定义函数.评估回归模型预测变量的相对重要性(Relative importance).通过在所有可能的子模型中添加一个预测变量而获得的R方的平均增加.来评估预测变量的重要程度.并通过点图可 ...

  6. C语言中的函数(重点介绍自定义函数)

    C语言中的函数分为库函数和自定义函数,本篇重点介绍自定义函数中的函数调用 函数由一个或多个语句块组成,负责完成某项特定任务, 相较于其他代码,具有相对的独立性,一般会有返回值和输入参数,提供对过程的封 ...

  7. C语言中的函数指针、函数的直接/间接调用、C# 委托(自定义委托、内置泛型委托、委托的实例化、委托的一般使用(模板方法、回调方法)、泛型委托、多播委托、同步/异步使用委托)

    文章目录 C语言中的函数指针 函数的直接调用与间接调用 Java中没有与委托对应的功能实体 C# 委托 C# 自定义委托类型 C# 内置泛型委托类型 委托的实例化 委托也支持泛型的使用 委托的一般使用 ...

  8. python定义函数prime判断是否是素数_用自定义函数判断素数 用C语言编写自定义函数prime(int x),判断x是否为素数?...

    用C语言编写自定义函数prime(int x),判断x是否为素数? int prime(int x) { int i,k k=(int)sqrt( (double)x ) for(i=2i&l ...

  9. python语言中有哪些函数_Python语言中的函数

    本文主要向大家介绍了Python语言中的函数,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 学了 Python 中的数据类型,语句,接下来就来说一下 Python 中的函数,函数 ...

最新文章

  1. 2021年大数据常用语言Scala(三十四):scala高级用法 异常处理
  2. 美国研发出百万兆级计算机 Summit,“最强超算”竞争加剧
  3. java代码讲解_Java基础系列-代码块详解
  4. loginform登录表单 vs_【VSRC唯科普】穿越网页表单与登录窗口的采集(第9/14篇)...
  5. 如何打造不怕被嗅探的3389登陆
  6. 详解JSONObject.parseObject和JSONObject.fromObject——Web网络系列学习笔记
  7. dockerfile源码安装mysql_docker容器详解五: dockerfile实现tomcat环境以及源码安装mysql...
  8. 文献引用的标准格式_外语论文文献引用格式—APA Style
  9. 7-3 银行排队问题之单队列多窗口服务 (25 分)
  10. 计算机基础及应用笔试,计算机基础及应用测试笔试题
  11. CSS中可以让文字在水平和垂直方向上重叠的两个属性
  12. 怎么高速旋转_洗衣机怎么选比较好,滚筒洗衣机和波轮洗衣机哪种更好?
  13. 类的加载器ClassLoader及其示例
  14. IIS6/IIS7无法打开IIS管理器的解决方法。
  15. 迭代局部搜索算法(Iterated local search)
  16. 跑深度模型的显卡_不止显卡!这些硬件因素也影响着你的深度学习模型性能
  17. 未来第五代计算机的发展方向,走进新时代 从五代酷睿看未来电脑发展
  18. RAKsmart:Windows修改远程端口号的方法
  19. windows10系统自带linux子系统(WSL)的安装目录
  20. Abbirb120型工业机器人_工控产品-ABB IRB120工业机器人-IRB120

热门文章

  1. Win10睡眠唤醒后,有线网络已连接未识别,必须要禁用再启用解决办法
  2. IE浏览器打开页面时,出现下载对话框的解决方法
  3. 工作总结8:从安卓调整到服务端后的思考
  4. 中南林业科技大学2012寒假放假时间安排
  5. SSD-Mobilenet 结果准确率检验
  6. nginx 配置ssl
  7. R语言rvest包3步爬取中国天气网国内所有城市(县)7天实时天气预报数据
  8. 旭锋科技制造信息管理系统--客户端主页面
  9. RSA和RSA2签名算法区别
  10. 阅读心得6:《首次公开!菜鸟弹性调度系统的架构设计》