当前位置: 首页 > news >正文

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语句的语法结构及各种用法

讲解视频&#xff1a; P3-1.【结构化程序设计】第一节——知识要点&#xff1a;算法、顺序结构程序设计、if语句的语法结构及各种用法 知识要点&#xff1a;算法、顺序结构程序设计、if语句的语法结构及各种用法 一、算法、顺序结构程序设计任务分析 知识要点&#xff1a;算法…...

Vue2——单页应用程序路由的使用

一.单页应用程序与多页应用程序之间的比较 二.单页的应用场景 系统类网站 / 内部网站 / 文档类网站 / 移动端网站 三.路由的介绍 1. 什么是路由 路由是一种映射关系 2. Vue中的路由是什么 路径和组件的映射关系 四.VueRouter的使用 5个基础步骤&#xff08;固定&#xff09; …...

变分法(Calculus of Variations)

变分法&#xff08;Calculus of Variations&#xff09;是数学的一个分支&#xff0c;主要研究函数的极值问题&#xff0c;即寻找一个函数&#xff0c;使得某个泛函达到最大值或最小值。泛函是将函数作为变量的函数&#xff0c;与通常的函数不同&#xff0c;泛函的变量是函数本…...

包括 Nginx、Gateway、Nacos、Dubbo、Sentinel、RocketMQ 和 Seata 的调用链路描述:

以下是一个更详细和清晰的客户端请求在 Spring Cloud Alibaba 框架中&#xff0c;包括 Nginx、Gateway、Nacos、Dubbo、Sentinel、RocketMQ 和 Seata 的调用链路描述&#xff1a; 1. 客户端请求 用户在浏览器或移动应用中发起请求&#xff08;例如&#xff0c;获取用户信息的…...

【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#语法的主要内容&#xff0c;接近20万字。 所有鸡汤的味道都等于马尿&#xff01; 如果你相信任何所谓的鸡汤文章&#xff0c;智商堪忧。 计算机语言没有”好不好“之说&#xff0c;骗子才会告诉你哪个语言好&#xff0c;学好任何一本基础语言&#xff08;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为入口文件&#xff0c;App.js为根组件。 如何将react应用挂载在页面上&#xff1f; 将App组件渲染到id为root的DOM元素中 2. JSX JSX是|avaScript和XML(HTML)的缩写…...

D4--哈夫曼树和不等式

看文先三连&#xff0c;养成好习惯~看文先三连&#xff0c;养成好习惯~看文先三连&#xff0c;养成好习惯~ 目录 知识点&#xff1a; 堆排序&#xff1a; 优先队列&#xff1a; 定义&#xff1a;&#xff08;默认大顶堆&#xff09; 入队: 出队&#xff1a; 取队顶&…...

详解RabbitMQ三种队列类型

RabbitMQ 是一个强大的消息队列系统&#xff0c;它提供了多种队列类型以满足不同的使用需求。本文将探讨三种主要队列类型&#xff1a;经典队列、仲裁队列和流式队列&#xff0c;并讨论它们的区别和选型建议。 经典队列&#xff08;Classic Queues&#xff09; 简介&#xff…...

openGauss数据库-头歌实验1-3 创建和管理模式

一、创建和使用模式 &#xff08;一&#xff09;任务描述 本关任务&#xff1a;基于 openGauss 学习创建模式的相关知识。 &#xff08;二&#xff09;相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1.openGauss 的常用操作&#xff0c;2.SQL 创建模式相关语…...

森林火灾检测数据集(猫脸码客 第233期)

森林火灾检测数据集 森林火灾是一种具有巨大破坏性的自然灾害&#xff0c;每年在全球范围内造成巨大损失。为了有效应对森林火灾&#xff0c;及早发现和快速响应是至关重要的。传统上&#xff0c;森林火灾的检测主要依赖于人工巡逻和卫星遥感技术。然而&#xff0c;这些方法存…...

LeetCode100之找到字符串中所有字母异位词(438)--Java

1.问题描述 给定两个字符串 s 和 p&#xff0c;找到 s 中所有 p 的 异位词的子串&#xff0c;返回这些子串的起始索引。不考虑答案输出的顺序。 示例1 输入: s "cbaebabacd", p "abc" 输出: [0,6] 解释: 起始索引等于 0 的子串是 "cba", 它是 …...

【Python】Python自习课:第一个python程序

【Python】Python自习课&#xff1a;第一个python程序...

DICOM标准:解析DICOM属性中的病人模块

目录 病人模块概述 1. 病人关系模块&#xff08;Patient Relationship Module&#xff09; 2. 病人识别模块&#xff08;Patient Identification Module&#xff09; 3. 病人统计模块&#xff08;Patient Demographic Module&#xff09; 4. 病人医学模块&#xff08;Pati…...

C++设计模式创建型模式———生成器模式

文章目录 一、引言二、生成器/建造者模式三、总结 一、引言 上一篇文章我们介绍了工厂模式&#xff0c;工厂模式的主要特点是生成对象。当对象较简单时&#xff0c;可以使用简单工厂模式或工厂模式&#xff1b;而当对象相对复杂时&#xff0c;则可以选择使用抽象工厂模式。 工…...

基于微信小程序的校园失物招领系统的研究与实现(V4.0)

博主介绍&#xff1a;✌stormjun、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…...

DDRNet模型创新实现人像分割

项目源码获取方式见文章末尾&#xff01; 600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【BiLSTM模型实现电力数据预测】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实…...

try…catch…finally语句里return语句的执行顺序是怎样的?

第一种情况 try语句块里面有return语句&#xff0c;catch语句块和finally语句块里面没有return语句。 代码如下&#xff1a; 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 数据隐…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...