学习记录第十一天

数组元素可以用作函数实参,但不可以用作形参。

因为形参是在函数被调用时临时分配存储单元的,不可能为一个数组元素单独分配存储单元(数组是一个整体,在内存中占连续的一段存储单元)

在用数组元素做函数实参时,把实参的值传给形参,是”值传递“方式。
数据传递的方向是从实参传到形参,单向传递。

数组名也可以作为函数的形参和实参,传递的是首元素的地址。

sizeof()只读取类型名,在函数中sizeof(a)只占8个字节。

一维数组的使用;

打印数组

void printArray(int a[10] ,int len)
{
    int i;
    for(i = 0;i < len;++i)
    {
        printf("%d,",a[i]);
    }
    printf("\b \n");
}

数组求和

int sumOfTheArray(int a[], int len)
{
    int i;
    int sum = 0;
    for(i = 0;i < len;++i)
    {
        sum +=a[i];
    }
    
    return sum;
}

求数组最大值

int maxOfTheArray(int a[],int len)
{
    int max;
    max = a[0];
    int i;
    for(i = 0;i < len;++i)
    {
        if(max < a[i])
        {
            max = a[i];
        }
    }
    return max;
}

字符型数组

字符型数组在形参传参时,不需要传递元素个数,它是通过‘\0’作为结束语句来判断。

形参用const修饰后,实参用数组名或字符串常量都可。

打印字符;

void Puts(char s[])
{
    int i = 0;
    while(s[i] != '\0')
    {
        putchar(s[i]);
        ++i;
    }
    putchar('\n');
}

二维数组

形参要传首元素地址,也要传行数。

打印数组

void printArray2D(int a[][4],int rows)
{
    int cols = sizeof(a[0]) / sizeof(a[0][0]);
    int i, j;
    for(i = 0;i < rows;++i)
    {
        for(j = 0;j < cols;++j)
        {
            printf("%2d",a[i][j]);
        }
        puts(" ");
    }
}

取最大值

int maxOfTheArray2D(int a[][4],int rows)
{
    int cols = sizeof(a[0]) / sizeof(a[0][0]);
    int max,i,j;
    max = a[0][0];
    for(i = 0;i < rows;++i)
    {
        for(j = 0;j < cols;++j)
        {
            if(max < a[i][j])
            {
                max = a[i][j];
            }
        }
    }
    return max;
}

边缘数之和

int sumRoundOfArray2D(int a[][4],int rows)
{
    int i ,j;
    int sum = 0;
    int cols = sizeof(a[0]) / sizeof(a[0][0]);
    for(i = 0;i < rows;++i)
    {
        for(j = 0;j < cols;++j)
        {
            if(i == 0||i == rows -1||j == 0||j == cols - 1)
            {
                sum += a[i][j];
            }
        }
    }
    return sum;
}

二维字符型数组

字符的倒叙

int reverseString(char s[][100],int rows)
{
    int i;
    for(i = 0;i < rows / 2;++i)
    {
        char t[100];
        strcpy(t,s[i]);
        strcpy(s[i],s[rows - i -1]);
        strcpy(s[rows - i -1],t);
    }
}

字符的排序

void sortStrings(char s[][100],int rows)
{
    int i, j ;
    for(i = 0;i < rows -1;++i)
    {
        for(j = i + 1;j < rows;++j)
        {
            if(strcmp(s[i],s[j]) > 0)
            {
                char t[100];
                strcpy(t,s[i]);
                strcpy(s[i],s[j]);
                strcpy(s[j],t);
            }
        }
    }
}

查找字符

int bianaryFindStrings(char s[][100],int rows,char n)
{
    int begin,end,mid;
    begin = 0;
    end = rows - 1;
    mid = (begin + end) / 2;
    while(begin <= end)
    {
        if(strcmp(n,s[mid]) > 0)
        {
            begin = mid + 1;
        }
        else if(strcmp(n,s[mid]) < 0)
        {
            end = mid - 1;
        }
        else 
        {
            return mid;
        }
    }
    if(begin <= end)
    {
        return mid;
    }
    return -1;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值