目录:

一、函数

二、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. <转>LINQ To SQL 语法及实例大全

    一篇很全很强大的linq to sql 总结 来源:http://blog.csdn.net/pan_junbiao/article/details/7015633 目录(?)[-] LINQ to ...

  2. Oracle的字符替换函数translate用法

    参考文档如下:http://www.banping.com/2009/05/18/oracle_function_translate/ Oracle提供了一个字符替换函数translate,不同于re ...

  3. ##DAY14——StoryBoard

    •iOS下可视化编程分为两种⽅式:xib和storyboard. •在使用xib和storyboard创建GUI过程中,以XML文件格式 存储在Xcode中,编译时生成nib的二进制文件.在运行时, ...

  4. TCP/IP的网际层协议——ICMP

    ICMP经常被认为是IP层的一个组成部分.它携带于IP数据包中,ICMP封装在IP数据包内部: IP首部 ICMP数据包 下面是一份差错报文的例子: 最右边的+或者-代表该报文是查询报文还是错误报文. ...

  5. Redis Sentinel的Redis集群(主从&Sharding)高可用方案

    在不使用redis3.0之后版本的情况下,对于redis服务端一般是采用Sentinel哨兵模式,也就是一主多备的方式. 这里,先抛出三个问题, 问题1:单节点宕机数据丢失?问题2:多节点(节点间没有 ...

  6. XSS【跨站脚本攻击】

    从客户端(txt="<script><a href="www...")中检测到有潜在危险的 Request.Form 值. 如果你使用的是.NET 3. ...

  7. CSDN博客排名第一名,何许人也

    CSDN博客排名第一名,何许人也 一.提出问题 CSDN博客排名第一名,何许人也. 分析截止时间是:2013年12月19日星期四22:00. 二.博客网址 http://blog.csdn.net/p ...

  8. SQL2-子查询、join查询

    SQL常用高级查询包括:Join查询.子查询. 子查询: USE flowershopdb --子查询:在一个select语句使用另一个select 语句作为条件或数据来源. --查询块:一个sele ...

  9. egret命令行编译项目时 版本不对应的问题

    egret 命令行编译项目时 如使用 egret build -e 会出现版本不对应的问题 分析原因 A,B项目 A项目使用1.8的egret引擎, B项目使用2.5引擎 但本地引擎升级至2.5.5, ...

  10. VirtualBox 更改主机和虚拟机之间的鼠标切换热键

    VirtualBox 主机和虚拟机之间的鼠标切换热键 是 Right Ctrl.一般用惯VM Ware的都不太习惯,那么怎么改变VirtualBox鼠标切换热键呢? 1.点击菜单栏的   管理--&g ...