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;
}

 

 
 
欢迎关注公众号:顺便编点程
 
 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

web安全工具库

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值