C语言学习第9天:函数(二)

局部变量

局部变量也成内部变量,在函数内部使用,不能被该函数外的代码使用

函数调用结束后,局部变量所占的内存自动释放

局部变量应该尽量定义在程序块的开头

全局变量

如果不初始化自动清0,局部变量如果不初始化会产生随机值;

对整个程序都是可见的

他不属于某个函数,而属于整个源文件

一般在main()函数之前声明全局变量

如不初始化,系统自动初始化为0

静态局部变量

只被初始化一次,在第一次进入函数时创建,退出函数时保留其值;

静态局部变量和全局变量一样,系统默认初始化为0;

函数与数组

1、数组元素作为实参传递

2、数组名作为实参传递

由于数组名就是数组的首地址。用数组名作函数参数进行传递实际上是地址的传递,即修改形参数组中的内容将相应的改变实参数组中的内容。

拓展:

sizeof(arr)/sizeof(arr[0]);

用函数实现排序;

#include <stdio.h>
#define SIZE 10
void Sort(int *p,int len){
    int temp;
    for (int i = 0; i < len; i++) {
        for (int j = len -1; j >= i; j--) {
            if (*(p + j) > *(p + j+ 1)) {
                temp = *(p + j);
                *(p + j) = *(p + j + 1);
                *(p + j + 1) = temp;
            }
        }
    }
}
void print(int *p,int len){
    for (int i = 0; i < len; i++) {
        printf("%d,",*(p + i));
    }
}
int main(int argc, const char * argv[]) {
    int arr[SIZE] = {1,3,2,6,5,4,0,9,8,7};
    print(arr,SIZE);
    printf("\n");
    Sort(arr,SIZE);
    printf("排序之后的结果:\n");
    print(arr, SIZE);
    return 0;

}

递归

在调用一个函数的过程中又出现直接或间接的调用该函数本身,就是函数的递归调用

可以把要解决的问题转换为新问题,新问题的解决办法与原来相同,只是规模有规律的递减

每个子问题必须比原来问题的规模更小。

递归实现:5!

#include <stdio.h>
int Recursion(int n){
    if (n == 1) {
        return 1;
    }
    else{
        return n * Recursion(n - 1);
    }
}
int main(int argc, const char * argv[]) {
    int a = 0;
    printf("请输入10以内的数值:\n");
    scanf("%d",&a);
    int result;
    result = Recursion(a);
    printf("%d! = %d\n",a,result);
    return 0;

}

时间: 2024-10-29 19:06:58

C语言学习第9天:函数(二)的相关文章

R语言学习(4)-环境和函数

环境和函数 1.环境 使用new.env函数创建环境 > an_environment <- new.env() 向环境中分配变量与列表相同 > an_environment[["pythag"]] <- c(12,15,20,21) > an_environment$root <- polyroot(c(6,-5,1)) > assign("moonday",weekdays(as.Date("1969/07/2

R语言学习-对象处理实用函数

R语言的对象处理实用函数可视为一个分析变量(或对象)的工具集,类似于Java中的反射功能,但使用起来更简单. 处理数据对象的实用函数见下表: 函数 用途 length(object) 显示对象中元素/成分的数量 dim(object) 显示某个对象的维度 str(object) 显示某个对象的结构 class(object) 显示某个对象的类或类型 mode(object) 显示某个对象的模式 names(object) 显示某对象中各成分的名称 c(object, object,-) 将对象合

C语言学习笔记:18_数组-二维数组

/* * 18_数组-二维数组.c * * Created on: 2015年7月6日 * Author: zhong */ #include <stdio.h> #include <stdlib.h> /** * 二维数组: * 为什么要用二维数组呢; * 例如: 网络班有2个班,每班有5人. * 要想存储一班的学生的年龄 定义一个一维数组搞定 int ages[5]={18,19,20,18,19}; * 然后将两个班中的所有年龄分开存入一个数组中 int classes[2]

C语言学习入门 (三) sizeof 函数、内存地址、数组

sizeof可以用来计算一个变量或者一个常量.一种数据类型所占的内存字节数. sizeof(10); char c = 'a'; sizeof(c); sizeof(float); 地址 1.计算机中的内存是以字节为单位的存储空间.内存的每一个字节都有一个唯一的编号,这个编号就称为地址. 凡存放在内存中的程序和数据都有一个地址,也就是说,一个函数也有自己的内存地址 2.  当定义一个变量时,系统就分配一个带有唯一地址的存储单元来存储这个变量.比如: char a = 'A';// A的ASCII

C语言学习(2)函数复习

主题1:函数 1.为什么要用函数 1.1.避免主函数变得庞杂,头绪不清,方便阅读和维护程序. 1.2.避免一个功能多次编写代码 2.模块化程序设计 1.1目的:简化程序设计的过程. 1.2好处:一次写好后,以后随用随调. 3.函数就是功能.每一个函数用来实现一个特定的功能.函数的名字应反映其代表的功能. 4.函数声明的作用是把有关函数的信息(函数名.函数类型.函数参数的个数与类型)通知编译系统,以便在编译系统对程序进行编译时,在进行到main函数调用该函数时知道它们是函数而不是变量或其他对象.此

C语言学习入门 (三) sizeof函数、内存地址、数组

sizeof可以用来计算一个变量或者一个常量.一种数据类型所占的内存字节数. sizeof(10); char c = 'a'; sizeof(c); sizeof(float); 地址 1.计算机中的内存是以字节为单位的存储空间.内存的每一个字节都有一个唯一的编号,这个编号就称为地址. 凡存放在内存中的程序和数据都有一个地址,也就是说,一个函数也有自己的内存地址 2.  当定义一个变量时,系统就分配一个带有唯一地址的存储单元来存储这个变量.比如: char a = 'A';// A的ASCII

C语言学习020:可变参数函数

顾名思义,可变参数函数就是参数数量可变的函数,即函数的参数数量是不确定的,比如方法getnumbertotal()我们即可以传递一个参数,也可以传递5个.6个参数 1 #include <stdio.h> 2 #include <stdarg.h>//实现可变参数需要的头文件 3 4 int getnumbertotal(int args,...){//可变参数要放在普通参数(args)的后面:...表示有很多个参数 5 va_list l;//用来保存传给函数的其他参数 6 va

黑马程序员——c语言学习心得——函数传递二维数组

黑马程序员——c语言学习心得——函数传递二维数组 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.定义指针的时候一定要初始化.   变量定义的时候给变量初始化,这是保证不出错的一个很好的习惯.尤其是在指针的使用上,如果我们没有给指针初始化,就会出现野指针,该指针的指向并不是我们所希望的,一旦错误的释放了这个指针,就会发生内存的访问.那么如何初始化指针变量呢,一般有以下几种方法:   1.初始化空指针   int* pInteger=N

黑 马 程 序 员_视频学习总结&lt;c语言&gt;----02 printf和scanf函数、基本语句和运算、流程控制、函数、数组、字符串

---------------------- ASP.Net+Unity开发..Net培训.期待与您交流! ---------------------- 一.printf函数 1.在使用peintf函数前必须加入#include <stdio.h>,使用它可以向标准输出设备(比如屏幕)输出数据,其中使用格式是 printf(“字符串”) :或者 printf(“字符串”, 格式符参数): 2.常用的格式符及其含义如图所示 3.格式符还可以添加输出宽度 二.scanf函数 1.在使用scanf函

C语言学习(二)——字符串和格式化输入输出

C语言学习(二)——字符串和格式化输入输出 1.char数组类型和空字符 C没有为字符串定义专门的变量类型,而是把它存储在char数组里.数组的最后一个位置显示字符\0.这个字符就是空字符,C用它来标记字符串的结束,其ASCII码的值为(或者等同于)0.C的字符串存储时通常以这个空字符结束,该字符的存在意味着数组的单元数必须至少比要存储的字符数多1.计算机可以自己处理大多数这些细节问题(例如,scanf( )会添加'\0'使得数组内容成为C字符串). 2.strlen( )函数与sizeof运算