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

文章目录

  • 前言
  • 一、函数的基本用法
  • 二、函数的参数传递
    • 1.基本方式
    • 2 数组在函数中的传参


前言

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

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

一、函数的基本用法

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

一般形式如下:

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

题目:编写一个函数显示:”你好C语言“。
题目:定义求 x^n 指的函数(x是实数,n为正整数)

#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 数组在函数中的传参

全局数组传递的方式
复制传递方式
实参为数组的指针,形参为数组名(本质上是一个指针变量)
地址传递方式
实参为数组的指针,形参为同类型的指针变量。

题目:计算一个一维整型数组的所有元素的和
题目:删除字符串中的空格
题目:编写一个函数统计字符串中大小字母的个数,并把小写转化成大写,大写转换成小写

//一维数组求和函数
#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;
}

//删除空格方法一
#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];
            }

        }
    }

}
//方法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';
}
#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)++;
        }
    }

}

在这里插入图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/746932.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】锁|死锁|生产者消费者模型

&#x1f525;博客主页&#xff1a; 我要成为C领域大神&#x1f3a5;系列专栏&#xff1a;【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 ​ ​ 访问互斥 …

modelsim做后仿真的一点思路

这是以TD_5.6.3_Release_88061生成的网表文件&#xff08;其他工具生成的网表文件类似&#xff09;&#xff0c;与modelsim联合进行门级仿真的样例&#xff0c;时序仿真与门级仿真的方法类似&#xff0c;只是增加了标准延时文件。 1、建立门级仿真工程 将门级网表和testbench添…

深度学习31-33

1.负采样方案 &#xff08;1&#xff09;为0是负样本&#xff0c;负样本是认为构造出来的。正样本是有上下文关系 负采样的target是1&#xff0c;说明output word 在input word之后。 2.简介与安装 &#xff08;1&#xff09;caffe:比较经常用于图像识别&#xff0c;有卷积网…

一文详细了解Bootloader

Bootloader是什么 bootloader是一个引导加载程序&#xff0c;它的主要作用是初始化硬件设备、设置硬件参数&#xff0c;并加载操作系统内核。在嵌入式系统中&#xff0c;bootloader是硬件启动后第一个被执行的程序&#xff0c;它位于操作系统和硬件之间&#xff0c;起到桥梁的…

操作符详解(上) (C语言)

操作符详解&#xff08;上&#xff09; 一. 进制转换1. 二进制2. 二进制的转换 二. 原码 补码 反码三. 操作符的分类四. 结构成员访问操作符1. 结构体的声明2. 结构体成员访问操作符 一. 进制转换 1. 二进制 在学习操作符之前&#xff0c;我们先了解一些2进制、8进制、10进制…

魔众一物一码溯源防伪系统——守护品牌,守护信任!

在这个充满竞争的市场上&#xff0c;如何确保你的产品不被仿冒&#xff0c;如何赢得消费者的信任&#xff1f;魔众一物一码溯源防伪系统&#xff0c;为你提供一站式解决方案&#xff0c;守护你的品牌&#xff0c;守护消费者的信任&#xff01; &#x1f50d;魔众一物一码溯源防…

Node.js全栈指南:浏览器显示一个网页

上一章&#xff0c;我们了解到&#xff0c;如何通过第二章的极简 Web 的例子来演示如何查看官方文档。为什么要把查阅官方文档放在前面的章节说明呢&#xff1f;因为查看文档是一个很重要的能力&#xff0c;就跟查字典一样。 回想一下&#xff0c;我们读小学&#xff0c;初中的…

防火墙双机热备

防火墙双机热备 随着移动办公、网上购物、即时通讯、互联网金融、互联网教育等业务蓬勃发展&#xff0c;网络承载的业务越来越多&#xff0c;越来越重要。所以如何保证网络的不间断传输成为网络发展过程中急需解决的一个问题。 防火墙部署在企业网络出口处&#xff0c;内外网之…

windows系统修改克隆虚拟机的SID(报错:尝试将此计算机配置为域控制器时出错)

当我们用克隆虚拟机加入域的时候&#xff0c;可能会出现图下所示报错。这时我们可以用微软自带的工具sysprep来修改机器的SID来解决该问题 注意&#xff1a;用sysprep修改SID之后&#xff0c;系统会自动重启&#xff0c;之前配置好的网络、修改过的机器名会重置。所以&#xff…

6.2 通过构建情感分类器训练词向量

在上一节中&#xff0c;我们简要地了解了词向量&#xff0c;但并没有去实现它。在本节中&#xff0c;我们将下载一个名为IMDB的数据集(其中包含了评论)&#xff0c;然后构建一个用于计算评论的情感是正面、负面还是未知的情感分类器。在构建过程中&#xff0c;还将为 IMDB 数据…

Windows上PyTorch3D安装踩坑记录

直入正题&#xff0c;打开命令行&#xff0c;直接通过 pip 安装 PyTorch3D : (python11) F:\study\2021-07\python>pip install pytorch3d Looking in indexes: http://mirrors.aliyun.com/pypi/simple/ ERROR: Could not find a version that satisfies the requirement p…

JS(JavaScript)入门指南(DOM、事件处理、BOM、数据校验)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。 玉阶生白露,夜久侵罗袜。 却下水晶帘,玲珑望秋月。 ——《玉阶怨》 文章目录 一、DOM操作1. D…

从零开始做题:有手就行

1 题目 2 解题 ARPHCR工具破解 得到flag DASCTF{2b3767763885a019b65bbfe9d1136c3b}

从零开始学docker(四)-安装mysql及主从配置(一)

mysql MySQL是一个关系型数据库管理系统&#xff0c;由瑞典MySQL AB 公司开发&#xff0c;属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一&#xff0c;在 WEB 应用方面&#xff0c;MySQL是最好的 RDBMS (Relational Database Management System&#xff0c;关…

仿Photoshop利用曲线对图像调整亮度与色彩

曲线调整是Photoshop的最常用的重要功能之一。对于一个RGB图像, 可以对R, G, B 通道进行独立的曲线调整&#xff0c;即&#xff0c;对三个通道分别使用三条曲线&#xff08;Curve&#xff09;。还可以再增加一条曲线对 三个通道进行整体调整。 因此&#xff0c;对一个图像&a…

C++初学者指南-2.输入和输出---流输入和输出

C初学者指南-2.输入和输出—流输入和输出 文章目录 C初学者指南-2.输入和输出---流输入和输出1.定制输入/输出1.1 示例&#xff1a;点坐标输入/输出1.2 流操作符1.3&#xff08;一部分&#xff09;标准库流类型 2. 工具2.1 用getline读取行 2.2 用ignore进行跳转2.3 格式化操作…

武汉星起航:全球化舞台,中国跨境电商品牌力与竞争力双提升

随着全球化步伐的加快和数字技术的迅猛发展&#xff0c;跨境出口电商模式已经成为中国企业海外拓展的重要战略选择。这一模式不仅为中国的中小型企业提供了进军全球市场的机会&#xff0c;更为它们在全球舞台上展示独特的竞争优势提供了强有力的支撑。武汉星起航将从市场拓宽、…

STL迭代器的基础应用

STL迭代器的应用 迭代器的定义方法&#xff1a; 类型作用定义方式正向迭代器正序遍历STL容器容器类名::iterator 迭代器名常量正向迭代器以只读方式正序遍历STL容器容器类名::const_iterator 迭代器名反向迭代器逆序遍历STL容器容器类名::reverse_iterator 迭代器名常量反向迭…

问界M9累计大定破10万,创中国豪车新纪录

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 更多资源欢迎关注 6月26日消息&#xff0c;华为常务董事、终端BG董事长、智能汽车解决方案BU董事长余承东今日宣布&#xff0c;问界M9上市6个月&#xff0c;累计大定突破10万辆。 这一成绩&#xff0c;也创造了中国市场…

5款名不见经传的小众软件,简单好用

​ 我们在使用一些流行的软件的时候&#xff0c;往往会忽略一些知名度不高但是功能非常强大的软件&#xff0c;有的是因为小众&#xff0c;有的是因为名不见经传&#xff0c;总之因为不出名&#xff0c;有许多的好用的软件都不为大众所知道。 1.桌面美化——Win10 Widgets ​…