【C语言程序设计】函数程序设计

目录

前言

一、程序阅读

二、程序设计

总结


🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。

💡本文由Filotimo__✍️原创,首发于CSDN📚。

📣如需转载,请事先与我联系以获得授权⚠️。

🎁欢迎大家给我点赞👍、收藏⭐️,并在留言区📝与我互动,这些都是我前进的动力!

🌟我的格言:森林草木都有自己认为对的角度🌟。

前言

函数是C语言中的核心概念之一,它们提供了一种模块化和可重用的方式来组织代码,使我们能够更加高效和灵活地编写程序。


一、程序阅读

1.1 第一个程序阅读

#include <stdio.h>

int fun(int a)
{
    static int m = 5;
    m = m + a;
    return m;
}

int main()
{
    int p;
    p = fun(4);
    printf("%d", p);
    p = fun(6);
    printf("%d\n", p);
    return 0;
}

`fun` 函数是一个整型函数,它接受一个整数参数 `a`。在函数内部,定义了一个静态整型变量 `m`,并初始化为 5。静态变量的生命周期会持续到程序运行结束。然后,将 `m` 的值与 `a` 相加,并将结果重新赋给 `m`。最后,返回 `m` 的值作为函数的结果。

在`main` 函数内部,首先声明了一个整型变量 `p`。然后,调用 `fun` 函数,并将参数 `4` 传入,并将函数的返回值赋给 `p`。接下来,使用 `printf` 函数将 `p` 的值输出到标准输出。然后,再次调用 `fun` 函数,并将参数 `6` 传入,并将返回值赋给 `p`。最后,再次使用 `printf` 函数将最新的 `p` 的值输出到标准输出,并添加一个换行符。最后,函数返回 0 表示程序正常结束。

这段代码通过调用函数来计算一个静态变量的累加结果。

运行结果:

1.2 第二个程序阅读

#include <stdio.h>

int a = 5;

void fun(int b) {
    int a = 10;
    a += b;
    printf("%3d", a);
}

int main() {
    int c = 20;
    fun(c);
    a += c;
    printf("%3d\n", a);
    return 0;
}

首先定义了一个全局变量 `a`,并将其初始化为 5。全局变量的作用域是整个程序。

`fun` 函数是一个无返回值的函数,它接受一个整数参数 `b`。在函数内部,定义了一个局部变量 `a`,并将其初始化为 10。这个局部变量 `a` 与全局变量 `a` 同名,但是是两个不同的变量,具有不同的内存位置。然后,将局部变量 `a` 的值与参数 `b` 相加,并将结果赋值给局部变量 `a`。最后,使用 `printf` 函数将局部变量 `a` 的值以占位宽度为 3 的格式输出到标准输出。

在`main` 函数内部,首先定义了一个整型变量 `c`,并将其初始化为 20。然后,调用 `fun` 函数,并将变量 `c` 作为参数传递。在 `fun` 函数内部,局部变量 `a` 的值被计算,并且以占位宽度为 3 的格式输出。接下来,全局变量 `a` 的值与变量 `c` 相加,并将结果赋给全局变量 `a`。最后,使用 `printf` 函数将最新的全局变量 `a` 的值以占位宽度为 3 的格式输出到标准输出,并添加一个换行符。最后,函数返回 0 表示程序正常结束。

这段代码演示了全局变量和局部变量的概念,以及变量作用域的范围。其中,函数 `fun` 修改了局部变量 `a` 的值,并将结果输出。`main` 函数使用全局变量 `a` 和局部变量 `c` 进行计算,并输出最终结果。

运行结果:

二、程序设计

2.1 第一个程序设计

编一函数,求f(x)= &x2+1,x>10&x2, -1≤x≤10&x2-1,x<-1 的值,要求函数原型为float fun(float x)。

实现代码:

#include <stdio.h>

float fun(float x);

int main() {
    float x, y;
    printf("x=");
    scanf("%f", &x);
    y = fun(x);
    printf("f(x)=%f", y);
    return 0;
}

float fun(float x) {
    float y;
    if (x > 10)
        y = x * x + 1;
    else if (x > -1 && x < 10)
        y = x * x;
    else if (x < -1)
        y = x * x - 1;
    return y;
}

在 main 函数体内部,定义了两个浮点数变量 x 和 y。程序通过 printf 函数向用户请求输入要计算的浮点数 x,并通过 scanf 函数将用户输入的数据储存到 x 变量中。然后程序通过调用函数 fun 对输入的数值进行计算,并将 y 变量储存计算结果。最后,程序通过 printf 函数将计算结果输出到屏幕上,并以换行符结束。

函数 fun 的逻辑如下:

如果输入值 x 大于 10,那么计算 y = x * x + 1。

如果输入值 x 大于 -1 且小于 10,那么计算 y = x * x。

如果输入值 x 小于 -1,那么计算 y = x * x - 1。

最后,函数返回 y。

运行结果:

2.2 第二个程序设计

用一个函数求1!+2!+3!…的前n项之和。(n从键盘输入)。

实现代码:

#include <stdio.h>

// 计算阶乘的函数
int factorial(int n) {
    if (n == 0 || n == 1) {
        return 1;
    } else {
        return n * factorial(n - 1);
    }
}

// 计算阶乘和的函数
int sumOfFactorials(int n) {
    int sum = 0;

    for (int i = 1; i <= n; i++) {
        sum += factorial(i);
    }

    return sum;
}

int main() {
    int n;
    printf("请输入一个正整数 n:");
    scanf("%d", &n);

    int result = sumOfFactorials(n);
    printf("前 %d 项阶乘的和为:%d\n", n, result);

    return 0;
}

这段 C 代码实现了一个函数,用于计算前 n 项阶乘的和。代码分为三个部分:

1. `factorial` 函数计算阶乘:使用递归的方式计算阶乘。

2. `sumOfFactorials` 函数计算阶乘和:使用 for 循环计算前 n 项阶乘,并将阶乘累加到和中。

3. `main` 函数用于获取用户输入,计算并输出阶乘和。

整个程序用到了输入/输出库的函数,比如 `printf` 和 `scanf`。计算阶乘时使用了递归,计算阶乘和时使用了循环和调用上述递归函数。最终输出结果。

运行结果:


总结

通过学习本文所介绍的内容,我们可以更好地理解C语言中的函数程序设计。希望这些知识能够帮助您提升C语言编程技能,成为一名更出色的程序员。

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

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

相关文章

亚信科技AntDB数据库——深入了解AntDB-M元数据锁的实现(二)

5.5 防止低优先级锁饥饿 AntDB-M按照优先级将锁又分了两类&#xff0c;用于解决低优先级锁饥饿问题。 ●独占型(hog): X, SNRW, SNW; 具有较强的不兼容性&#xff0c;优先级高&#xff0c;容易霸占锁&#xff0c;造成其他低优先级锁一直处于等待状态。 ●暗弱型(piglet): SW; …

springboot获取配置文件属性值

Value&#xff1a; 作用&#xff1a;属性注入&#xff0c;需要每个值上进行书写变量名 ConfigurationProperties 指定外部属性文件。在类上添加&#xff0c;常与ConfigurationProperties 配合使用

系统登页面——大屏系统深蓝色主题

加了线上验证码校验还有密码账号校验。其他的资料都放在文章末尾了。 <template xmlns"http://www.w3.org/1999/html"><div class"login"><img :src"imgBg" class"login_bg" width"100%" height"100%&q…

持续集成交付CICD:CentOS 7 安装SaltStack

目录 一、理论 1.SaltStack 二、实验 1.主机一安装master 2.主机二安装第一台minion 3.主机三安装第二台minion 4.测试SaltStack 三、问题 1.CentOS 8 如何安装SaltStack 一、理论 1.SaltStack &#xff08;1&#xff09;概念 SaltStack是基于python开发的一套C/S自…

消息队列(MQ)

对于 MQ 来说&#xff0c;不管是 RocketMQ、Kafka 还是其他消息队列&#xff0c;它们的本质都是&#xff1a;一发一存一消费。下面我们以这个本质作为根&#xff0c;一起由浅入深地聊聊 MQ。 01 从 MQ 的本质说起 将 MQ 掰开了揉碎了来看&#xff0c;都是「一发一存一消费」&…

排序算法(二)-冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、基数排序

排序算法(二) 前面介绍了排序算法的时间复杂度和空间复杂数据结构与算法—排序算法&#xff08;一&#xff09;时间复杂度和空间复杂度介绍-CSDN博客&#xff0c;这次介绍各种排序算法——冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、基数排序。 文章目录 排…

【linux】SSH终端Putty配置:上传/下载、显示中文字体、自动登录

文章目录 写在前面putty上传/下载1. 下载2. 解压和配置3. 使用sz/rz3.1 下载文件:sz3.2 上传文件:rz 显示中文字体1. 下载合适的字体2. 解压和安装3. putty配置 putty自动登录1. putty配置2. putty快捷方式配置3. 使用putty 写在后面 写在前面 一篇博客介绍了12种SSH终端工具的…

【超图】SuperMap iClient3D for WebGL/WebGPU —— 单体gltf模型与Blender中的方向对应关系

作者&#xff1a;taco 在很多包含动画的场景中&#xff0c;像模拟小人的行走、模拟火车的轨迹运行&#xff0c;又或者是模拟风力发电等等等。我们通常会加一些动画模型到里面。而有的时候可能会出现&#xff0c;这火车怎么倒着走啊&#xff01;这人怎么头朝下啊。这种方向的问题…

AIGC - 环境搭建

一. 硬件环境 1. 超微7048主板&#xff0c;最多可搭载4块GPU 2. 2个Intel的 Xen至强 14核 CPU 3. 目前安装了一块Nvidia 的P40 GPU&#xff0c;后续根据需要还最多可以扩展3块GPU 4. 4T机械 2T Nvme固态&#xff0c; 5. 4条64G DDR4内存条&#xff0c;共 196G内存…

VRRP协议与原理

文章目录 VRRP协议与原理一、VRRP 协议二、单网关和多网管的缺陷1、单网关缺陷2、多网管的缺陷 三、VRRP基本概述四、VRRP工作原理1、VRRP主备份备份工作工程2、VRRP 主备路由器切换过程3、VRRP 负载分担工作过程 五、VRRP配置命令1、vrrp配置命令2、配置VRRP步骤&#xff1a; …

基于扩散的图像超分辨率模型:ResShift

1 论文解读 论文地址&#xff1a;ResShift: Efficient Diffusion Model for Image Super-resolution by Residual Shifting 代码地址&#xff1a;https://github.com/zsyOAOA/ResShift 1.1 前言 基于扩散的图像超分辨率(SR)方法由于需要数百甚至数千个采样步骤&#xff0c;…

Amazon SageMaker机器学习之旅的助推器

授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 亚马逊云科技开发者社区, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道。 一、前言 在当今的数字化时代&#xff0c;人工智能和机器学习已经…

GoLong的学习之路,进阶,微服务之序列化协议,Protocol Buffers V3

这章是接上一章&#xff0c;使用RPC包&#xff0c;序列化中没有详细去讲&#xff0c;因为这一块需要看的和学习的地方很多。并且这一块是RPC中可以说是最重要的一块&#xff0c;也是性能的重要影响因子。今天这篇主要会讲其使用方式。 文章目录 Protocol Buffers V3 背景以及概…

网络安全项目实战(四)--报文检测

8. TCP/UDP 段 目标 了解 TCP 段头的组织结构了解 UDP 段头的组织结构掌握 TCP/UDP 段的解析方式 8.1. UDP 段格式 下图是UDP的段格式&#xff08;该图出自[TCPIP]&#xff09;。 8.2. UDP头部 //UDP头部&#xff0c;总长度8字节// /usr/include/linux/udp.h struct udphdr …

Arris VAP2500 list_mac_address未授权RCE漏洞复现

0x01 产品简介 Arris VAP2500是美国Arris集团公司的一款无线接入器产品。 0x02 漏洞概述 Arris VAP2500 list_mac_address接口处命令执行漏洞,未授权的攻击者可通过该漏洞在服务器端任意执行代码,写入后门,获取服务器权限,进而控制整个web服务器。 0x03 复现环境 FOFA…

SpringSecurity6从入门到上天系列第八篇:SpringSecurity当中的默认登录页面是如何产生的?

&#x1f609;&#x1f609; 欢迎加入我们的学习交流群呀&#xff01; ✅✅1&#xff1a;这是孙哥suns给大家的福利&#xff01; ✨✨2&#xff1a;我们免费分享Netty、Dubbo、k8s、Mybatis、Spring等等很多应用和源码级别的高质量视频和笔记资料&#xff0c;你想学的我们这里都…

Axure中动态面板使用及轮播图多种登录方式左侧导航栏之案列

&#x1f3ac; 艳艳耶✌️&#xff1a;个人主页 &#x1f525; 个人专栏 &#xff1a;《产品经理如何画泳道图&流程图》 ⛺️ 越努力 &#xff0c;越幸运 目录 一、轮播图简介 1、什么是轮播图 2、轮播图有什么作用 3、轮播图有什么特点 4、轮播图适应范围 5、…

pytorch文本分类(二):引入pytorch处理文本数据

pytorch文本数据处理 目录 pytorch文本数据处理1. Pytorch背景2. 数据分割3. 数据加载Dataset代码分析字典的用途代码修改的目的 Dataloader 4. 练习 原学习任务链接 相关数据链接&#xff1a;https://pan.baidu.com/s/1iwE3LdRv3uAkGGI2fF9BjA?pwdro0v 提取码&#xff1a;ro…

日志框架Log4j、JUL、JCL、Slf4j、Logback、Log4j2

为什么程序需要记录日志 我们不可能实时的24小时对系统进行人工监控&#xff0c;那么如果程序出现异常错误时要如何排查呢&#xff1f;并且系统在运行时做了哪些事情我们又从何得知呢&#xff1f;这个时候日志这个概念就出现了&#xff0c;日志的出现对系统监控和异常分析起着…

wordpress 修改社交图标

要去掉标记的图标&#xff0c;死活找不到在那里配置。后来找到了&#xff0c;下图&#xff08;wordpress 小白&#xff0c;特此记录&#xff09;