以数组作为函数的参数
格式:
类型标识符 函数名(类型标识符 数组名[],int n){
处理的代码
}
A:n表示数组的长度
B:在以数组作为函数参数时,数组一般不写大小
C:它的大小由变量n来决定
sum(int a[],int n)
{
处理代码;
}
使用:
1)既然型参是数组,那么在调用的时候,实参也应该用数组
2)在调用以数组作为参数的函数时,实参数组只能写上数组名
3)型参的改变不会影响实参。(传递数的时候)
4)但是以数组作为参数时, 型参数组就是实参数组,
所以型参数组的改变,会影响实参数组但是以数组作为参数时,型参数组就是实参数组,所以型参数组的改变,实参数组会做同样的改变
#include "stdio.h"
//编写一个数组,求数组为n的整型数组中的最大值
int max(int a[],int n)
{
int m=a[0];
for(int i=1;i<n;i++)
if(m<a[n])
{
m=a[i]
}
return m;
}
//编写一个函数,输出长度为n的数组中的所有元素
void show(int a[],int n)
{
for(int i=0;a[i];i++)
{
printf("%d",a[i]);
}
}
//编写一个函数,将数组中的元素都倒置
void reverse(int a[],int n)//在用数组时,实参数组会跟着型参数组的改变而改变
{
int i=0,j,t;
for(i=0,j=n-1;i<j;i++,j--)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
//编写一个函数,删除整型一维数组中相同的元素,只保留一个,函数要返回删除后数组的个数
算法分析:
第一步先排序,
一个函数,能去除,重复元素,保留剩下的元素
show 出结果
void show(int a[],int n)
{
for(int i=0;i<n;i++)
{
printf("%5d",a[i]);
}
printf("\n");
}
int del(int a[],int n)
{
int i,j;
for(j=0,i=1;i<n;i++)
{
if(a[i]!=a[j])
{
j++; //只有条件成立的时候j才会加,
a[j]=a[i];
}
}
return j+1;
}
//实现排序
void pai(int a[],int n)
{
int i,j,t;
for(i=0;i<n;i++)
{
for(j=i;j<n;j++)
{
if(a[i]>a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
show(a,n);
}
main()
{
int a[8]={2,4,6,7,8,4,5,6},result=0;
show(a,8);
pai(a,8);
result=del(a,8);
printf("%d\n",result);
show(a,result);
}
以数字组为函数参数的意义:
编写一个函数,用来检验一个字符串是否是回文字符串
123a321
操作字符串,我们就需要资格字符数组
一维字符数组作为函数参数,就不需要长度n,因为字符串最后有结束符号'\0'
格式:
类型标识符 函数名(char 数组名[])
{
进行处理
}
int isRever(char a[])
{
int i;j;
for(i=0;j=strlen(a)-1;i<j;i++,j--)
{
if(a[i]!=a[j])
{
return 0;
}
}
return 1;
}
编写一个函数,把一个字符串中的所有数字都加起来,作为一个结果返回
int fun(char a[])
{
int i,k=0;
for(i=0;a[i];i++)
{
if(a[i]>='0' && a[i]<='9')
{
k+=a[i]-'0';
}
}
return k;
}
编写一个函数,把一个字符串的所有单词的第一个字母变成大写
算法:a[i]是小写字母,并且a[i-1]不是英文字母,但是这个规律只能从第二个字符开始,a[0]要单独考察
void wfun(char a[])
{
int i,j;
if(a[0]>='a' && a[0]<='z')//a[0]要单独考察
a[i]-=32;
for(i=1;a[i];i++)
{
if(a[i]>='a' && a[i]<='z' && !(a[i-1]>='a' && a[i-1]<='z'|| a[i-1]>='A' && a[i-1]<='Z' ))
{
a[i]-=32;
}
}
puts(a);
}
从一个字符串中找其中ASCII码最大的一个字符,并将其放在第一位,后面的字符向后顺序移动。
ABCDEeFEEIJ---->eABCDEFEEIJ
算法:先求得最大的ASCII码的字符的下标
再根据下标移动字符串中的字符,最后把开头的位置改掉。
int findMax(char a[])
{
int i,max=a[0],index=0;
for(i=0;a[i];i++)
{
if(max<a[i])
{
max=a[i];
index=i;
}
}
printf("%d,%c\n",index,max);
return index;
}
void movefun(char a[])
{
int i,j;
j=findMax(a);
char t=a[j] ;
for(i=j;j>0;j--)
{
a[j]=a[j-1];
}
a[0]=t;
puts(a);
}