分之结构:当条件满足的时候就做什么,不满足的时候又可以做什么,实际上就是给我们提供一种选择。
分之结构里面最常用的就是;if
语法构成: if(表达式(任何合法的表达式都可以写在这里))
执行语句
执行规则:放表达式的值为真的时候就会执行下面的语句,当这个表达式的值为假的时候就直接走人。
if在执行它的语句的时候,只会认下面的第一条语句,更多的时候if里面不止一条,这个时候就必须要打大括号,大括号括起来的语句对于if来说只有一条,因此我们更多的时候写if语句是:
if(表达式)
{
执行语句1;
执行语句2;
执行语句3;
}
在if执行的语句里面,这些语句,可以是单语句,也可以是复合语句。
复合语句:可以写if switch while....
eg:
xiaoming = 18;
if(xiaoming的年纪不小于18)
{
谈恋爱;
}
示例代码:
int xiaoming = 20;
if(xiaoming >= 18)
{
printf("能谈恋爱");
}
//显然小明20岁了,输出的就是能谈恋爱。
练习:
输入两个数,将这两个数从小到大输出
参考代码:
int a,b;
scanf("%d%d",&a,&b);//scanf函数功能:从键盘输入a,b的值,输完后回车。
if(a < b)//发现a小于b 我就让他们换位置
{
a = a ^ b;
b = a ^ b;
a = a ^ b;
}
//我确定a > b就可以了
printf("%d %d\n",a,b);
在if里面写表达式的时候,一定要注意合法,判断和一个常量相等的时候尽量把这个常量写在前面
如:if(a == 1) 尽量写为 if(1 == a)
我们在做这种分之的时候,有一种判断,那么我们就可以否定一种判断:else
语法:
if(表达式)
执行语句;
else
执行语句;
else必须要和if去匹配,我们不能否定一个没有主体的东西
else和if的匹配规则为:和上面最近的那一个没有匹配的if去匹配,if else的执行都只会认下面的第一句
如果你要写多句,一样的,大括号,养成习惯,即使是一句的时候也带上大括号。
if(表达式)
{
执行语句1(可以复合);
执行语句2(可以复合);
..
}
else
{
执行语句1(可以复合);
执行语句2(可以复合);
..
}
前面的表达式成立,则执行if里面的语句,不成立就执行else里面的语句
没带大括号错误例子:
if(1)
a = b;
b = c;
else//没有匹配到if
c = d;
应该改为:
if(1)
{
a = b;
b = c;
}
else
{
c = d;
}
匹配规则示例:
if(a) ①
a = b;
if(b) ②
c = d;
else //它和②号匹配
d= e;
else//它和①匹配
e = f;
练习:
输入一个数,判断它能否能被2整除,能被3整除,能同时被2,3 整除,都不能的打印不能
参考代码:
if(a % 2 == 0 || a % 3 == 0 ) //能被2整除或者能被3整除
{
if(a % 2 == 0 && a % 3 == 0)
{
printf("能被2和3整除\n");
}
else
{
if(a % 2 == 0)
{
printf("只能被2整除\n");
}
if(a % 3 == 0)
{
printf("只能被3整除\n");
}
}
}
else //不能被2整除也不能被3整除
{
printf("不能被2整除也不能被3整除\n");
}
在做分之结构的时候,我们有时候会出现很多种条件,这些条件是互斥的,也就是只能进其一
if(表达式1)
{
语句1;
}
else if(表达式2)
{
语句2;
}
else if(表达式3)
{
语句3;
}
else if(表达式4)
{
语句4;
}
else if(表达式5)
{
语句5;
}
.....
else
{
语句n;
}
执行规则:
只会进入其中的一个,先判断表达式1,为真则执行语句1,然后退出,为假则判断表达式2,为真则执行语句2,然后退出,为假则判断表达式3......都不满足则进else 执行语句n
if 和 else if的语句要写下面的这种去区分
if()//所有的if都是并列关系,执行一个了下面还是要判断
{}
if()
{}
if()
{}
if
我们有时候并不想让它满足条件后还执行下一个if ,这时候else if就专门弄出来解决这个问题
它实际上就是if else的一个搭配,只是写出这种样子了,它的真正的写法:1 2 3 4只能进其一
if(a < 3)
{
语句1;
}
else
{
if(a < 10)
{语句2;}
else
{
if(a < 100)
{语句3;}
else
{
if(a < 500)
{语句4;}
else
{语句5;}
}
}
}
不理解的小伙伴也没关系会用好if else if就行了
假设a等于0 ,如果没有并发(同时执行),那么只会执行语句1;
如果有并发:要执行哪一个就不知道了,因为现在没有并发,程序都是从上到下依次执行的,因此只能进语句1。假设a = 50就进语句3
匹配错误示例:
if()
{
else //else必须和同级的if去匹配 这么写就有问题了
{
}
}
练习:
1. 从键盘输入一个字符,如果这个字符是字母,那么请将大写改小写输出,如果是小写直接输出如果不是字母打印不是字母。
参考代码:
//第一步从键盘输入一个字符
//开一个内存去保存这个字符
//保存这个字符只需要一个字节
char ch;
scanf("%c",&ch);
//第二步我要判断这个字符是不是字母
if((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z'))
/*
如果是(第二步是真的),我就判断它是大写还是小写
如果是大写就改小写
如果是小写就不动
然后将他输出
*/
{
if((ch >= 'A' && ch <= 'Z'))
{
//改成小写
ch += 'a' - 'A';
printf("ch = %c\n",ch);
}
else
{
printf("ch = %c\n",ch);
}
}
//如果不是(第二步是假的),直接输出no
else
{
printf("不是字母\n");
}
2.输入一个三位整数 100 ~ 999,判断这个数是否是水仙花数,水仙花数为:如果这个数的个位,十位,百位,的立方和与这个数相等 那么这个数就是水仙花数,如果是输出yes,不是输出no
水仙花如153:1 * 1 * 1 + 5 * 5 * 5 + 3 * 3 * 3 == 153
代码思路:重点在分割,个位,十位,百位的问题。
参考代码:
int a;
scanf(“%d",&a);
int gewei = a % 10;//个位
int shiwei = a / 10 % 10;//十位
int baiwei = a / 100 % 10;//百位
if(gewei * gewei * gewei + shiwei * shiwei * shiwei + baiwei * baiwei * baiwei == a)
{
printf("yes\n");
}
else
{
printf("no\n");
}
switch语句
这个语句是将我们的值一一列举出来,然后去做匹配
语法:
switch(表达式)
{
case 常量表达式1:
语句1;
case 常量表达式2:
语句2;
case 常量表达式3:
语句3;
.....
default://前面没有匹配就匹配这里
语句n;
}
表达式先求值,求得值与下面的常量去做匹配,匹配上谁就从谁那里去做语句,如果我匹配上了常量表达式2,接来下就从语句2开始执行,执行的时候,会将它下面所有的语句都执行,直到碰到break或者执行完毕才会停止,匹配的时候常量表达式的大小顺序是没有关系,看位置,也就是常量表达式是可以是乱序的.
eg:
switch(a)
{
case 4:
语句1;
case 1:
语句2;
case 3:
语句3;//switch不会对它的语句进行排序
//顺序只会是从上到下
.....
default:
语句n;
}
在这个switch语句里面常量表达式的值必须是唯一的,并且只能是整数才行,当我们不想让这个switch往下面执行了,那么我们要及时的给break,当语句执行到break就会跳出这个switch,我们很多时候会在每一个case里面写一个break
switch(a)
{
case 1:
.....
break;
case 2:
....
break;
default://这个玩意儿出现的位置也可以是不固定的
.....
}
如果我们想几个case共用一组代码都可以
switch(a)
{
case 1:
case 2:
....//case 1 case 2共用一组代码了
break;
default://这个玩意儿出现的位置也可以是不固定的
.....
}
case里面的语句可以是单语句,也可以是复合语句
例子:我要给学生打优秀,良好,及格,不及格四个等级,依照分数来进行
优秀:100 ~ 80
良好:80 ~ 70
及格:70 ~ 60
不及格:60以下
1 先用switch实现
示例代码:
int s;//表示学生的成绩
scanf("%d",s);
switch(s / 10)//干掉个位
{
case 10:
case 9:
case 8:
printf("优秀\n");
break;
case 7:
printf("良好\n");
break;
case 6:
printf("及格\n");
break;
default:
printf("不及格\n");
break;
}
2 再用if实现 //由于几个档次是互斥的,因此可以采用else if的形式
用if实现大家自己动一动灵活的小脑子,还是有不清楚的地方可以私聊我,随时欢迎哦。