问题一:什么是流程控制:程序代码执行的顺序
问题二:流程控制的分类:顺序执行、选择执行、循环执行
问题三:流程控制为什么非常重要:若流程控制无法掌握,无法看懂程序
自上而下,一步一步的运行 第一部分中所有代码均为顺序执行
定义:某些代码可能执行,也可能不执行,有选择的执行某些代码
if(表达式)
语句
若表达式为真,执行语句
若表达式为假,不执行语句
例一:
#include
int main()
{
if(3>2)
printf("哈哈哈哈哈哈哈\n");
return 0;
}
/*----输出结果-----------
哈哈哈哈哈哈哈
-------------------------*/
例二:
#include
int main()
{
if(3) //3是真的,执行
printf("哈哈哈哈哈哈哈\n");//会输出
if(0) //0为假,假不执行
printf("嗷嗷嗷嗷嗷嗷嗷\n");//不会输出
if(0 == 0) //0==0是真的,执行
printf("喵喵喵喵喵喵喵\n");//会输出
return 0;
}
/*----输出结果-----------
哈哈哈哈哈哈哈
喵喵喵喵喵喵喵
-------------------------*/
▶if(表达式)
语句A;
语句B;
解释:if默认只能控制语句A的执行或不执行
if无法控制语句B的执行或不执行
换言之,不论表达式真或假,语句B一定会执行
#include
int main()
{
if(1>2)
printf("哈哈哈哈哈哈哈\n");
printf("喵喵喵喵喵喵喵\n");//
return 0;
}
/*----输出结果-----------
喵喵喵喵喵喵喵
-------------------------*/
▶if(表达式)
{
语句A;
语句B;
}
因为if默认只能控制一个语句的执行或不执行,
若想控制多个语句的执行或不执行
必须将这些语句用{ }括起来
#include
int main()
{
if(1>2)
{
printf("哈哈哈哈哈哈哈\n");
printf("喵喵喵喵喵喵喵\n");//
}
printf("嗷呜嗷呜嗷呜嗷呜\n");//不包含在if内,缩进与否都可以
return 0;
}
/*----输出结果-----------
嗷呜嗷呜嗷呜嗷呜
-------------------------*/
例一:
#include
int main()
{
int i,j;
scanf ("%d %d",&i,&j);
if(i>j) //如果i>j.执行下一行
printf("i大于j\n");
else //else为否则,即条件为i
例二:
#include
int main()
{
if(1<2) //若将条件修改为1<2,则最终输出喵和嗷呜那两行
printf("哈哈哈哈哈哈哈\n");
else
printf("喵喵喵喵喵喵喵\n");
printf("嗷呜嗷呜嗷呜嗷呜\n");
return 0;
}
/*----输出结果-----------
哈哈哈哈哈哈哈
嗷呜嗷呜嗷呜嗷呜
-------------------------*/
if(表达式1)
语句A;
else if(表达式2)
语句B;
else if(表达式3)
语句C;
else
语句D;
执行语句D,说明表达式1,2,3均不成立
执行语句C,说明表达式1,2不成立
执行语句B,说明表达式1不成立
执行语句A,说明表达式1成立
例一:
#include
int main()
{
double delta = -1; // delta为变量的名字,也可以跟前面的代码一样用i或j
if(delta >0 ) //-1>0为假,不执行下一行语句
printf("有两个解!\n");
else if(delta == 0) //-1==0为假,不执行下一行语句
printf("有一个唯一解!\n");
else
printf("无解\n");
return 0;
}
/*----输出结果-----------
无解
-------------------------*/
例二: 注意一定要理解
else子句不能作为语句单独使用,必须和if语句配对使用,如果没有if语句,则会报错。
if后面的执行语句不用"{}"括起来,它只把紧跟在后的第一条语句作为执行语句。
if和else if中间有两条语句,又不用{}括起来,就会报错
#include
int main()
{
double delta = -1; // delta为变量的名字,也可以跟前面的代码一样用i或j
if(delta >0 )
printf("有两个解!\n");
printf("哈哈哈!\n");
else if(delta == 0)
printf("有一个唯一解!\n");
else
printf("无解\n");
return 0;
}
/*----结果报错-----------
error: ‘else’ without a previous ‘if’
-------------------------*/
非零为真 零为假
真用1表示 假用0表示
分数等级:成绩划分
>100 输出哇
90—100 输出优秀
80—90 输出良好
70—80 输出及格
0—60 输出不及格
否则 分数过低
#include
int main()
{
float score;
printf("请输入您的考试成绩:\n");
scanf("%f",&score);
if(score >100 )
printf("哇!\n");
else if(score >= 90 && score <= 100)//注意不能写成90<=score<=100
printf("优秀!\n");
else if(score >= 80 && score <= 90)
printf("良好!\n");
else if(score >= 60 && score <= 80)
printf("及格!\n");
else if(score >= 0 && score <= 60)
printf("不及格!\n");
else
printf("分数过低\n");
return 0;
}
/*----显示结果-----------
请输入您的考试成绩:
2
不及格!
-------------------------*/
例一:两个数字互换 错误代码
#include
int main()
{
int i=3;
int j=5;
i=j; //i=5,j=5
j=i; //i=5,j=5 因此无法实现i和j的互换
printf("i=%d , j=%d\n",i,j);
return 0;
}
/*----显示结果-----------
i=5 , j=5
-------------------------*/
思路:想象两瓶水,一瓶红色i,一瓶蓝色j,如果要将液体互换瓶子,需要借助另一个空瓶子t。
红色→空 空=红色 t=i
蓝色→红色 红色=蓝色 i=j
空→蓝色 蓝色=空 j=t
例一:两个数字互换 正确代码
#include
int main()
{
int i=3;
int j=5;
int t; //定义临时变量
t=i;
i=j;
j=t;
printf("i=%d , j=%d\n",i,j);
return 0;
}
/*----显示结果-----------
i=5 , j=3
-------------------------*/
例二:对任意三个数字进行排序
思路
abc三个数进行比较,
如果(a>b)
则a与c比较 a>c 则输出a a
b与c比较 b>c 则输出b b
#include
int main()
{
int a,b,c;
int t;
printf("请输入三个整数(中间依空格分隔):\n");
scanf("%d %d %d",&a,&b,&c);
//编写代码完成a是最大值,b是中间值,c是最小值
if(a
判断一个数组是否为素数
素数:只能被1和自身整除 1 3 7
判断一个数字是否是回文数
回文数:数字正写倒写一致 121=121
编程实现求一个十进制数字的二进制形式
10→1010
一个数字的位每是奇数的数字取出组合形成的新数字
12345→135
求一个数字倒过来的数字
123→321
分三步:
流程→每个语句的功能→试数
1.尝试自己去编程解决
要意识到大部分人都无法自己解决,这时不要气馁也不要放弃
如果15min还想不出来,直接看答案
2.如果解决不了就去看答案
关键要把答案看懂,把答案看懂要花很大的精力,也是我们学习的重点
上面说过,看懂一个程序分三步:流程→每个语句的功能→试数
3.看懂后尝试自己去修改代码,并直到修改后程序不同输出结果的含义
不建议看懂程序之后就立即自己敲代码
4.先照着答案去敲→调试错误→不看答案自己敲
5.若程序实在无法彻底理解,背会
但无法彻底理解的程序其实是很少的
if(1>2);
等价于
if(1>2)
;
一个分号一个语句
看常见问题解析中的例一:
与②if的范围问题(重要)中的第一个例题做区别
#include
int main()
{
if(1>2); //运行时会出现警告,不会有语法错误
printf("哈哈哈哈哈哈哈\n");
printf("喵喵喵喵喵喵喵\n");//
return 0;
}
/*----输出结果-----------
哈哈哈哈哈哈哈
喵喵喵喵喵喵喵
-------------------------*/
正确格式:
if(表达式1)
A;
else
B;
错误格式:
if(表达式1);
A;
else
B;
#include
int main()
{
if(3>2); //加分号,执行到else那一行会报错
printf("哈哈哈哈哈哈哈\n");
else
printf("喵喵喵喵喵喵喵\n");
return 0;
}
//注意:无分号,输出哈哈,有分号,报错
/*----结果报错-----------
-------------------------*/
if(表达式1)
语句A;
else if(表达式2)
语句B;
else
语句C;
表达式1和表达式2均成立时,只会执行语句A
#include
int main()
{
if(3>2)
printf("哈哈哈哈哈哈哈\n");
else if(3>1)
printf("喵喵喵喵喵喵喵\n");
else
printf("嗷呜嗷呜嗷呜\n");
return 0;
}
/*----输出结果-----------
哈哈哈哈哈哈哈
-------------------------*/
if(表达式1)
语句A;
else if(表达式2)
语句B;
不会报错,但逻辑上有漏洞,不建议
//本代码与“求分数等级”的代码一致,仅去掉了else语句,执行结果
#include
int main()
{
float score;
printf("请输入您的考试成绩:\n");
scanf("%f",&score);
if(score >100 )
printf("哇!\n");
else if(score >= 90 && score <= 100)//注意不能写成90<=score<=100
printf("优秀!\n");
else if(score >= 80 && score <= 90)
printf("良好!\n");
else if(score >= 60 && score <= 80)
printf("及格!\n");
else if(score >= 0 && score <= 60)
printf("不及格!\n");
return 0;
}
/*----显示结果-----------
请输入您的考试成绩:
-2
-------------------------*/
if(表达式1)
语句A;
else if(表达式2)
语句B;
else (表达式3)
语句C;
这种写法会报错,
error: expected ‘;’ before ‘printf’
正确的是:
要么去掉else后的表达式3
要么在else后面加if,再补全代码
if(表达式1)
语句A;
else if(表达式2)
语句B;
else (表达式3); //无实际意义的语句
语句C;
语法上不出错,但是逻辑上有漏洞,不建议
#include
int main()
{
float score;
printf("请输入您的考试成绩:\n");
scanf("%f",&score);
if(score >100 )
printf("哇!\n");
else if(score >= 90 && score <= 100)//注意不能写成90<=score<=100
printf("优秀!\n");
else if(score >= 80 && score <= 90)
printf("良好!\n");
else if(score >= 60 && score <= 80)
printf("及格!\n");
else (score >= 0 && score <= 60); //比上一个代码多了个;
printf("不及格!\n");
return 0;
}
/*----显示结果-----------
请输入您的考试成绩:
120
哇!
不及格!
-------------------------*/
switch后面讲