赞
踩
一维数组做函数参数时
1、做形参要写数组形式+数组长度
int array(int s[],int len)
2、做实参要写数组名+数组长度
array(s,len);
练习:对一维整型数组做函数参数的操作
- #include <stdio.h>
-
- void printfArray(int a[],int len)
- {
- int i;
- for ( i=0; i<len; i++ )
- {
- printf("a[%d] = %d\n",i,a[i]);
- }
- }
-
- void nixu(int a[], int len)
- {
- int i=0;
- int j=len-1;
- int temp;
-
- while(i<j)
- {
- temp = a[i];
- a[i] = a[j];
- a[j] = temp;
- i++;
- j--;
- }
- return ;
- }
-
- void crpaixu(int a[], int len)
- {
- int i=0, j=0;
- int temp;
-
- for( i=1; i<len; i++ )
- {
- temp = a[i];
- j = i;
- while(j>0 && temp<a[i-1])
- {
- a[i] = a[i-1];
- j--;
- }
- a[j] = temp;
- }
- return ;
- }
-
- int chazhao(int a[], int len, int n)
- {
- int begin, mid, end;
- begin = 0;
- end = len - 1;
-
- while ( begin <= end )
- {
- mid = (begin+end)/2;
-
- if( n < a[mid] )
- {
- end = mid - 1;
- }
- else if ( a[mid] < n )
- {
- begin = mid + 1;
- }
- else
- {
- break;
- }
- }
-
- if (begin <= end)
- {
- return mid;
- }
- else
- {
- return -1;
- }
-
- }
-
- int main()
- {
- int a[] = {1,2,3,4,5,6,7,8,9};
- int len = sizeof(a)/sizeof(a[0]);
-
- /*printfArray(a,len);
- printf("-------------------\n");
- nixu(a,len);
- printfArray(a,len);
- printf("-------------------\n");
- crpaixu(a,len);
- printfArray(a,len);
- printf("-------------------\n");
- */
- int n;
- printf("input n : ");
- scanf("%d",&n);
- chazhao(a,len,n);
-
- if(chazhao(a,len,n)>=0)
- printf("found!\n");
- else
- printf("no found!\n");
-
- return 0;
- }

一维字符型数组主要用来存放字符串。
因为处理的是字符串数据,字符串操作的依据是看结束标志'\0',所以不需要传数组长度。
做形参要写数组形式
void char_array(char s[])
做实参要写数组名
char_array(s);
练习:对一维字符型数组做函数参数的操作
- #include <stdio.h>
-
- void Puts(char s[]) //实现库函数puts()的功能
- {
- int i = 0;
-
- while (s[i]!='\0')
- {
- printf("%c",s[i]);
- i++;
- }
- printf("\n");
- }
-
- void Gets(char s[]) //实现库函数gets()的功能
- {
- int i = 0;
-
- while (( s[i] = getchar() )!='\n')
- {
- i++;
- }
- s[i] = '\0';
- }
-
- int Strlen(char s[]) //实现库函数strlen()的功能
- {
- int i=0;
-
- while(s[i]!='\0')
- {
- i++;
- }
-
- return i;
- }
-
- void Strcpy(char dest[], char srt[])
- {
- int i=0;
-
- while (srt[i]!='\0')
- {
- dest[i] = srt[i];
- i++;
- }
- dest[i] = '\0';
- }
-
- void Strcat(char dest[], char srt[])
- {
- int i=0, j=0;
-
- while(dest[i]!='\0')
- {
- i++;
- }
-
- while(srt[j]!='\0')
- {
- dest[i] = srt[j];
- i++;
- j++;
- }
- dest[i] = '\0';
- }
-
- int Strcmp(char dest[], char srt[])
- {
- int i=0;
- int ret=0;
-
- while(dest[i]==srt[i] && dest[i]!='\0' && srt[i]!='\0')
- {
- i++;
- }
-
- ret = dest[i] - srt[i];
-
- return ret;
- }
-
- int main()
- {
- char s[100];
- char s1[100];
-
- /*Gets(s1);
- Puts(s1);
- printf("%d\n",Strlen(s1));*/
-
- //Strcpy(s,s1);
- //Puts(s);
-
- Gets(s);
- Gets(s1);
-
- //Strcat(s,s1);
- printf("%d\n",Strcmp(s,s1));
-
- //Puts(s);
-
- return 0;
- }

一维数组做函数参数时
形参:二维数组形式+行数
void arrayTwo(int s[][4],int row)
实参:数组名+行数
arrayTwo(s,row);
练习:对二维整型数组做函数参数的操作
- #include <stdio.h>
-
- int sum(int a[][4], int row) //对数组元素求和
- {
- int i=0;
- int j=0;
- int sum = 0;
-
- for ( i=0; i<row; i++ )
- {
- for ( j=0; j<4; j++ )
- {
- sum = sum + a[i][j];
- }
- }
-
- return sum;
- }
-
- void printfArray(int a[][4], int row) //列数不能省
- {
- int i=0;
- int j=0;
-
- for ( i=0; i<row; i++)
- {
- for ( j=0; j<4; j++)
- {
- printf("%d ",a[i][j]);
- }
- printf("\n");
- }
- }
-
- int maxLight(int a[][4], int row) //找到主对角线上的最大值
- {
- int i=0;
- int j=0;
- int max=a[0][0];
-
- for ( i=0; i<row; i++ )
- {
- for ( j=0; j<4; j++ )
- {
- if ( i==j && max<a[i][j] )
- {
- max = a[i][j];
- }
- }
- }
-
- return max;
- }
-
- int main()
- {
- int a[][4] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
-
- int row = sizeof(a)/sizeof(a[0]); //计算行数
-
- printfArray(a,row);
-
- printf("sum = %d\n",sum(a,row));
-
- printf("max = %d\n",maxLight(a,row));
-
- return 0;
- }

与二维整形数组使用方式相同
做形参要写数组形式+行数;
void charTwo(char s[][10], int row)
做实参要写数组名+行数;
charTwo(a,row);
不要和一维字符型数组传参搞混,
一位字符串数组主要用来存放字符串数据,而字符串数据有结束标志,所以传参时不需要传长度。
二维字符型数组用来存储多个字符串,操作时往往都是要操作多个字符串,而多个字符串没有所谓的结束标志,看的是数组行数
练习:对二维字符型数组做函数参数的操作
- #include <stdio.h>
- #include <string.h>
-
- void inputStr(char a[][10], int row)
- {
- int i=0;
-
- for ( i=0; i<row; i++ )
- {
- gets(a[i]);
- }
- }
-
- void printfArray(char a[][10], int row)
- {
- int i=0;
-
- for ( i=0; i<row; i++ )
- {
- puts(a[i]);
- }
- }
-
- void crpaixu(char a[][10], int row) //插入排序
- {
- int i;
- int j;
-
- for ( i=1; i<row; i++ )
- {
- char temp[10];
- strcpy(temp,a[i]);
- j = i;
-
- while (j>0 && strcmp(temp,a[j-1])<0)
- {
- strcpy(a[j],a[j-1]);
- j--;
- }
- strcpy(a[j],temp);
- }
- }
-
- int chazhao(char a[][10], int row, char m[])
- {
- int ret = -1;
- int begin, mid, end;
- begin = 0;
- end = row - 1;
-
- while (begin<=end)
- {
- mid = (begin+end)/2;
-
- if (strcmp(m,a[mid])<0)
- {
- end = mid - 1;
- }
- else if ( strcmp(a[mid],m)<0 )
- {
- begin = mid + 1;
- }
- else
- {
- ret = mid;
- break;
- }
- }
-
- return ret;
- }
-
- int main()
- {
- char a[5][10];
- int row = sizeof(a)/sizeof(a[0]); //计算行数
-
- inputStr(a,row);
- //printfArray(a,row);
-
- crpaixu(a,row);
- printfArray(a,row);
-
- char m[10];
- gets(m);
- printf("%d\n",chazhao(a,row,m));
-
- return 0;
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。