目录:

一、函数

二、return与exit关键字

三、递归与递推

回到顶部

一、函数

1 函数由函数名、返回值、形参、函数体组成。

函数的使用分三个步骤:声明、定义、调用

2 语法格式:

返回值类型 函数名(参数){

。。。函数体;

}

3 函数声明

正常来件,函数在使用前一定要声明,由编译器从上到下,所以下面的代码调用上面的函数,不需要声明,但上面的代码调用下面的函数,就必须声明。

函数的声明:去掉函数体部分,保留返回值类型 函数名(参数);

如果返回值类型不是int的话,都要使用函数声明。

函数声明,可以省略参数,省略参数代表可以接收任意参数,如果不需要参数,使用void关键字。

4 函数调用

在准备使用函数的时候,执行函数名(参数),就调用了函数体的语句。没有参数()也不能省略。

有参数的函数在定义时使用的参数叫形参,当调用此函数时传人的参数叫实参。

调用函数时,需要函数的执行结果,这时就需要返回值类型标识结果的类型,函数体内部需要使用return关键字,标识具体的函数结果(返回值)。

如果函数有返回值,当调用函数时,通常会使用变量接收返回值。

5 函数使用时注意的问题:

如果函数执行后,不需要结果,就定义函数的返回值类型void(空),也就不需要return关键字。

如果执行函数需要参照一些特定的条件,就可以使用参数,如果有多个参数,之间用逗号分隔符。

练习:

1)求两个数的和。(求和函数、有返回值、参数2)

2)求两个数的差、积、商。定义成函数。

3)输入五组数,求和差积商。

4)输入一个分数,输出相应的级别。

输入一个级别,输出相应的分数。

分别输入5个数,5个级别。

 #include <stdio.h>
//声明函数
//void空 没有返回值
void sayHello();
//定义函数
void sayHello()
{
printf("hello world!\n");
}
//声明
void sayHello5();
//int func();
void sayHelloByCount(int count);//形参
void sayHelloByCount(int count)
{
for (int i = ; i < count; i++) {
printf("hello world!\n");
}
}
int getNumber()
{
return ;
}
//练习:求两个数的和
int sum(int n1,int n2)
{
int sum2 = n1 + n2;
return sum2;
}
//2)求两个数的差、积、商。定义成函数。
int cha(int n1,int n2)
{
return n1 - n2;
}
int ji(int n1,int n2)
{
return n1 * n2;
}
int shang(int n1,int n2)
{
return n1 / n2;
}
//3)输入五组数,求和差积商。
int intputNum()
{
int num;
printf("输入一个数:");
scanf("%d",&num);
scanf("%*c");//清除缓存
return num;
}
//输入一个分数,输出相应的级别。
int inputNum2()
{
int num;
printf("输入一个数:");
scanf("%d",&num);
return num;
}
void printFenshuByLevel(int i){
if (i >= ) {
printf("a\n");
}else if(i >= ){
printf("b\n");
}else{
printf("c\n");
}
}
//输入一个级别,输出相应的分数。
char inputChar(){
char ch;
printf("输入一个字母:\n");
scanf("%c",&ch);
scanf("%*c");//清除缓存
return ch;
}
void printLevelByChar(char ch){
switch (ch) {
case 'a':
printf("90~100\n");
break;
case 'b':
printf("60~90\n");
break;
case 'c':
printf("0~60\n");
break; default:
break;
}
}
int main(int argc, const char * argv[])
{
//调用函数
// sayHello();
// sayHello5();
// func();//int返回值可以不用声明
// sayHelloByCount(3);
// int num = getNumber();
// printf("num:%d\n",num);
// int i = 3;
// int j = 5;
// int s = sum(i,j);
// printf("sum:%d\n",s);
// int i = intputNum();
// int i2 = intputNum();
// int j = intputNum();
// int j2 = intputNum();
// printf("res:%d\n",cha(i, i2));
// printf("res:%d\n",ji(j, j2));
// for (int i = 0; i < 3; i++) {
// char c = inputChar();
// printLevelByChar(c);
// }
for (int i = ; i < ; i++) {
char i = inputNum2();
printFenshuByLevel(i);
}
//command +a 全选 ctrl + i 格式化
return ;
}

作业:使用函数重构昨天的作业。

使用参数的时候,相当于实参传递值给形参。

练习:有两个数i = 2,j = 3使用函数调换两个数的值,在调换函数中查看i和j的值,在main函数中查看调换后的值。

形参是数组时,采用两个参数,第一个参数是数组的长度,第二个参数是不指定数组长度的数组名。

练习:求一组数的和,最小值,最大值。

#include <stdio.h>
//有两个数i = 2,j = 3使用函数调换两个数的值,在调换函数中查看i和j的值,在main函数中查看调换后的值。
void swap(int m,int n){//实参传递给形参时是值传递
int temp = ;
temp = m;
m = n;
n = temp;
printf("swap函数中m:%d,n:%d\n",m,n);
}
int main()
{
int i = ;
int j = ;
printf("main调换之前i:%d,j:%d\n",i,j);
swap(i,j);
printf("main调换之后i:%d,j:%d\n",i,j);
return ;
}

回到顶部

二、return与exit关键字

1 exit(0)是一个函数,用于退出整个程序,需要包含stdlib.h

2 return可以作为返回值的关键字,终止当前函数的继续执行。

#include <stdio.h>
#include <stdlib.h>
int test(){
//exit(0);//终止整个程序
return ;//终止函数的继续执行
printf("函数结束了!\n");//这里不会被执行
}
int main()
{
printf("程序开始!\n");
test();
printf("程序结束了!\n");//如果test函数里加上exit(0),这里不会被执行
return ;
}

回到顶部

三、递归与递推

1 递归算法

递归的过程:一般通过函数或子函数实现。

递归的方法:在函数或子函数内部,直接或间接调用自己的算法。

递归有可能造成死循环或算法的复杂化,(运行次数过多),因此在使用递归时,必须注意:

1)必须有退出条件

2)必须保证递归后,算法简化

2 递归格式

int f1(int n){

if (n == 1) {//结束条件

return 1;

}

return n*f1(n - 1);

}

3 递推的概念与基本思想

给一个数的序列H0、H1、H2、....、Hn,若存在n0,当n > n0时,可以用等号(或大于号、小于号)将Hn与前面的某些Hi(0 < i < n)联系起来,这样的式子就叫递推关系。

int f2(int n){

int res = 1;

for (int i = 1; i <= n; i++) {

res = res * i;

}

return res;

}

10-C语言函数的更多相关文章

  1. 智能合约语言 Solidity 教程系列10 - 完全理解函数修改器

    这是Solidity教程系列文章第10篇,带大家完全理解Solidity的函数修改器. Solidity系列完整的文章列表请查看分类-Solidity. 写在前面 Solidity 是以太坊智能合约编 ...

  2. 不可或缺 Windows Native (10) - C 语言: 文件

    [源码下载] 不可或缺 Windows Native (10) - C 语言: 文件 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 文件 示例cFile.h #ifn ...

  3. C语言函数指针基础

    本文写的非常详细,因为我想为初学者建立一个意识模型,来帮助他们理解函数指针的语法和基础.如果你不讨厌事无巨细,请尽情阅读吧. 函数指针虽然在语法上让人有些迷惑,但不失为一种有趣而强大的工具.本文将从C ...

  4. C语言函数指针(转载)

    二.通常的函数调用 一个通常的函数调用的例子:/* 自行包含头文件 */void MyFun(int x); /* 此处的声明也可写成:void MyFun(int) */int main(int a ...

  5. IOS学习笔记06---C语言函数

    IOS学习笔记06---C语言函数 --------------------------------------------  qq交流群:创梦技术交流群:251572072              ...

  6. C语言函数名与函数指针详解

    一.通常的函数调用 一个通常的函数调用的例子: /* 自行包含头文件 */ void MyFun(int x); /* 此处的声明也可写成:void MyFun(int) */ int main(in ...

  7. Go语言函数

    目录 函数定义 函数返回多个值 函数参数 Go 语言函数值传递 Go语言函数引用传递 函数用法 函数作为值 匿名函数 闭包 方法 不定参数的函数 init函数 内建函数 函数调用机制 总结 函数定义 ...

  8. Go语言 函数,工程管理

    Go语言 函数,工程管理 1.无参无返回值函数的使用 package main import "fmt" func main() { // 无参无返回值函数的调用:函数名() fu ...

  9. 实际项目开发过程中常用C语言函数的9大用法

    C语言是当中最广泛的计算机编程语言,是所有计算机编程语言的祖先,其他计算机编程语言包括当前流行的Java语言,都是用C语言实现的,C语言是编程效率最高的计算机语言,既能完成上层应用开发,也能完成底层硬 ...

  10. C语言函数库

    C语言函数库 分类函数目录函数进程函数诊断函数接口子程序输入输出 str字符串操作函数mem操作存贮数组 数学函数 时间日期函数 转换函数 分类函数,所在函数库为ctype.h[top] int is ...

随机推荐

  1. JavaScript常用内置对象(window、document、form对象)

    由于刚开始学习B/S编程,下面对各种脚本语言有一个宏观的简单认识. 脚本语言(JavaScript,Vbscript,JScript等)介于HTML和C,C++,Java,C#等编程语言之间.它的优势 ...

  2. ZOJ 3794 Greedy Driver spfa

    题意: 给定n个点,m条有向边,邮箱容量. 起点在1,终点在n,開始邮箱满油. 以下m行表示起点终点和这条边的耗油量(就是长度) 再以下给出一个数字m表示有P个加油站,能够免费加满油. 以下一行P个数 ...

  3. 三维CAD塑造——基于所述基本数据结构一半欧拉操作模型

    三维CAD塑造--基于所述基本数据结构一半欧拉操作模型(elar, B_REP) (欧拉操作  三维CAD建模课程 三维CAD塑造 高曙明老师  渲染框架 brep 带洞 带柄 B_REP brep ...

  4. jQuery获取Select选择的Text(非表单元素)和 Value(表单元素)(转)

    jQuery获取Select选择的Text和Value: 语法解释: . $("#select_id").change(function(){//code...}); //为Sel ...

  5. ORACLE case when then

    Oracle CASE WHEN 用法介绍 1. CASE WHEN 表达式有两种形式 --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ...

  6. Hadoop学习之自定义二次排序

    一.概述    MapReduce框架对处理结果的输出会根据key值进行默认的排序,这个默认排序可以满足一部分需求,但是也是十分有限的.在我们实际的需求当中,往 往有要对reduce输出结果进行二次排 ...

  7. Windows主机和Linux虚拟机之间传输文件

    如果使用VirtualBox的增强功能, 可以实现两者之间文件相互拖拽. 但某些情况下, 比如增强功能安装遇到难以解决的问题, 或者Linux版本为server版本(例如Ubuntu Server发行 ...

  8. hdu 3498 whosyourdaddy 重复覆盖

    题目链接 重复覆盖的入门题, 和精确覆盖不一样, 删除的时候只删除一行多列. #include<bits/stdc++.h> using namespace std; #define pb ...

  9. SecureCRT, SecureFX连接Linux时中文乱码解决办法

    SecureCRT可以在GUI界面设置,但SecureFX没有设置界面.不过可以直接在配置文件中修改. 1. 找到配置文件夹(选项--全局选项,常规下的配置文件夹),默认是:C:\Documents  ...

  10. python进阶1--数据库支持

    数据库支持 1.连接和游标 1)connect函数,该函数有多个参数,而具体使用那个参数取决于数据库.--连接数据库 常用参数: dsn:数据源名称 user:用户名 password:用户密码 ho ...