一维整型数组做函数参数
一维数组做函数参数时
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;
}