C语言入门(三)

判断与循环

if语句

if(条件成立)
{
	//do something
}
else
{
	//do something
}

级联if
if(条件成立)
{
	//do something
}
else if(条件成立)
{
	//do something
}
else
{
	//do something
}

嵌套if
if(条件成立)
{
	if(条件成立)
	{
		//do something
	}
	else
	{
	//do something
	}
}
else
{
	//do something
}

if中的条件是否成立就需要对数据作比较。
比较就是关于两个数据是否相等、谁大谁小的结论,这需要用到关系运算:对两个数据之间的关系的计算。
C语言提供了六个关系运算符:

  • “==” 相等
  • “!=” 不相等
  • “>” 大于
  • “>=” 大于或等于
  • “<” 小于
  • “<=” 小于或等于

注意其中有两个字符的运算符:==、>=和<=的两个字符必须紧紧连在一起,中间不能插入空格。
关系运算的结果是一个逻辑值,逻辑值只有两种可能的值:true(真,表示成立)或false(假,表示不成立)。当两个值的关系符合关系运算符的预期时,关系运算的结果为true,否则为false。

printf("%d\n",1==2);//0
printf("%d\n",1>2);//0
printf("%d\n",1<=2); //1

【注】:所有的关系运算符的优先级比算术运算的低,但比赋值运算的高
【注】:判断是否相等的==和!=的优先级比其他的低,而连续的关系运算是从左到右

while循环

while(循环条件)
{
	//do something
	//循环体内一定要有改变条件的机会
}

循环之前去判断条件是否成立,成立进入循环,不成立则继续向后执行,所以有可能循环一次也没有被执行。

do-while循环

do
{
	//do something
	//循环体内一定要有改变条件的机会
}while(循环条件);

在进入循环的时候不进行检查,执行完一轮循环体之后在进行检查循环条件是否满足,如果满足则进行下一轮的循环,如果不满足则结束循环。

for循环

for(初始动作;条件;每轮的动作)
{
	//do something
}

for循环像一个计数循环,设定一个计数器并初始化,然后在计数器到达某值之前,重复执行循环体,每次执行一轮循环体就会对计数器进行调整,例+1或-1

  • for中的每一个表达式都是可以省略的
  • for(;条件;) == while(条件)

三种循环使用时的选择

  • 如果有固定的次数,选for
  • 如果必须执行一次,选do-while
  • 其他情况用while

进一步的判断和循环

bool类型
头文件是#include <stdbool.h>
bool只有true和false。

逻辑运算

  • 逻辑运算是对逻辑量的运算,结果只有0和1
  • 逻辑量是关系运算或逻辑运算的结果
运算符描述示例结果巧记
逻辑非!a如果a是true,结果就是false,如果a是false,结果就是ture
&&逻辑非a&&b如果a和b都是true,结果就是true,否则为false全真为真,否则为假
||逻辑或a||b如果a和b有一个true,结果就是true,两个都是false,结果为false有真则真,全假为假
  • 优先级:! > && > ||
  • 对于&&,左边结果是false时就不做右边了
  • 对于||,左边是true时就不做右边了
例如:
表达[4,6]	x>4 && x<6
c是否是大写字母		c>='A' && c<='Z'
099意外的数		a<0 || a>99
!a < 20		根据优先级先算!a,如果a的值是多少,结果只有01,任何值都成立

优先级

优先级运算符结合性
1()从左到右
2! + - ++ –从右到左(单目+ -)
3* / %从左到右
4+ -从左到右
5< <= > >=从左到右
6== !=从左到右
7&&从左到右
8||从左到右
9= += -= *= /= %=从右到左

条件运算符

a = (a > 5) ? a-2 : a+1;

==>等价于

if(a>5)
	a = a - 2;
else
	a = a + 1;
  • 条件运算符的优先级高于赋值运算符,但低于其他运算符,是自右向左结合的

switch-case

switch(常量表达式)
{
	case 常量:
		语句
		...
		break;
	case 常量:
		语句
		...
		break;
	default:
		语句
		...
}
  • 控制表达式的只能是整数
  • break表示直接跳出switch内部

FAQ

Q:为什么强调if和else后面要用{}

强调语句的执行

Q:/* */会被替换为什么?

在把代码翻译成汇编代码前,还有一个步骤叫预处理。在预处理当中会把注释代码删掉。
一条语句前的注释 替换成等长的空格;
一条语句中的注释 替换成一个空格;
一条语句后的注释 直接删除

Q:为什么说for循环很怪?

因为for循环不符合人类的语言逻辑,并不易于理解,因此就造成了第一次接触语言的人难以理解for循环所表达的意思。而现代程序设计理念更强调与人类语言的逻辑统一性而非编译逻辑。因此在新兴的python语言中去除了C中的for循环逻辑。C 的整体设计过于面向机器指令,C 风格的 for 语句,在面对应用开发时,细节过多,抽象不足,部分场景下易出错,易导致开发成本上升,易导致可读性差。对于精心设计的、带有抽象设计的 for 语句(包括 foreach 等),可以满足几乎所有 C 语言 for 语句的功能,并且有更好的体验、更好的可读性、更少的出错机会,甚至促使我们写出更好的性能。

Q:分段函数可以用switch-case吗?划算吗?

分段函数可以用switch-case,但不划算,因为switch需要整数型表达式,且case需要常数。

内容来自中国大学MOOC,个人学习笔记总结。整理不易,欢迎支持,下期见!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晶小生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值