
6.C语言-结构化程序设计
1.语句
函数可以理解定段落,运算符可以理解成词组,由词组组成的就是语句了,每个语句一定可以描述一件事,如何处理数据等。
void main() {
int x = 10;//赋值语句
1 + 2 + 3 + 4;//运算符表达式语句
printf("hello world!");//函数调用语句
;//空语句
{
printf("我是一个块!");
}//块语句
}
结构化程序设计方法是按照模块划分原则以提高程序可读性和易维护性、可调性和可扩充性为目标的一种程序设计方法。在结构化的程序设计中,只允许三种基本的程序结构形式,它们是顺序结构、分支结构、(包括多分支结构) 和循环结构,这三种基本结构的共同特点是只允许有一个流动入口和一个出口,仅有这三种基本结构组成的程序称为结构化程序。结构化程序设计适用于程序规模较大的情况,对于规模较小程序也可采用非结构化程序设计方法。
结构化程序设计的思想是:把一个需要解决的复杂问题分解成若干模块来处理,每个模块解决解决一个小间题,这种分而治之的方法大大降低了程序设计的难度。结构化程序设计的核心间题是算法和控制结构。
算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间,空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。
算法特征
- 有穷性:算法的有穷性是指算法必须能在执行有限个步骤之后终止;
- 确切性:算法的每一步骤必须有确切的定义;
- 输入项:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件;
- 输出项:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;
- 可行性:算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步骤,即每个计算步骤都可以在有限时间内完成(也称之为有效性)。
#define _CRT_SECURE_NO_WARNINGS
#include
void main() {
int x, y, z;//数据说明
//以下都是描述要干的活
scanf("%d,%d,%d", &x, &y, &z);//扫描数据
int result = x + y + z;//数据说明+求值
printf("%d", result);//打印
}
2.伪代码
伪代码(Pseudocode)是一种非正式的,类似于英语结构的,用于描述模块结构图的语言。
输入3个数,打印输出其中最大的数
输入A,B,C
准备临时变量Max
IF A>B 则 A→Max
否则 B→Max
IF C>Max 则C→Max
输出Max
做一个定时器,每天晚上12点备份数据
IF 当前时间是 12:00 则 判断备份件是否存在
IF 今天的文件存在 则 跳过
否则 开始备件
否则 跳过
3.算法流程图
流程图是流经一个系统的信息流、观点流或部件流的图形代表。在企业中,流程图主要用来说明某一过程。这种过程既可以是生产线上的工艺流程,也可以是完成一项任务必需的管理过程。
为便于识别,绘制流程图的习惯做法是:
圆角矩形表示“开始”与“结束”;
矩形表示行动方案、普通工作环节用;
菱形表示问题判断或判定(审核/审批/评审)环节;
用平行四边形表示输入输出;
箭头代表工作流方向。
3种结构
顺序结构
flowchart LR
A(开始)-->B[过程A]
B-->C[过程B]
C-->D(完成)
分支结构
flowchart LR
A(开始)-->B{是否}
B--是-->C[过程A]
B--否-->D[过程B]
D-->E(完成A)
C-->F(完成B)
循环结构
flowchart LR
A(开始)-->B{是否}
B-->C(过程A)
C--是-->B
C--否-->D(结束)
一个用户注册流程
伪代码
- 用户输入手机号
- 判断手机号是否注册过,注册过,输入密码
- 否则,发送短息,等待输入验证码
- 确认注册或是登录成功
flowchart LR
A([注册/登录])-->B[输入手机号]
B-->C{是否已注册?}
C--是-->D[输入密码]
C--否-->E[输入验证码]
D-->F([注册/登录成功])
E-->F
三目运算符?
伪代码
- 用户输入
- 如果用户输入是字符Y,执行A操作
- 否则,执行B操作
流程图
flowchart LR
A[用户输入]-->B{是否是Y}
B-->是-->C[执行操作A]
B-->否-->D[执行操作B]
void main() {
char c;
c = getchar();
c == 'Y' ? system("tasklist") : system("notepad");
system("pause");
}
4.顺序结构
顺序结构是最简单的程序结构,也是最常用的程序结构,只要按照解决问题的顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行。
void main() {
int i = 0;
i += 1;
i += 2;
i += 3;
system("calc");
system("tasklist");
}
造一个汽车,你需要什么?
- 各个物料
- 组装物料 怎么组装?
算法:怎么去?怎么做?这里对应开发就是控制。
一个例子
#include
#include
#include
void opennotepad() {
WinExec("Notepad.exe", SW_SHOW); // 打开记事本
system("start Notepad.exe");
}
void closenotepad() {
system("taskkill /f /im notepad.exe");
}
void input() {
Sleep(1000);
keybd_event(66, 0, 0, 0);
keybd_event(66, 0, KEYEVENTF_KEYUP, 0);
Sleep(2000);
keybd_event(VK_CONTROL, 0, 0, 0);
keybd_event(83, 0, 0, 0);
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
keybd_event(83, 0, KEYEVENTF_KEYUP, 0);
Sleep(1000);
keybd_event(65, 0, 0, 0);
keybd_event(65, 0, KEYEVENTF_KEYUP, 0);
Sleep(1000);
keybd_event(13, 0, 0, 0);
keybd_event(13, 0, KEYEVENTF_KEYUP, 0);
Sleep(1000);
keybd_event(89, 0, 0, 0);
keybd_event(89, 0, KEYEVENTF_KEYUP, 0);
}
void main() {
opennotepad();
input();
closenotepad();
}
相关API
WinExec function (winbase.h) - Win32 apps | Microsoft Learn
keybd_event函数 (winuser.h) - Win32 apps | Microsoft Learn
虚拟键码 (Winuser.h) - Win32 apps | Microsoft Learn
四则运算
void main() {
//输入两个数字,分别写他们4则运算
int x, y,c;
scanf("%d,%d", &x, &y);
c = x + y;
printf("x+y=%d
", c);
c = x - y;
printf("x-y=%d
", c);
c = x * y;
printf("x*y=%d
", c);
c = x / y;
printf("x/y=%d
", c);
c = x % y;
printf("x%%y=%d
", c);
}
求圆的面积以及周长的程序
void main() {
int r = 3;//半径
float L;
float S;
L = 2 * 3.1415 * r;//算法控制
S = 3.1415 * r * r;//算法控制
printf("半径是%d , 的圆的周长是%f ,面积是%f
", r, L, S);//输出
}
flowchart LR
A(输入半径)-->B[定义周长与面积]
B-->C[计算周长]
C-->D[计算面积]
D-->E(打印输出周长与面积)
求平均数
int main() {
int a = 10;
int b = 20;
int c = 30;
int z = 0;
z = (a + b + c) / 2;
printf("平均数:%d", z);
}
有长方形,边长a为5,宽b为3,求该长方形的周长。
int main() {
int a = 5;
int b = 3;
int c;
c = 2 * a + 2 * b;
printf("周长:%d", c);
}
计算球的体积
V=4/3×π×r^3
int main() {
double r, v;
scanf("%lf", &r);
v = 4.0 / 3 * 3.14 * r * r * r;
printf("%.2lf", v);
}
一个汽车零部件工厂,需要实时统计实际零件库存。
零件基本表:
零件基本信息
零件实际库存列
增加库存:
每天初使库存
供应商到货
减少库存:
MES每工位下线触发,工艺回冲
flowchart LR
A(ERP初使库存)-->B
B(每产线遍历)-->C
C(每工位遍历)-->D
D(通过工位找BOM节点向下回冲)-->E
E(扣减零件基本表对应实时库存列)