第三章 选择与循环

news2024/10/6 2:24:51

程序员必备技能(思想):增量编写法。每写一部分代码要及时运行看结果是否正确,对于复杂程序很重要。

常用的运算符优先级:

逻辑非 !> 算术运算符 > 关系运算符 > && > || > 赋值运算符

  • 单目运算符 逻辑非 !
  • 算术运算符 +、-、×、/、%
  • 关系运算符 >、<、>=、<=、==、!=
  • 逻辑运算符 &&、||

由于初试中大题极大概率会用到算术运算符、关系运算符和逻辑运算符,因此三者的优先级顺序必须牢记。算术运算符的优先级高于关系运算符、关系运算符的优先级高于逻辑与和逻辑或运算符,相同优先级的运算符从左至右进行结合

if语句

选择结构程序中 if( 表达式 ) 括号中的表达式99%的情况下都是填关系表达式或逻辑表达式。剩下1%的情况是直接放入一个值,如 if(i),如果 i 非零则为真,条件满足,进入if语句;如果 i 为0则为假,条件不满足,不会进入if语句[C语言中0代表假,非零代表是真];类似的也可以写 if( i + 3 )。

一个表达式中优先级最低的运算符是什么,则该表达式就是该运算符表达式。如5>3&&8<4-!0 其中优先级最低的是逻辑与运算符,所以这是逻辑表达式。该表达式的计算过程如下图:

在这里插入图片描述

不是说逻辑非 ! 的优先级是这里最高的吗?为什么还先算5>3?

原因在于这是一个短路运算。短路运算一般有:&&、||,其原理是:当有多个表达式时,左边的表达式值可以确定结果时,就不再继续运算右边的表达式的值。所以需要先算左边表达式的值,左边表达式值为1,又这是逻辑与&&运算符,确定不了最终结果,所以需要继续计算右边的表达式。【注:短路运算初试不考,故了解即可】

判断闰年:闰年指能被400整除或者能被4整除但不能被100整除。具体的表达式为year%4==0&&year%100!=0||year%400==0,也可以写成(year%4==0&&year%100!=0)||year%400==0,后者虽然可行,但括号显然是多余的,因为逻辑与的优先级是比逻辑或的优先级高。

练习使用if语句:

int main(){
	int i;
	while (scanf("%d", &i) != EOF)
	{
		if (i > 0) //在if的括号后面不可以加"分号 ; ",这会造成表达式无论是真还是假,都会执行后面的语句
		{
			printf("i is bigger than 0\n");
		}else{
			printf("i is not bigger than 0\n");
		}
	}
	
}

if语句和else语句也可以多个同时使用(多分支语句),如图所示。

在这里插入图片描述

但是无论有多少各if语句或else if语句,程序都只会执行其中的一个语句

练习多分支语句:

int main(){
	int number;
	float cost;
	scanf("%d", &number);
	if (number > 500)
	{
		cost = 0.15;
	}else if (number > 300){
        //程序从上至下依次执行,当执行到这里时就说明number已经<=500了,所以不必再判断number<=500
		cost = 0.10;
	}else if (number > 100) {
		cost = 0.075;
	}else {
		cost = 0;
	}

	//%0.2f表示小数点后保留两位
	printf("电费单价cost=%0.2f\n", cost);
}

if语句也支持多层嵌套,在if语句中又包含一个或多个if语句称为if语句的嵌套,如下图所示:

在这里插入图片描述

if语句嵌套练习:

int main(){
	int i;
	if (i > 1)
		if (i < 10)
			printf("i > 1 and i < 10\n");
		else
			printf("no,they are not\n");
	
	/*
	“就近原则”:else子句从属于最靠近它的不完整的if语句。上例中的else子句从属于第二个if语句,
	如果想让它从属于第一个if语句,可以用一个花括号把第二个if语句包含在一个单独的代码块内,	如下所示

	在编写代码时应遵守规范,都加上{}
	*/

	if (i > 1){
		if (i < 10)
			printf("i > 1 and i < 10\n");
	}else
		printf("no,they are not\n");
}

while循环

while语句用来实现“当型”循环结构,其一般形式为“while(表达式) 语句”,当表达式的值非0时(即条件为真时),执行while语句中的内嵌语句。其特点是:先判断表达式,后执行语句

在这里插入图片描述

当控制台(黑窗口)卡住后,只有两种情况,一种是卡在scanf了(这种情况下键盘输入内容是可以输入进去的);另一种情况是死循环,死循环在控制台(黑窗口)中是输入不进去内容的。

while循环练习:

//从1加到100
int main(){
	int i = 1;
	int total = 0;//存储最终的和
	while (i <= 100)//while后面不能加“分号;”,否则会死循环
	{
		total = total + i;
		i++;
	}
	printf("total=%d\n", total);
}

while循环出现死循环的常见的原因有:

  1. while( ) 后面加了分号。
  2. while语句体内没有让表达式趋近于假的操作。(如在上面的代码中将i++去掉即是这种情况,while语句体内没有让表达式趋近于假的操作,所以陷入死循环。亦或者判断条件错写为i >= 0,则也会陷入死循环)。

for循环

for循环的一般形式为:

for(表达式1;表达式2;表达式3) 语句;

在这里插入图片描述

for循环练习:

//从1加到100
int main(){
	int i, total;//total存储最终的和

	//for语句中只能有两个分号 
	for (i = 1, total = 0; i <= 100; i++){
		total = total + i;
	}

	printf("total=%d\n", total);
}

continue

continue的作用提前结束本轮循环,直接开始下一轮循环。

在for循环中练习continue:

//从1到100之间奇数求和
int main(){
	int i, total;//total存储最终的和

	//for语句中只能有两个分号 
	for (i = 1, total = 0; i <= 100; i++){

		if (i % 2 == 0)//i是偶数
		{
			continue;//continue的作用提前结束本轮循环,直接开始下一轮循环
		}
		total = total + i;
	}

	printf("total=%d\n", total);
}

在while循环中练习continue:

//从1到100之间奇数求和
int main() {
	int i = 0;
	int total = 0;//存储最终的和
	while (i <= 100)//while后面不能加“分号;”,否则会死循环
	{
		if (i % 2 == 0)
		{
			i++;
			continue;
		}
		total = total + i;
		i++;
	}
	printf("total=%d\n", total);
}

break

break语句的作用是结束整个循环过程,不再判断执行循环的条件是否成立。

break练习:

//从1加100,当和大于2000,就终止循环
int main() {
	int i, total;//total存储最终的和

	//for语句中只能有两个分号 
	for (i = 1, total = 0; i <= 100; i++) {

		if (total > 2000)
		{
			break;//当求和大于2000,就终止循环
		}
		total = total + i;
	}

	printf("total=%d,i=%d\n", total,i);
}

作业练习:

Description:

输入一个整型数,判断是否是对称数,如果是,输出yes,否则输出no,不用考虑这个整型数过大,int类型存不下,不用考虑负值;

例如 12321是对称数,输出yes,124421是对称数,输出yes,1231不是对称数,输出no

[分析]:把最初输入的整型数a,反过来后再存到另外一个整型数b中,判断a和b是否相等,如果相等就输出yes,不相等输出no。

实现整型数反转的方法:

int main() {
    int a;
	scanf("%d", &a);
	printf("a=%d\n", a);

	/*
	如果输入的是1234,那么现在将让输出4321,该如何操作?
	思路如下:1234%10=4,余数是4,商是123;得到的商再重复%4,余数得到3,商是12,重复上述步骤;
	当商为0时,跳出循环.(最后是1%10,余数是1,商是0,此时可以结束循环了)。
	*/

	//对于循环结束条件不知道如何写,可以先写循环体,等循环体写好了,循环结束条件也就大概知道了
	while (a!=0) //当a不等于0时就可以进入循环
	{
		printf("%d", a % 10);
		a = a / 10;
	}
}

完整的代码实现:

int main() {
	int a,b,c,tmp;
	scanf("%d", &a);
	b = 0;//将输入的整型数a进行反转之后存到整型数b中
	c = a;//将输入的整型数a暂存到整型数c中

	/*
	while (a != 0)也可以用while(a)替代,当循环判断条件是"某个变量不是0时"都可以用"直接填该变量"的方法
	进行替代,因为在C语言中任何非0值都是真,只有0为假。
	*/

	while (a != 0) //当a不等于0时就可以进入循环。  
	{
		tmp = a % 10;
		b = b * 10 + tmp;//将a进行反转之后存到b中需要借助中间变量tmp。可以借助例子 输入1234,进行反转将4321赋值给b
		a = a / 10;
	}
	if (c == b)
	{
		printf("yes\n");
	}
	else {
		printf("no\n");
	}
	return 0;
}

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

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

相关文章

chatgpt赋能python:Python如何随机生成26个字母

Python如何随机生成26个字母 Python是一种流行的编程语言&#xff0c;被广泛用于数据分析、人工智能和Web开发等领域。 Python中有很多库可以用于随机生成字符&#xff0c;包括Python内置的random库和第三方库string。 在本文中&#xff0c;我们将介绍如何使用这些库在Python中…

《Java黑皮书基础篇第10版》 第16章【笔记】

第十六章 JavaFX UI 组件和多媒体 16.1 引言 16.2 Labeled和Label在这里插入图片描述 标签(label)是一个显示小段文字&#xff0c;一个节点或同时显示两者的区域。它经常用来给其他组件(通常为文本域)做标签&#xff0c;Label类继承自Labeled抽象类 16.3 - 16.4 按钮和复选框…

目标检测YOLO实战应用案例100讲-基于深度学习的遥感目标检测算法FPGA部署实现研究

基于深度学习的目标检测网络剪枝及FPGA部署 随着科技的发展,人工智能的发展正在促进计算机视觉的智能化广泛应用。如手 机上的语音识别可以将声音转化成文字、门禁识别人脸通行、美颜相机对人像加上跟 踪特效等,这些都是人工智能在我们生活中的应用。 人工智能对图像领域…

【Docker】Linux安装步骤

目录 下载关于Docker的依赖环境安装Docker启动&#xff0c;并设置为开机自动启动&#xff0c;测试开启远程API访问端口登录harbor仓库 下载关于Docker的依赖环境 输入以下命令安装依赖环境 回车 yum -y install yum-utils device-mapper-persistent-datalvm2 安装Docker 下…

河道水面垃圾识别检测算法 yolov5

河道水面垃圾识别检测系统采用yolov5忘了模型计算机视觉技术&#xff0c;河道水面垃圾识别检测算法通过在河道上安装摄像头&#xff0c;对水面垃圾进行实时监测自动识别并记录水面垃圾&#xff0c;及时通知环保部门进行处理。近几年来&#xff0c;目标检测算法取得了很大的突破…

树莓派 4B 多串口配置

0. 实验准备以及原理 0.1 实验准备 安装树莓派官方系统的树莓派 4B&#xff0c;有 python 环境&#xff0c;安装了 serial 库 杜邦线若干 屏幕或者可以使用 VNC 进入到树莓派的图形界面 0.2 原理 树莓派 4B 有 UART0&#xff08;PL011&#xff09;、UART1&#xff08;mini …

ldsc python程序安装以及测试

教程参考&#xff1a; https://zhuanlan.zhihu.com/p/379628546https://github.com/bulik/ldsc 1. 软件安装 1.1 windows安装教程 首先配置&#xff1a; anaconda&#xff0c;为了需要conda环境git&#xff0c;为了下载github中的ldsc程序 打开windows电脑中的promote&am…

chatgpt赋能python:Python如何隐藏请求IP地址提高SEO效果

Python如何隐藏请求IP地址提高SEO效果 引言 在进行网站优化的过程当中&#xff0c;隐藏请求的IP地址是一个重要的环节。这个技巧不仅能够提高SEO的效果&#xff0c;还能够保护我们的网络安全&#xff0c;防止遭受黑客攻击。本文将介绍Python如何隐藏请求IP地址&#xff0c;以…

Spring应用启动分析优化

最近在搞应用的启动优化&#xff0c;参考一些可以显著提高 Java 启动速度方法和spring-boot-startup-report实现了此项目&#xff0c;Spring Startup Ananlyzer 采集Spring应用启动过程数据&#xff0c;生成交互式分析报告(HTML)&#xff0c;用于分析Spring应用启动卡点&#x…

让数据不再裸奔:学习使用AES加解密算法

目录 1. application.yml文件配置 2. AES加解密工具类 3. AES消息秘钥、AES秘钥初始向量、转字节数组工具类 4. AES加解密测试 我们为什么要用AES算法来进行加解密&#xff1f; AES&#xff08;Advanced Encryption Standard&#xff09;&#xff0c;又称高级加密标准&am…

C语言之生成随机数方法(C代码实现猜数字游戏)

C语言之生成随机数方法&#xff08;C代码实现猜数字游戏&#xff09; 首先先把猜数字游戏的代码给大家暂时出来&#xff0c;然后我们在根据代码的步骤一步一步的推导 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <tim…

【ChatGPT】一个凭借两百多年历史的公式崛起的巨星

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学本科在读&#xff0c;同时任汉硕云&#xff08;广东&#xff09;科技有限公司ABAP开发顾问。在学习工作中&#xff0c;我通常使用偏后端的开发语言A…

一分钟学一个 Linux 命令 - ps

前言 大家好&#xff0c;我是 god23bin。欢迎来到《一分钟学一个 Linux 命令》系列&#xff0c;每天只需一分钟&#xff0c;记住一个 Linux 命令不成问题。今天要说的是 ps 命令。 什么是 ps 命令&#xff1f; ps 的英文全称是 process status&#xff0c;意思是进程状态。 …

Servlet执行原理和API详解---【创建Servlet项目】

目录 一、Servlet 是什么&#xff1f; 主要工作&#xff1a; 第一个Servlet项目&#xff1a; 编写代码 打包程序 一、Servlet 是什么&#xff1f; Servlet 是一款基于HTTP协议&#xff0c;用来开发Java Web&#xff0c;运行在Tomcat里面的里的框架技术。 一种实现动态页面…

chatgpt赋能python:Python创建文件

Python创建文件 Python是一种高级编程语言&#xff0c;广泛应用于各种领域&#xff0c;尤其在数据分析、机器学习和人工智能方面被广泛使用。在Python中&#xff0c;创建文件是一项基本任务&#xff0c;本文将介绍如何使用Python创建文件。 创建一个空文件 在Python中&#…

3.CSS 的背景

通过CSS背景属性&#xff0c;可以给页面元素添加背景样式。 背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等。 3.1背景颜色 background-color属性定义了元素的背景颜色 background-color:颜色值;一般情况下元素背景颜色默认值是transparent(透…

【实战】 React 与 Hook 应用:实现项目列表 —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(二)

文章目录 一、项目起航&#xff1a;项目初始化与配置二、React 与 Hook 应用&#xff1a;实现项目列表1.新建文件2.状态提升3.新建utils4.Custom Hook 学习内容来源&#xff1a;React React Hook TS 最佳实践-慕课网 相对原教程&#xff0c;我在学习开始时&#xff08;2023.0…

记录好项目D8

记录好项目 你好呀&#xff0c;这里是我专门记录一下从某些地方收集起来的项目&#xff0c;对项目修改&#xff0c;进行添砖加瓦&#xff0c;变成自己的闪亮项目。修修补补也可以成为毕设哦 本次的项目是超市管理系统 技术栈&#xff1a;springbootjavamysqlthyemleafshiro …

数据安全--24--数据安全管理之API管理

本博客地址&#xff1a;https://security.blog.csdn.net/article/details/131274853 一、API管理概述 API是指应用程序编程接口&#xff0c;它的存在主要是为了提高系统各组成单元的内聚性&#xff0c;降低组成单元之间的耦合程度&#xff08;相互依赖程度&#xff09;&#…

[元带你学: eMMC协议详解 18] eMMC的后台操作(Background Operations)

依JEDEC eMMC 5.1及经验辛苦整理&#xff0c;付费内容&#xff0c;禁止转载。 所在专栏 《元带你学: eMMC协议详解》 内容摘要 全文 1800 字&#xff0c; 主要内容 1、后台操作/前台操作区别&#xff1f; 2、如何进行手动后台操作&#xff1f; 3、自动后台启动和停止方法&a…