C语言数组和函数

简介: C语言数组和函数

一、数组

1、一维数组

#include <stdio.h>
int main() {
    //int arr[5];  //数组声明语句,数组里包含5个整数类型的存储区
    //int arr[5] = {1, 2, 3, 4, 5};   //数组初始化的方法
    //int arr[5] = {1, 2, 3, 4, 5, 6, 7};   //没有对应存储区的初始化数据自动被忽略
    //int arr[5] = {1, 2, 3};  //没有对应初始化数据的存储区会自动被初始化成0
    int arr[] = {1, 2, 3, 4, 5};  //如果初始化数组时省略了数组里包含的存储区个数则存储区个数就是初始化数据的个数
    int num = 0;
    //arr[2/*有效下标*/] /*代表数组里下标为2的存储区*/ = 10;
    /*for (num = 0;num <= 4;num++) {
        arr[num] = num;
    }*/
    for (num = 4;num >= 0;num--) {
        printf("%d ", arr[num]);
    }
    printf("\n");
    int arr[5] = {0};
    //数组名称代表数组里第一个存储区的地址
    printf("arr是%p\n", arr);
    printf("&arr[0]是%p\n", &arr[0]);
    printf("sizeof(arr)是%d\n", sizeof(arr));  //对数组名称进行sizeof计算的结果是数组里所有存储区的总大小    
    return 0;
}


2、一维数组练习

#include <stdio.h>
int main() {
    int arr[5] = {0};
    int val = 0, num = 0;
    printf("请输入一个数字:");
    scanf("%d", &val);
    for (num = 4;num >= 0;num--) {
        //从后向前往每个存储区里
        //存放拆出来的一个数位内容
        arr[num] = val % 10;   //得到最右边数位内容并记录到循环变量做下标的存储区里
        val /= 10;    //丢掉最右边数位
        if (!val) {
            //处理不需要继续循环的情况
            break;
        }
    }
    //把数组里记录的每个数位内容显示在
    //屏幕上
    //num代表最左边的数位内容所在的存储区下标
    for (num = num;num <= 4;num++) {
        printf("%d ", arr[num]);
    }
    printf("\n");
    return 0;
}


3、二维数组声明

#include <stdio.h>
int main() {
    int arr[3/*分组个数*/][2/*分组里的存储区个数*/];   //二维数组声明
    int row = 0, col = 0, cnt = 1;
    arr[1/*有效的组下标*/][0/*有效的组内下标*/] = 10;
    for (row = 0;row <= 2;row++) {  //循环变量代表所有组下标
        for (col = 0;col <= 1;col++) {  //循环变量代表所有组内下标
            arr[row][col] = cnt;
            cnt++;
        }
    }
    return 0;
}


4、二维数组初始化

#include <stdio.h>
int main() {
    //int arr[3][2] = {1, 2, 3, 4, 5, 6};  //把二维数组当做一维数组进行初始化
    //int arr[3][2] = {{1, 2}, {3}, {5, 6}};  //把初始化数据进行分组,每组初始化数据用来初始化一组存储区
    //int arr[][2] = {1, 2, 3, 4, 5};   //5个初始化数据至少需要3组存储区,如果省略数组声明里的分组个数则计算机就会分配三组存储区
    int arr[][2] = {{1}, {2}, {3}};  //初始化数据分为三组,如果省略数组声明里的分组个数则计算机也会分配三组存储区
    int row = 0, col = 0;
    for (row = 0;row <= 2;row++) {
        for (col = 0;col <= 1;col++) {
            printf("%d ", arr[row][col]);
        }
        printf("\n");
    }
    return 0;
}


5、二维数组组名

#include <stdio.h>
int main() {
    int arr[3][2] = {0};
    printf("arr是%p\n", arr);   //二维数组名称可以代表数组里第一个存储区的地址
    printf("&arr[0][0]是%p\n", &arr[0][0]);
    printf("sizeof(arr)是%d\n", sizeof(arr));  //对二维数组名称进行sizeof计算结果是二维数组里所有存储区的总大小
    printf("arr[1]是%p\n", arr[1/*组下标*/]/*代表组下标为1的组里最前面那个存储区的地址*/);
    printf("&arr[1][0]是%p\n", &arr[1][0]);
    printf("sizeof(arr[1])是%d\n", sizeof(arr[1]));   //结果是一组存储区的总大小
    return 0;
}
运行结果:
arr是007DF830
&arr[0][0]是007DF830
sizeof(arr)是24
arr[1]是007DF838
&arr[1][0]是007DF838
sizeof(arr[1])是8


6、二维数组练习

#include <stdio.h>
int main() {
    int arr[5][5] = {0};
    int row = 0, col = 0;
    for (row = 0;row <= 4;row++) {
        for (col = 0;col <= 4;col++) {
            //按顺序处理二维数组里的每个存储区
            if (row == 0 && col < 4) {
                //组下标为0,组内下标小于4的
                //存储区里应该放1
                arr[row][col] = 1;
            }
            else if (row < 4 && col == 4) {
                //组下标小于4,组内下标等于4
                //的存储区里应该放2
                arr[row][col] = 2;
            }
            else if (row == 4 && col >= 1) {
                //组下标是4,组内下标大于等于1
                //的存储区里应该放3
                arr[row][col] = 3;
            }
            else if (row >= 1 && col == 0) {
                //组下标大于等于1,组内下标是0
                //的存储区里应该放4
                arr[row][col] = 4;
            }
        }
    }
    //把二维数组里所有存储区的内容从前向后
    //每组显示在一行里
    for (row = 0;row <= 4;row++) {
        for (col = 0;col <= 4;col++) {
            printf("%d", arr[row][col]);
        }
        printf("\n");
    }
    return 0;
}
运行结果:
11112
40002
40002
40002
43333


二、函数

1、普通函数

#include <stdio.h>
void func(void) {
    int val = 100;   //不同函数里的变量可以重名
}
int main() {
    int val = 10;    //不同函数里的变量可以重名
    printf("val是%d\n", val);  //不可以使用其他函数里的变量
    return 0;
}


2、带返回值函数

#include <stdio.h>
void func(void) {
    int val = 100;   //不同函数里的变量可以重名
}
int main() {
    int val = 10;    //不同函数里的变量可以重名
    printf("val是%d\n", val);  //不可以使用其他函数里的变量
    return 0;
}


3、带参数函数

#include <stdio.h>
void print(int val/*形式参数*/) {
    printf("数字是%d\n", val);
}
int main() {
    print(7/*实际参数*/);  //函数调用的时候计算机会把7放在形式参数val的存储区里
    print(5 + 3);
    return 0;
}
#include <stdio.h>
int add(int val, int val1) {  //每个形式参数的类型名称都不可以省略
    return val + val1;
}
int main() {
    int val = add(6, 3);
    printf("求和结果是%d\n", val);
    return 0;
}
#include <stdio.h>
void func(int val, int val1) {
    printf("%d X %d = %d\n", val, val1, val * val1);
}
int main() {
    /*func(1, 9);
    func(2, 8);
    func(3, 7);
    func(4, 6);
    func(5, 5);*/
    int num = 0;
    for (num = 1;num <= 5;num++) {
        func(num, 10 - num);
    }
    return 0;
}
运行结果:
1 X 9 = 9
2 X 8 = 16
3 X 7 = 21
4 X 6 = 24
5 X 5 = 25


4、鸡兔同笼问题

#include <stdio.h>
int rabbit(int heads, int legs) {
    int num = 0;
    for (num = 0;num <= heads;num++) {
        if (4 * num + 2 * (heads - num) == legs) {
            return num;
        }
    }
    return -1;
}
int main() {
    int heads = 0, legs = 0, ret = 0;;
    printf("请输入头和脚的数量:");
    scanf("%d%d", &heads, &legs);
    ret = rabbit(heads, legs);
    if (ret >= 0) {
        printf("兔子是%d只,鸡有%d只\n", ret, heads - ret);
    }
    else {
        printf("没有找到答案\n");
    }
    return 0;
}


5、数组做函数参数

#include <stdio.h>
void print(int arr[], int size) {
    int num = 0;
    for (num = 0;num <= size - 1;num++) {
        printf("%d ", arr[num]);
    }
    printf("\n");
}
int main() {
    int arr[] = {1, 2, 3, 4, 5};
    print(arr, 5);    //和数组形式参数配对的实际参数必须是一个地址
    return 0;
}


6、输入输出参数

#include <stdio.h>
void neg(int arr[], int size) {
    int num = 0;
    for (num = 0;num <= size - 1;num++) {
        arr[num] = 0 - arr[num];
    }
}
int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int num = 0;
    neg(arr, 5);
    for (num = 0;num <= 4;num++) {
        printf("%d ", arr[num]);
    }
    printf("\n");
    return 0;
}


7、函数声明

#include <stdio.h>
double add(double , double );//定义的函数在后面,前面用到了就需要声明一下
int main() {
    int val = add(3, 8);
    printf("val是%d\n", val);
    return 0;
}
double add(double val, double val1) {
    return val + val1;
}


8、exit()退出函数

#include <stdio.h>
#include <stdlib.h>
void func(void) {
    printf("2\n");
    //return ;//退出该函数
    exit(0);//结束程序
    printf("3\n");
}
int main() {
    printf("1\n");
    func();
    printf("4\n");
    return 0;
}

9、递归函数()

#include <stdio.h>
void print(int max) {
    if (max == 1) {
        //处理最大数字是1的情况
        //这种情况不能再分解了
        printf("1 ");
        return ;  //分支必须保证函数可以结束
    }
    print(max - 1);   //显示1到max - 1之间所有整数,采用递归调用语句实现的
    printf("%d ", max);
}
int main() {
    int max = 0;
    printf("请输入最大数字:");
    scanf("%d", &max);
    print(max);
    printf("\n");
    return 0;
}
运行结果:
请输入最大数字:8
1 2 3 4 5 6 7 8


#include <stdio.h>
int fei(int sn) {
    if (sn <= 1) {
        //计算编号为0和编号为1的两个数字
        return 1;
    }
    return fei(sn - 2)/*计算编号为sn - 2的数字*/ + fei(sn - 1)/*计算编号为sn - 1的数字*/;
}
int main() {
    int sn = 0;
    printf("请输入一个编号:");
    scanf("%d", &sn);
    printf("结果是%d\n", fei(sn));
    return 0;
}
目录
相关文章
|
18小时前
|
存储 编译器 C语言
C语言之数组
C语言之数组
24 0
|
18小时前
|
C语言
每天一道C语言编程(数组操作)
每天一道C语言编程(数组操作)
5 0
|
18小时前
|
C语言
每天一道C语言编程(第一弹~):数组
每天一道C语言编程(第一弹~):数组
8 0
|
18小时前
|
存储 编译器 C语言
C语言:字符函数 & 字符串函数 & 内存函数
C语言:字符函数 & 字符串函数 & 内存函数
15 2
|
18小时前
|
机器学习/深度学习 C语言
C语言三维数组的创建
该代码片段展示了如何在C语言中创建一个动态的3D数组。由于`n`在编译时未知,不能直接声明为`int f[n][n][n]`。正确的方法是使用`malloc`进行动态内存分配。首先分配`n`个`int **`,然后对每一层分配`n`个`int *`,最后每个元素分配`n`个`int`。之后可以使用这个3D数组,并在完成后正确释放内存。
11 2
|
18小时前
|
缓存 安全 编译器
【C 言专栏】C 语言函数的高效编程技巧
【5月更文挑战第1天】本文探讨了C语言中函数的高效编程技巧,包括函数的定义与作用(如代码复用和提高可读性)、设计原则(单一职责和接口简洁)、参数传递方式(值传递、指针传递和引用传递)、返回值管理、调用约定、嵌套与递归调用,以及函数优化技巧和常见错误避免。掌握这些技巧能提升C语言代码的质量和效率。
【C 言专栏】C 语言函数的高效编程技巧
|
18小时前
|
C语言
pta浙大版《C语言程序设计(第3版)》 习题6-4 使用函数输出指定范围内的Fibonacci数 (20分)
pta浙大版《C语言程序设计(第3版)》 习题6-4 使用函数输出指定范围内的Fibonacci数 (20分)
|
18小时前
|
C语言
pta 浙大版《C语言程序设计(第3版)》题目集 习题6-6 使用函数输出一个整数的逆序数 (20分)
pta 浙大版《C语言程序设计(第3版)》题目集 习题6-6 使用函数输出一个整数的逆序数 (20分)
|
18小时前
|
C语言
(浙大版《C语言程序设计(第3版)》 习题6-5 使用函数验证哥德巴赫猜想 (20分)
(浙大版《C语言程序设计(第3版)》 习题6-5 使用函数验证哥德巴赫猜想 (20分)
|
18小时前
|
安全 C语言
【C语言】strcpy与strncpy函数的使用和模拟实现
【C语言】strcpy与strncpy函数的使用和模拟实现
5 0

热门文章

最新文章