C语言P4

学习语言上的分享:如何看懂一个程序?
1.流程
2.每个语句的功能
3.试数
对一些小算法的程序
尝试自己去编程解决它,大部分人解决不了。
若解决不了,就自己看答案。
关键要把答案看懂,要花很大精力,是我们学习的重点。
看懂之后尝试自己去修改程序,并且知道修改后程序的不同输出结果的含义。
照着答案去敲,调试错误。
不看答案,自己独立去敲。
如果程序实在无法理解,就把它背会。
18、流程控制
1.什么是流程控制

2.流程控制的分类
1. 顺序
2. 选择
定义
某些代码可能执行,也可能不执行,有选择的执行某些代码
分类
if
1.if最简单的用法
格式:
if(表达式)
语句;
功能:如果表达式为真,执行语句
如果表达式为假,则不执行语句

2.if的范围问题
1.if(表达式)
语句A
语句B
if语法默认只能执行一个语句或不执行,if无法控制语句B的执行或不执行,即语句B一定执行
* 2.if(表达式)
* {
* 语句A
* 语句B
* }
* 此时if可以控制语句A和语句B
* 由此可见:if默认情况下只能控制一个语句,要想控制多个语句必须用{}括起来
3.if…else…的用法
4.if…else…if…else…的用法
格式:if(1)
A;
if else(2)
B;
if else (3)
C;
else
D;
如果1成立输入A,否则输入B,若12不成立则输入C,若123不成立则输入C

5.C语言对真假的处理
非零就是真(1),零就是假(0)
6.if举例—求分数的等级
练习已完成
7if的常见问题解析
1.空语句的问题
if(3>2);相当于if(3>2)
;//这是一个空语句,无实际含义
2.if(表达式A)
A;
else(表达式B)
B; 正确
if(表达式A);
A;
else(表达式B)
B; 错误
3.if(表达式1)
A;
else if(表达式2)
B;
else if(表达式3)
C;
else
D;
即便表达式1,2成立也只执行A的语句(就近为原则)
4
.if(表达式1)
A;
else if(表达式2)
B;
else if(表达式3)
C;
这样写语法不会出错,但是逻辑上有漏洞

5 if(表达式1)
A;
else if(表达式2)
B;
else if(表达式3)
C;
else (表达式4)
D;
正确做法是:要么去掉表达式4要么在else后面加if(表达式必须带有else if,只有else会出错)

6 if(表达式1)
A;
else if(表达式2)
B;
else if(表达式3)
C;
else (表达式4);
D;
等价于else
(表达式4 );
D;
语法不会出错,逻辑错误
**
switch**
3.循环
定义:某些代码被重复执行
分类
for
1.格式:
for(1;2;3)
语句A;
执行步骤12A3 2A3 2A3 2A3以此循环直至2不成立而结束
2.执行的流程(重点)
单个for循环的使用
多个for循环的嵌套使用
一 for(1;2;3)/1
for(4;5;6)/2
A;/3
B;/4
整体是两个语句,123是一个语句,4是第二个语句
二 for(1;2;3)
for(4;5;6)
{ A;
B;
}
整体是一个语句
for(7; 8; 9)
三 for(1;2;3)
{
A;
B;
for(4; 5; 6)
C;
}
整体还是一个语句
3.范围问题:括号的用处(看代码注释)
4.举例子:1+2+3…+100
1+1/2+1/3…+1/100

强制类型转化
格式:(数据类型)(表达式)
功能:把表达式的值转化为前面所执行的数据类型
例子:(int)(4.5+2.2) 最终值是6
(float)(5) 最终值是5.000000

浮点数的存储所带来的问题
float和double都不能保证可以精确的存储一个小数
举例:有一个浮点型变量x,如何判断x的值是否是零
if(|x-0.0001|<0.0001)
是零
else
不是零

为什么循环中更新的变量不能定义成浮点型
while
1.执行顺序
格式:while(表达式)
语句;

2.与for的相互比较
for和while可以相互转换,但是for的逻辑性更强,推荐使用for
for(1;2;3)
语句A;
等价于
1;
while(2)
{
A;
3;
}

3.举例
从键盘输入一个数字,如果该数字是回文数,则返回YES,否则返回NO。
回文数:正着写和反着写都一样 如121 12321

4.什么时候用while,什么时候用for
没法说。

do…while表达
do
{

}while(表达式)

它不等价于while和for,它是先执行再判断和另外两者不同
主要用于人机交互。例:一元二次方程
switch:看懂电梯程序,用法如下。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

		break和continue
		break如果用于循环是用来终止循环
		break如果用于switch,则是用于终止switch
		break不能直接用于if,除非if属于循环内部的一个子句
		例子:
		**for(i=0;i<3;++i)
{
	if(3>2)
		break;//break虽然是if内部的语句
			printf("嘿嘿!\n");//永远不会输出
}**
	在多层循环中,break只能终止于距离它最近的循环
	例子:
		**for (i = 0; i < 3; ++i)**
**{
	for (j = 1; j < 4; ++j)
		break;//break只能终止距离它最近的循环
			printf("同志们好。!\n");
}**
 **在多层switch嵌套中,break只能终止距离它最近的switch**
 int x = 1, y = 0, a = 0, b = 0;
switch (x)
{
case 1:
	switch (y)//第一个switch
	{
	case 0:
		a++;
		break;//终止的是第二个switch
	case 1:
		b++;
		break;
	}
	b = 100;
	break;//终止的是第一个switch
case 2:
	a++;
	b++;
	break;
}
printf("a=%d,b=%d\n",a,b);
		**输出结果为a=1,b=100.**
	**continue用法**
	用于跳过本次循环余下的语句,转去判断是否需要执行下次循环
	例子:
	1.for(1,2,3)
		{
		A;
		B
		continue;//如果执行完该语句后,会执行3,而CD都不执行
		c;
		d;
		}
	2. while(表达式)
		{
		A;
		B
		continue;//如果执行完该语句后,会执行表达式,而CD都不执行
		c;
		d;
		}

进制内容补充(P1)
1.什么叫N进制?
逢N进一
2.把R进制转化成十进制
3.把十进制转化成R进制
4.不同进制所代表的数值之间的关系
十进制的3981转化成十六进制是F8D,
也就是说它们所代表的本质就是一个数值。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值