您好,欢迎来到画鸵萌宠网。
搜索
您的当前位置:首页C语言基础语法_03

C语言基础语法_03

来源:画鸵萌宠网

5、函数

        函数就是程序中的功能,其实就是将程序打包,取一个名字,方便后面重复使用。函数的使用提高了代码的复用性和可维护性。 

/*
函数的定义:

返回值类型 函数名(形参1, 形参2……)
{
    函数体;
    return 返回值;
}
*/

        首先先定义一个简单的不带参数、不带返回值(其返回值其实为空)的函数例子,求10和20之和:

#include<stdio.h>


// 函数的定义
void sum()
{
    int num1 = 10, num2 = 20, sum = 0;
    sum = num1 + num2;
    printf("%d\n",sum);
}

int main()
{
    // 函数的调用
    sum();

    return 0;
}

        需要注意的是1、函数名在定义过程中不能重复,2、函数与函数之间是平级关系,不能嵌套定义,3、函数不调用就不执行,4、自定义函数写在main函数下面要在上方再次申明。这里再定义一个带参数的函数,求任意两数之和。

#include<stdio.h>


// 函数的定义
void sum(int num1,int num2)
{
    int sum = num1 + num2;
    printf("%d\n",sum);
}

int main()
{
    // 函数的调用
    sum(20, 30); //50

    return 0;
}

        其中int num1 和 int num2 为形式参数,20 和 30 为实际参数,形参和实参必须一一对应。函数除了参数之外,还有返回值的使用。返回值使用关键字 return ,它的作用包括结束函数和把后面的数据交给调用处。return下面不能编写代码,因为永远执行不到。如果书写 return 的后面没有跟具体的数据仅表示结束函数,还有一点要注意的时,返回值必须和函数名前返回值的类型相对应,如果没有返回值即为空,使用 void 。函数有返回值之后,函数的调用处使用变量接受返回值。求任意两数之和,并返回结果判断大小。

#include<stdio.h>

// 函数的定义
int sum(int num1,int num2)
{
    int sum = num1 + num2;
    return sum;
}

int main()
{
    // 函数的调用
    int result_1 = sum(20, 30);
    int result_2 = sum(30, 40);
    
    if(result_1 == result_2){printf("结果相等\n");}
    else if(result_1 > result_2){printf("结果1较大\n");}
    else{printf("结果2较大\n");}

    return 0;
}

6、数组

6.1、数组的知识 

         数组是一种容器,可以存储同种数据类型的多个值。数组的定义为

数据类型 数组名 [长度]
int arr [3];

        数组一旦定义之后,长度不可变,并且是连续的空间。数组在定义之后,还需要进行初始化,即给数组进行赋值,其格式为:

数据类型 数组名[长度] = {数据值,数据值……}
int arr[3] = {1,2,3};

        如果长度省略,数据值的个数就是数组长度。如果长度未省略,但是数据值的个数 <= 长度,空缺的位置将由默认值填充,整数用 0 填充,小数用 0.0 填充,字符用'\0'填充 (其实就是空白字符),字符串用NULL填充(就是什么都没有)。

        数组里面元素的访问包括获取和修改,其操作都利用到了索引。索引是数组的一个编号,也叫角标、下标、编号,从0开始,连续+1不间断。元素的获取一般赋值给一个变量,其格式为

变量 = 数组名[索引];
int num = arr[5];

元素的修改格式为

数组名[索引] = 数据值;
arr[5] =  10;
#include<stdio.h>

int main()
{
    //定义数组并初始化
    int arr[5] = {1,2,3,4,5};
    
    //获取索引为2,4的元素相加
    int sum = arr[2] + arr[4];
    printf("%d\n",sum);//8
    
    //修改最后一个元素为10
    arr[4] = 10;

    return 0;
}

        遍历是依次获取数组的每一个元素,对数组进行遍历:

#include<stdio.h>

int main()
{
    //定义数组并初始化
    int arr[5] = {1,2,3,4,5};
    
    //遍历数组进行打印
    for(int i = 0; i < 5; i++){printf("%d\n",arr[i]);}

    return 0;
}

        那么数组在内存中是怎样存在的?首先简单介绍一下内存,当软件运行时,临时存储数据的就叫内存。内存中的数据只有点击保存之后,程序到对应位置取出数据,保存到硬盘,如果不保存再次打开会消失,比如记事本。那么如何把数据保存到内存中,又怎么把内存的对应位置数据取出来?

#include<stdio.h>

int main()
{
    //获取变量的内存地址
    int a = 10 ;
    printf("%p\n",&a); //0000 0000 0061 FE1C
    return 0;
}

#include<stdio.h>

int main()
{
    //获取数组的内存地址
    int arr[] = {1,2,3} ;
    printf("%p\n",&arr);   //0000 0000 0061 FE14
    printf("%p\n",&arr[0]);//0000 0000 0061 FE14
    printf("%p\n",&arr[1]);//0000 0000 0061 FE18
    printf("%p\n",&arr[2]);//0000 0000 0061 FE1C
    
    int len = sizeof(arr) / sizeof(arr[0]);
    printf("%d\n",len); // 3
    
    return 0;
}
#include<stdio.h>

void printfun(int arr[])
{
    printf("%zu\n",sizeof(arr));
}

int main()
{
    int arr[] = {1,2,3,4,5} ;
    printf("%zu\n",sizeof(arr)); //20
    printfun(arr);//8

    return 0;
}
#include<stdio.h>

void printfun(int arr[])
{
    printf("%p\n",arr);
}

int main()
{
    int arr[] = {1,2,3,4,5} ;
    printf("%p\n",&arr); //000000000061FE00
    printfun(arr);//000000000061FE00

    return 0;
}

         最后用一张图简单地说明了两者的关系。

#include<stdio.h>

void printfun(int arr[],int len)
{
    for(int i = 0; i < len; i++){printf("%d ",arr[i]);}
}

int main()
{
    int arr[] = {1,2,3,4,5} ;
    int len = sizeof(arr) / sizeof(arr[0]);
    printfun(arr, len);//1 2 3 4 5 

    return 0;
}

 6.2、数组的练习

练习1:求包括五个元素的数组的最大值

#include<stdio.h>

int main()
{
    int arr[] = {25,11,15,55,9};
    
    //max的默认值一定是数组里面的数
    int max = arr[0];
    int len = sizeof(arr) / sizeof(arr[0]);

    //遍历数组进行比较
    for(int i = 1; i < len; i++)
    {max = max > arr[i] ? max : arr[i];}
    
    printf("%d\n",max); //55
    return 0;
}

练习2:生成10个1到100的随机数存入数组,求出所有数据的和

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main()
{
    // 1.定义数组
    int arr[10] = {0};
    int len = sizeof(arr) / sizeof(arr[0]);

    // 2.生成10个1~100的随机数
    srand(time(NULL));
    for(int i = 0; i < len; i++)
    {
        int num = rand() % 100 + 1;
        arr[i] = num;
        printf("%d\n",arr[i]);
    }

    // 3.累加求和
    int sum = 0;
    for(int i = 0; i < len; i++){sum += arr[i];}
    printf("%d\n",sum);
    
    return 0;
}

生成10个1到100的随机数存入数组,要求数据不能重复,求出所有数据的和,求出所有数据的平均数,统计有多少个数据比平均值小。

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int contain(int arr[], int len, int num)
{
    for(int i = 0; i < len; i++ )
    {
        if(num == arr[i]){return 1;}
    }
    return 0;
}

int main()
{
    // 1.定义数组
    int arr[10] = {0};
    int len = sizeof(arr) / sizeof(arr[0]);

    // 2.生成10个1~100的随机数,并且不相同
    srand(time(NULL));
    for(int i = 0; i < len; )
    {
        int num = rand() % 100 + 1;
        int flag = contain(arr, len, num);
        if (!flag)
        {
            arr[i] = num;
            i++;
        }
    }

    for(int i = 0; i < len; i++)
    {
        printf("%d\n",arr[i]);
    }
    
    // 3.累加求和
    int sum = 0;
    for(int i = 0; i < len; i++){sum += arr[i];}
    printf("和为:%d\n",sum);

    // 4.求平均数
    float avg = sum / 10.0;
    printf("平均数为:%.2f\n",avg);

    // 5.统计比平均数少的个数
    int count = 0;
    for(int i = 0; i < len; i++)
    {
        if(arr[i] < avg){ count++; }
    }
    printf("比平均数少的个数为:%d\n",count);

    return 0;
}

练习3:键盘录入5个数据并存入数组,要求遍历数组,反转数组,再遍历数组。

#include<stdio.h>

void printfun(int arr[], int len)
{
    for(int i = 0; i < len; i++)
    {
        printf("%d\n", arr[i]);
    }
}

int main()
{
    // 1.定义数组
    int arr[5] = {0};
    int len = sizeof(arr) / sizeof(arr[0]);

    // 2.键盘录入数据
    for(int i = 0; i < len; i++)
    {
        printf("请输入第%d个数字", i + 1);
        scanf("%d",&arr[i]);
    }
    printfun(arr, len);

    // 3.反转数组
    for(int i = 0; i < len; i++)
    {
        if(i < len-1-i)
        {
            int temp = arr[i];
            arr[i] = arr[len-1-i];
            arr[len-1-i] = temp;
        }
        else{break;}
    }

    /*
    int i = 0;
    int j = len - 1;
    while(i < j)
    {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
        i++;
        j--;
    }
    */
   
    printfun(arr, len);

    return 0;
}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo8.com 版权所有 湘ICP备2023022238号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务