P3-1.【结构化程序设计】第一节——知识要点:算法、顺序结构程序设计、if语句的语法结构及各种用法

讲解视频:
P3-1.【结构化程序设计】第一节——知识要点:算法、顺序结构程序设计、if语句的语法结构及各种用法
知识要点:算法、顺序结构程序设计、if语句的语法结构及各种用法
一、算法、顺序结构程序设计任务分析
知识要点:算法、顺序结构程序设计
输入两个整数,求它们的商和余数。
1.可以程序运行时从键盘输入任意两个整数,也可以直接赋值;
2.根据C语言的语法规则两个整数相除的商是整数,事实上两个数相除的结果可能是实数,我们可以通过类型转换使其结果为实数。
本任务经过输入数据、计算、输出结果三步操作可以实现,这也是一个程序通常的执行过程。前一个项目中我们已经学习了C语言的输入和输出函数。对于简单的任务,输入数据,经过计算之后可以直接输出计算结果,但对于复杂的任务,往往需要先画出流程图,然后再编写程序。
二、必备知识与理论
1.算法
(1)算法概述
算法(Algorithm)一词源于算术(Alogrism)。简单说算术方法是一个由已知推求未知的运算过程。后来人们引申开来,把进行某一工作的方法和步骤称为算法。因此,算法反映了计算机的执行过程,是对解决特定问题操作步骤的一种描述。
【例3.1】求1×2×3×4×5(即5!)
步骤S1:先求1×2,得到结果2。
步骤S2:将步骤1得到的结果2乘以3,得到结果6。
步骤S3:将6再乘以4,得24。
步骤S4:将24再乘以5,得结果120。
这样的算法虽然正确,但太繁琐。改进的算法如下:
S1:使t=1;
S2:使i=2;
S3:使t×i,乘积仍然放在变量t中,可表示为:t×i→t;
S4:使i的值加1,即i+1→i;
S5:如果i≤5,则返回重新执行S3、S4和S5;否则,算法结束。
如果计算100!,只需将S5中的i≤5改成i≤100即可。
该算法对于计算机来说,是较好的方法,因为计算机的运算速度快,最适合做重复的工作。
算法的特性
①有穷性
②确定性
③有效性
④有零个或多个输入
⑤有一个或多个输出
(2)算法的表示
①用自然语言表示
②用传统流程图
用流程图表示的算法直观形象,比较清楚地显示出各个框之间的逻辑关系,因此得到广泛使用。下面给出3种基本结构及其对应的流程图。
③用N-S结构图表示
N-S结构图取消了流程线,不允许有随意的控制流,全部算法写在一个矩形框内,该矩形框以3种基本结构(顺序、选择、循环)描述符号为基础复合而成。
④用伪代码表示
用传统流程图、N-S图表示算法,直观易懂,但绘制比较麻烦。在设计一个算法时,可能要反复修改,而修改流程图是比较麻烦的,因此,流程图适合表示算法,但在设计过程中使用不是很理想。为了设计算法方便,常使用伪代码。
(3)结构化程序设计方法
“自顶向下,逐步细化”是对问题的解决过程逐步具体化的一种思想方法。例如:要在一组数中找出其中的最大数,首先,可以把问题的解决过程描述为:
①输入一组数。
②找出其中的最大数。
③输出最大数。
以上三条中,第①、③两步比较简单,对第②步可以进一步细化:
1)任取一数,假设它就是最大数。
2)将该数与其余各数逐一比较。
3)若发现有其他数大于假设的最大数,则取而代之。
现在对以上过程进一步具体化,得到如下算法:
①输入一组组数。
②设max =第一个数。
③将第二个数到最后一个数依次取出放入x。
④比较x与max的大小,如果x>max,则使max=x。
⑤输出 max。
2.C语句
C语句主要包括控制语句、表达式语句、赋值语句、函数调用语句、复合语句、空语句等,其中存在包含关系。
(1)控制语句
控制语句用于控制程序的流程,以实现程序中的各种结构。它们由特定的语句定义符组成 。C语言有9种控制语句,如下表所示。
(2)表达式语句
表达式语句由表达式加上分号“;”组成。其一般形式为:
表达式;
执行表达式语句就是计算表达式的值。表达式语句可分赋值语句、函数调用语句和空语句3种基本类型。
①赋值语句
赋值语句是由赋值表达式加上分号构成的表达式语句。其一般形式为:
变量=表达式;如:y=(a+b)/2;
②函数调用语句
函数调用语句的一般格式为:函数名(实际参数表);
如:printf(“This is a C program.”);
③空语句
只有分号组成的语句称为空语句。
(3)复合语句
把多个语句用花括号{}括起来组成的语句称为复合语句。在程序中可以把复合语句看成一条语句。如下面的语句实现交换两个数的值。
{ t=a; a=b; b=t;}
三、任务实施
现在我们来完成开头提出的任务:输入两个整数,求它们的商和余数。
本任务比较简单,有基本的三个操作步骤:
(1)数据输入:用数据输入函数scanf()来完成给两个整型变量的赋值。
(2)计算:使用除(/)运算计算商(注意类型转换)、求余(%)运算计算余数。
(3)数据输出:用输出函数printf(),并使用合适的格式控制使输出结果保留2位小数。
程序代码如下:
#include <stdio.h>
main()
{ int a,b,c;
float d;
scanf("%d,%d",&a,&b);
c=a%b;
d=(float)a/b; /* 将a转换为实型,以便得出实数商 */
printf("c=%d,d=%5.2f\n",c,d);
}
运行结果为:
-8,6↙
c=-1,d=-1.33
四、深入训练
1.输入某学生的三门课程考试成绩,计算出该学生的总成绩和平均成绩。试编写程序,并画出算法的N-S流程图。要求输出时平均成绩保留一位小数。
提示:设三门课程的成绩分别为n1,n2,n3,总成绩为sum,平均成绩为avg,可将这些变量均定义为float,输出结果保留一位小数。
五、知识要点:if语句的语法结构及各种用法任务分析
对于任意输入的3个数a,b,c,要按由小到大的顺序输出,需要对这3个数进行排序,也就是进行比较大小的操作,根据比较的结果而执行不同的操作,用前面所学知识显然不能满足需要,C语言的选择结构程序设计体现了程序的判断能力。
六、必备知识与理论
1.基本if 语句
if语句是用来判定所给定的条件是否满足,根据判定的结果(真或假)执行给出的两种操作之一。它的简单形式为:if(表达式) 语句;
例如:if(x>y) printf("%d",x);
如果表达式的值为真(非0),则执行其后所跟的语句;如果表达式的值为假,直接转到下一条语句继续执行。这种形式的if语句又被称为单分支语句。
【例3.2】输入x,输出x的绝对值。代码如下:
#include <stdio.h>
main()
{ int n;printf("please input a number:");scanf("%d",&n);if(n<0)n=-n;printf("the absolute value of the number is:%d\n",n);
}
2.if…else语句
if语句更常用的形式是双分支语句,其格式如下:
if(表达式) 语句1;
else 语句2;
程序执行时,若x的值大于y的值,则会在屏幕上显示x的值,否则显示y的值。
【例3.3】将输入的小写字母转换成大写字母输出,大写字母原样输出。
#include <stdio.h>
main()
{ char ch;printf("please input a letter:");scanf("%c",&ch);if(ch>='a' && ch<='z'){ ch=ch-32; /* 小写字母的ASCII值-32即为大写字母*/printf("the large letter is:%c\n",ch); }elseprintf("the letter is:%c\n",ch);
}
3.条件运算符
若if语句中,在表达式为“真”和“假”时,且都只执行一个赋值语句给同一个变量赋值时,可以用简单的条件运算符来处理。
条件运算符的一般格式:表达式1 ? 表达式2 :表达式3
条件运算符是C语言中唯一的一个三目运算符。
七、任务实施
输入任意3个数a,b,c,按由小到大的顺序输出。
基本思想:先确定a中存放最小的数,c中放最大的数,b中放中间的数。
(1)首先找出最小的数放到a中。a分别与b和c比较,若存在比a小的数,就交换变量的值,使a中的数总是最小。
(2)将剩余的两个数b与c比较一次,如果b大于c,则交换变量的值,那么c中的数最大,b中的就是中间数,排序完成。
(3)使用中间变量t存放临时数据。
程序代码如下:
#include <stdio.h>
main()
{ float a,b,c,t;printf("please input three number:");scanf("%f,%f,%f",&a,&b,&c);if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;} if(b>c){t=b;b=c;c=t;} printf("from samll to large:%.2f,%.2f,%.2f\n",a,b,c);
}
注意:{ }内的最后一个语句要有分号,{ }外没有分号。
八、深入训练
1.输入任一年份,判断是否为闰年。
提示:以变量leap代表是否闰年的信息。若闰年,令leap=1,非闰年,leap=0。最后判断leap是否为1(真),若是,则输出闰年信息。
2.输入任意一个整数,判断它的奇偶性并输出判断结果。
提示:设m为任一整数,if(m%2==0) 则m为偶数否则为奇数。
相关文章:
P3-1.【结构化程序设计】第一节——知识要点:算法、顺序结构程序设计、if语句的语法结构及各种用法
讲解视频: P3-1.【结构化程序设计】第一节——知识要点:算法、顺序结构程序设计、if语句的语法结构及各种用法 知识要点:算法、顺序结构程序设计、if语句的语法结构及各种用法 一、算法、顺序结构程序设计任务分析 知识要点:算法…...
Vue2——单页应用程序路由的使用
一.单页应用程序与多页应用程序之间的比较 二.单页的应用场景 系统类网站 / 内部网站 / 文档类网站 / 移动端网站 三.路由的介绍 1. 什么是路由 路由是一种映射关系 2. Vue中的路由是什么 路径和组件的映射关系 四.VueRouter的使用 5个基础步骤(固定) …...
变分法(Calculus of Variations)
变分法(Calculus of Variations)是数学的一个分支,主要研究函数的极值问题,即寻找一个函数,使得某个泛函达到最大值或最小值。泛函是将函数作为变量的函数,与通常的函数不同,泛函的变量是函数本…...
包括 Nginx、Gateway、Nacos、Dubbo、Sentinel、RocketMQ 和 Seata 的调用链路描述:
以下是一个更详细和清晰的客户端请求在 Spring Cloud Alibaba 框架中,包括 Nginx、Gateway、Nacos、Dubbo、Sentinel、RocketMQ 和 Seata 的调用链路描述: 1. 客户端请求 用户在浏览器或移动应用中发起请求(例如,获取用户信息的…...
【P2-1】ESP8266 WIFI模块STA、AP、STA+AP、TCP/UDP透传工作模式介绍与AT指令介绍
前言:本文对ESP8266 WIFI模块STA、AP、STA+AP、TCP/UDP透传工作模式进行介绍;以及AT指令介绍,包括基础AT指令,WIFI功能AT指令、TCP/IP相关AT指令、常用AT指令实例进行介绍。 ESP8266 WIFI模块的接线及固件烧写可参考我的这篇博客:正点原子ATK-ESP8266 WIFI模块接线及固件…...
《C#语法一篇通》,20万字,48小时阅读,持续完善中。。。
本文摘录了C#语法的主要内容,接近20万字。 所有鸡汤的味道都等于马尿! 如果你相信任何所谓的鸡汤文章,智商堪忧。 计算机语言没有”好不好“之说,骗子才会告诉你哪个语言好,学好任何一本基础语言(C&#…...
[node] 2 fs文件系统模块
前言 fs模块是Node.js官方提供的内置Api,用来操作文件的模块。它提供了一系列的属性和方法,来满足用户对文件的操作需求 目标 1 掌握fs中文件处理方法readFile、writeFile等的基础用法 2 node如何安装 3 一些常用的终端快捷键 #mermaid-svg-rPp2nDYrW33gLvuI {font-family:&q…...
【react】基础知识点学习
1. 创建项目 npm install -g create-react-app npx create-react-app my-app cd my-app npm startindex.js为入口文件,App.js为根组件。 如何将react应用挂载在页面上? 将App组件渲染到id为root的DOM元素中 2. JSX JSX是|avaScript和XML(HTML)的缩写…...
D4--哈夫曼树和不等式
看文先三连,养成好习惯~看文先三连,养成好习惯~看文先三连,养成好习惯~ 目录 知识点: 堆排序: 优先队列: 定义:(默认大顶堆) 入队: 出队: 取队顶&…...
详解RabbitMQ三种队列类型
RabbitMQ 是一个强大的消息队列系统,它提供了多种队列类型以满足不同的使用需求。本文将探讨三种主要队列类型:经典队列、仲裁队列和流式队列,并讨论它们的区别和选型建议。 经典队列(Classic Queues) 简介ÿ…...
openGauss数据库-头歌实验1-3 创建和管理模式
一、创建和使用模式 (一)任务描述 本关任务:基于 openGauss 学习创建模式的相关知识。 (二)相关知识 为了完成本关任务,你需要掌握:1.openGauss 的常用操作,2.SQL 创建模式相关语…...
森林火灾检测数据集(猫脸码客 第233期)
森林火灾检测数据集 森林火灾是一种具有巨大破坏性的自然灾害,每年在全球范围内造成巨大损失。为了有效应对森林火灾,及早发现和快速响应是至关重要的。传统上,森林火灾的检测主要依赖于人工巡逻和卫星遥感技术。然而,这些方法存…...
LeetCode100之找到字符串中所有字母异位词(438)--Java
1.问题描述 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 示例1 输入: s "cbaebabacd", p "abc" 输出: [0,6] 解释: 起始索引等于 0 的子串是 "cba", 它是 …...
【Python】Python自习课:第一个python程序
【Python】Python自习课:第一个python程序...
DICOM标准:解析DICOM属性中的病人模块
目录 病人模块概述 1. 病人关系模块(Patient Relationship Module) 2. 病人识别模块(Patient Identification Module) 3. 病人统计模块(Patient Demographic Module) 4. 病人医学模块(Pati…...
C++设计模式创建型模式———生成器模式
文章目录 一、引言二、生成器/建造者模式三、总结 一、引言 上一篇文章我们介绍了工厂模式,工厂模式的主要特点是生成对象。当对象较简单时,可以使用简单工厂模式或工厂模式;而当对象相对复杂时,则可以选择使用抽象工厂模式。 工…...
基于微信小程序的校园失物招领系统的研究与实现(V4.0)
博主介绍:✌stormjun、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&…...
DDRNet模型创新实现人像分割
项目源码获取方式见文章末尾! 600多个深度学习项目资料,快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【BiLSTM模型实现电力数据预测】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实…...
try…catch…finally语句里return语句的执行顺序是怎样的?
第一种情况 try语句块里面有return语句,catch语句块和finally语句块里面没有return语句。 代码如下: public class Main {public static void main(String[] args) {System.out.println(test1());}public static int test1() {int i 10;try {System.o…...
AIGC与虚拟现实(VR)的结合与应用前景
公主请阅 引言1. AIGC与VR的基本概念1.1 AIGC简介1.2 VR技术概述 2. AIGC在VR中的应用2.1 生成虚拟环境2.2 自动生成内容2.3 互动体验 3. AIGC与VR结合的应用案例3.1 教育培训3.2 娱乐与游戏3.3 心理治疗3.4 虚拟旅游 4. AIGC与VR结合的挑战4.1 技术限制4.2 用户体验4.3 数据隐…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...
Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)
引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...
鸿蒙(HarmonyOS5)实现跳一跳小游戏
下面我将介绍如何使用鸿蒙的ArkUI框架,实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...
深入解析 ReentrantLock:原理、公平锁与非公平锁的较量
ReentrantLock 是 Java 中 java.util.concurrent.locks 包下的一个重要类,用于实现线程同步,支持可重入性,并且可以选择公平锁或非公平锁的实现方式。下面将详细介绍 ReentrantLock 的实现原理以及公平锁和非公平锁的区别。 ReentrantLock 实现原理 基本架构 ReentrantLo…...
PostgreSQL 与 SQL 基础:为 Fast API 打下数据基础
在构建任何动态、数据驱动的Web API时,一个稳定高效的数据存储方案是不可或缺的。对于使用Python FastAPI的开发者来说,深入理解关系型数据库的工作原理、掌握SQL这门与数据库“对话”的语言,以及学会如何在Python中操作数据库,是…...
