当前位置:   article > 正文

嵌入式学习之路 12 (C语言基础学习 —— 一维、二维数组做函数参数)

嵌入式学习之路 12 (C语言基础学习 —— 一维、二维数组做函数参数)

 一维整型数组做函数参数

一维数组做函数参数时

1、做形参要写数组形式+数组长度

int array(int s[],int len)

2、做实参要写数组名+数组长度

array(s,len);

 练习:对一维整型数组做函数参数的操作

  1. #include <stdio.h>
  2. void printfArray(int a[],int len)
  3. {
  4. int i;
  5. for ( i=0; i<len; i++ )
  6. {
  7. printf("a[%d] = %d\n",i,a[i]);
  8. }
  9. }
  10. void nixu(int a[], int len)
  11. {
  12. int i=0;
  13. int j=len-1;
  14. int temp;
  15. while(i<j)
  16. {
  17. temp = a[i];
  18. a[i] = a[j];
  19. a[j] = temp;
  20. i++;
  21. j--;
  22. }
  23. return ;
  24. }
  25. void crpaixu(int a[], int len)
  26. {
  27. int i=0, j=0;
  28. int temp;
  29. for( i=1; i<len; i++ )
  30. {
  31. temp = a[i];
  32. j = i;
  33. while(j>0 && temp<a[i-1])
  34. {
  35. a[i] = a[i-1];
  36. j--;
  37. }
  38. a[j] = temp;
  39. }
  40. return ;
  41. }
  42. int chazhao(int a[], int len, int n)
  43. {
  44. int begin, mid, end;
  45. begin = 0;
  46. end = len - 1;
  47. while ( begin <= end )
  48. {
  49. mid = (begin+end)/2;
  50. if( n < a[mid] )
  51. {
  52. end = mid - 1;
  53. }
  54. else if ( a[mid] < n )
  55. {
  56. begin = mid + 1;
  57. }
  58. else
  59. {
  60. break;
  61. }
  62. }
  63. if (begin <= end)
  64. {
  65. return mid;
  66. }
  67. else
  68. {
  69. return -1;
  70. }
  71. }
  72. int main()
  73. {
  74. int a[] = {1,2,3,4,5,6,7,8,9};
  75. int len = sizeof(a)/sizeof(a[0]);
  76. /*printfArray(a,len);
  77. printf("-------------------\n");
  78. nixu(a,len);
  79. printfArray(a,len);
  80. printf("-------------------\n");
  81. crpaixu(a,len);
  82. printfArray(a,len);
  83. printf("-------------------\n");
  84. */
  85. int n;
  86. printf("input n : ");
  87. scanf("%d",&n);
  88. chazhao(a,len,n);
  89. if(chazhao(a,len,n)>=0)
  90. printf("found!\n");
  91. else
  92. printf("no found!\n");
  93. return 0;
  94. }

一维字符型数组做函数参数

一维字符型数组主要用来存放字符串。

因为处理的是字符串数据,字符串操作的依据是看结束标志'\0',所以不需要传数组长度。

做形参要写数组形式

void char_array(char s[])

做实参要写数组名

char_array(s);

 练习:对一维字符型数组做函数参数的操作

  1. #include <stdio.h>
  2. void Puts(char s[]) //实现库函数puts()的功能
  3. {
  4. int i = 0;
  5. while (s[i]!='\0')
  6. {
  7. printf("%c",s[i]);
  8. i++;
  9. }
  10. printf("\n");
  11. }
  12. void Gets(char s[]) //实现库函数gets()的功能
  13. {
  14. int i = 0;
  15. while (( s[i] = getchar() )!='\n')
  16. {
  17. i++;
  18. }
  19. s[i] = '\0';
  20. }
  21. int Strlen(char s[]) //实现库函数strlen()的功能
  22. {
  23. int i=0;
  24. while(s[i]!='\0')
  25. {
  26. i++;
  27. }
  28. return i;
  29. }
  30. void Strcpy(char dest[], char srt[])
  31. {
  32. int i=0;
  33. while (srt[i]!='\0')
  34. {
  35. dest[i] = srt[i];
  36. i++;
  37. }
  38. dest[i] = '\0';
  39. }
  40. void Strcat(char dest[], char srt[])
  41. {
  42. int i=0, j=0;
  43. while(dest[i]!='\0')
  44. {
  45. i++;
  46. }
  47. while(srt[j]!='\0')
  48. {
  49. dest[i] = srt[j];
  50. i++;
  51. j++;
  52. }
  53. dest[i] = '\0';
  54. }
  55. int Strcmp(char dest[], char srt[])
  56. {
  57. int i=0;
  58. int ret=0;
  59. while(dest[i]==srt[i] && dest[i]!='\0' && srt[i]!='\0')
  60. {
  61. i++;
  62. }
  63. ret = dest[i] - srt[i];
  64. return ret;
  65. }
  66. int main()
  67. {
  68. char s[100];
  69. char s1[100];
  70. /*Gets(s1);
  71. Puts(s1);
  72. printf("%d\n",Strlen(s1));*/
  73. //Strcpy(s,s1);
  74. //Puts(s);
  75. Gets(s);
  76. Gets(s1);
  77. //Strcat(s,s1);
  78. printf("%d\n",Strcmp(s,s1));
  79. //Puts(s);
  80. return 0;
  81. }

 二维整型数组做函数参数

一维数组做函数参数时

形参:二维数组形式+行数

void arrayTwo(int s[][4],int row)

实参:数组名+行数

arrayTwo(s,row);

 练习:对二维整型数组做函数参数的操作

  1. #include <stdio.h>
  2. int sum(int a[][4], int row) //对数组元素求和
  3. {
  4. int i=0;
  5. int j=0;
  6. int sum = 0;
  7. for ( i=0; i<row; i++ )
  8. {
  9. for ( j=0; j<4; j++ )
  10. {
  11. sum = sum + a[i][j];
  12. }
  13. }
  14. return sum;
  15. }
  16. void printfArray(int a[][4], int row) //列数不能省
  17. {
  18. int i=0;
  19. int j=0;
  20. for ( i=0; i<row; i++)
  21. {
  22. for ( j=0; j<4; j++)
  23. {
  24. printf("%d ",a[i][j]);
  25. }
  26. printf("\n");
  27. }
  28. }
  29. int maxLight(int a[][4], int row) //找到主对角线上的最大值
  30. {
  31. int i=0;
  32. int j=0;
  33. int max=a[0][0];
  34. for ( i=0; i<row; i++ )
  35. {
  36. for ( j=0; j<4; j++ )
  37. {
  38. if ( i==j && max<a[i][j] )
  39. {
  40. max = a[i][j];
  41. }
  42. }
  43. }
  44. return max;
  45. }
  46. int main()
  47. {
  48. int a[][4] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
  49. int row = sizeof(a)/sizeof(a[0]); //计算行数
  50. printfArray(a,row);
  51. printf("sum = %d\n",sum(a,row));
  52. printf("max = %d\n",maxLight(a,row));
  53. return 0;
  54. }

二维字符型数组做函数参数

与二维整形数组使用方式相同

做形参要写数组形式+行数;

void charTwo(char s[][10], int row)

做实参要写数组名+行数;

charTwo(a,row);

不要和一维字符型数组传参搞混,

一位字符串数组主要用来存放字符串数据,而字符串数据有结束标志,所以传参时不需要传长度。

二维字符型数组用来存储多个字符串,操作时往往都是要操作多个字符串,而多个字符串没有所谓的结束标志,看的是数组行数

练习:对二维字符型数组做函数参数的操作

  1. #include <stdio.h>
  2. #include <string.h>
  3. void inputStr(char a[][10], int row)
  4. {
  5. int i=0;
  6. for ( i=0; i<row; i++ )
  7. {
  8. gets(a[i]);
  9. }
  10. }
  11. void printfArray(char a[][10], int row)
  12. {
  13. int i=0;
  14. for ( i=0; i<row; i++ )
  15. {
  16. puts(a[i]);
  17. }
  18. }
  19. void crpaixu(char a[][10], int row) //插入排序
  20. {
  21. int i;
  22. int j;
  23. for ( i=1; i<row; i++ )
  24. {
  25. char temp[10];
  26. strcpy(temp,a[i]);
  27. j = i;
  28. while (j>0 && strcmp(temp,a[j-1])<0)
  29. {
  30. strcpy(a[j],a[j-1]);
  31. j--;
  32. }
  33. strcpy(a[j],temp);
  34. }
  35. }
  36. int chazhao(char a[][10], int row, char m[])
  37. {
  38. int ret = -1;
  39. int begin, mid, end;
  40. begin = 0;
  41. end = row - 1;
  42. while (begin<=end)
  43. {
  44. mid = (begin+end)/2;
  45. if (strcmp(m,a[mid])<0)
  46. {
  47. end = mid - 1;
  48. }
  49. else if ( strcmp(a[mid],m)<0 )
  50. {
  51. begin = mid + 1;
  52. }
  53. else
  54. {
  55. ret = mid;
  56. break;
  57. }
  58. }
  59. return ret;
  60. }
  61. int main()
  62. {
  63. char a[5][10];
  64. int row = sizeof(a)/sizeof(a[0]); //计算行数
  65. inputStr(a,row);
  66. //printfArray(a,row);
  67. crpaixu(a,row);
  68. printfArray(a,row);
  69. char m[10];
  70. gets(m);
  71. printf("%d\n",chazhao(a,row,m));
  72. return 0;
  73. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/943035
推荐阅读
相关标签
  

闽ICP备14008679号