一:函数的概念

二:函数的分类

#标准函数与自定义函数

##有返回值函数与无返回值函数

###有参函数与无参函数

三:函数的定义与调用

#函数原型(函数的声明)

四:从函数中返回


一:函数的概念

在我们正式了解函数之前,先看看在维基百科中对函数的定义。在维基百科中,函数的定义叫子程序。结构化程序设计的思想:把大问题分解成若干个小问题,每个小问题就是一个独立的子模块,以实现特定的功能,在C语言中,子模块的作用就是通过函数完成的。

二:函数的分类

C语言中有标准函数与自定义函数两大类。

1. 1 标准函数

#include<stdio.h>
int main()
{printf("helloworld");return 0;
}

以上一小段代码各位都应该挺熟悉吧,在我们C语言学习初步阶段就是这一段代码将我们领入C语言这个神奇的国度。在以上一小段代码中的“int main()”便是C语言中的标准函数,此外还有scanf等函数,这些标准函数都是C语言所自带的,可供大家直接使用。

1.2  自定义函数

在我们C语言代码编写过程中,可能会存在某个小问题需要重复完成多次的情况,若在编写过程中,同类问题多次重复编写程序的话那难免有些费时费力。而C语言中的自定义函数可以帮助我们很好地解决这些问题。这样光凭文字可能理解起来不是很形象,接下来给大家展示在解决同一问题的情况下使用自定义函数与否在编写过程中有多大的区别

试求1到10,20到30,35到45这三组数之和

#include<stdio.h>
int main()
{int iint sumfor(i=1;i<10;i++){sum += i;printf("从%d到%d的和为%d",1,10,sum);//循坏1求1到10的和}for(i=20;i<30;i++){sum += i;printf("从%d到%d的和为%d",20,30,sum);//循环2求20到30的和}for(i=35;i<45;i++){sum += i;printf(" 从%d到%d的和为%d",35,45,sum);//循环3求35到45的和}return 0;
}

以上为在使用循环语句来解决这一问题,在我看来,循环语句在C语言中是十分实用且有效的语句,但在解决这一问题显得略为繁琐。

下面让我们再看看自定义函数选手的表现如何吧。

#include<stdio.h>
void sum(int begin,int end)//定义函数
{int i;int sum;for(i>=begin;i<=end;i++)//for循环进行求和运算{sum += i;printf("%d到%d的和为%d",begin,end,sum);}
}int main()
{sum(1,10);//引用自定义函数sum(20,30);//引用自定义函数sum(35,45);//引用自定义函数return 0;
}

结果很明显,在解决这一问题上,自定义函数选手明显更加简洁明了,同样也很有效。想不到吧,小小的自定义函数竟有如此大的作用。诶,这时可能有人注意到了,出现了一个之前都没有见过的单词——void。各位先别急,接来下会给大家解答“void”和“int”这俩小玩意儿的区别

2 有返回值函数与无返回值函数

这里就给大家简单说一下,像int main()这样的函数执行完毕后,会向调用者返回一个执行结果,被称为函数的返回值。而void main()则不用向调用者返回这一返回值。

#include<stdio.h>
int main()
{printf("helloworld");return 0;//执行完毕后返回0
}
#include<stdio.h>
void main()
{printf("helloworld");//执行完毕后不返回任何值
}

3.有参函数与无参函数

1,无参函数

在函数的调用,定义和声明中均不带参数。在调用函数时不会把数据传送给被调用函数,此类函数通常被用来完成特定的功能,可以返回或不返回函数值。

#include<stdio.h>
/*
格式:类型说明 函数名()
{
//函数体
}*/int sum()
{//函数体
}

2,有参函数

在函数的定义和声明中都必须有参数。在主调函数调用被调函数时,主调函数必须把值传输给形参,以供背调函数使用

#include<stdio.h>
int max(int a,int b)//有参函数
{函数体
}

ps:参数在C语言中又分为实参和形参

什么是实参呢?

,函数后面括号中的参数称为“实参”,是我们真实传递给函数的参数,在调用有参函数时实参可以是常量,变量,表达式,函数等

无论实参是何种类型的量,在进行函数调用时必须都有确定的值,以便把这些值传送给形参。写一小段代码来帮助大家理解一下吧

#include<stdio.h>
int sum(int a,int b)
{sum = a + b;
}int main()
{int a = 51;int b = 200;int ret1 = sum(51,200);//实参为常量printf("%d",ret1);int ret2 = sum(a,b);//实参为变量int ret3 = sum(a + b,a - b);//实参为表达式int ret4 = sun(sun(1,1),249);//实参为函数return 0;
}

在上段代码中,在主函数中调用sum函数,sum函数后面括号中的值都会传输到代码开头的sum函数中进行运算,再将值返回到主函数中。

什么是形参呢?

根据我个人的拙见,形参在实参向其传输数据之前是无意义的,正如其名“形参”一样,只是形式上的参数。但它可以接收多个实参传输过来的值并根据函数体进行相应的处理。我们拿上文的一段代码来举一个例子吧。

#include<stdio.h>
void sum(int begin,int end)//其中的begin与end都是形参
{int i;int sum;for(i>=begin;i<=end;i++){sum += i;printf("%d到%d的和为%d",begin,end,sum);}
}int main()
{sum(1,10);//1和10为实参,1和10分别传输给begin和end进行处理sum(20,30);//20和30为实参,20和30分别传输给begin和end进行处理sum(35,45);//35和45为实参,35和45分别传输给begin和end进行处理return 0;
}

如注释一样,主函数中引用sum函数,在sum函数后括号中的实参传送到sum函数的定义中进行处理,再将处理后的结果返回给主函数中。

但我们需注意的是,形参只在函数中有用,如果在函数外部使用形参,这是会出现错误的。

同样的,咱们用上文的一段代码来进行演示

#include<stdio.h>
int sum(int a,int b)
{sum = a + b;
}int main()
{int a = 51;int b = 200;int ret1 = sum(51,200);//实参为常量printf("%d,%d",a,b);//此时a和b两个形参在函数外被使用,运行时会报错,显示未定义字符a和bprintf("%d",ret1);int ret2 = sum(a,b);//实参为变量int ret3 = sum(a + b,a - b);//实参为表达式int ret4 = sun(sun(1,1),249);//实参为函数return 0;
}

三,函数的定义与调用

1,函数原型(函数的声明)

细心的同学可能会发现本篇代码块与我们刚学习时有一点点不同的地方。这里我也不卖关子了,在我们之前的学习中在“#include<stdio.h.>之后就紧跟着int main()。而今天的代码块却不是这样,是为啥嘞。其实在我们c语言编译运行过程是从上至下的,若不将我们所需调用的函数在主函数前编写出来的话,在执行主函数时会报错,因为编译器识别不了你调用的函数是什么东西,代表什么意思,长什么样子。我们可以先对函数进行一个简单的声明,来确保后面的主函数在编译时不会出错。

#include<stdio.h>void sum(int a,int b)//对sum函数进行声明int main()
{sum += 1;//此处对sum的默认为int型,若开头无sum函数的声明,会与下面sum函数的类型冲突}void sum(int a,int a)//注意此处对sum的类型定义要与上面相同
{函数体}

四,从函数中返回

1,函数的返回值指的是在函数被调用后,执行函数中代码所得到的的结果通过return语句返回

return语句的一般格式为

return  表达式

而没有返回值的函数为空类型,就用void来表示

如:

#include<stdio.h>
void max()
{函数体
}int main()
{int a = max ()//函数max()的返回值被定义为void型,这里便接收不到它的值了}

2,C语言中return语句可以有多个,但是每次调用函数只能有一个return语句被执行,只有一个返回值。

3,函数一遇到return语句就立即返回,return语句后面的语句都不会被执行。有点强制结束函数执行的感觉。

//返回两个整数中较大的一个
#include<stdio.h>
int max(int a,int b)
{return 0//此处return语句返回0,后面的语句都不会执行if(a > b){printf("两个数中较大的一个是%d\n",a);}else{printf("两个数中较大的一个是%d\n",b);}
}

学到这里我也终于明白为什么我们之前学习过程中return语句总是放在最后了。

以上便是我个人在函数这一知识点所学习到的内容与收获,希望能对大家有所帮助,感谢观看,如有错误还希望指出。

谢谢大家!!!

c语言奇遇之初见函数相关推荐

  1. R语言使用download.file函数下载网络文件到本地(Download File from the Internet)

    R语言使用download.file函数下载网络文件到本地(Download File from the Internet) 目录 R语言使用download.file函数下载网络文件到本地(Down ...

  2. R语言stringr包str_dup函数字符串多次复制实战

    R语言stringr包str_dup函数字符串多次复制实战 目录 R语言stringr包str_dup函数字符串多次复制实战 #导入stringr包 #仿真数据

  3. R语言stringr包str_count函数计算字符串匹配个数实战

    R语言stringr包str_count函数计算字符串匹配个数实战 目录 R语言stringr包str_count函数计算字符串匹配个数实战 #导入stringr包 #仿真数据

  4. R语言使用R原生函数plot和lines可视化线图、并使用lty参数自定义线条类型、lwd自定义设置线条的粗细、col参数自定义线条颜色(Change R base plot line types)

    R语言使用R原生函数plot和lines可视化线图.并使用lty参数自定义线条类型.lwd自定义设置线条的粗细.col参数自定义线条颜色(Change R base plot line types) ...

  5. R语言ggpubr包ggsummarystats函数可视化分组条形图(自定义分组颜色、添加抖动数据点jitter、误差条)并在X轴标签下方添加分组对应的统计值(样本数N、中位数、四分位数的间距iqr)

    R语言ggpubr包ggsummarystats函数可视化分组条形图(自定义分组颜色.添加抖动数据点jitter.误差条error bar)并在X轴标签下方添加分组对应的统计值(样本数N.中位数med ...

  6. R语言使用t.test函数计算两组独立数据的t检验(Independent t-test)

    R语言使用t.test函数计算两组独立数据的t检验(Independent t-test) 目录 R语言使用t.test函数计算两组独立数据的t检验(Independent t-test) #仿真数据

  7. R语言plyr包round_any函数将向量数据近似到任意精度实战

    R语言plyr包round_any函数向量将数据近似到任意精度实战 目录 R语言plyr包round_any函数向量将数据近似到任意精度实战 #导入plyr包 #仿真数据

  8. R语言ggplot2使用geom_line函数geom_point函数可视化哑铃图、并对哑铃图进行排序(reorder dumbbell plot)

    R语言ggplot2使用geom_line函数geom_point函数可视化哑铃图.并对哑铃图进行排序(reorder dumbbell plot) 目录

  9. R语言stringr包str_detect函数检测字符串中模式存在与否实战

    R语言stringr包str_detect函数检测字符串中模式存在与否实战 目录 R语言stringr包str_detect函数检测字符串中模式存在与否实战 #导入stringr包

最新文章

  1. es分布式结构原理是什么?
  2. 在Word中调用外部程序两法
  3. asp.net夜话之五:Page类和回调技术
  4. java自定义键值对_KV键值对数据类型
  5. MATLAB实现多元线性回归预测
  6. c55x汇编语言,TMS320C55x汇编语言编程A.ppt
  7. SecureCRT远程登录ubuntu
  8. hdu 1394 线段树计算逆序数
  9. java容器类---概述
  10. NLP --- 产生式模型VS判别式模型
  11. 【转】健康,运动,习惯
  12. 马士兵老师Java虚拟机调优
  13. XP安装QQ提示安装包可能被非法改动无法安装
  14. 自学python在家干什么好_在家这么多天,职场人在家能自学什么?
  15. vscode生成的.BROWSE.VC.DB文件超大问题
  16. apicloud——云编译失败
  17. AutoCad 新建或打开对话框 经常变为命令提示行的解决办法!
  18. 机器学习:随机梯度下降法
  19. 视频分享 500 G JAVA视频网盘分享(JEECG开源社区)
  20. mysql内嵌插入语句_MySQL中添加或插入语句(Insert)的几种使用方式

热门文章

  1. 实验吧 天下武功唯快不破
  2. antd 实现 sidebar 左侧菜单·记
  3. HDU5266-pog loves szh III
  4. 如何在64位win10系统下通过virtualbox虚拟机安装苹果macOS 10.12
  5. spark-streaming统计各岗位招聘信息行数
  6. 妥妥的去面试之Android基础(四)
  7. 卷帘相机原理和卷帘门补偿(其中循环的理解)
  8. 1000元计算机配置方案,1000元赛扬J345低功耗主机推荐 2018最便宜电脑配置方案 (全文)...
  9. 周口科技学院计算机怎么样,周口科技学院具体怎么样?在网上看了很多,期盼能有个学长据实介...
  10. 凤凰大视野----冷暖人生: 记录平凡人的普通人生