鱼C论坛

 找回密码
 立即注册
楼主: bin554385863

[技术交流] 小白学习C语言日记

[复制链接]
 楼主| 发表于 2019-5-21 23:01:43 | 显示全部楼层
======================================================================
2019年5月21日22:56:47
错误代码
/*用冒泡法对20个随机元素的数组排序*/
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void mppx(int a[])
{
    int i, j, t, s;
    s = sizeof(a) / sizeof(a[0]);
    for (i = 0; i < s; i++)
    {
        for (j = 0; j < (s - 1); j++)
        {
            if (a[j] >= a[j + 1])
            {
                t = a[j];
                a[j] = a[j + 1];
                a[j + 1] = t;
            }
        }
    }
    for (i = 0; i < s; i++)
    {
        printf("a[%d] = %d\n", i, a[i]);
    }
}
void main()
{
    int b[19], i;
    srand(time(NULL));
    printf("排序之前\n");
    for (i = 0; i < 20; i++)
    {

        b[i] = rand() % 20;
    }
    for (i = 0; i < 20; i++)
    {
        printf("b[%d] = %-3d\n", i, b[i]);
    }
    printf("排序之后\n");
    mppx(b);//调用函数对=数组b进行排序
}
----------------------------------------------------------------------------------------------------------------------------
E:\Administrator\Documents\My C>cmd /C "c:\Users\Administrator\.vscode\extensions\ms-vscode.cpptools-0.23.1\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-cgfzor0y.cvw --stdout=Microsoft-MIEngine-Out-b3zzwf1o.v24 --stderr=Microsoft-MIEngine-Error-0irwvajd.iqa --pid=Microsoft-MIEngine-Pid-dutcx0ls.r0s --dbgExe=E:\MinGW\bin\gdb.exe --interpreter=mi "
排序之前
b[0] = 8
b[1] = 15
b[2] = 15
b[3] = 13
b[4] = 0
b[5] = 13
b[6] = 18
b[7] = 14
b[8] = 11
b[9] = 1
b[10] = 5
b[11] = 14
b[12] = 7
b[13] = 14
b[14] = 7
b[15] = 11
b[16] = 0
b[17] = 2
b[18] = 9
b[19] = 19
排序之后
a[0] = 8
-------------------------------------------------------------------------------------------------------------------------------------------------------
正确代码
/*用冒泡法对20个随机元素的数组排序*/
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void mppx(int a[],int s)
{
    int i, j, t;
   
   // printf("s=%d",s);
    for (i = 0; i < s; i++)
    {
        for (j = 0; j < (s - 1); j++)
        {
            if (a[j] >= a[j + 1])
            {
                t = a[j];
                a[j] = a[j + 1];
                a[j + 1] = t;
            }
        }
    }
    for (i = 0; i < s; i++)
    {
        printf("a[%d] = %d\n", i, a[i]);
    }
}
int main()
{
    int b[20], i,s;
    srand(time(NULL));
    printf("排序之前\n");
    for (i = 0; i < 20; i++)
    {

        b[i] = rand() % 20;
    }
    for (i = 0; i < 20; i++)
    {
        printf("b[%d] = %-3d\n", i, b[i]);
    }
    printf("排序之后\n");
     s = sizeof(b) / sizeof(b[0]);
    mppx(b,s);//调用函数对=数组b进行排序
    return 0;
}
----------------------------------------------------------------------------------------------------------------------------
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

E:\Administrator\Documents\My C>cmd /C "c:\Users\Administrator\.vscode\extensions\ms-vscode.cpptools-0.23.1\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-1jwo4tef.pgo --stdout=Microsoft-MIEngine-Out-lglz1gow.5jn --stderr=Microsoft-MIEngine-Error-u20a5nqm.yfb --pid=Microsoft-MIEngine-Pid-bcdh4jxk.dpt --dbgExe=E:\MinGW\bin\gdb.exe --interpreter=mi "
排序之前
b[0] = 11
b[1] = 15
b[2] = 8
b[3] = 4
b[4] = 13
b[5] = 6
b[6] = 7
b[7] = 8
b[8] = 19
b[9] = 13
b[10] = 14
b[11] = 16
b[12] = 14
b[13] = 3
b[14] = 1
b[15] = 8
b[16] = 8
b[17] = 14
b[18] = 16
b[19] = 0
排序之后
a[0] = 0
a[1] = 1
a[2] = 3
a[3] = 4
a[4] = 6
a[5] = 7
a[6] = 8
a[7] = 8
a[8] = 8
a[9] = 8
a[10] = 11
a[11] = 13
a[12] = 13
a[13] = 14
a[14] = 14
a[15] = 14
a[16] = 15
a[17] = 16
a[18] = 16
a[19] = 19

E:\Administrator\Documents\My C>
-----------------------------------------------------------------------
原因错误

        当将数组作为实参传递到一个函数中时,就是将数组的首地址作为实参,
函数的形参相当于一个指针,mppx函数里的sizeof(a)得到的是指针的大小为8,
而int大小为4,相除得2,所以你的程序只会排序前两个元素。


感谢:TOP_LKCroper提供的帮助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-23 22:35:11 | 显示全部楼层
本帖最后由 bin554385863 于 2019-5-24 13:06 编辑

2019年5月23日22:07:12

关于数组的练习

[1]将一个二维数组的行列互换
/*数组的行列互换*/
#include <stdio.h>
void main()
{
    int t, barr[20][20];
    int arr[2][3] =
        {
            {3, 6, 5},
            {4, 9, 1},
        };
    printf("行列互换之前\n");
    for (size_t i = 0; i < 3; i++)
    {
        for (size_t j = 0; j < 2; j++)
        {
            
            printf("arr[%d][%d] = %d   ", j, i, arr[j][i]);
            t = arr[j][i];
            barr[i][j] = t;
        }
        printf("\n");
    }
    printf("行列互换之后\n");
    for (size_t i = 0; i < 2; i++)
    {
        for (size_t j = 0; j < 3; j++)
        {

            printf("barr[%d][%d] = %3d   ", j, i, barr[j][i]);
        }
        printf("\n");
    }
}
--------------------------------------------------------------------------------------------
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

E:\Administrator\Documents\My C>cmd /C "c:\Users\Administrator\.vscode\extensions\ms-vscode.cpptools-0.23.1\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-sa5aw4kl.t4q --stdout=Microsoft-MIEngine-Out-hrlc5pbu.u2s --stderr=Microsoft-MIEngine-Error-kkqfbvop.r55 --pid=Microsoft-MIEngine-Pid-q3i4ooyd.rng --dbgExe=E:\MinGW\bin\gdb.exe --interpreter=mi "
行列互换之前
arr[0][0] = 3   arr[1][0] = 4
arr[0][1] = 6   arr[1][1] = 9
arr[0][2] = 5   arr[1][2] = 1
行列互换之后
barr[0][0] =   3   barr[1][0] =   6   barr[2][0] =   5
barr[0][1] =   4   barr[1][1] =   9   barr[2][1] =   1

E:\Administrator\Documents\My C>
----------------------------------------------------------------------------------------------
2019年5月24日00:39:28
[2]定义一个含有30个偶数的数组并安顺每五个元素求一次平均值放到另一个数组中
/*定义一个含有30个偶数的数组并安顺每五个元素求一次平均值放到另一个数组中*/
#include <stdio.h>
#define N 30
void main()
{
    int arr[N], barr[(N / 5) + 1], d;
    printf("原数组arr\n");
    for (size_t i = 0; i < N; i++)
    {
        arr[i] = 2 * i;
        printf("arr[%d] = %-3d\n", i, arr[i]);
    }
    printf("\n");

    printf("\n");
    printf("每五个元素算其平均值并放在数组Barr中\n");
    for (size_t j = 0; j < (N / 5); j++)
    {
        for (size_t i = 5 * j; i < 5 * (j + 1); i++)
        {
            barr[i] = (arr[i] + arr[i + 1] + arr[i + 2] + arr[i + 3] + arr[i + 4]) / 5;
        }
        printf("barr[%d] = %3d   ", j, barr[j]);
    }
    printf("\n");
}

----------------------------------------------------------------------------------------------------------------------
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

E:\Administrator\Documents\My C>cmd /C "c:\Users\Administrator\.vscode\extensions\ms-vscode.cpptools-0.23.1\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-z0zalo4w.oml --stdout=Microsoft-MIEngine-Out-qbpyg1yo.45v --stderr=Microsoft-MIEngine-Error-oblvt4y4.fjz --pid=Microsoft-MIEngine-Pid-0p5hfamo.wcz --dbgExe=E:\MinGW\bin\gdb.exe --interpreter=mi "
原数组arr
arr[0] = 0
arr[1] = 2
arr[2] = 4
arr[3] = 6
arr[4] = 8
arr[5] = 10
arr[6] = 12
arr[7] = 14
arr[8] = 16
arr[9] = 18
arr[10] = 20
arr[11] = 22
arr[12] = 24
arr[13] = 26
arr[14] = 28
arr[15] = 30
arr[16] = 32
arr[17] = 34
arr[18] = 36
arr[19] = 38
arr[20] = 40
arr[21] = 42
arr[22] = 44
arr[23] = 46
arr[24] = 48
arr[25] = 50
arr[26] = 52
arr[27] = 54
arr[28] = 56
arr[29] = 58


每五个元素算其平均值并放在数组Barr中
barr[0] =   4   barr[1] =   6   barr[2] =   8   barr[3] =  10   barr[4] =  12   barr[5] =  14

E:\Administrator\Documents\My C>

平均值输出不正确
-----------------------------------------------------------------------------------------------------------------------------
2019年5月24日13:05:29
正确代码
#include <stdio.h>
#define N 30
int main()
{
    int arr[N], barr[N / 5];
    printf("原数组arr\n");
    for (size_t i = 0; i < N; i++)
    {
        arr[i] = 2 * i;
        printf("arr[%d] = %d\n", i, arr[i]);
    }
    printf("\n");
    printf("每五个元素算其平均值并放在数组Barr中\n");
    for (size_t j = 0; j < (N / 5); j++)
    {
        // 在这里不需要第二个循环了
        barr[j] = (arr[j*5] + arr[j*5+1] + arr[j*5 + 2] + arr[j*5 + 3] + arr[j*5 + 4])/5;

        printf("barr[%d] = %d   ", j, barr[j]);
    }
    printf("\n");
    
    return 0;
}
--------------------------------------------------------------------------------------------------
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

E:\Administrator\Documents\My C>cmd /C "c:\Users\Administrator\.vscode\extensions\ms-vscode.cpptools-0.23.1\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-qlsng4kz.mkj --stdout=Microsoft-MIEngine-Out-srgg4bbc.axk --stderr=Microsoft-MIEngine-Error-53xphomf.yiv --pid=Microsoft-MIEngine-Pid-5y15xswl.wf2 --dbgExe=E:\MinGW\bin\gdb.exe --interpreter=mi "
原数组arr
arr[0] = 0
arr[1] = 2
arr[2] = 4
arr[3] = 6
arr[4] = 8
arr[5] = 10
arr[6] = 12
arr[7] = 14
arr[8] = 16
arr[9] = 18
arr[10] = 20
arr[11] = 22
arr[12] = 24
arr[13] = 26
arr[14] = 28
arr[15] = 30
arr[16] = 32
arr[17] = 34
arr[18] = 36
arr[19] = 38
arr[20] = 40
arr[21] = 42
arr[22] = 44
arr[23] = 46
arr[24] = 48
arr[25] = 50
arr[26] = 52
arr[27] = 54
arr[28] = 56
arr[29] = 58

每五个元素算其平均值并放在数组Barr中
barr[0] = 4   barr[1] = 14   barr[2] = 24   barr[3] = 34   barr[4] = 44   barr[5] = 54

E:\Administrator\Documents\My C>
感谢版主shuofxz提供的帮助
==========================================================================
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-25 00:03:08 | 显示全部楼层
2019年5月25日00:01:17
[3]
定义一个5行7列的数组,找出第一次出现负数的位置
/*定义一个5行7列的数组,找出第一次出现负数的位置*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main()
{
    int m, n, s[5][7];
    srand(time(NULL));
    for (int i = 0; i < 7; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            m = rand() % 35;
            n = rand() % 35;
            s[j][i] = m - (m + n) / 2;
            printf("s[%d][%d] = %3d\t\t", j, i, s[j][i]);
        }
        printf("\n");
    }
    for (size_t i = 0; i < 7; i++)
    {
        for (size_t j = 0; j < 5; j++)
        {
            if (s[j][i] < 0)
            {
                printf("首次出现负数的位置是:\ns[%d][%d] = %2d", j, i, s[j][i]);
                break;
            }
        }
        break;
    }
}
-------------------------------------------------------------------------------------------------------------------------
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

E:\Administrator\Documents\My C>cmd /C "c:\Users\Administrator\.vscode\extensions\ms-vscode.cpptools-0.23.1\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-rd54f5xo.24w --stdout=Microsoft-MIEngine-Out-fjhxc1tx.20d --stderr=Microsoft-MIEngine-Error-wzqvcvka.1qh --pid=Microsoft-MIEngine-Pid-cdalh41e.qyj --dbgExe=E:\MinGW\bin\gdb.exe --interpreter=mi "
s[0][0] =   0           s[1][0] =   6           s[2][0] =  -6           s[3][0] =  16           s[4][0] =   3
s[0][1] =  15           s[1][1] =  -1           s[2][1] =  -3           s[3][1] =   3           s[4][1] =  10
s[0][2] = -14           s[1][2] =  -1           s[2][2] =   3           s[3][2] =  -1           s[4][2] =  -1
s[0][3] =  -7           s[1][3] =   3           s[2][3] =   1           s[3][3] =  -1           s[4][3] =   5
s[0][4] =  -5           s[1][4] =  -2           s[2][4] =  -4           s[3][4] =  -4           s[4][4] = -13
s[0][5] =   1           s[1][5] =  -4           s[2][5] = -15           s[3][5] =   8           s[4][5] =  14
s[0][6] =   7           s[1][6] =  -1           s[2][6] =  -6           s[3][6] = -12           s[4][6] =   1
首次出现负数的位置是:
s[2][0] = -6
E:\Administrator\Documents\My C>

==========================================================================================================
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-25 21:44:11 | 显示全部楼层
本帖最后由 bin554385863 于 2019-5-25 23:31 编辑

[4]
定义数组a[m][n],b[m][n],c[m][n],
如果a[m][n]=b[m][n]则c[m][n]=0;
如果a[m][n]>b[m][n]则c[m][n]=1;
如果a[m][n]<>b[m][n]则c[m][n]=-1;
/*
定义数组a[m][n],b[m][n],c[m][n],
如果a[m][n]=b[m][n]则c[m][n]=0;
如果a[m][n]>b[m][n]则c[m][n]=1;
如果a[m][n]<>b[m][n]则c[m][n]=-1;
*/
#include <stdio.h>
#include <time.h>
int main()
{
    int m = 4, n = 6;
    int a[m][n], b[m][n], c[m][n];
    srand(time(NULL));
    for (size_t i = 0; i < n; i++)
    {
        for (size_t j = 0; j < m; j++)
        {
            a[j][i] = rand() % m + n;
            printf("a[%d][%d]= %2d\t\t", j, i, a[j][i]);
            b[j][i] = rand() % n + m;
            printf("b[%d][%d]= %2d\t\t", j, i, b[j][i]);
        }
        printf("\n");
    }
    printf("\n");
    for (size_t i = 0; i < n; i++)
    {
        for (size_t j = 0; j < m; j++)
        {
            if (a[j][i] == b[j][i])
            {
                c[j][i] = 0;
            }
            c[j][i] = a[j][i] > b[j][i] ? 1 : -1;
            printf("c[%d][%d]= %2d\t\t", j, i, c[j][i]);
        }
        printf("\n");
    }

    return 0;
}
================================================================================

E:\Administrator\Documents\My C>cmd /C "c:\Users\Administrator\.vscode\extensions\ms-vscode.cpptools-0.23.1\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-ucqwtzta.slt --stdout=Microsoft-MIEngine-Out-xfn4vq1c.dfr --stderr=Microsoft-MIEngine-Error-wnfpu4ev.1pi --pid=Microsoft-MIEngine-Pid-zli5oum2.ua2 --dbgExe=E:\MinGW\bin\gdb.exe --interpreter=mi "
a[0][0]=  6             b[0][0]=  5             a[1][0]=  6             b[1][0]=  4             a[2][0]=  6             b[2][0]=  6             a[3][0]=  6             b[3][0]=  9
a[0][1]=  6             b[0][1]=  8             a[1][1]=  8             b[1][1]=  9             a[2][1]=  9             b[2][1]=  6             a[3][1]=  8             b[3][1]=  7
a[0][2]=  6             b[0][2]=  8             a[1][2]=  9             b[1][2]=  6             a[2][2]=  7             b[2][2]=  4             a[3][2]=  9             b[3][2]=  6
a[0][3]=  8             b[0][3]=  7             a[1][3]=  8             b[1][3]=  4             a[2][3]=  9             b[2][3]=  7             a[3][3]=  9             b[3][3]=  7
a[0][4]=  8             b[0][4]=  4             a[1][4]=  9             b[1][4]=  9             a[2][4]=  6             b[2][4]=  6             a[3][4]=  7             b[3][4]=  9
a[0][5]=  8             b[0][5]=  4             a[1][5]=  8             b[1][5]=  8             a[2][5]=  7             b[2][5]=  8             a[3][5]=  7             b[3][5]=  4

c[0][0]=  1             c[1][0]=  1             c[2][0]= -1             c[3][0]= -1
c[0][1]= -1             c[1][1]= -1             c[2][1]=  1             c[3][1]=  1
c[0][2]= -1             c[1][2]=  1             c[2][2]=  1             c[3][2]=  1
c[0][3]=  1             c[1][3]=  1             c[2][3]=  1             c[3][3]=  1
c[0][4]=  1             c[1][4]= -1             c[2][4]= -1             c[3][4]= -1
c[0][5]=  1             c[1][5]= -1             c[2][5]= -1             c[3][5]=  1

E:\Administrator\Documents\My C>

=================================================================================================================
[5]
输入两个字符串a,b;
不用strcat()函数将b字符串的前五个字符链接到a字符串
/*输入两个字符串a,b;
不用strcat()函数将b字符串的前五个字符链接到a字符串*/
#include <stdio.h>
#include <time.h>
int main(int argc, char const *argv[])
{
    int m, n;
    srand(time(NULL));
    m = rand() % 10 + 5;
    n = rand() % 10;
    char a[m], b[n];

    //字符串a的元素
    printf("字符串a:\n\n");
    for (size_t i = 0; i < m; i++)
    {
        a[i] = rand() % 25 + 65;
    }
    a[m] = '\0'; //必须在后面追加'\0',    printf("%s", a);才能正确输出.
    printf("%s\n\n", a);

    //字符串b的元素
    printf("字符串b:\n\n");
    for (size_t j = 0; j < n; j++)
    {
        b[j] = rand() % 25 + 97;
    }
    b[n] = '\0';
    printf("%s\n\n", b); //字符串输出

    //改变后的字符串
    printf("改变后的字符串a:\n\n");
    for (size_t i = 0; i < m + 5; i++)
    {
        for (size_t j = 0; j < 5; j++)
        {
            a[m + j] = b[j];
        }
    }
    a[m + 5] = '\0';

    printf("%s", a);

    return 0;
}
------------------------------------------------------------------------------------------------------------------------------------------
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

E:\Administrator\Documents\My C>cmd /C "c:\Users\Administrator\.vscode\extensions\ms-vscode.cpptools-0.23.1\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-0nklvg1r.5ka --stdout=Microsoft-MIEngine-Out-44sij3ef.guz --stderr=Microsoft-MIEngine-Error-gvrjspxo.ae4 --pid=Microsoft-MIEngine-Pid-apibiaj4.ji1 --dbgExe=E:\MinGW\bin\gdb.exe --interpreter=mi "
字符串a:

VAXWUITRPGYM

字符串b:

axngqon

改变后的字符串a:

VAXWUITRPGYMaxngq
E:\Administrator\Documents\My C>

===========================================================================================
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-28 00:16:46 | 显示全部楼层
本帖最后由 bin554385863 于 2019-5-29 22:25 编辑

2019年5月28日00:12:54

自定义求数字数组长度的函数
#/*数组长度函数*/ 
#define el "'e'" 
/*用字符e表示一个数字数组的结束,el = endline*/
size_t arrlen(size_t arr[])
{
    size_t i = 1;
    while (*(arr + i) != el)
    {
        i++;
    }
    return i;
}

int main(int argc, char const *argv[])
{
    int a[] = {0,0,0,0,0,0,0,000};
    int b[] = {9,8,7,6,5,4,3,2,1,0,000};
    int c[] = {0,0,0,0,0,5,6,7,8,9,000};
    printf("arrlen(a) = %d\n", arrlen(a));
    printf("arrlen(b) = %d\n", arrlen(b));
    printf("arrlen(c) = %d\n", arrlen(c));
    return 0;
}
----------------------------------------------------------------------------------------------------------------------
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

E:\Administrator\Documents\My C>cmd /C "c:\Users\Administrator\.vscode\extensions\ms-vscode.cpptools-0.23.1\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-mmkvfc0s.o5m --stdout=Microsoft-MIEngine-Out-vajmpcnb.jhu --stderr=Microsoft-MIEngine-Error-yo1jcxxc.c3z --pid=Microsoft-MIEngine-Pid-uaand0zi.ih3 --dbgExe=E:\MinGW\bin\gdb.exe --interpreter=mi "
arrlen(a) = 7
arrlen(b) = 10
arrlen(c) = 10

E:\Administrator\Documents\My C>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-29 17:57:39 | 显示全部楼层
本帖最后由 bin554385863 于 2019-5-30 12:36 编辑

2019年5月29日17:58:03
自定义数字数组函数,arrlen(size_t arr)
/*数组长度函数*/ 
#define el "'e'" 
/*用字符e表示一个数字数组的结束,el = endline*/
size_t arrlen(size_t arr[])
{
    size_t i = 1;
    while (*(arr + i) != el)
    {
        i++;
    }
    return i;
}

数字数组拼接函数arrcat()
/*数字数组拼接函数arrcat(arr1, arr2)*/
void arrcat(size_t arr1[], size_t arr2[])
{
    size_t temp[arrlen(arr1) + arrlen(arr2)];
    size_t i, j, k;
    for (i = 0; i < arrlen(arr1); i++)
    {
        temp[i] = arr1[i];
    }
    for (j = 0; j < arrlen(arr2); j++)
    {
        temp[i + j] = arr2[j];
    }
    for (k = 0; k < i + j; k++)
    {
        arr1[k] = temp[k];
        arr1[k + 1] = el;
        printf("%d ", arr1[k]);
    }
}
请确保arr1有足够的空间接受arr2的数据!!!!!

数组冒泡排序函数arrsrt(arr)
/*冒泡排序函数*/
size_t arrsrt(size_t arr[])
{
    int t;
    for (size_t i = 0; i < arrlen(arr); i++)
    {
        for (size_t j = 0; j <arrlen(arr) - 1; j++)
        {
            if (arr[j] >= arr[j + 1])
            {
                t = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = t;
            }
        }
    }
-------------------------------------------------------------------------------------------------------------------------------
#include <stdio.h>
#include "E:\Administrator\Documents\My C\My C Function\Function.c"
void main()
{
    int a[14] = {0, 1, 2, 3, el};
    int b[] = {7, 5, 8, 4, el};
    int c[] = {6, 9, 10, 11, el};
    printf("拼接a[]和b[]\n");
    arrcat(a, b);
    printf("\n\n");
    printf("然后拼接c[]\n");
    arrcat(a, c);
    printf("\n\n");
    printf("对数组排序\n");
    arrsrt(a);
    printf("\n\n");
    printf("打印数组长度\n");
    printf("%d", arrlen(a));
}
---------------------------------------------------------------------------------------------------------------------------------------------
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

E:\Administrator\Documents\My C>cmd /C "c:\Users\Administrator\.vscode\extensions\ms-vscode.cpptools-0.23.1\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-rbvr20ft.zwy --stdout=Microsoft-MIEngine-Out-bh5shobw.1iv --stderr=Microsoft-MIEngine-Error-fj1kw2qv.ntj --pid=Microsoft-MIEngine-Pid-l5zgjw2m.gcu --dbgExe=E:\MinGW\bin\gdb.exe --interpreter=mi "
拼接a[]和b[]
0 1 2 3 7 5 8 4

然后拼接c[]
0 1 2 3 7 5 8 4 6 9 10 11

对数组排序
0 1 2 3 4 5 6 7 8 9 10 11

打印数组长度
12
E:\Administrator\Documents\My C>
===================================================================================================
数字数组查找函数arrsch()
/*数组搜索函数*/
void arrsch(size_t arr[], size_t key)
{
    size_t temp[arrlen(arr)];
    size_t j = 0;
    for (size_t i = 0; i < arrlen(arr); i++)
    {
        if (*(arr + i) == key)
        {
            temp[j] = i;
            j++;
        }
    }
    if (j >= 1)
    {
        printf("数据:%d\n出现次数:%d\n下标为:", key, j);
        for (size_t i = 0; i < j; i++)
        {
            printf("%02d ", temp[i]);
        }
    }
    else
    {
        printf("数据: %d\n出现次数: %d\n下标为: NULL", key, 0);
    }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-30 23:09:24 | 显示全部楼层
2019年5月30日23:08:34
指针版arr系列函数
#include <stdio.h>
/*用字符e表示一个数字数组的结束,el = endline*/
#define el "'e'"
/*数组长度函数*/
size_t arrlen(size_t arr[])
{
    size_t i = 0;
    while (*arr != el)
    {
        arr++;
        i++;
    }
    return i;
}

/*数字数组排序函数*/
void arrsrt(size_t arr[])
{
    for (size_t i = 0; i < arrlen(arr); i++)
    {
        for (size_t j = 0, k = 0; j < arrlen(arr) - 1; j++)
        {
            if (*(arr + j) > *(arr + j + 1))
            {
                k = *(arr + j);
                *(arr + j) = *(arr + j + 1);
                *(arr + j + 1) = k;
            }
        }
    }
    return arr;
}

/*数字数组拼接函数arrcat(arr1, arr2)*/
void arrcat(size_t arr1[], size_t arr2[])
{
    size_t i = 1;
    while (*arr1 != el)
    {
        arr1++; //跳到arri尾地址
    }
    while (*arr2 != el)
    {
        *(arr1++) = *(arr2++); //复制arr2数据到arr1尾部
    }
    *arr1 = el;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-1 00:38:35 | 显示全部楼层
2019年6月1日00:38:58
/*数字数组替换函数*/
int arrrpl(size_t arr[], size_t key, size_t num)
{
    assert(arr != NULL);
    size_t i = 0;
    for (; *arr != el; arr++)
    {
        if (*arr == key)
        {
            i++;
            break;
        }
    }
    switch (i)
    {
    case 0:
        return 0;
        break;
    case 1:
        if ((*arr == 0) && (key == 0))
        {
            *arr = num;
        }
        else
        {
            for (; *arr != el; arr++)
            {
                if (*arr == key)
                {
                    *arr = num;
                }
            }
        }
        return arr;
        break;
    }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-2 14:39:56 | 显示全部楼层
真厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-2 18:49:55 From FishC Mobile | 显示全部楼层
我去这么多了,才看见,顶楼主!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2019-6-2 20:52:00 From FishC Mobile | 显示全部楼层
多放点香菜 发表于 2019-6-2 18:49
我去这么多了,才看见,顶楼主!

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-2 21:18:34 | 显示全部楼层
多放点香菜 发表于 2019-6-2 18:49
我去这么多了,才看见,顶楼主!

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-2 21:35:31 | 显示全部楼层

哈哈  我才学,一起加油!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-2 23:20:45 | 显示全部楼层
本帖最后由 bin554385863 于 2019-6-2 23:35 编辑

2019年6月2日22:56:04
指针

[1]
指针定义: 数据类型 *指针变量名 = &普通变量;
或:                数据类型 *指针变量名 ;
                *指针变量名 = &普通变量;

注意:
定义指针时是如果不指向某个变量地址,最好初始化为NULL,以防出现野指针,对程序造成某种bug;
如:

int *p = NULL;(表示指针p不指向任何一个地址)

[2]
指针的值:
指针有两个值
一个是其本身的值代表指向内存中的某个地址;
另一个是其指向的地址存储的值.
如:
int a = 1;
int *p = &a;

变量p的值是&a(变量a在内存中的地址);
*p的值是1.(因此我们有两种方式访问变量a,一种是通过变量名a直接访问,一种是通过指针p间接访问).


[3]
#include <stdio.h>
#include <assert.h>
#include "E:\Administrator\Documents\My C\My C Function\Function.c"
int main(int argc, char const *argv[])
{
    int *p = NULL;//初始化为NULL防止野指针
    int a = 100;
    p = &a;//也可以直接写作int *p = &a在定义时就直接赋值.
    printf("p的值是:%#X\n", p); //以十六进制输出p的值
    printf("*p的值是:%d\n", *p);
    printf("变量a原值是:%d\n", a);
    *p = 200; //通过指针改变变量a得值
    printf("改变后变量a的值是:%d\n", a);
    return 0;
}
----------------------------------------------------------------------------------------------------
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

E:\Administrator\Documents\My C>cmd /C "c:\Users\Administrator\.vscode\extensions\ms-vscode.cpptools-0.23.1\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-35uppg2t.wjt --stdout=Microsoft-MIEngine-Out-32uwo45b.pld --stderr=Microsoft-MIEngine-Error-2ufk5rln.hgu --pid=Microsoft-MIEngine-Pid-sg3ydrof.huu --dbgExe=E:\MinGW\bin\gdb.exe --interpreter=mi "
p的值是:0X28FF38
*p的值是:100
变量a原值是:100
改变后变量a的值是:200

E:\Administrator\Documents\My C>

=================================================================================
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-3 23:25:45 | 显示全部楼层
本帖最后由 bin554385863 于 2019-6-3 23:31 编辑

2019年6月3日23:15:25
指针和数组
[1]指针和一维数组

如;
int arr[3] = {0,1,2}
int *p = NULL;
p = arr;
*/arr是数组的首地址,数组名arr也可以当做指针来用,然鹅数组名作为指针是不能进行计算的,
因为数组地址是不可改变的.但是指针p可以进行运算(++和--)*/
for (size_t i =0 ; i < 3 ; i++ )
        {
                print("%d  ",  *(p+1);//等同于print("%d  ",  a[i] )
        }

[2]指针和二维数组

如:
#include <stdio.h>
#include <assert.h>
#include <math.h>
#include "E:\Administrator\Documents\My C\My C Function\Function.c"
int main(int argc, char const *argv[])
{
    int a[3][4] = {{0, 1, 2, 3},
                   {
                       4,
                       5,
                       6,
                       7,
                   },
                   {
                       8,
                       9,
                       10,
                       11,
                   }};
                   for (size_t i = 0; i < 3; i++)
                   {
                       printf("%2d ", **(a+i));
                   }
                   printf("\n\n");
                   for (size_t i = 0; i < 12; i++)
                   {
                       printf("%2d ", *(*a+i));
                   }
                   

}
------------------------------------------------------------------------------------------------------
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

E:\Administrator\Documents\My C>cmd /C "c:\Users\Administrator\.vscode\extensions\ms-vscode.cpptools-0.23.1\debugAdapters\bin\WindowsDebugLauncher.exe --stdin=Microsoft-MIEngine-In-j3ohzhx4.gdo --stdout=Microsoft-MIEngine-Out-pzhlltcc.bnn --stderr=Microsoft-MIEngine-Error-cbkxz01q.ggo --pid=Microsoft-MIEngine-Pid-fe5ad35b.qjs --dbgExe=E:\MinGW\bin\gdb.exe --interpreter=mi "
0  4  8

0  1  2  3  4  5  6  7  8  9 10 11

E:\Administrator\Documents\My C>

---------------------------------------------------------------
由程序可知
上述代码中:
**(a+i)是指向每一列的首选地址
*(*a+i)代表指向下一个元素的地址.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-4 03:06:40 | 显示全部楼层
厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-6-4 08:08:08 From FishC Mobile | 显示全部楼层
谢谢^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-4 08:10:18 From FishC Mobile | 显示全部楼层
1291917670 发表于 2019-6-4 03:06
厉害

谢谢^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-5 21:58:42 | 显示全部楼层
2019年6月5日21:59:13
闭关苦修指针ing

评分

参与人数 1贡献 +3 收起 理由
多放点香菜 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-9 12:35:10 | 显示全部楼层
2019年6月9日12:35:37
MMP,接了个大活,每天都没时间学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 21:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表