【重拾C语言】十二、C语言程序开发(自顶向下、逐步求精;结构化程序设计原则;程序风格)

目录

前言

12.1 求玉米单产——自顶向下、逐步求精

12.1.1 自顶向下、逐步求精  

12.1.2 求玉米单产

12.2 结构化程序设计原则

12.2.1 顺序

12.2.2 选择

12.2.3 循环

 12.2.4 模块化

12.3 程序风格

12.3.1 程序风格

12.3.2 行文格式、标识符

12.3.3 注释及其它


前言

        在C语言程序开发中,可以使用自顶向下、逐步求精的方法解决问题,遵循结构化程序设计原则,同时注重良好的程序风格,这可以帮助开发者编写可读性强且易于维护的代码。

12.1 求玉米单产——自顶向下、逐步求精

12.1.1 自顶向下、逐步求精  

        自顶向下、逐步求精(Top-down, stepwise refinement)旨在通过分解问题和逐步细化解决方案来进行程序设计。它是一种结构化的方法,使程序的设计更加有条理和可维护。

  • 自顶向下的设计方法
    • 首先从整体的角度考虑问题,然后逐步细化为更小的子问题。这种方法通常从一个主要函数或模块开始,然后逐步将其分解为更小、更具体的子函数或模块。这种分解过程可以一直进行,直到达到足够小和具体的层次为止。
  • 逐步求精
    • 指在分解问题的同时,逐步添加必要的细节和功能。通过逐步求精,可以逐渐完善每个子函数或模块的实现,确保其功能正确并满足设计的需求。这种方法可以降低程序开发的复杂度,使得问题的解决变得更加可控和可预测。
  • 实现步骤:
    • 确定主要函数或模块:从整体的角度考虑问题,确定程序的主要功能和入口点。
    • 分解为子函数或模块:将主要函数或模块分解为更小、更具体的子函数或模块,每个子函数或模块负责解决一个特定的子问题。
    • 设计接口:定义每个子函数或模块的输入和输出接口,确保它们能够正确地交互和协作。
    • 逐步实现和调试:逐步实现每个子函数或模块的功能,确保其正确性和可靠性。在实现过程中,可以通过逐步调试和测试来验证每个子函数或模块的正确性。
    • 整合和测试:将所有子函数或模块整合到一个完整的程序中,并进行综合性的测试,确保整体的功能和性能符合设计要求。

12.1.2 求玉米单产

#include <stdio.h>// 函数声明
double calculateYield(double area, double production);int main() {double area, production, yield;// 输入玉米的种植面积和产量printf("请输入玉米的种植面积(亩):");scanf("%lf", &area);printf("请输入玉米的产量(吨):");scanf("%lf", &production);// 调用函数计算玉米的单产yield = calculateYield(area, production);// 输出计算结果printf("玉米的单产为:%.2lf 吨/亩\n", yield);return 0;
}// 函数定义
double calculateYield(double area, double production) {double yield;// 计算玉米的单产yield = production / area;return yield;
}

        从用户获取种植面积和产量的输入,然后调用calculateYield()函数来计算玉米的单产,并将结果输出到屏幕上。

12.2 结构化程序设计原则

        结构化程序设计原则是指在编写程序时应遵循的一些基本原则,例如模块化、顺序、选择和循环结构等,以便提高程序的可读性、可维护性和可测试性。

12.2.1 顺序

【重拾C语言】二、顺序程序设计(基本符号、数据、语句、表达式、顺序控制结构、数据类型、输入/输出操作)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_63834988/article/details/133519484        包括顺序程序设计的基础知识,包括基本符号、数据、语句、表达式、顺序控制结构、数据类型以及输入/输出操作等。

12.2.2 选择

【重拾C语言】三、分支程序设计(双分支和单分支程序设计、逻辑判断、多分支程序设计、枚举类型表示;典型例题:判断闰年和求一元二次方程根)_QomolangmaH的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_63834988/article/details/133523113        介绍了分支程序设计的相关内容,包括双分支和单分支程序设计、逻辑判断(布尔类型的使用)、多分支程序设计和枚举类型的表示,以及一些典型例题,包括判断闺年和求一元二次方程根。

12.2.3 循环

【重拾C语言】四、循环程序设计(后判断条件循环、先判断条件循环、多重循环;典例:计算平均成绩、打印素数、百钱百鸡问题)_QomolangmaH的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_63834988/article/details/133554967

        本文介绍了循环程序设计,以计算平均成绩为例,介绍3种不同的循环方法:并使用多重循环计算全班每人平均成绩。此外,还介绍了打印素数、百钱百鸡问题两个经典例题。

 12.2.4 模块化

        模块化程序设计——函数,包括如何定义函数、函数的调用形式和过程、参数传递(值传递和指针传递)、函数结果的返回以及函数原型的使用。具体的程序设计实例有打印字符图形和验证哥德巴赫猜想。

【重拾C语言】五、模块化程序设计——函数(定义、调用、参数传递、结果返回、函数原型;典例:打印字符图形、验证哥德巴赫猜想)_QomolangmaH的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_63834988/article/details/133580009?spm=1001.2014.3001.5501

        下文重新讨论了函数,主要介绍了指针、数组、结构体作参数;函数值返回指针、结构体,以及C语言作用域相关知识。

【重拾C语言】九、再论函数(指针、数组、结构体作参数;函数值返回指针、结构体;作用域)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_63834988/article/details/133797827?spm=1001.2014.3001.5501

12.3 程序风格

        程序风格是指编写代码时应遵循的一些规范和约定,以确保代码的一致性和可读性。这可能包括行文格式、标识符命名规范、注释规范等。

12.3.1 程序风格

  1. 缩进:使用统一的缩进风格,通常是使用4个空格或者一个制表符进行缩进。缩进可以使代码结构更清晰,便于阅读。

  2. 括号位置:在C语言中,通常将左括号放在行末,右括号独占一行。例如:

    if (condition)
    {// code block
    }
  3. 空格使用:在运算符、逗号、分号等符号周围使用空格,可以增加代码的可读性。例如:

    int sum = a + b;
    for (int i = 0; i < n; i++)
    {// code block
    }
  4. 行长度限制:每行代码应尽量保持在80个字符以内,以便于在终端或编辑器中显示。如果一行过长,可以使用换行符\将其分成多行。

12.3.2 行文格式、标识符

  1. 大小写:C语言区分大小写,建议使用小写字母命名变量、函数和类型,使用大写字母命名宏定义。

  2. 标识符命名:命名标识符时应具有描述性,易于理解。可以使用驼峰命名法或下划线命名法。

  •    

    • 驼峰命名法myVariablecalculateSum

    • 下划线命名法my_variablecalculate_sum
  1. 常量命名:对于常量,可以使用全大写字母,多个单词之间使用下划线分隔。例如:

    #define PI 3.14159
    #define MAX_VALUE 100

12.3.3 注释及其它

  1. 注释:使用注释对代码进行解释和说明,以增加代码的可读性。可以使用单行注释(//)或多行注释(/* ... */)。注释应描述代码的功能、目的、输入输出等重要信息。例如:

    // 计算两个数的和
    int sum = a + b;
  2. 文件注释:在文件开头添加注释,描述文件的功能、作者、日期等信息。

  3. 函数注释:在每个函数的定义之前添加注释,描述函数的功能、参数、返回值等信息。

  4. 避免使用全局变量:全局变量会增加代码的复杂性,不利于代码的维护和重用,应尽量避免使用全局变量。

  5. 模块化设计:将代码划分为多个函数或模块,每个函数或模块负责一个具体的功能,提高代码的可读性和可维护性。

  6. 错误处理:在代码中应考虑错误处理机制,例如检查函数返回值,处理可能发生的错误情况。

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

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

相关文章

Idea使用技巧——导包优化,新版idea界面取消,界面字体放大缩小

导包优化 on the fly 翻译为立刻 第一个表示&#xff0c;如果导入的包没有冲突&#xff0c;会自动帮你导入。如果输入List 无需手动altenter 第二个表示&#xff0c;没有引用的包&#xff0c;会自动删除。这个对于代码整洁尤其适用。相当于ctrlalto的功能 新版idea的界面取消 …

人机交互中的信息数量与信息质量

在人机交互中&#xff0c;信息数量和信息质量是影响人机交互效果的两个重要因素。信息数量指的是系统向用户提供的信息总量&#xff0c;包括输入信息、反馈信息、展示信息、错误信息等&#xff0c;在合适的情况下越少越好&#xff1b;信息质量则是指信息的准确性、有效性、清晰…

使用图像处理跟踪瞳孔(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

华为李鹏:加速5G商业正循环,拥抱更繁荣的5.5G(5G-A)

2023年10月10日&#xff0c;在华为主办的第十四届全球移动宽带论坛上&#xff0c;华为高级副总裁、运营商BG总裁李鹏面向来自全球的运营商和产业伙伴&#xff0c;提出抓住网络需求和趋势的力量——“面向后天的业务&#xff0c;积极规划明天的网络&#xff0c;加速5G商业正循环…

面试题-React(十二):React中不可变数据的力量

一、不可变数据的概念 不可变数据意味着数据一旦创建&#xff0c;就不能被更改。在React中&#xff0c;每次对数据的修改都会返回一个新的数据副本&#xff0c;而不会改变原始数据。这种方式确保了数据的稳定性和一致性。 二、Props中的不可变数据 在React中&#xff0c;组件…

TensorFlow入门(十六、识别模糊手写图片)

TensorFlow在图像识别方面,提供了多个开源的训练数据集,比如CIFAR-10数据集、FASHION MNIST数据集、MNIST数据集。 CIFAR-10数据集有10个种类,由6万个32x32像素的彩色图像组成,每个类有6千个图像。6万个图像包含5万个训练图像和1万个测试图像。 FASHION MNIST数据集由衣服、鞋子…

超详细的顺序表(附源码)

文章目录 前言线性表顺序表顺序表的分类静态顺序表动态顺序表 动态顺序表的实现&#x1f6a9;结构&#x1f6a9;初始化&#x1f6a9;销毁&#x1f6a9;插入&#x1f6a9;删除&#x1f6a9;查找&#x1f4c3;源代码 前言 顺序表是线性表的一种&#xff0c;代码量对于前面的学习…

K邻近算法(KNN,K-nearest Neighbors Algorithm)

文章目录 前言应用场景欧几里得距离&#xff08;欧氏距离&#xff09;两类、单一属性&#xff08;1D&#xff09;两类、两种属性&#xff08;2D&#xff09;两类、两种以上属性&#xff08;>3D&#xff09; Examples in R再来一个补充一下什么是变量 什么是变量&#xff1f;…

node.js+NPM包管理器+Webpack打包工具+前端项目搭建

javascript运行环境&#xff08;无需依赖html文件&#xff09; BFF&#xff0c;服务于前端的后端 官网下载安装&#xff0c;node -v查看是否安装成功 ①、创建一个01.js文件 //引入http模块 const httprequire(http)//创建服务器 http.createServer(function(request,respo…

C# Onnx GFPGAN GPEN-BFR 人像修复

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms;namespace 图像修复 {public partial class Form1 : For…

传感器信息系统中的节能收集研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

SecureCRT 自动测试脚本的使用方法

脚本示例&#xff08;get_batteryifo_interval_2s.vbs&#xff09;&#xff1a; Sub Main Do While(1)crt.Screen.Send "pm_client batteryinfo" & chr(13)crt.Sleep 2000 Loop End Sub 1. 解压 SecureCRT 压缩包&#xff08;网上下载&#xff09;&#xff1b…

机器人制作开源方案 | 杠杆式6轮爬楼机器人

1. 功能描述 本文示例将实现R281b样机杠杆式6轮爬楼机器人爬楼梯的功能&#xff08;注意&#xff1a;演示视频中为了增加轮胎的抓地力&#xff0c;在轮胎上贴了双面胶&#xff0c;请大家留意&#xff09;。 2. 结构说明 杠杆式6轮爬楼机器人是一种专门用于爬升楼梯或不平坦地面…

基于JAYA优化的BP神经网络(分类应用) - 附代码

基于JAYA优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于JAYA优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.JAYA优化BP神经网络3.1 BP神经网络参数设置3.2 JAYA算法应用 4.测试结果&#xff1a;5.M…

08 | Jackson 注解在实体里面如何应用?常见的死循环问题如何解决?

我们用 Spring Boot 里面默认集成的 fasterxml.jackson 加以说明&#xff0c;这看似和 JPA 没什么关系&#xff0c;但是一旦我们和 Entity 一起使用的时候&#xff0c;就会遇到一些问题&#xff0c;特别是新手同学&#xff0c;我们这一课时详细介绍一下用法。先来跟着我了解一下…

计算机毕业设计选什么题目好?springboot 美食推荐系统

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

clickhouse数据库简介,列式存储

clickhouse数据库简介 1、关于列存储 所说的行式存储和列式存储&#xff0c;指的是底层的存储形式&#xff0c;数据在磁盘上的真实存储&#xff0c;至于暴漏在上层的用户的使用是没有区别的&#xff0c;看到的都是一行一行的表格。 idnameuser_id1闪光10266032轨道物流10265…

基于秃鹰优化的BP神经网络(分类应用) - 附代码

基于秃鹰优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于秃鹰优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.秃鹰优化BP神经网络3.1 BP神经网络参数设置3.2 秃鹰算法应用 4.测试结果&#xff1a;5.M…

性能优化-中间件tomcat调优

Tomcat作用 主要有三个: 管理Servlet应用的生命周期。Tomcat可以管理和控制Servlet应用程序的启动、停止、暂停和恢复等生命周期过程,确保Servlet应用的稳定运行和有序管理。把客户端请求的url映射到对应的servlet。Tomcat作为一个Web服务器,可以将客户端发送的HTTP请求URL…

DL Homework 3

给定训练集,将每个样本输入给前馈神经网络&#xff0c;得到网络输出为,其在数据集上的结构化风险为 首先简单解释一下这堆话&#xff0c;结构化风险经验风险正则化项,经验风险为&#xff0c;对于函数我们大多数采取的为交叉熵函数&#xff0c;,正则化项为&#xff0c;首先神经网…