###C语言程序设计-----C语言学习(10)#函数再探

news2024/12/27 11:21:55

 

前言:感谢您的关注哦,我会持续更新编程相关知识,愿您在这里有所收获。如果有任何问题,欢迎沟通交流!期待与您在学习编程的道路上共同进步。

 

 

目录

一.  基础知识的学习

1.不返回结果函数

2.局部变量

3.全局变量

4.变量生存周期

5.变量存储的内存分布

6.静态变量 

二.  所学在程序中的运用 

问题1:数字金字塔

问题2:财务现金记账


 

一.  基础知识的学习 

 

1.不返回结果函数

  在很多程序设计中,调用函数不是为了得到某个运算结果,而是要让它产生某些作用。具有类似作用的函数在有些语言中也称为过程。

不返回结果函数定义:

       void  函数名(形参表)

       {

           函数实现过程

        }

  这里函数类型为void,表示不返回结果,函数体中可以使用没有表达式的return语句,也可以省略return。void类型的函数虽然不直接返回一个值,但它的作用通常以屏幕输出等方式体现。

注意:在不返回结果的函数定义中,void不能省略;否则,函数类型被默认定义为int。

 

2.局部变量

  C语言中把定义在函数内部的变量称为局部变量,局部变量的有效作用范围局限于所在的函数内部。形参的局部变量。使用局部变量可以避免各个函数之间的变量相互干扰。

  除了作用于函数的局部变量外,C语言还允许定义作用于复合语句中的局部变量,其有效作用范围被局限于复合语句内,一般用作小范围内的临时变量。

注意:局部变量一般定义在函数或复合语句的开始外,标准C规定其不能定义在中间位置。

 

3.全局变量

  定义在函数外而不属于任何函数的变量称为全局变量。全局变量的作用范围是从定义开始到程序所在文件的结束,它对作用范围内所有的函数都起作用。

  全局变量的定义格式与局部变量完全一致,只是定义位置不再函数内,它可以定义在程序的头部,也可以定义在两个函数的中间或程序尾部,只要在程序外部即可。 

 

4.变量生存周期

  变量是保存变化数据的工作单元,计算机用内存单元来对于实现。一旦在程序中定义变量,计算机在执行过程中就会根据变量类型分配相应的内存单元供变量保存数据。

  其他函数在被调用之前,其局部变量并未分配存储单元,只有当函数被调用时,其形参和局部变量才被分配相应存储单元;一旦函数调用结束返回主调函数,在函数中定义的所有形参和局部变量将不复存在,相应的存储单元由系统收回。根据这种特性,把局部变量称为自动变量,即函数被调用时,系统自动为其局部变量分配存储单元;一旦该函数调用结束(不一定是整个程序运行结束),所有分配给局部变量的单元由系统自动回收。变量从定义开始分配存储单元,到运行结束存储单元被回收,整个过程称为变量生存周期。

 

5.变量存储的内存分布

  为了便于计算机存储管理,C语言把保存所有变量的数据区分成动态存储区和静态存储区。它们的管理方式完全不同,动态存储区是使用堆栈来管理的,适合函数动态分配与回收存储单元。而静态存储区相对固定,管理较简单,它用于存放全局变量和静态变量。

下面是某个程序中变量的储存分布:

 

6.静态变量

  在静态存储区中,除了全局变量外,还有一种特殊的局部变量-----静态局部变量。它存放在静态存储区,不会像普通局部变量那样因为函数调用结束而被系统回收,它的生存周期会持续到程序结束。且函数被再次调用时,静态局部变量会被重新激活。

静态变量定义格式:

        static       类型名      变量表

 

二.  所学在程序中的运用 

 

问题1:数字金字塔。输入一个正整数n,输出n行数字金字塔。

源程序: 

#include <stdio.h>
int main()
{
	int n;
	void pyramid(int n);  //函数声明 
	printf("Enter n:");
	scanf("%d", &n);
	pyramid(n);  //调用函数 
	
	return 0;
}
void pyramid(int n)   //函数定义 
{
	int i,j;
	for (i=1; i<=n; i++)  //需要输出的行数 
	{
		for(j=1; j<=n-i; j++)  //输出每行左边的空格 
		{
			printf(" ");
		}
		for (j=1; j<=i; j++)  //输出每行的数字 
		{
			printf("%d ", i);  //%d后面有一个空格 
		}
		putchar('\n');
	}
}

 

问题2:用函数实现财务现金记账。先输入操作类型(1收入,2支出,0结束),再输入操作金额,计算现金剩余额,经多次操作直到输入操作类型为0时结束。要求定义并调用函数,其中现金收入与现金支出分别用不同函数实现。

源程序:

#include <stdio.h>
double cash;  //定义全局变量,保存现金余额 
int main()
{
	int choice;
	double value;
	void income(double number), expend(double number);  //函数声明 
	cash=0;
	printf("Enter operate choice(0--end, 1--income, 2--expend):");
	scanf("%d", &choice);  //输入操作 
	while (choice!=0)  //若操作类型为0,则循环结束 
	{
		if (choice==1||choice==2)
		{
			printf("Enter cash value:");  //输入操作现金 
			scanf("%lf", &value);
			if (choice==1)
			{
				income(value);  //函数调用 
			}
			else
			{
				expend(value);  //函数调用 
			}
			printf("current cash:%.2f\n", cash);
		}
		printf("Enter operate choice(0--end, 1--income, 2--expend):");
		scanf("%d", &choice);
	}
	return 0;
}
//定义计算现金收入函数 
void income(double number)
{
	cash=cash+number;
}
//定义计算现金支持函数 
void expend(double number)
{
	cash=cash-number;
}

 

感谢老铁的浏览,希望老铁可以一键三连加个关注,您的支持和鼓励是我前进的动力,后续会分享更多学习编程的内容。 

 

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux中的gdb调试

gdb是在程序运行的结果与预期不符合时&#xff0c;可以使用gdb进行调试 注意&#xff1a;使用gdb调试时要在编译上加-g参数 gcc -g -c hello.c 启动gdb调试&#xff1a; gdb file 对gdb进行调试 设置运行参数&#xff1a; set args 可指定运行参数 show args 可以查…

【DC-9靶场渗透】

文章目录 前言 一、确定靶机地址 二、信息收集 三、寻找漏洞 四、进一步漏洞挖掘 五、关键文件 六、ssh爆破 七、提权 总结 前言 马上过年了&#xff0c;年前再做一下DC靶场最后一个靶机。 一、确定靶机地址 1、可使用arp-scan命令 靶机地址为&#xff1a;172.16.10…

编译原理与技术(三)——语法分析(六)自底向上-SLR分析

上一节介绍了LR分析&#xff0c;LR分析包含许多方法&#xff0c;本节介绍的简单的LR方法&#xff08;SLR&#xff09;就是其中之一。 一、活前缀 二、LR分析的特点 三、 简单的LR方法&#xff08;SLR&#xff09; &#xff08;一&#xff09;LR(0)项目 &#xff08;二&#x…

ES6扩展运算符——三个点(...)用法详解

目录 1 含义 2 替代数组的 apply 方法 3 扩展运算符的应用 &#xff08; 1 &#xff09;合并数组 &#xff08; 2 &#xff09;与解构赋值结合 &#xff08; 3 &#xff09;函数的返回值 &#xff08; 4 &#xff09;字符串 &#xff08; 5 &#xff09;实现了 Iter…

3. 私服方面

目录 3.1 场景 3.2 介绍 3.3 资源上传与下载 3.3.1 步骤分析​编辑 3.3.2 具体操作 maven1&#xff1a;分模块设计开发 maven2&#xff1a;继承与聚合 3.私服 前面我们在讲解多模块开发的时候&#xff0c;我们讲到我们所拆分的模块是可以在同一个公司各个项目组之间进行…

关于PLC数据采集上报,系统平台对接、设备数据转发

设备数据采集上报与系统平台对接 相关案例 PLC与SQLServer&#xff0c;MySQL&#xff0c;PostgreSQL&#xff0c;Oracle数据库双向通讯&#xff1b;HTTP协议GET/POST/PUT请求上报&#xff0c;解析返回数据&#xff1b;MQTT协议JSON/XML文件格式发布/订阅&#xff1b;无需…

MyBatis:轻量级Java持久层框架初探

引言 在Java企业级应用开发领域&#xff0c;ORM框架无疑是构建高性能数据访问层的关键工具之一。MyBatis作为一款轻量级、易于学习且高度可定制化的持久层框架&#xff0c;以其简洁的设计理念、卓越的灵活性和高效的SQL处理能力&#xff0c;赢得了广大开发者的青睐。本文将系统…

肯尼斯·里科《C和指针》第12章 使用结构和指针(2)双链表

12.3 双链表 单链表的替代方案就是双链表。在一个双链表中&#xff0c;每个节点都包含两个指针——指向前一个节点的指针和指向后一个节点的指针。这可以使我们以任何方向遍历双链表&#xff0c;甚至可以随意在双链表中访问。下面的图展示了一个双链表。 下面是节点类型的声明&…

运维备忘录』之 TAR 命令详解

运维人员不仅要熟悉操作系统、服务器、网络等只是&#xff0c;甚至对于开发相关的也要有所了解。很多运维工作者可能一时半会记不住那么多命令、代码、方法、原理或者用法等等。这里我将结合自身工作&#xff0c;持续给大家更新运维工作所需要接触到的知识点&#xff0c;希望大…

go语言每日一练——链表篇(六)

传送门 牛客面试必刷101题—— 判断链表中是否有环 牛客面试必刷101题—— 链表中环的入口结点 题目及解析 题目一 代码 package mainimport . "nc_tools"/** type ListNode struct{* Val int* Next *ListNode* }*//**** param head ListNode类* return bool…

java日志框架总结(五、logback日志框架)

一、logback概述 Logback是由log4j创始人设计的又一个开源日志组件。 Logback当前分成三个模块&#xff1a; 1、logback-core, 2、logback- classic 3、logback-access。 1&#xff09;logback-core是其它两个模块的基础模块。 2&#xff09;logback-…

MySQL之建表操作

华子目录 表操作创建表数据类型文本类型数值类型日期/时间类型Bit数据类型常见数据类型 MySQL存储引擎创建表的三个操作创建表时指定存储引擎&#xff0c;字符集&#xff0c;校对规则&#xff0c;行格式 查看表显示数据库中所有表显示数据库中表的信息&#xff08;表结构&#…

flutter监听app进入前后台状态的实现

在开发app的过程中&#xff0c;我们经常需要根据app的前后台的状态&#xff0c;做一些事情&#xff0c;那么我们在flutter中是如何实现这一监听的&#xff1f; flutter给我们提供了WidgetsBindingObserver来进行一些状态的判断&#xff0c;但是判断前后台的状态只是该API种其中…

红队打靶练习:PHOTOGRAPHER: 1

目录 信息收集 1、arp 2、nmap 3、nikto 目录扫描 1、gobuster 2、dirsearch WEB 信息收集 enum4linux smbclient 8000端口 CMS利用 信息收集 文件上传漏洞利用 提权 信息收集 get user.txt get flag 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# a…

C#中实现串口通讯(使用SerialPort类)

仅作自己学习使用 1 准备部份 需要两个调试软件commix和Virtual Serial Port Driver&#xff0c;分别用于监视串口和创造虚拟串口。 第一个软件是这样的&#xff1a; 资源在这里&#xff1a;免费下载&#xff1a;Commix 也可以前往官网下载&#xff1a;Bwsensing— Attitude…

苹果macbook电脑删除数据恢复该怎么做?Mac电脑误删文件的恢复方法

苹果电脑删除数据恢复该怎么做&#xff1f;Mac电脑误删文件的恢复方法 如何在Mac上恢复误删除的文件&#xff1f;在日常使用Mac电脑时&#xff0c;无论是工作还是娱乐&#xff0c;我们都会创建和处理大量的文件。然而&#xff0c;有时候可能会不小心删除一些重要的文件&#x…

【GPT】一个高效使用excel获得结果的案例

问:请介绍通过规划求解&#xff0c;求出以最低成本购买固定数量礼品的方法。 ChatGPT: 通过规划求解方法&#xff0c;可以确定以最低成本购买固定数量礼品的方法。以下是使用规划求解进行最低成本购买礼品的一般步骤。 1.定义目标: 明确目标是以最低成本购买固定数量的礼品。…

哪个牌子的游泳耳机质量好又耐用?性价比高的游泳耳机品牌排行榜

如今&#xff0c;越来越多的人开始注重运动健身&#xff0c;并在运动时习惯享受音乐的陪伴。市场上的运动耳机种类繁多&#xff0c;以蓝牙耳机为主流。然而&#xff0c;在一些特定的运动项目&#xff0c;尤其是游泳&#xff0c;将手机放在附近并不方便。因此&#xff0c;如果在…

SpringMVC原理(设计原理+启动原理+工作原理)

文章目录 前言正文一、设计原理1.1 servlet生命周期简述1.2 设计原理小结 二、启动原理2.1 AbstractHandlerMethodMapping 初始化 --RequestMapping注解解析2.2 DispatcherServlet 的初始化2.3 DispatcherServlet#initHandlerMappings(...) 初始化示例说明 三、工作原理 前言 …

2023年12月CCF-GESP编程能力等级认证C++编程一级真题解析

一、单选题(共15题,共30分) 第1题 以下C++不可以作为变量的名称的是( )。 A:CCF GESP B:ccfGESP C:CCFgesp D:CCF_GESP 答案:A 第2题 C++表达式 10 - 3 * (2 + 1) % 10 的值是( )。 A:0 B:1 C:2 D:3 答案:B 第3题 假设现在是上午十点,求出N小时(正整数…