【初阶C语言】整数比大小

 各位大佬的光临已是上上签

C语言刷题过程中,一定遇到过很多比大小的题目,那么本节就专门介绍比大小的方法,若大佬们还有更优解,欢迎补充呀!

本节讲解的方法主要有三种:1.条件判断  2.三目操作符  3.函数调用    4.数组判断

从两个数到多个数比较大小,其中,当有多个数比较的时候,利用数组的性价比达到最高。

一、两个数比大小

     我们先来两个数比较大小,慢慢进入状态。

题目:用C语言代码完成两个数的比较大小

解法1:

          选择语句(if...esle

我们先看代码:

#include<stdio.h>
int main()
{int a = 0;int b = 0;printf("请输入要比较大小的两个数\n");scanf("%d%d",&a,&b);int max = 0;//定义第三变量,用来存放较大的数if (a > b)//选择语句,不是a就是bmax = a;elsemax = b;printf("%d\n",max);//打印一下最大值return 0;
}

运行结果:

     第一种方法是比较简单,而且比较容易想到的。

解法2:

           三目运算符(exp1?exp2:exp3

我们先介绍一下三目操作符:exp1,2,3分别是三个表达式。如果表达式1为真,则执行表达式2;如果表达式1为假,则执行表达式3的内容。

图解: 

 介绍完成,我们看代码:

#include<stdio.h>int main()
{int a = 0;int b = 0;printf("请输入要比较大小的两个数\n");scanf("%d%d",&a,&b);int max = 0;//以上的代码都是一样的max = a > b ? a : b;//这里需要用max接收它们的运行结果printf("%d\n",max);return  0;
}

运行结果:

 这种相比选择语句的判断来说,代码量更加的简洁。

解法3:

          函数调用法(利用函数返回值)

这种方法相比上面的来说略向多余,不过我们也要了解一下。

我们直接看代码:

#include<stdio.h>
int Max(int x,int y)//定义两个形参接收实参
{if (x > y)return x;//这里可以直接返回最大值elsereturn y;//x的值相当于a,y相当于b
}
int main()
{int a = 0;int b = 0;printf("请输入要比较大小的两个数\n");scanf("%d%d", &a, &b);int max = 0;max=Max(a,b);//这里把需要比较的数作为实参传给函数printf("%d\n",max);return  0;
}

 运行结果:

该函数体内部也可以这么写:

int Max(int x, int y)
{return x > y ? x : y;
}

 整体的运行结果是一样的,不过第二种写法依然简洁。

二、三个数比大小

题目:用C语言代码比较出三个整数的最大值

解法1:

        选择语句(if...else

这里的写法与两个数比大小大体上相同,但是细微之处有差异

我们直接看代码:

#include<stdio.h>
int main()
{int a = 0, b = 0, c = 0;printf("请输入三个数\n");scanf("%d%d%d",&a,&b,&c);int max = 0;//定义最大值if (a > b)max = a;elsemax = b;//先找出两个数的最大值if (c > max)//再用最大值跟c比较max = c;//c大,再把c赋值为最大值;否则不需要改变printf("max=%d\n",max);return 0;
}

运行结果:

 解法2:

           三目运算符(exp1?exp2:exp3

这里需要改变的思路跟上面的如出一辙,都是先比较出两个数中的最大值。

代码写法:

#include<stdio.h>
int main()
{int a = 0, b = 0, c = 0;printf("请输入三个数\n");scanf("%d%d%d", &a, &b, &c);int max = 0;//定义最大值max = a > b ? a : b;//先比较两个数的最大值max = c > max ? c : max;//再拿第三个数和最大值比较printf("max=%d\n", max);return 0;
}

运行结果

 对比两种代码量:我们的三目运算符大哥依旧稳定发挥

解法3:

          函数调用

这种方法就是把解法1,2套到函数里面,思路如出一辙,这里我们就不细说了,想了解的话可以私信我呀!

三、四个数及以上

讲解到这里,也是到本节的重点内容了;我们直接往下看。

题目:输入4个整数,找出最大值

分析:与三个数比较大小的思想一样,需要先找出部分数的大小,再与剩下的数比较

解法1:

        选择语句(if...esle

直接看代码:

#include<stdio.h>
int main()
{int a = 0, b = 0, c = 0, d = 0;printf("请输入四个数\n");scanf("%d%d%d%d", &a, &b, &c, &d);int max1 = 0,max2=0;int max = 0;if (a > b)//找出ab中较大的数max1 = a;elsemax1 = b;if (c > d)//找出cd中较大的数max2 = c;elsemax2 = d;if (max1 > max2)//找出max1和max2中较大的数max = max1;elsemax = max2;printf("%d\n", max);return 0;
}

运行结果:

 总的来说就是一个整体法,看成三组两个数比较大小。

解法2:

         三目操作符(exp1?exp2:exp3

我们直接看代码:

#include<stdio.h>
int main()
{int a = 0, b = 0, c = 0, d = 0;printf("请输入四个数\n");scanf("%d%d%d%d", &a, &b, &c, &d);int max1 = 0, max2 = 0;int max = 0;max1 = a > b ? a : b;//各自比较max2 = c > d ? c : d;//max = max1 > max2 ? max1 : max2;printf("%d\n", max);return 0;
}

运行结果:

总结:以上两种解法都是两两比较大小,得出两个数再比较大小。 

 我们可以看到,三目运算法的代码量依旧很少;但是如果比较5个数?10个数呢?甚至更多呢?难道只能这样比较吗?答案当然不是的,这里有一种方法,数越多,效率越快,就是数组+循环的方法。

解法3:

        我们先介绍该方法的主要思想:假设,一个健身两年半的同学在班里面说,我们班需要有一个大哥,作为领头人,决出的方法就是一一对打,最后面胜出的为大哥。这个时候,有5个同学同学自认为自己很屌,站了出来。这个时候,假设健身两年半的是擂主,每次上去跟他对打,赢的同学作为擂主,再跟下一个同学对打,直到最后一个人胜出(假设对打不消化能量)

图解:

 C语言思想:先假定一个最大值,剩下的值一一与最大值比较,大于最大值就交换,小于直接比较下一个。

代码:

#include<stdio.h>
int main()
{int arr[6] = { 10,20,-20,63,12,3 };//把需要比较的数放进一个数组里//需要比较多少个数可以自己决定int max = arr[0];//直接把第一个数(10)假设为最大值int i = 1;//只需要从第二个开始比较for (i=1;i<6;i++) {if (max < arr[i])max = arr[i];//比max大就交换,反之不用}printf("max=%d\n",max);return 0;
}

运行结果:

 上述方法可以比较多个数的大小,10个,100个都没有问题,只需要适当修改数组大小和循环的次数即可。

注意:本章介绍的比较大小都是整数,小数不可以使用,需要把int改成double等一系列调整。另外,int存放的值不易太大,会越界。

四、总结

1.比较大小的通用方法是数组+循环

2.数字少时,三目运算符的代码较简便

3.两种思想:两两比较和先确定最大值


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/13179.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux命令200例】lsattr用于查看文件或目录的属性

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;本文已收录于专栏&#xff1a;Linux命令大全。 &#x1f3c6;本专栏我们会通过具体的系统的命令讲解加上鲜活的实操案例对各个命令进行深入…

Windows下Nginx安装与配置教程

一、前言 1、Nginx是什么&#xff1f; Nginx是一个开源的Web服务器&#xff0c;同时Nginx也提供了反向代理和负载均衡的功能。 Nginx通常作为负载均衡器暴露在外网接受用户请求&#xff0c;同时也使用其反向代理的功能&#xff0c;将用户的请求转发到实际提供服务的内网服务器…

Power BI-云端报表定时刷新--ODBC、MySQL、Oracle等其他本地数据源的刷新(二)

ODBC数据源 一些小众的数据源无法直接连接&#xff0c;需要通过微软系统自带的应用“ODBC数据源”连接。 1.首次使用应安装对应数据库的ODBC驱动程序&#xff0c;Mysql的ODBC驱动需要手动安装 2.在web服务中进行数据源的配置 Mysql数据源 1.Powerbi与Gateway第一次连SQL…

Java工程师研学之路【002Java基础语法上】

知识体系&#xff08;Knowledge system&#xff09; 练习&#xff08;practice&#xff09; 要求&#xff1a;从控制台输入两个数字&#xff0c;然后输出两个数字的求和结果。 import java.util.Scanner; public class HelloJava {public static void sum(){System.out.print…

maven编译报错

参考链接&#xff1a;mvn打包No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK_51CTO博客_mvn打包命令 在执行 yum install -y java-1.8.0-opensdk命令后&#xff0c;使用maven去编译打包&#xff0c;结果报错&#xff0c; …

【Leetcode】62.不同路径

一、题目 1、题目描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径? 示例1: 输入:m = 3, n = 7 输出:…

《向量数据库指南》——使用Milvus Cloud操作员安装Milvus Cloud独立版

Milvus cloud操作员HelmDocker Compose Milvus cloud Operator是一种解决方案,帮助您在目标Kubernetes(K8s)集群上部署和管理完整的Milvus cloud服务堆栈。该堆栈包含所有Milvus cloud组件和相关依赖项,如etcd、Pulsar和MinIO。本主题介绍如何使用Milvus cloud Operator安…

文心一言 VS 讯飞星火 VS chatgpt (67)-- 算法导论6.5 6题

文心一言 VS 讯飞星火 VS chatgpt &#xff08;67&#xff09;-- 算法导论6.5 6题 六、在 HEAP-INCREASE-KEY 的第 5 行的交换操作中&#xff0c;一般需要通过三次赋值来完成。想一想如何利用INSERTION-SORT 内循环部分的思想&#xff0c;只用一次赋值就完成这一交换操作? 文…

STUN工作原理

目录 一. 前言 二. STUN报文格式 STUN Header RFC3489 RFC5389 STUN Message Body RFC3489 RFC5389 三. WebRTC对STUN协议的支持 四. STUN工作流程 1. 使用STUN获取NAT映射后的地址 五. 参考资料 一. 前言 现实网络环境中绝大多数主机都是处于 NAT 之后&#xff0c…

Docker 容器高级操作

Docker容器高级操作 Docker容器创建、停止、启动、删除等基础操作上篇已述,然Docker容器被广大开发者青睐,不可能只有如此简单的功能,必有高阶功法。那么接下来 让我们一同走进容器操作的高级篇,领略其高级操作的魅力。 查看容器 docker ps -a | grep tomcat [root@tudou…

Java中的代理模式

Java中的代理模式 1. 静态代理JDK动态代理CGLib动态代理 1. 静态代理 接口 public interface ICeo {void meeting(String name) throws InterruptedException; }目标类 public class Ceo implements ICeo{public void meeting(String name) throws InterruptedException {Th…

LearnOpenGL_Day1

文章目录 前期准备下载GLFW下载GLAD 引入库文件生成窗口重要概念——双缓冲 &#xff08;double buffer&#xff09;代码实现 学习总结 前期准备 下载GLFW GLFW DOWNLOAD 解压后使用CMake编译至新创建的bulid文件夹下&#xff1a; 下载GLAD 引入库文件 创建好工程&#x…

01 矩阵(力扣)多源广度优先搜索 JAVA

给定一个由 0 和 1 组成的矩阵 mat &#xff0c;请输出一个大小相同的矩阵&#xff0c;其中每一个格子是 mat 中对应位置元素到最近的 0 的距离。 两个相邻元素间的距离为 1 。 输入&#xff1a;mat [[0,0,0],[0,1,0],[0,0,0]] 输出&#xff1a;[[0,0,0],[0,1,0],[0,0,0]] 输入…

RWEQ模型教程

详情点击链接&#xff1a;基于“RWEQ”集成技术在土壤风蚀模拟与风蚀模数估算、变化归因分析中的实践应用及SCI论文撰写 前沿 土壤风蚀是一个全球性的环境问题。中国是世界上受土壤风蚀危害最严重的国家之一&#xff0c;土壤风蚀是中国干旱、半干旱及部分湿润地区土地荒漠化的…

03-树1 树的同构(C++)

03-树1 树的同构 给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2&#xff0c;则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的&#xff0c;因为我们把其中一棵树的结点A、B、G的左右孩子互换后&#xff0c;就得到另外一棵树。而图2就不是同构的。 现…

在 Amazon EMR 上构建实时数据湖

前言 当公司业务发展遇到瓶颈时&#xff0c;业务分析师以及决策者们总会希望通过交叉分析大量的业务数据和用户行为数据&#xff0c;以解答“为什么利润会下滑&#xff1f;”“为什么库存周转变慢了&#xff1f;”等问题&#xff0c;最终整点“干货”出来从而促进业务发展。 …

Oracle 迁移 Hive 过程中遇到的问题总结

前言 最近一个小伙伴在做从 Oracle 到 Hive 的业务迁移工作,在迁移过程中属实遇到了一些坑,今天就来汇总一下这些坑,避免以后大家其他业务迁移的时候再出现类似的问题,即使出现了也可以拿过来进行对照解决。 问题1:Distinct window functions are not supported: count(…

图文教程:使用 Photoshop、3ds Max 和 After Effects 创建被风暴摧毁的小屋

推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 1. 在 Photoshop 中设置图像 步骤 1 打开 Photoshop。 打开 Photoshop 步骤 2 我已经将小屋的图像导入到Photoshop中以演示 影响。如果您愿意&#xff0c;可以使用其他图像。 图片导入 步骤 3 由于小…

解决 tensorflow 出现的 ImportError: Could not find the DLL(s) ‘msvcp140_1.dll‘. 问题

在安装完tensorflow库后出现 问题详述&#xff1a; ImportError: Could not find the DLL(s) msvcp140_1.dll. TensorFlow requires that these DLLs be installed in a directory that is named in your %PATH% environment variable. You may install these DLLs by downlo…

深入浅出指南:Netty开发【NIO核心组件】

目录 ​Netty开发【NIO核心组件】 1.NIO基础概念 2.NIO核心组件 2.1.Channel&&Buffer简介 2.2.Selector 服务器的多线程版本 服务器的线程池版本 服务器的selector版本 2.3.Buffer 0.ByteBuffer的正确使用流程 1.ByteBuffer类型简介 2.ByteBuffer核心属性说…