c语言学习记录(十)———函数

文章目录


前言

一个学习C语言的小白~ 有问题评论区或私信指出~

提示:以下是本篇文章正文内容,下面案例可供参考

一、函数的基本用法

函数是一个完成特定功能的代码模块,其程序代码独立,通常要求有返回值,也可以是空

一般形式如下:

c 复制代码
<数据类型><函数名称> (<形式参数>)
{
		语句序列;
		return[(<表达式>)];
}
  • 数据类型:是整个函数的返回值类型
  • return语句中表达式的值要和函数的数据类型一致,如无返回值应写为void
  • 形式参数说明是 逗号 "," 分隔的多个变量的说明形式
  • 大括弧对语句序列,称为函数体,是大于等于零个语句构成的。
  • 函数的说明就是指函数原型。
  • 其中,形式参数说明 可以缺省说明的变量名称,但是类型不能缺省
  • 例如
c 复制代码
	 double Power(double x,int n);
	 double Power(double,int);
  • 函数的使用也叫做函数的调用,形式如下:
  • 函数名称(<实际参数>)
    调用:
c 复制代码
	<函数名称>  (<实际参数>)
	例:
	max(a,b);
  • 实参就是在使用函数时,调用函数传递给被调函数的数据。需要确切的数据
  • 函数调用可以作为一个运算量出现在表达式中,也可以单独形成一个语句,对于无返回值的函数来讲
    只能形成一个函数调用语句

题目:编写一个函数显示:"你好C语言"。

题目:定义求 x^n 指的函数(x是实数,n为正整数)

c 复制代码
#include <stdio.h>
#include <stdlib.h>


void HiC();
int XpowY(int,int);
int main()
{
    int a = 2,b = 3;
    HiC();
    int c = XpowY(a,b);
    printf("c = %d\n",c);

    return 0;
}

void HiC()
{
    printf("你好,C语言!\n");
}

int XpowY(int x,int y)
{
    int i,temp = 1;
    for(i = 0;i<y;i++)
    {
        temp *= x;
    }
    return temp;
}

二、函数的参数传递

1.基本方式

函数之间的参数传递方式:

  • 全局变量
  • 复制传递的方式
  • 地址传递的方式

全局变量

  • 全局变量就是在函数体外说明的变量,它在程序中的每个函数里都是可见的。
  • 全局变量一经定义后就会在程序的任何地方可见。函数调用的位置不同
    程序的执行结果可能会受到影响,不建议使用。

复制传递方式

  • 调用函数将实参传递给被调用函数,被调用函数将创建同类型的形参并用实参初始化。
  • 形参是新开辟的存储空间,因此在函数中改变形参的值,不会影响到实参。(函数未被调用前形参不占内存空间,函数调用结束形参就被销毁)

地址传递方式

  • 按地址传递,实参为变量的,而形参为同类型的指针
  • 被调用函数中对形参的操作,将直接改变实参的值
    (被调用函数对指针的目标操作相当于对实参本身的操作)

2 数组在函数中的传参

全局数组传递的方式

复制传递方式

实参为数组的指针,形参为数组名(本质上是一个指针变量)

地址传递方式

实参为数组的指针,形参为同类型的指针变量。

题目:计算一个一维整型数组的所有元素的和

题目:删除字符串中的空格

题目:编写一个函数统计字符串中大小字母的个数,并把小写转化成大写,大写转换成小写

c 复制代码
//一维数组求和函数
#include <stdio.h>
#include <stdlib.h>

int SumArr(int arr[],int n);
int main()
{
    int sum;
    int brr[] = {1,2,3,4,5,6,7,8,9,10};
    sum = SumArr(brr,10);
    printf("%d",sum);
    return 0;
}

int SumArr(int arr[],int n)
{
    int i,sum = 0;
    for(i = 0;i < n;i++)
    {
        sum += arr[i];
    }
    return sum;
}
c 复制代码
//删除空格方法一
#include <stdio.h>
#include <stdlib.h>

void DeleteSpeace(char str[]);
int main()
{
    char str[] = "a b c d e f";
    printf("Before Delete:%s\n",str);
    DeleteSpeace(str);
    printf("After Delete:%s\n",str);
    return 0;
}
void DeleteSpeace(char str[])
{
    int lenth;
    while(str[lenth] != '\0')
    {
        lenth++;//遍历出数组长度
    }
    for(int i = 0;i<=lenth;i++)
    {
        if(str[i] == ' ')
        {
            str[i] = str[i+1];//如果遇到空格把前面的数往前移
            int j;
            for(j = i+1;j<lenth;j++)
            {
                str[j] = str[j+1];
            }

        }
    }

}
c 复制代码
//方法2
void DeleteSpeace(char *str);
int main()
{
    char str[] = "a b c d e f";
    printf("Before Delete:%s\n",str);
    DeleteSpeace(str);
    printf("After Delete:%s\n",str);
    return 0;
}
void DeleteSpeace(char *s) 
{
	int begin = 0, end = 0;
	while(s[end]!='\0') //判断s[end]是否为空格
	{
		if (s[end] != ' ') 
		{
			s[begin] = s[end];//不是空格把值付给s[begin]
			begin++;
			end++;
		} else 
		{
			end++;//是空格end++跳过空格赋值
		}
	}
	s[begin] = '\0';
}
c 复制代码
#include <stdio.h>
#include <stdlib.h>

void toCapsLock(char *str,int *BigLenth,int *SmallLenth);
int main()
{
    char str[] = "abcDEF";
    int BigLenth = 0,SmallLenth = 0;
    printf("Before:%s\n",str);
    toCapsLock(str,&BigLenth,&SmallLenth);
    printf("After:%s\n",str);
    printf("Big:%d Small:%d",BigLenth,SmallLenth);
    return 0;
}


void toCapsLock(char *str,int *BigLenth,int *SmallLenth)
{
    for(int i = 0;str[i] != '\0';i++)
    {
        if(str[i] >= 'a' && str[i] <= 'z')
        {
            str[i] -= 32;
            (*SmallLenth)++;
        }
        else if(str[i] >= 'A' && str[i] <= 'Z')
        {
            str[i] += 32;
            (*BigLenth)++;
        }
    }

}

有关指针部分将在指针章节讲解~

相关推荐
勇闯逆流河35 分钟前
【数据结构】堆
c语言·数据结构·算法
985小水博一枚呀1 小时前
【AI大模型学习路线】第二阶段之RAG基础与架构——第七章(【项目实战】基于RAG的PDF文档助手)技术方案与架构设计?
人工智能·学习·语言模型·架构·大模型
pystraf1 小时前
LG P9844 [ICPC 2021 Nanjing R] Paimon Segment Tree Solution
数据结构·c++·算法·线段树·洛谷
飞川撸码2 小时前
【LeetCode 热题100】739:每日温度(详细解析)(Go语言版)
算法·leetcode·golang
yuhao__z2 小时前
代码随想录算法训练营第六十六天| 图论11—卡码网97. 小明逛公园,127. 骑士的攻击
算法
Echo``2 小时前
3:OpenCV—视频播放
图像处理·人工智能·opencv·算法·机器学习·视觉检测·音视频
hello1114-3 小时前
Redis学习打卡-Day3-分布式ID生成策略、分布式锁
redis·分布式·学习
小Tomkk3 小时前
2025年PMP 学习二十 第13章 项目相关方管理
学习·pmp·项目pmp
Nobkins3 小时前
2021ICPC四川省赛个人补题ABDHKLM
开发语言·数据结构·c++·算法·图论
88号技师3 小时前
2025年6月一区SCI-不实野燕麦优化算法Animated Oat Optimization-附Matlab免费代码
开发语言·算法·matlab·优化算法