基于Linux学习 C语言——基础 DAY10

一、函数

 具体分为库函数和自定义函数

 其中库函数指scanf printf strlen...

而自定义函数指由程序员封装函数,而自定义函数又分为有参无参函数和有无返回值函数

void sum()    无参无返函数
void sum(int a,int b) 有参无返函数
int sum()    无参有返函数
int sum(int a,int b); 有参有返函数

当自定义函数在主函数上方时不需要声明直接使用即可,但可读性差,运行速度慢

当自定义函数在主函数下方时需要声明,可读性好,运行速度快

可使用:vsp 文件名.h 生成一个.h文件存储声明,只需要在文件头使用“”引出来

1.1全局与局部变量

 1.2有参函数

有参是因为被调函数需要使用主调函数的局部变量

要求:实参和形参一一对应,个数相同否则会报错

           实参名和形参名可以一致也可以不一致,

           类型最好一致,否则会以形参为主发生强转

void Sum(int arr[],int len)//当传递数组是,形参的数组长度可以省略不写,默认是实际实参的元素个数
{
    int sum=0;
    printf("形参=%ld\n",sizeof(arr));
    for(int i=0;i<len;i++)
    {
        sum+=arr[i];
    }
    printf("sum=%d\n",sum);
}
//写一个自定义函数Bubble,实现冒泡排序: 
//参数:数组名,长度
void Bubble(int arr[],int len)
{
    for(int i=1;i<len;i++)//循环轮数
    {
        int count=0;
        for(int j=0;j<len-i;j++)//每一轮比较的次数
        {
            if(arr[j] >arr[j+1])
            {
                int temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;
                count++;
            }
        }
        if(count==0)
            break;
    }

    for(int i=0;i<len;i++)
    {
        printf("%d ",arr[i]);
    }
}
int main(int argc, const char *argv[])
{
    //int arr[]; int []表示数组的类型
    //char arr[5][6]:  char [5][6]  二维数组的数据类型
    //
    int arr[]={11,9,3,4,55};//局部,只能main使用
    int len=sizeof(arr)/sizeof(arr[0]);
    printf("实参=%ld\n",sizeof(arr));
//    Sum(arr[0]);//传递一个元素
    Sum(arr,len);//数组做参数一般传递数组名,表示传递的整个数组

    //冒泡函数
    Bubble(arr,len);
    return 0;
}

由示例可见,当数组作为参数时传递数组名,数组名就代表整个数组,在被调函数中并不是以数组形式来接的,而是指针

1.3有返回值函数

因为主调函数需要被调函数的局部变量,故有了返回值

void就是无返回值

其他数据类型需要返回值

使用格式1:

return(表达式)

使用格式2:

return 表达式

注意:返回的类型和函数数据类型一致,如果不一致会发生自动或强制转换

练习1:自定义函数Sum计算一维数组的和,返回和
#include<stdio.h>
int Sum(int arr[],int len)
{
    int sum=0;
    for(int i=0;i<len;i++)
    {
        sum+=arr[i];
    }
    return sum;
    size_t count=0;
}
int main(int argc, const char *argv[])
{
    int arr[]={1,2,3,4,5};
    int s=Sum(arr,sizeof(arr)/sizeof(arr[0]));
    printf("s=%d\n",s);
    return 0;
}
练习2:返回字符串长度
#include<stdio.h>
size_t my_strlen(char str[]){
	size i=0;
	while(str[i])
	i++;

    return i;
}
int main(int argc, const char *argv[])
{
	char str[120]="";
	gets(str);
	unsigned int len=my_strlen(str);
	printf("%u\n",len);
	
	return 0;
}
练习3:字符串比较,返回s1和s2的差值。
#include<stdio.h>

int my_strcmp(char s1[],char s2[]){
	int i=0;
	int j=0;
	while(s1[i]==s2[j]&&s2[j]!='0'){
		i++;
		j++;
	}
	if(s1[i]>s2[j])
		return s1[i]-s2[j];
	else if(s1[i]<s2[j])
		return s1[i]-s2[j];
	else
		return 0;
}

int main(int argc, const char *argv[])
{
	char s1[127]="";
	char s2[127]="";
	gets(s1);
	gets(s2);
	int cmp=my_strcmp(s1,s2);
	if(cmp>0){
	printf("no %d\n",cmp);
	}else if(cmp<0){
	printf("no %d\n",cmp);
	}else{
	printf("yes %d\n",cmp);
	}
	return 0;
}

 

#include<stdio.h>

void Bubble_sort(int arr[],int m);
int Max_add_value(int a,int b);
int Max_dif_value(int c,int b);
int main(int argc, const char *argv[])
{
	int m;
	printf("有几位数:");
	scanf("%d",&m);
	int arr[m];
	printf("它们分别是:");
	for(int i=0;i<m;i++){
		scanf("%d",&arr[i]);
	}
	Bubble_sort(arr,m);
	if(m>1){
		int max_add_value=Max_add_value(arr[m-2],arr[m-1]);
		printf("最大和为%d\n",max_add_value);
		int max_dif_value=Max_dif_value(arr[0],arr[m-1]);
		printf("最大差为%d\n",max_dif_value);
	}else if(1==m){
		printf("只有一个数,所以最大和和最大差都是该数:%d\n", arr[0]);
	} else {
		printf("没有输入任何数。\n");
	}
	return 0;
}

void Bubble_sort(int arr[],int m){
	int i=0;
	int j=0;
	int temp=0;
	for(i=0;i<m-1;i++){
		for(j=0;j<m-1-i;j++){
			if(arr[j]>arr[j+1]){
				temp=arr[j];
				arr[j]=arr[j+1];
				arr[j+1]=temp;
			}
		}

	}
}

int Max_add_value(int a,int b){
	return a+b;
}

int Max_dif_value(int c,int b){
	return b-c;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值