鱼C论坛

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

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

[复制链接]
 楼主| 发表于 2019-5-21 23:01:43 | 显示全部楼层
======================================================================
2019年5月21日22:56:47
错误代码
  1. /*用冒泡法对20个随机元素的数组排序*/
  2. #include <stdio.h>
  3. #include <time.h>
  4. #include <stdlib.h>
  5. void mppx(int a[])
  6. {
  7.     int i, j, t, s;
  8.     s = sizeof(a) / sizeof(a[0]);
  9.     for (i = 0; i < s; i++)
  10.     {
  11.         for (j = 0; j < (s - 1); j++)
  12.         {
  13.             if (a[j] >= a[j + 1])
  14.             {
  15.                 t = a[j];
  16.                 a[j] = a[j + 1];
  17.                 a[j + 1] = t;
  18.             }
  19.         }
  20.     }
  21.     for (i = 0; i < s; i++)
  22.     {
  23.         printf("a[%d] = %d\n", i, a[i]);
  24.     }
  25. }
  26. void main()
  27. {
  28.     int b[19], i;
  29.     srand(time(NULL));
  30.     printf("排序之前\n");
  31.     for (i = 0; i < 20; i++)
  32.     {

  33.         b[i] = rand() % 20;
  34.     }
  35.     for (i = 0; i < 20; i++)
  36.     {
  37.         printf("b[%d] = %-3d\n", i, b[i]);
  38.     }
  39.     printf("排序之后\n");
  40.     mppx(b);//调用函数对=数组b进行排序
  41. }
复制代码

----------------------------------------------------------------------------------------------------------------------------
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
-------------------------------------------------------------------------------------------------------------------------------------------------------
正确代码
  1. /*用冒泡法对20个随机元素的数组排序*/
  2. #include <stdio.h>
  3. #include <time.h>
  4. #include <stdlib.h>
  5. void mppx(int a[],int s)
  6. {
  7.     int i, j, t;
  8.    
  9.    // printf("s=%d",s);
  10.     for (i = 0; i < s; i++)
  11.     {
  12.         for (j = 0; j < (s - 1); j++)
  13.         {
  14.             if (a[j] >= a[j + 1])
  15.             {
  16.                 t = a[j];
  17.                 a[j] = a[j + 1];
  18.                 a[j + 1] = t;
  19.             }
  20.         }
  21.     }
  22.     for (i = 0; i < s; i++)
  23.     {
  24.         printf("a[%d] = %d\n", i, a[i]);
  25.     }
  26. }
  27. int main()
  28. {
  29.     int b[20], i,s;
  30.     srand(time(NULL));
  31.     printf("排序之前\n");
  32.     for (i = 0; i < 20; i++)
  33.     {

  34.         b[i] = rand() % 20;
  35.     }
  36.     for (i = 0; i < 20; i++)
  37.     {
  38.         printf("b[%d] = %-3d\n", i, b[i]);
  39.     }
  40.     printf("排序之后\n");
  41.      s = sizeof(b) / sizeof(b[0]);
  42.     mppx(b,s);//调用函数对=数组b进行排序
  43.     return 0;
  44. }
复制代码

----------------------------------------------------------------------------------------------------------------------------
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]将一个二维数组的行列互换

  1. /*数组的行列互换*/
  2. #include <stdio.h>
  3. void main()
  4. {
  5.     int t, barr[20][20];
  6.     int arr[2][3] =
  7.         {
  8.             {3, 6, 5},
  9.             {4, 9, 1},
  10.         };
  11.     printf("行列互换之前\n");
  12.     for (size_t i = 0; i < 3; i++)
  13.     {
  14.         for (size_t j = 0; j < 2; j++)
  15.         {
  16.             
  17.             printf("arr[%d][%d] = %d   ", j, i, arr[j][i]);
  18.             t = arr[j][i];
  19.             barr[i][j] = t;
  20.         }
  21.         printf("\n");
  22.     }
  23.     printf("行列互换之后\n");
  24.     for (size_t i = 0; i < 2; i++)
  25.     {
  26.         for (size_t j = 0; j < 3; j++)
  27.         {

  28.             printf("barr[%d][%d] = %3d   ", j, i, barr[j][i]);
  29.         }
  30.         printf("\n");
  31.     }
  32. }
复制代码

--------------------------------------------------------------------------------------------
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个偶数的数组并安顺每五个元素求一次平均值放到另一个数组中
  1. /*定义一个含有30个偶数的数组并安顺每五个元素求一次平均值放到另一个数组中*/
  2. #include <stdio.h>
  3. #define N 30
  4. void main()
  5. {
  6.     int arr[N], barr[(N / 5) + 1], d;
  7.     printf("原数组arr\n");
  8.     for (size_t i = 0; i < N; i++)
  9.     {
  10.         arr[i] = 2 * i;
  11.         printf("arr[%d] = %-3d\n", i, arr[i]);
  12.     }
  13.     printf("\n");

  14.     printf("\n");
  15.     printf("每五个元素算其平均值并放在数组Barr中\n");
  16.     for (size_t j = 0; j < (N / 5); j++)
  17.     {
  18.         for (size_t i = 5 * j; i < 5 * (j + 1); i++)
  19.         {
  20.             barr[i] = (arr[i] + arr[i + 1] + arr[i + 2] + arr[i + 3] + arr[i + 4]) / 5;
  21.         }
  22.         printf("barr[%d] = %3d   ", j, barr[j]);
  23.     }
  24.     printf("\n");
  25. }
复制代码

----------------------------------------------------------------------------------------------------------------------
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
正确代码
  1. #include <stdio.h>
  2. #define N 30
  3. int main()
  4. {
  5.     int arr[N], barr[N / 5];
  6.     printf("原数组arr\n");
  7.     for (size_t i = 0; i < N; i++)
  8.     {
  9.         arr[i] = 2 * i;
  10.         printf("arr[%d] = %d\n", i, arr[i]);
  11.     }
  12.     printf("\n");
  13.     printf("每五个元素算其平均值并放在数组Barr中\n");
  14.     for (size_t j = 0; j < (N / 5); j++)
  15.     {
  16.         // 在这里不需要第二个循环了
  17.         barr[j] = (arr[j*5] + arr[j*5+1] + arr[j*5 + 2] + arr[j*5 + 3] + arr[j*5 + 4])/5;

  18.         printf("barr[%d] = %d   ", j, barr[j]);
  19.     }
  20.     printf("\n");
  21.    
  22.     return 0;
  23. }
复制代码

--------------------------------------------------------------------------------------------------
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列的数组,找出第一次出现负数的位置
  1. /*定义一个5行7列的数组,找出第一次出现负数的位置*/
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <time.h>
  5. void main()
  6. {
  7.     int m, n, s[5][7];
  8.     srand(time(NULL));
  9.     for (int i = 0; i < 7; i++)
  10.     {
  11.         for (int j = 0; j < 5; j++)
  12.         {
  13.             m = rand() % 35;
  14.             n = rand() % 35;
  15.             s[j][i] = m - (m + n) / 2;
  16.             printf("s[%d][%d] = %3d\t\t", j, i, s[j][i]);
  17.         }
  18.         printf("\n");
  19.     }
  20.     for (size_t i = 0; i < 7; i++)
  21.     {
  22.         for (size_t j = 0; j < 5; j++)
  23.         {
  24.             if (s[j][i] < 0)
  25.             {
  26.                 printf("首次出现负数的位置是:\ns[%d][%d] = %2d", j, i, s[j][i]);
  27.                 break;
  28.             }
  29.         }
  30.         break;
  31.     }
  32. }
复制代码

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

  1. /*
  2. 定义数组a[m][n],b[m][n],c[m][n],
  3. 如果a[m][n]=b[m][n]则c[m][n]=0;
  4. 如果a[m][n]>b[m][n]则c[m][n]=1;
  5. 如果a[m][n]<>b[m][n]则c[m][n]=-1;
  6. */
  7. #include <stdio.h>
  8. #include <time.h>
  9. int main()
  10. {
  11.     int m = 4, n = 6;
  12.     int a[m][n], b[m][n], c[m][n];
  13.     srand(time(NULL));
  14.     for (size_t i = 0; i < n; i++)
  15.     {
  16.         for (size_t j = 0; j < m; j++)
  17.         {
  18.             a[j][i] = rand() % m + n;
  19.             printf("a[%d][%d]= %2d\t\t", j, i, a[j][i]);
  20.             b[j][i] = rand() % n + m;
  21.             printf("b[%d][%d]= %2d\t\t", j, i, b[j][i]);
  22.         }
  23.         printf("\n");
  24.     }
  25.     printf("\n");
  26.     for (size_t i = 0; i < n; i++)
  27.     {
  28.         for (size_t j = 0; j < m; j++)
  29.         {
  30.             if (a[j][i] == b[j][i])
  31.             {
  32.                 c[j][i] = 0;
  33.             }
  34.             c[j][i] = a[j][i] > b[j][i] ? 1 : -1;
  35.             printf("c[%d][%d]= %2d\t\t", j, i, c[j][i]);
  36.         }
  37.         printf("\n");
  38.     }

  39.     return 0;
  40. }
复制代码

================================================================================

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字符串

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

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

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

  28.     //改变后的字符串
  29.     printf("改变后的字符串a:\n\n");
  30.     for (size_t i = 0; i < m + 5; i++)
  31.     {
  32.         for (size_t j = 0; j < 5; j++)
  33.         {
  34.             a[m + j] = b[j];
  35.         }
  36.     }
  37.     a[m + 5] = '\0';

  38.     printf("%s", a);

  39.     return 0;
  40. }

复制代码

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

自定义求数字数组长度的函数
  1. #/*数组长度函数*/
  2. #define el "'e'"
  3. /*用字符e表示一个数字数组的结束,el = endline*/
  4. size_t arrlen(size_t arr[])
  5. {
  6.     size_t i = 1;
  7.     while (*(arr + i) != el)
  8.     {
  9.         i++;
  10.     }
  11.     return i;
  12. }

  13. int main(int argc, char const *argv[])
  14. {
  15.     int a[] = {0,0,0,0,0,0,0,000};
  16.     int b[] = {9,8,7,6,5,4,3,2,1,0,000};
  17.     int c[] = {0,0,0,0,0,5,6,7,8,9,000};
  18.     printf("arrlen(a) = %d\n", arrlen(a));
  19.     printf("arrlen(b) = %d\n", arrlen(b));
  20.     printf("arrlen(c) = %d\n", arrlen(c));
  21.     return 0;
  22. }

复制代码

----------------------------------------------------------------------------------------------------------------------
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)
  1. /*数组长度函数*/
  2. #define el "'e'"
  3. /*用字符e表示一个数字数组的结束,el = endline*/
  4. size_t arrlen(size_t arr[])
  5. {
  6.     size_t i = 1;
  7.     while (*(arr + i) != el)
  8.     {
  9.         i++;
  10.     }
  11.     return i;
  12. }
复制代码


数字数组拼接函数arrcat()
  1. /*数字数组拼接函数arrcat(arr1, arr2)*/
  2. void arrcat(size_t arr1[], size_t arr2[])
  3. {
  4.     size_t temp[arrlen(arr1) + arrlen(arr2)];
  5.     size_t i, j, k;
  6.     for (i = 0; i < arrlen(arr1); i++)
  7.     {
  8.         temp[i] = arr1[i];
  9.     }
  10.     for (j = 0; j < arrlen(arr2); j++)
  11.     {
  12.         temp[i + j] = arr2[j];
  13.     }
  14.     for (k = 0; k < i + j; k++)
  15.     {
  16.         arr1[k] = temp[k];
  17.         arr1[k + 1] = el;
  18.         printf("%d ", arr1[k]);
  19.     }
  20. }
复制代码

请确保arr1有足够的空间接受arr2的数据!!!!!

数组冒泡排序函数arrsrt(arr)
  1. /*冒泡排序函数*/
  2. size_t arrsrt(size_t arr[])
  3. {
  4.     int t;
  5.     for (size_t i = 0; i < arrlen(arr); i++)
  6.     {
  7.         for (size_t j = 0; j <arrlen(arr) - 1; j++)
  8.         {
  9.             if (arr[j] >= arr[j + 1])
  10.             {
  11.                 t = arr[j];
  12.                 arr[j] = arr[j + 1];
  13.                 arr[j + 1] = t;
  14.             }
  15.         }
  16.     }
复制代码

-------------------------------------------------------------------------------------------------------------------------------
  1. #include <stdio.h>
  2. #include "E:\Administrator\Documents\My C\My C Function\Function.c"
  3. void main()
  4. {
  5.     int a[14] = {0, 1, 2, 3, el};
  6.     int b[] = {7, 5, 8, 4, el};
  7.     int c[] = {6, 9, 10, 11, el};
  8.     printf("拼接a[]和b[]\n");
  9.     arrcat(a, b);
  10.     printf("\n\n");
  11.     printf("然后拼接c[]\n");
  12.     arrcat(a, c);
  13.     printf("\n\n");
  14.     printf("对数组排序\n");
  15.     arrsrt(a);
  16.     printf("\n\n");
  17.     printf("打印数组长度\n");
  18.     printf("%d", arrlen(a));
  19. }
复制代码

---------------------------------------------------------------------------------------------------------------------------------------------
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()
  1. /*数组搜索函数*/
  2. void arrsch(size_t arr[], size_t key)
  3. {
  4.     size_t temp[arrlen(arr)];
  5.     size_t j = 0;
  6.     for (size_t i = 0; i < arrlen(arr); i++)
  7.     {
  8.         if (*(arr + i) == key)
  9.         {
  10.             temp[j] = i;
  11.             j++;
  12.         }
  13.     }
  14.     if (j >= 1)
  15.     {
  16.         printf("数据:%d\n出现次数:%d\n下标为:", key, j);
  17.         for (size_t i = 0; i < j; i++)
  18.         {
  19.             printf("%02d ", temp[i]);
  20.         }
  21.     }
  22.     else
  23.     {
  24.         printf("数据: %d\n出现次数: %d\n下标为: NULL", key, 0);
  25.     }
  26. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

  15. /*数字数组排序函数*/
  16. void arrsrt(size_t arr[])
  17. {
  18.     for (size_t i = 0; i < arrlen(arr); i++)
  19.     {
  20.         for (size_t j = 0, k = 0; j < arrlen(arr) - 1; j++)
  21.         {
  22.             if (*(arr + j) > *(arr + j + 1))
  23.             {
  24.                 k = *(arr + j);
  25.                 *(arr + j) = *(arr + j + 1);
  26.                 *(arr + j + 1) = k;
  27.             }
  28.         }
  29.     }
  30.     return arr;
  31. }

  32. /*数字数组拼接函数arrcat(arr1, arr2)*/
  33. void arrcat(size_t arr1[], size_t arr2[])
  34. {
  35.     size_t i = 1;
  36.     while (*arr1 != el)
  37.     {
  38.         arr1++; //跳到arri尾地址
  39.     }
  40.     while (*arr2 != el)
  41.     {
  42.         *(arr1++) = *(arr2++); //复制arr2数据到arr1尾部
  43.     }
  44.     *arr1 = el;
  45. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-1 00:38:35 | 显示全部楼层
2019年6月1日00:38:58
  1. /*数字数组替换函数*/
  2. int arrrpl(size_t arr[], size_t key, size_t num)
  3. {
  4.     assert(arr != NULL);
  5.     size_t i = 0;
  6.     for (; *arr != el; arr++)
  7.     {
  8.         if (*arr == key)
  9.         {
  10.             i++;
  11.             break;
  12.         }
  13.     }
  14.     switch (i)
  15.     {
  16.     case 0:
  17.         return 0;
  18.         break;
  19.     case 1:
  20.         if ((*arr == 0) && (key == 0))
  21.         {
  22.             *arr = num;
  23.         }
  24.         else
  25.         {
  26.             for (; *arr != el; arr++)
  27.             {
  28.                 if (*arr == key)
  29.                 {
  30.                     *arr = num;
  31.                 }
  32.             }
  33.         }
  34.         return arr;
  35.         break;
  36.     }
  37. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> 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]
  1. #include <stdio.h>
  2. #include <assert.h>
  3. #include "E:\Administrator\Documents\My C\My C Function\Function.c"
  4. int main(int argc, char const *argv[])
  5. {
  6.     int *p = NULL;//初始化为NULL防止野指针
  7.     int a = 100;
  8.     p = &a;//也可以直接写作int *p = &a在定义时就直接赋值.
  9.     printf("p的值是:%#X\n", p); //以十六进制输出p的值
  10.     printf("*p的值是:%d\n", *p);
  11.     printf("变量a原值是:%d\n", a);
  12.     *p = 200; //通过指针改变变量a得值
  13.     printf("改变后变量a的值是:%d\n", a);
  14.     return 0;
  15. }
复制代码

----------------------------------------------------------------------------------------------------
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]指针和一维数组

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


[2]指针和二维数组

如:
  1. #include <stdio.h>
  2. #include <assert.h>
  3. #include <math.h>
  4. #include "E:\Administrator\Documents\My C\My C Function\Function.c"
  5. int main(int argc, char const *argv[])
  6. {
  7.     int a[3][4] = {{0, 1, 2, 3},
  8.                    {
  9.                        4,
  10.                        5,
  11.                        6,
  12.                        7,
  13.                    },
  14.                    {
  15.                        8,
  16.                        9,
  17.                        10,
  18.                        11,
  19.                    }};
  20.                    for (size_t i = 0; i < 3; i++)
  21.                    {
  22.                        printf("%2d ", **(a+i));
  23.                    }
  24.                    printf("\n\n");
  25.                    for (size_t i = 0; i < 12; i++)
  26.                    {
  27.                        printf("%2d ", *(*a+i));
  28.                    }
  29.                   

  30. }
复制代码

------------------------------------------------------------------------------------------------------
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, 2024-3-29 18:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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