首页 > 编程语言 >C语言程序设计(第二版)学习笔记——第二章

C语言程序设计(第二版)学习笔记——第二章

时间:2024-03-19 11:32:22浏览次数:19  
标签:执行 程序 C语言 算法 循环 模块 程序设计 第二章 结构

第二章 算法

2.1 算法的概念

广义的来说,为解决问题而采取的方法和步骤称为算法。针对不同的问题由不同的算法,同一问题也可以有不同的算法。

计算机中算法是指计算机语言解决问题的方法和步骤。

用计算机处理问题一般过程如下:

(1)分析问题;(2)确定处理方案;(3)确定算法;(4)用计算机语言编写程序实现算法;(5)上级运行、调试程序,有错找出原因,修改后在运行,直到正确为止。

计算机中的算法分类:数值运算算法和非数值运算算法

数值运算:是求数值的解。

非数值运算算法:涉及范围广

2.2 计算机算法的表示方法

2.2.1 自然语言表示算法

自然语言就是人们日常使用的语言,用自然语言描述算法,通俗易懂。

2.2.2 传统流程图表示算法

传统流程图使用一些图框加文字说明表示算法的各种操作步骤,用箭头表示程序执行的走向,直观、形象、好理解。

常见的框图符号如图:

起止框:说明程序的开始和结束

输入输出框:表示输入输出操作

处理框:表示要进行的各种算法及赋值等操作

判断框:有一个入口,两个出口;根据给定的条件判断是否成立,决定程序执行的走向哪个出口。用法如图:

连接点:用标有数字的圆圈表示,用来表示程序的断点。当程序流程图很长画不下时,需要断开几处画,可用标有数字的圆圈表示程序的同一断点,如图所示:

流程图优点:直观形象、流程清晰。

流程图缺点:占用面积大;由于允许使用流程线,使流程可以任意转移,对于复杂的程序使人不易理解程序思路。

2.2.3 N-S结构化框图表示算法

N-S框图特点:取消了流程线,不允许流程任意转移,只能从上到下顺序进行。

N-S框图规定的基本结构:顺序结构、选择结构、循环结构。

N-S框图将规定的基本结构都用矩形框表示,并将由这些基本结构矩形框组成的全部算法包含在一个大矩形框里。

顺序结构程序执行的过程是从上到下,先执行A段程序,再执行B段程序。

顺序结构的N-S框图如图所示

选择结构的N-S框图如图所示,选择结构执行过程是根据条件P是否满足而决定是执行A段程序还是执行B段程序。


循环结构用来描述有规律的重复操作,可以大大缩短程序长度。

根据构成循环的形式,循环结构可以分为当型循环与直到型循环两种基本形式。它们的共同特点是根据某个条件来决定是否重复执行某些操作。

当型循环结构的N-S框图如图所示,当型循环结构执行过程是先判断条件P是否满足,当P条件满足时(Y),则执行循环体(即A段程序),然后再判断条件P是否满足,若满足(Y),则再次执行循环体A程序……,如此循环执行,直到P条件不满足(N)时退出循环。

直到型循环结构的N-S框图如图所示,直到型循环执行过程是先执行一次循环体A段程序,然后判断条件P是否满足,若满足(Y)则再执行A段程序,然后再次判断P条件是否满足,……,如此循环执行,直到P条件不满足(N)为止。

当型循环和直到型循环的区别:前者“先判断、后执行”且循环体可一次都不执行,后者“先执行、后判断”且循环体至少执行一次。

由选择结构可以派生出另一种基本结构:多分支选择结构,根据p值的不同取值(p1、p2、p3、···、pn)而决定执行A1、A2、···、An程序之一。其结构流程图如图所示:

2.3 算法的特点及算法设计的要求

2.3.1 算法的特征

(1)可行性

(2)有穷性

(3)确定性

(4)有效性

(5)拥有足够的信息

(6)有或没有输入

(7)至少一个输出

2.3.2 算法设计的要求

(1)正确性

(2)可读性

(3)健壮性

(4)高效率与低存储量需求

2.4 计算机程序设计的基本方法

计算机程序设计就是用计算机语言表示算法。

C语言属于结构化程序设计语言,适合于编写结构化程序。

对于大型程序设计,目前流行模块化设计方法,即将大而复杂的问题分为若干小的小模块,便于实现和调试。

2.4.1 结构化设计

结构化程序设计强调程序设计风格和程序设计结构的规范化。结构化程序设计要求把程序的结构限制为顺序、选择和循环3种基本结构,以便提高程序的可读性。遵循程序结构化的设计原则,按结构化设计方法设计出的程序易于理解、修改和维护,这就减少了程序出错的机会,提高了程序的可靠性,可以提高编程工作的效率,降低软件开发的成本。

2.4.2 模块化设计

模块化设计是指把一个大程序的总体目标先分解为若干分目标,再进一步分解为具体的小目标,每个小目标称为一个模块,由于经过分解后的各模块比较小,容易实现,也容易调试。

在进行模块化程序设计时应考虑两个问题:如何划分模块?如何组织好模块之间的联系?

(1)按功能划分模块划分

模块的基本原则是使每个模块都易于理解。在按功能划分模块时,要求各模块的功能尽量单一,各模块之间的联系尽量少。当要修改某一模块功能时,只涉及一个模块而不会影响到其他模块。

(2)按层次组织模块

在按层次组织模块时,上一层模块只指出"做什么",只有在最底层模块中才指出"怎么做"。

2.4.3 模块化程序的设计过程

模块化的设计过程,一般采用自顶向下、逐步细化的过程。

(1)自顶向下:即先考虑总体,后考虑细节;先考虑全局目标,后考虑局部目标,这种程序结构按功能划分为若干基本模块,这些模块形成一个树状结构。

 (2)逐步细化:对复杂的问题设计一些子目标作过渡,逐步细化,将一个模块的功能逐步分解细化为一系列的处理步骤。

用这种方法逐步分解,直到将各小模块表达为某种程序设计语言的语句为止。这种方法就叫作"自顶向下,逐步细化"。

这种设计方法的过程是将问题求解由抽象逐步具体细化的过程。

用这种方法便于验证算法的正确性,在向下一层展开之前应仔细检查本层设计是否正确,只有上一层正确才能向下细化。如果每一层设计都没有问题,则整个算法就是正确的。

标签:执行,程序,C语言,算法,循环,模块,程序设计,第二章,结构
From: https://blog.csdn.net/m0_52761498/article/details/136831540

相关文章

  • 【C语言】猜数字游戏
    代码如下:#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>#include<stdlib.h>#include<time.h>voidgame(){ intr=rand()%100+1; intguess=0; while(1) { printf("请猜数字>:"); scanf("%d",&guess);......
  • matlab程序设计——程序流程控制
    和所有编程语言一样,matlab也有类似的程序控制流程,函数定义与调用等操作,相较于python和c/++,matlab更加特别,其格式与二者皆有出入,尤其需要初学者慎重记忆、区分理解。相同的,MATLAB的程序流程也无非分为:顺序结构、选择结构、循环结构三种类型(一).顺序结构MATLAB程序设计同样也遵......
  • C语言wyh的物品
    题目描述wyh学长现在手里有n 个物品,这n 个物品的重量和价值都告诉你,然后现在让你从中选取k 个,问你在所有可能选取的方案中,最大的单位价值为多少(单位价值为选取的k个物品的总价值和总重量的比值)输入描述:输入第一行一个整数T(1≤T≤10)接下来有T组测试数据,对于每......
  • C语言数据结构链表(无头结点)功能实现(增,删,改,查)
    #include<stdio.h>#include<stdlib.h>typedefstructLNode{   int data;   struct   LNode*next;}LNode,*LinkList; boolInitList(LinkList&L){    L=NULL;    return0; }boolinsert(LinkList&L,inti,intx){       ......
  • 深入C语言指针,使代码更加灵活(三)
    一、函数指针1.1函数的地址在讲解函数指针变量之前,我们先思考一下什么是函数指针变量,我们可以同数组指针变量进行类比:数组指针—是指针—是存放指向数组的指针,是存放数组地址的指针;函数指针—是指针—是存放指向函数的指针,是存放函数地址的指针;数组是有地址的,那么函数......
  • 用C语言实现二分查找
    //二分查找,前提必须是有序#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>intmain(){ intarr[]={1,2,3,4,5,6,7,8,9,10}; intsz=sizeof(arr)/sizeof(arr[0]);//求数组长度 intk=7;//要查找的数 intleft=0; intright=sz-1; intmid=0; i......
  • 学习笔记——C语言基本概念&运算符——(2)
    目录一、运算符1.1赋值运算符1.2算数运算符 1.3关系运算符1.5位运算符1.6 自增自减运算符1.7  复合运算符1.8逗号运算符1.9 三目运算符1.10 sizeof运算符附录:运算符优先性表一、运算符1>.按照操作数目分类:单目运算符,双目运算符,三目运算符。2>......
  • C语言随记————简单算法
    1.问题:如何在C语言中实现一个简单的线性查找算法? 答案:线性查找算法可以通过遍历数组的每个元素,逐一比较来查找目标值。以下是一个简单的实现示例:intlinearSearch(intarr[],intn,intx){for(inti=0;i<n;i++){if(arr[i]==x)re......
  • 第二章 TypeScript任意类型
    在第二章开始前我们先安装一个插件为ts-node和一个声明文件@types/node,这样执行起来就没有第一章那么麻烦了//安装ts-node的插件npmits-node-g//安装声明文件npmi@types/node-D然后新建一个文件执行ts-node文件名.ts你会发现直接就可以输出了any任意类......
  • C语言动态链表练习(简单易懂)
    学习目标:初步认识动态链表,并会最基础的应用。题目内容:写个程序,输入a,b,c如果a>b,a=a➖b    b>c,b=b➖c    c>a,c=c➖a要求:开始时输入k➕1行数,第一行为k,代表数的组数,下面每一行为一个组,每组四个数,前三个为a,b,c,最后一个为这组数进行上述计算的次数题目特点分析:开始......