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

 

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

 

 

目录

一.  基础知识的学习

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;
}

 

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

 

 

 

 

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

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

相关文章

AIGC ChatGPT4 实战案例教你VLOOKUP用法

实际需求&#xff1a; 像这样的案例可以通过VLOOKUP来完成&#xff0c;如果不会使用VLOOKUP也没有关系&#xff0c;我们可以先让ChatGPT来帮我们介绍一下VLOOKUP函数的具体用法。 VLOOKUP是Excel中的一个非常有用的函数&#xff0c;用于查找和检索数据。"V"在VLOOKUP…

Java面向对象 this

this 在Java中&#xff0c;this 是一个特殊的引用变量&#xff0c;它引用了当前对象实例。当在类的非静态方法或构造方法中使用时&#xff0c;this 关键字指代当前的对象实例。它经常用于区分对象的成员变量和局部变量&#xff0c;或者调用其他重载的方法。 以下是一些使用 t…

锁(二)队列同步器AQS

一、队列同步器AQS 1、定义 用来构建锁或者其他同步组件的基础框架&#xff0c;它使用了一个int成员变量表示同步状态&#xff0c;通过内置的FIFO队列来完成资源获取线程的排队工作。是实现锁的关键。 2、实现 同步器的设计是基于模板方法模式的&#xff0c;也就是说&#…

Ubuntu22.04切换系统cuda版本

由于最近项目要求的cuda版本有差异&#xff0c;而在Ubuntu中可以通过切换cuda来满足需求&#xff0c;现记录如下。 1、按照 Ubuntu22.04与深度学习配置 中的cuda安装章节&#xff0c;将需要的cuda版本下载到本地并进行安装。 2、cuda安装完成后修改bashrc文件内容 sudo gedit …

Spring核心基础:全面总结Spring中提供的那些基础工具类!

内容概要 Spring Framework 提供了众多实用的工具类&#xff0c;这些工具类在简化开发流程、提升代码质量和维护性方面发挥了重要作用&#xff0c;以下是部分关键工具类的总结及其使用场景&#xff1a; StringUtils&#xff1a;不仅提供了基础的字符串操作&#xff0c;如拼接…

倍增c++

快速幂 区间最小值&#xff08;用倍增思想去求&#xff09; #include<bits/stdc.h> using namespace std; #define maxn 110000 #define ll long long int n, a[maxn], f[maxn][40]; int query (int l, int r) {int k (int)(log((r - l 1) * 1.0) / log(2.0));retur…

JWT令牌 | 一个区别于cookie/session的更安全的校验技术

目录 1、简介 2、组成成分 3、应用场景 4、生成和校验 5、登录下发令牌 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在读&#xff0c;阿里云专家博主&#xff0c;专注于Java领域学习&#xff0c;擅长web应用开发、数据结构和算法&#xff0c;初步涉猎Pyth…

selenium+egdedriver+opencv 爬虫使用教程

一、Edge安装 二、Edge版本查看 1、安装内核要保证内核版本已浏览器版本一致 2、Window环境在edge浏览器中输入&#xff1a;edge://version/ 3、Ubuntu环境在浏览器目录执行 ./microsoft-edge-beta -verison 三、EdgeDriver安装 1、下载地址&#xff1a;https://developer.m…

iPhone 14支持NFC吗?如果支持,那么怎么启用

你准备好通过启用NFC来释放iPhone 14的全部潜力了吗&#xff1f;如果你曾经想知道如何在你的设备上利用NFC&#xff0c;那么你就来对地方了。 在本综合指南中&#xff0c;我们将引导你完成在iPhone 14上激活NFC的步骤&#xff0c;使你能够无缝连接其他设备&#xff0c;进行非接…

SpringSecurity(19)——OAuth2客户端信息存储

ClientDetailsService public interface ClientDetails extends Serializable {String getClientId();//客户端idSet<String> getResourceIds();//此客户端可以访问的资源。如果为空&#xff0c;则调用者可以忽略boolean isSecretRequired();//验证此客户端是否需要secr…

python 函数式编程入门:Lambda 函数的魅力

python 函数式编程入门&#xff1a;Lambda 函数的魅力 介绍Lambda 函数的应用排序过滤映射map、filter、reduce数据转换和筛选 介绍 Lambda 函数是 Python 中一个强大的功能&#xff0c;它可以快速创建匿名函数。在函数式编程中&#xff0c;lambda 函数发挥着至关重要的作用。…

Leetcode刷题-(11~15)-Java+Python+JavaScript

算法是程序员的基本功&#xff0c;也是各个大厂必考察的重点&#xff0c;让我们一起坚持写算法题吧 遇事不决&#xff0c;可问春风&#xff0c;春风不语&#xff0c;即是本心。 我们在我们能力范围内&#xff0c;做好我们该做的事&#xff0c;然后相信一切都事最好的安排就可…

更新至2022年,2008-2022年按行业分城镇单位就业人员相关指标数据(20个指标)

更新至2022年&#xff0c;2008-2022年按行业分城镇单位就业人员相关指标数据 1、时间&#xff1a;2008-2022年 2、来源&#xff1a;统计年鉴、国家统计J、各省年鉴 3、指标&#xff1a;2008-2022年城镇单位就业人员(万人)、2008-2022年农林牧渔业城镇单位就业人员(万人)、制…

idea中git提交代码出现:commit and push checks failed

参考&#xff1a;https://blog.csdn.net/qq_46548855/article/details/126506747

ThinkPHP 中使用Redis

环境.env [app] app_debug "1" app_trace ""[database] database "" hostname "127.0.0.1" hostport "" password "" prefix "ls_" username ""[redis] hostname "127.0.0.1…

浅谈交换原理(3)——交换网络

一、基本概念 交换网络是由若干个交换单元按照一定的拓扑结构和控制方式构成的网络。交换网络的三个基本要素是&#xff1a;交换单元、不同交换单元间的拓扑连接和控制方式。 1.1 单机交换网络与多级交换网络 交换网络按拓扑连接方式可分为&#xff1a;单级交换网络和多级交换网…

第三篇:跨平台QT开发-正则表达式和文件处理

正则表达式 正则表达式即一个文本匹配字符串的一种模式&#xff0c;Qt 中 QRegExp 类实现使用正则表达式 进行模式匹配&#xff0c;且完全支持 Unicode&#xff0c;主要应用&#xff1a;字符串验证、搜索、查找替换、分割。 正则表达式中字符及字符集 元素含义 c 匹配字符本…

mac电脑快捷指令实现拼图

mac访达&#xff0c;搜索输入‘快捷指令’&#xff0c;找到‘快捷指令’&#xff0c; 点击快捷指令&#xff0c;进入快捷指令中心&#xff0c;搜索‘拼图’ &#xff0c;选中‘照片拼图’&#xff0c; 点击‘添加快捷指令’&#xff0c; 在‘所有快捷键指令’中可以看到添加的快…

C++ || 模板初阶 | 函数模板 | 类模板

泛型编程 泛型编程&#xff0c;编写与类型无关的通用代码&#xff0c;是代码复用的一种手段。模板是泛型编程的基础。 可以理解为活字印刷术类似的方式。 函数模板 函数模板概念 函数模板&#xff0c;代表一个函数家族&#xff0c;该函数模板与类型无关&#xff0c;在使用…

Python调用matlab程序

matlab官网&#xff1a;https://ww2.mathworks.cn/?s_tidgn_logo matlab外部语言和库接口&#xff0c;包括 Python、Java、C、C、.NET 和 Web 服务。 matlab和python的版本 安装依赖配置 安装matlab的engine 找到matlab的安装目录&#xff1a;“xxx\ extern\engines\python…