C语言_函数

函数

1、函数构成

int main(int argc, const char * argv[]) {

// insert code here...

return 0;

}

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

{

函数体语句;

return 返回值;

}

2、函数分类

1)标准函数

由官方或第三方库提供的函数,可以直接调用,无需实现;

2)自定义函数

由程序员自己实现的函数;

3、编写函数的步骤

1)声明函数

写在头文件

2)实现函数

写在原文件

3)调用函数

C阶段,一般在主函数调用

【注意事项】

【1】C语言文件由头文件(.h)和原文件(.c)组成

【2】C语言所有函数的入口函数是主函数,主函数只能有一个

无参无返回值函数:

void 函数名();

编写一个函数,实现打印hello world;

编写一个函数,实现打印一首李白的诗;

无参有返回值函数

返回值类型  函数名();

编写一个函数,实现1+2+。。+100的和,将结果返回给主函数;

有参有返回值函数

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

编写函数,要求通过参数传递将两个数从主函数传到子函数,求两个数的最大公约数,用返回值返回结果。

4、变量的作用域和生命周期

作用域:变量在程序中的使用范围

生命周期:变量在时间上的有效范围

5、局部变量和全局变量

1)局部变量(在函数内部定义的变量):

作用域:从定义开始,到函数结束

生命周期:从定义开始生效,到函数调用结束失效

2)  全局变量(定义在所有函数之外的变量)

作用域:从定义开始,到文件结束

声明周期:从定义开始生效,到程序结束失效

3)静态变量

作用域:和局部变量一样

生命周期:和全局变量一样

内存分段:

数据段:全局变量和静态变量存储在数据段

只读数据段:字符串存储在只读数据段

堆区:程序猿手动申请的内存

栈区:局部变量

5、递归

用递归实现求1+2+3+。。。+100的和。

调用自身的函数称为递归函数。

调用自身的行为称为递归。

递归的步骤

1)找到递归的规律

2)找到能使递归结束的条件

3)执行递归

n = 5;

int sum(int n);

sum(5) = sum(4) + 5;

sum(4) = sum(3) + 4;

sum(3) = sum(2) + 3;

sum(2) = sum(1) + 2;

sum(1) = 1;

简单的递归DEMO

#include <stdio.h>

int sum(int n);

void hello(int n);

int main(int argc, const char * argv[]) {

// insert code here...

//printf("%d\n",sum(5));

hello(10);

return 0;

}

int sum(int n)

{

//    int ret = 0;

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

//        ret += i;

//    }

//

//    return ret;

if (n == 1)

{

return 1;

}

return sum(n-1) + n;

}

void hello(int n)

{

if (n == 0) {

return;

}

printf("hello world\n");

hello(n-1);

}

时间: 2024-10-04 13:48:35

C语言_函数的相关文章

Go语言之函数方法

在Go语言中,函数和方法不太一样,有明确的概念区分.在其他语言中,比如Java,一般来说,函数就是方法,方法就是函数.但是在Go语言中,函数是指不属于任何结构体.类型的方法.也就是说,函数是没有接收者的:而方法是有接收者的.我们说的方法要么是属于一个结构体的,要么属于一个新定义的类型的. 函数 函数和方法,虽然概念不同,但是定义非常相似.函数的定义声明没有接收者,所以我们直接在Go文件里.Go包之下定义声明即可. func main() {     sum := add(1, 2)     fm

Go语言示例-函数返回多个值

Go语言中函数可以返回多个值,这和其它编程语言有很大的不同.对于有其它语言编程经验的人来说,最大的障碍不是学习这个特性,而是很难想到去使用这个特性. 简单如交换两个数值的例子: package main import "fmt" func swap(a int, b int) (int, int) { return b, a } func main() { a := 1 b := 2 a, b = swap(a, b) fmt.Println(a) fmt.Println(b) } 输

C语言scanf函数详细解释(转)

函数名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]); scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息.可以读入任何固有类型的数据并自动把数值变换成适当的机内格式. 其调用格式为:      scanf("<格式化字符串>",<地址表>); scanf()函数返回成功赋值的数据项数,出错时则返回EOF. 其控制串由三类字符构成: 1.格式化说明

go语言学习-函数

函数声明 函数声明包括函数名,形参列表,返回值列表(可选),函数体组成 func test(parameters) (returns) { // ... } 其中 parameters 就是函数的形参列表,描述了函数的参数名和参数类型,可以没有参数但是这个括号不可以省略; returns就是返回值列表,描述了函数返回值的变量名(可选)和类型, 如果函数返回一个没有名字的参数或者没有返回值,就可以不要括号 这里的参数和返回值的类型都不能省略,不过可以简写(如果有的话) 例如: func add(x

Go语言入门——函数

写了快一个月的Go,已经没有什么陌生感了. 一行代码写完,不会在行尾本能的敲上“:”,直接Enter键换行: 定义变量把变量名放在前面,类型放在后面: 使用struct去定义自己想要的数据模型就好比定义一个Java中的model一样…… 这些不用可以经过大脑加工思考,就想自己还在写Java一样. 还记得当时在看<Go实战>的时候看到变量类型后置的声明方式,我还在极力吐槽这种不人性的语法,如果我已经站在了真香的队伍里,和其他的真香同学别无二致. 感慨,人的适应能力真的强?? 作为一个Java重度

[C/C++基础] C语言常用函数sprintf和snprintf的使用方法

Sprintf 函数声明:int sprintf(char *buffer, const char *format [, argument1, argument2, -]) 用途:将一段数据写入以地址buffer开始的字符串缓冲区 所属库文件: <stdio.h> 参数:(1)buffer,将要写入数据的起始地址:(2)format,写入数据的格式:(3)argument:要写的数据,可以是任何格式的. 返回值:实际写入的字符串长度 说明:此函数需要注意缓冲区buffer溢出,要为写入的arg

C语言strlen()函数用法

C语言strlen()函数:返回字符串的长度 头文件:#include <string.h> strlen()函数用来计算字符串的长度,其原型为:unsigned int strlen (char *s);  s为指定的字符串 eg: #include<stdio.h> #include<string.h> int main() { char *str1 = "http://see.xidian.edu.cn/cpp/u/shipin/"; char

C语言学习-函数和递归函数

C源程序是由函数组成的,有且只有一个主函数(main()函数). 一.函数 1.自定义函数的书写格式: 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,…) { 函数体 }例如: 1 include <stdio.h> 2 void test(); 3 4 int main() { 5 test(); 6 return 0; 7 } 8 9 void test() { 10 11 printf("hello world!"); 12 13 } 2.定义函数的

C语言基础 函数--思想的体现

1.C语言由函数组成,main函数又称主函数,是程序的入口. 1.1函数定义:    1.1.1    格式:        返回值类型 函数名(形式参数列表)        {            函数体        }     1.1.2    函数名:  不允许相同 1.1.3    参数注意点:        1.形式参数: 定义函数时函数名后面括号中的参数,简称形参        2.实际参数: 调用函数时传入的具体数据,简称实参        3.实参个数必须等于形参个数