条件语句与循环语句

关系运算符与逻辑运算符

关系运算符

在这里插入图片描述

逻辑运算符

&&与:当2个操作数都为真结果为真
||或:两个操作数至少一个为真结果为真
非:操作数为真结果为假

短路特性

  • 表达式的值可先有计算的左操作数的值推导出来,就不会计算右操作数的值
  • 可以使除0运算不发生

优先级

  • 逻辑非 > 算数运算符 > 关系运算符 > 逻辑与 > 逻辑或
  • 也可以通过添加小括号提高优先级

条件语句

单分支选择结构(if语句)

  • 结构
if(表达式P)
	语句A;

双分支结构(if-else)

if(表达式P)
{
	语句A;
}
else
{
	语句B;
}
  • 用花括号内可以表达多个语句

多分支结构(else-if)

if(表达式1)
{
	语句A;
}
else if(表达式2)
{
	语句B;
}
else
{
	语句C;
}

条件表达式

  • 表达式1?表达式2:表达式3;
  • 含义:表达式1为真时,输出表达式2的值,否则输出表达式3的值

开关语句

switch语句

switch(表达式)//表达式是int型或char型
{
	case 常量1:
	语句序列1break;//break跳出switch语句结构
	case 常量2:
	语句序列2break;
	......
	default://上面case都不能执行时,执行这个语句
	语句序列n;
}

数值溢出和损失问题

数值溢出

  • 自动类型转换会发生的问题
  • 取值范围大的类型转换成取值范围小的类型发生数值溢出
  • 类型表数范围有限
整数的数值溢出

上溢出

  • 一个数值运算结>类型能表示的最大数
  • 进位超过最高位发生进位丢失
  • 进位达到最高位改变符号位
浮点数的数值溢出

上溢出

  • 浮点数运算结果>类型能表示的最大数

下溢出

  • 浮点数运算结构<类型能表示的最小数

精度损失

  • 高精度向低精度转换时发生精度损失
  • float到int(丢失小数部分)
  • 二进制小数与十进制小数之间很多不是一一对应的关系
  • float能表示的有效数字为7位,double能表示的有效数字为16位

循环控制

计数控制循环

for语句

  • 主要用于计数循环
for(表达式1;表达式2;表达式3)//表达式1初始条件,表达式2控制条件,表达式3转换条件
{
	语句1;
	语句n;
}
//执行顺序:表达式1,表达式2,语句,表达式3

逗号运算符

表达式1,表达式2,…,表达式n

for(表达式1,表达式n;表达式2;表达式3,表达式m)//逗号表达式主要用在循环语句中,同时对多个变量赋初值
{
	语句1;
	语句n;
}

while和do while语句

while语句

表达式1//表达式1循环初始条件
while(表达式2)//表达式2循环控制条件
{
	语句;
	表达式3//表达式3循环转换条件
}
//执行顺序:从上往下
  • 当型循环
  • 循环次数已知

do while语句

表达式1//表达式1循环初始条件
	do{
		语句;
		表达式3//表达式3循环转换条件
	}while(表达式2)//表达式2循环控制条件,表达式成立时继续循环
  • 循环至少执行一次
  • 直到型循环
  • 循环次数可以不已知

选择循环语句一般原则

循环次数已知for语句
循环次数未知,循环次数由一个给定条件控制while语句和do-while语句
循环体要执行一次do-while语句

递推

  1. 正向递推
  2. 反向逆推

穷举法

  • 列举所有的可能,逐一试探

  • 根据问题的部分已知条件预估解的范围

  • 直到找到满足已知条件的解为止

Bug

程序常见错误

  1. 编译错误:语法错误
  2. 链接错误:缺少包含文件等
  3. 运行时错误:运行结果出错

调试方法

  1. 逆向推理:定位大致范围
  2. 分治排除:用注释切掉一些代码,调试无误打开
  3. 缩减输入:缩减输入数据

退出循环语句函数

goto语句

  1. 无条件转向语句
  2. 跳出多重循环
  3. 跳出共同的出口位置
  4. 不要使用过多的gotu语句标标号
  5. 题目:韩信点兵求至少多少兵
#include <stdio.h>
int main()
{
	int x;
	for(x=1;;x++)
	{
		if(x%5==1 && x%6==5 && x%7==4 && x%11==10)
		{
			printf("x=%d\n",x );
			goto END;//无条件转向语句
		}
	}
	END: ;//标识(标识符)后面必须有语句,哪怕是空语句
	return 0;
}

break语句

  • 可用于跳出循环语句
  • 跳出到紧接循环语句后的第一条语句
#include <stdio.h>
int main()
{
	int x;
	for(x=1;;x++)
	{
		if(x%5==1 && x%6==5 && x%7==4 && x%11==10)
		{
			printf("x=%d\n",x );
			break;
		}
	}
	return 0;
}

exit()函数

  • 开头加入#include<stdlib.h>

  • 终止整个程序运行,参数为0时,表程序正常退出;非0时表示非正常退出

    #include <stdio.h>
    #include<stdlib.h>
    int main()
    {
    	int x;
    	for(x=1;;x++)
    	{
    		if(x%5==1 && x%6==5 && x%7==4 && x%11==10)
    		{
    			printf("x=%d\n",x );
    			exit(0);
    		}
    	}
    	return 0;
    }
    

continue语句

  • 继续循环这个语句
  • 但是他要跳过continue后面的语句才执行循环,直到循环截止
#include <stdio.h>
int main()
{
	int i,n;
	for(i=1;i<5;i++)
	{
		printf("Please enter n:\n");
		scanf("%d",&n);
		if(n<0)
		{
			continue;//满足条件继续循环,换成break可对比
			printf("n=%d\n",n );
		}
	}
	printf("Program is over!\n");
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值