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

 

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

 

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

盘点Java集合(容器)概览,Collection和Map在开发中谁用的最多?

写在开头 在Java的世界里万物皆对象。但我认为是万物皆数据&#xff0c;世界由各种各样数据构建起来&#xff0c;我们通过程序去实现数据的增删改查、转入转出、加减乘除等等&#xff0c;不同语言的实现方式殊途同归。由此可见&#xff0c;数据对于程序语言的重要性。 这段话…

6.electron之上下文隔离,预加载JS脚本

如果可以实现记得点赞分享&#xff0c;谢谢老铁&#xff5e; Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 Electron 将 Chromium 和 Node.js 嵌入到了一个二进制文件中&#xff0c;因此它允许你仅需一个代码仓库&#xff0c;就可以撰写支持 Windows、…

ClickHouse时区

clickhouse数据库的时间是UTC时间。服务器默认的是上海时间。 sudo vim /etc/clickhouse-server/config.xml clickhouse默认的时区是注释的就是UTC时间 %F 表示日期&#xff0c;格式为 YYYY-MM-DD。%T 表示时间&#xff0c;格式为 HH:MM:SS。 因此&#xff0c;formatDateT…

【C++】基础知识讲解(命名空间、缺省参数、重载、输入输出)

&#x1f308;个人主页&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343&#x1f525; 系列专栏&#xff1a;http://t.csdnimg.cn/eCa5z 目录 命名空间 命名空间的定义 命名空间的使用 命名空间的嵌套使用 C输入&输出 std命名空间的使用惯例&…

Mysql-数据库优化-客户端连接参数

客户端参数 原文地址 # 连接池配置 # 初始化连接数 spring.datasource.druid.initial-size1 # 最小空闲连接数&#xff0c;一般设置和initial-size一致 spring.datasource.druid.min-idle1 # 最大活动连接数&#xff0c;一个数据库能够支撑最大的连接数是多少呢&#xff1f; …

互联网医院|互联网医院系统创新诊疗模式

互联网医院&#xff0c;看似简单却隐藏着复杂的操作。想要在线上开展合法合规的诊疗业务&#xff0c;并非易事。有三个关键要素不可少&#xff1a;一是符合当地政策要求的线下实体医疗机构&#xff1b;二是合法合规的互联网医院系统&#xff1b;三是通过申办获得的互联网医院牌…

Java面向对象 构造器的重载

目录 创建类测试构造器的重载分析 创建类 public class Person02 {//属性&#xff1a;String name;int age;double height;//空构造器public Person02(){}public Person02(String name,int age,double height){//当形参名字和属性名字重名的时候&#xff0c;会出现就近原则&am…

外汇天眼:Vistova──假投顾带单获利400%,黑平台一再拖延不出金

在这个物价高涨的时代&#xff0c;愈来愈人意识到投资抗通胀的重要性&#xff0c;但因缺乏相关的专业知识而感到迷茫&#xff0c;甚至因此误信诈骗集团保证获利、稳赚不赔的话术&#xff0c;蒙受极大的金钱损失。 不久前&#xff0c;一位投资人向外汇天眼爆料Vistova这平台&…

入侵报警系统行业研究:智能化潮流助力市场维持正增长

侵报警系统intruder alarm system(IAS)利用传感器技术和电子信息技术探测并指示非法进入或试图非法进入设防区域(包括主观判断面临被劫持或遭抢劫或其他危急情况时&#xff0c;故意触发紧急报警装置)的行为&#xff0c;处理报警信息、发出报警信息的电子系统或网络。 当入侵行为…

pycharm 配置 conda 新环境

1. conda 创建新环境 本章利用pycharm将conda新建的环境载入进去 关于conda的下载参考上一章博文&#xff1a;深度学习环境配置&#xff1a;Anaconda 安装和 pip 源 首先利用conda 新建虚拟环境 这里按 y 确定 安装好如下&#xff1a;这里两行命令代表怎么激活和关闭新建的虚…

【Linux Day15 TCP网络通讯】

TCP网络通讯 TCP编程流程 接口介绍 socket()方法是用来创建一个套接字&#xff0c;有了套接字就可以通过网络进行数据的收发。创建套接字时要指定使用的服务类型&#xff0c;使用 TCP 协议选择流式服务&#xff08;SOCK_STREAM&#xff09;。 **bind()方法是用来指定套接字使…

[C/C++] -- JSON for Modern C++

JSON for Modern C&#xff08;nlohmann/json&#xff09;是一个流行的 C JSON 库&#xff0c;由德国开发者nlohmann编写。这个库提供了简洁而灵活的 API&#xff0c;使得在C中解析和生成JSON数据变得非常方便。 1.JSON简介 JSON&#xff08;JavaScript Object Notation&…