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

本文主要是介绍【重拾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. 错误处理:在代码中应考虑错误处理机制,例如检查函数返回值,处理可能发生的错误情况。

这篇关于【重拾C语言】十二、C语言程序开发(自顶向下、逐步求精;结构化程序设计原则;程序风格)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/211495

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

怎么让1台电脑共享给7人同时流畅设计

在当今的创意设计与数字内容生产领域,图形工作站以其强大的计算能力、专业的图形处理能力和稳定的系统性能,成为了众多设计师、动画师、视频编辑师等创意工作者的必备工具。 设计团队面临资源有限,比如只有一台高性能电脑时,如何高效地让七人同时流畅地进行设计工作,便成为了一个亟待解决的问题。 一、硬件升级与配置 1.高性能处理器(CPU):选择多核、高线程的处理器,例如Intel的至强系列或AMD的Ry

EMLOG程序单页友链和标签增加美化

单页友联效果图: 标签页面效果图: 源码介绍 EMLOG单页友情链接和TAG标签,友链单页文件代码main{width: 58%;是设置宽度 自己把设置成与您的网站宽度一样,如果自适应就填写100%,TAG文件不用修改 安装方法:把Links.php和tag.php上传到网站根目录即可,访问 域名/Links.php、域名/tag.php 所有模板适用,代码就不粘贴出来,已经打

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机

跨系统环境下LabVIEW程序稳定运行

在LabVIEW开发中,不同电脑的配置和操作系统(如Win11与Win7)可能对程序的稳定运行产生影响。为了确保程序在不同平台上都能正常且稳定运行,需要从兼容性、驱动、以及性能优化等多个方面入手。本文将详细介绍如何在不同系统环境下,使LabVIEW开发的程序保持稳定运行的有效策略。 LabVIEW版本兼容性 LabVIEW各版本对不同操作系统的支持存在差异。因此,在开发程序时,尽量使用

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return