第三章 选择与循环

这篇具有很好参考价值的文章主要介绍了第三章 选择与循环。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

常用的运算符优先级:

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

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

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

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;
}

练习二

Description:利用while或者for循环计算n!的值。提示:n!=123…*n
Input:一个正整数n,1≤n≤10。(再次强调,OJ中的输入范围这些不用自己在代码中进行实现,除非题目明确指明需要在代码中实现限制输入范围。)
Output:n!的值。

int main() {
	int n, acc;
	acc = 1;//存阶乘值n!
	scanf("%d", &n);//读取输入
	for (int i = 1; i <= n; i++)
	{
		acc = i * acc;
	}
	printf("%d\n", acc);
	return 0;

	/*
	用while方式实现
	int n, acc = 1, i = 1;
	scanf("%d", &n);
	while (i<=n)
	{
		acc *= i;
		i++;
	}
	printf("%d\n", acc);
	*/
}

练习三

这个题用到的穷举的思想很重要。

Description:

某人想将手中的一张面值100元的人民币换成10元、5元、2元和1元面值的票子。要求换正好40张,且每种票子至少一张。问:有几种换法?

穷举法(枚举法)

用枚举法即穷举法。将所有的情况穷举一遍,当出现某一种情况恰好符号条件时,那么这种情况就成立。[在初试或复试中如果想不到其他方法就用穷举法,所以穷举法很重要。]

//穷举法(暴力循环):分别列出每一种情况,看哪种情况符号条件。
int main() {
	int a, b, c, d, e = 0;//a,b,c,d分别表示10元,5元,2元,1元分别有多少张
	for (a = 1; a <= 40; a++)
	{
		for (b = 1; b <= 40; b++)
		{
			for (c = 1; c <= 40; c++)
			{
				for (d = 1; d <= 40; d++)
				{
					if (10 * a + 5 * b + 2 * c + d == 100 && a + b + c + d == 40) {
						e++;//e代表的是有多少种换法
					}
				}
			}
		}
	}
	printf("%d\n", e);
    
	/*
	对上面的代码再进行优化:总面值为100,那么10元的不可能超过10张,又每种钞票至少有一张,
	那么10元的事实上是不能超过7张的。同理总面值为100,那么5元的不可能超过20张,又每种钞票
	至少有一张,那么5元的事实上是不能超过17张的。2元的不可能超过37张,1元的不可能超过37张。
	这样处理之后可以减少循环的次数。
	int a, b, c, d, e = 0;//a,b,c,d分别表示10元,5元,2元,1元分别有多少张
	for (a = 1; a <= 7; a++)
	{
		for (b = 1; b <= 17; b++)
		{
			for (c = 1; c <= 37; c++)
			{
				for (d = 1; d <= 37; d++)
				{
					if (10 * a + 5 * b + 2 * c + d == 100 && a + b + c + d == 40) {
						e++;//e代表的是有多少种换法
					}
				}
			}
		}
	}
	printf("%d\n", e);
	*/
}

结果:共有34种。

提醒:在输出输出中不要加入额外的内容,前面已经提高,OJ输入输出的匹配是很严格的,一点不符合就不能AC。文章来源地址https://www.toymoban.com/news/detail-490170.html

到了这里,关于第三章 选择与循环的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序 第三章 “音乐”小程序项目

    已经更新,可以在手机上进行调试 图片利用图床生成在线链接 网易云音乐MP3地址为http://music.163.com/song/media/outer/url?id= ? .mp3 掌握 swiper 组件的使用 掌握 scroll-view 组件的使用 掌握 image 组件的使用 掌握 slider 组件的使用 掌握 音频API 的使用 具体使用请看微信开发文档 页面结

    2024年02月09日
    浏览(38)
  • 微信小程序第三章(页面布局)

     了解盒子模型的基本原理  掌握浮动与定位  熟练掌握flex布局方式 微信小程序的视图层由WXML和WXSS组成。其中,WXSS(WeiXin StyleSheets)是基于CSS拓展的样式语言,用于描述 WXML的组成    一边框(bomder) 样式,决定WXML的组件如何显示wxss具有    外边距    CSS的大部分特性,因

    2024年03月21日
    浏览(37)
  • 第三章:微信小程序页面布局

    微信小程序的视图层由WXML和WXSS组成,其中,WXSS是基于CSS拓展的样式语言,用于描述WXML的组成样式,决定WXML的组件如何显示。 盒子模型就是我们在页面设计中经常用到的一种思维模型。一个独立的盒子模型由内容、内边距、边框和外边距4个部分组成。 此外,对padding、bor

    2024年04月09日
    浏览(35)
  • 第三章.微信小程序页面布局

    1.盒子模型 微信小程序的视图层由WXML和WXSS组成. WXSS(具有css的大部分特性)是基于CSS拓展的样式语言 ,用于描述WXML的组成样式,决定WXML的组件如何显示. 盒子模型结构 : 盒子模型元素: 2.块级元素与行内元素 块级元素 块级元素默认占一行高度,一行内通常只有一个块级元素(浮

    2024年04月15日
    浏览(36)
  • 第三章-Java的基本程序设计结构

      3.1一个简单的Java语言程序  这是程序虽然很简单,但是所有的Java程序都具有这种结构,因此还是值得花一些时间来研究的。首先,Java区分大小写。如果出现了大小写拼写错误(例如:将main拼写成Main),程序将无法运行。 下面逐行的查看这段源代码。pubilc称为访问修

    2024年02月03日
    浏览(40)
  • 移动开发技术_微信小程序_第三章测试

    作答记录 1 【单选题】下列关于小程序生命周期函数说法不正确的是( )。(5.0分) A、 分为应用生命周期函数和页面生命周期函数两种 B、 在onLoad生命周期函数中可以获得地址中的参数 C、 onLaunch生命周期函数是小程序初始化完成时触发 D、 onLaunch 生命周期函数会被重复执

    2024年02月09日
    浏览(27)
  • 【全解析 | PTA】浙大版《Python 程序设计》题目集-第三章

    一、判断题 1.\\\'age\\\'+23不是正确的表达式。T 2 . 列表可以用find()函数来搜索数据是否在列表中。F         find()函数是字符串处理函数;Python find() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果包含子

    2024年04月15日
    浏览(48)
  • 南京邮电大学程序设计类教辅平台c++第三章作业编程题答案

    南京邮电大学程序设计类教辅平台c++第三章作业编程题答案 1.5.1构建一个类,含有三个数据成员,分别表示立方体的三条边长;含有构造函数(默认边长为3,2,1)和一个用来计算立方体体积的成员函数Compute()。 main()函数如下,请复制使用 代码: 2.设计一个Car类,它的数

    2023年04月20日
    浏览(33)
  • 程序员的电脑选择推荐

    说起笔记本电脑,MacBook是绕不过去的部分。毕竟其优点十分明显:做工优良、交互流畅、待机时间长、独占应用。 但是,其缺点也十分突出:兼容性和偏昂贵的价格。 而且,在苹果的生态圈内,MacBook笔记本和Windows笔记本的比较维度也不一样。因此,我们单独先拿出来说。

    2024年02月09日
    浏览(39)
  • 【话题】程序员如何选择职业赛道?

    程序员的职业赛道确实多样化,每个方向都有其独特的魅力和挑战。以下是一些主流的编程职业赛道,以及它们的特点和所需的技能: 特点:负责网站的外观和用户交互。 技能:HTML, CSS, JavaScript, React, Angular, Vue等。 美丽花园:创造性地设计用户界面,实现流畅的用户体验。

    2024年03月08日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包