以数组作为函数的参数c学习笔记

以数组作为函数的参数

格式:

类型标识符 函数名(类型标识符 数组名[],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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aFakeProgramer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值