学C第7天(函数,数组)

一、函数

 1.函数的概念:抽象某个独立的功能,使之成为程序的一个独立实体。从而可以重复使用。

 2.函数的定义

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

    {

       函数体;

     }

3.函数说明

  1).函数在定义时,未注明函数的返回值类型时,默认为int。函数没有返回值时,使用void

  2).函数名必须符合表示符的命名规则

  3).函数的定义在程序中都是平行的,不允许在函数内部在定义一个函数

  4).即使是无参函数,函数名后的括号也不能省

4.函数的形式参数和实际参数

  形式参数:函数定义时列表中的参数就是形参,用来接收调用该函数时传递的参数,在函数被调用之前,编译器不会为形参开辟空间,当函数执行结束时,创建的形参被销毁

  实际参数:函数调用时传递的参数就是实参

  说明:

   1).实参向形参传递数据是单向值传递,调用函数通过参数传递传给被调函数,被调函数通过return,将值返回给调用函数

   2).实参和形参在内存中被分配到不同的内存单元,函数调用时,将实参的值传给形参,改变形参的值不会影响实参原来的值

   3).实参和形参的顺序应该保持一致并且个数相等。

   4).实参和形参的数据类型应该保持一致,否则会出现强制类型转换。

5.函数的返回值

   1).return语句,可以使函数向调用处返回一个值。

   2).return可以立即从当前函数中退出,返回到调用的函数中,同时返回一个值给调用函数。

   3).return后的表达式应与函数的返回值类型一致,不一致会以函数的返回值类型为主

6.函数的调用

  1).函数以表达式语句的形式出现
  2).函数出现在表达式中

  3).函数作为其他函数的实参

7.函数声明

  1). 函数名(参数列表);其中参数列表的形参名可以省略

  2).当函数的定义放在调用之前时,可以直接调用,反之,需要先声明在调用。

  3).函数声明主要是通知编译器被调函数的返回值类型、函数名以及参数等信息

  4).函数的声明应与函数头保持一致,否则会报错

8.函数调用

 1).即使调用无参函数,函数名后的括号不能省略

 2).有参函数在调用时,实参与形参个数必须相等,类型应尽量保持一致

 3).调用库函数时,需要包含相关的头文件

 9.高内聚,低耦合

   内聚度:模块内各成分之间互相依赖性大小的度量。内聚度越大,模块内各成分之间联系越紧密,其功能越强

   耦合度:模块之间相互依赖性大小的度量。耦合度越小,各模块之间的相对独立性就越大。

10.示例:

技术分享
#include <stdio.h>
int isPrime(int num);//函数声明
//质数:1和本身
void main()
{
    //函数调用
    printf("%d", isPrime(111));
    getchar();
}

//函数定义
int isPrime(int num)
{
    int flag = 0;
    for (int i = 2; i < num; i++)
    {
        if (num == 1 || num == 2)flag = 1;
        if (num%i == 0)
        {
            flag = 0;
            break;
        }
        flag = 1;
    }
    return flag;
}
检测一个数是否为质数

二、数组

数组定义:同一个类型的多个元素的集合,在内存中开辟连续的空间,数组中的元素必须属于相同的数据类型

1.一维数组

 1).数组声明:数组类型  数组名[数组大小]

 2).数组的初始化:

     类型 数组名[大小]={初值列表};([]中的大小可以省略)

     int arr[10]={1,2,3,4,5}或者 int arr[]={1,2,3,4,5}

 3).数组访问

      数组名[下标]

 4).数组的不合法操作

     不能用一个已经初始化的数组对另一个数组赋值

     不能对数组进行整体输入输出(除字符串外)

     不能对数组进行比较

     不能对数组进行整体运算

 5).数组的引用

    &数组名[下标]  或者  数组名+(-)整数

    比如:&arr[5]与arr+5

 6). 数组名表示数组的首地址,比如arr=&arr[0],数组作为参数传递的时候,传递的时地址,占4个byte

 7).数组越界不会报错,如果越界访问,程序可能会崩溃,因为数组外的内存空间,不确定是否有访问权限。

 8).排序:

     方式一:普通排序

技术分享
void sort(int arr[], int length)
{
    for (int i = 0; i < length-1;i++)
    {
        for (int j = i + 1; j < length;j++)
        {
            if (arr[i]>arr[j])
            {
                int temp = arr[j];
                arr[j] = arr[i];
                arr[i] = temp;
            }
        }
    }
View Code

 

    

   方式二:选择排序

技术分享
void SelectSort(int arr[],int length)
{
    int min;
    for (int i = 0; i < length-1; i++)
    {
        min = i;
        for (int j = i+1; j < length; j++)
        {
            if (arr[min]>arr[j])
            {
                min = j;
            }
        }
        if (min != i)
        {
            int temp = arr[i];
            arr[i] = arr[min];
            arr[min] = temp;
        }
    }
View Code

 

    方式三:冒泡排序

技术分享
void bubbleSort(int arr[], int length)
{
    for (int i = 0; i < length; i++)
    {
        for (int j = 0; j < length - 1 - i;j++)
        {
            if (arr[j]>arr[j + 1])
            {
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j + 1] =temp;
            }
        }
    }
View Code

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。