C语言小白成长计划三:分之结构

本文介绍了编程中的if语句用于实现条件判断的逻辑,包括基本语法、执行规则以及与else和switch语句的配合使用。通过示例代码解释了如何根据条件执行不同操作,例如判断数字、字符和执行不同流程。此外,还提到了else和elseif的使用,以及switch语句在处理多个互斥情况时的作用。
摘要由CSDN通过智能技术生成

分之结构:当条件满足的时候就做什么,不满足的时候又可以做什么,实际上就是给我们提供一种选择。

分之结构里面最常用的就是;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实现大家自己动一动灵活的小脑子,还是有不清楚的地方可以私聊我,随时欢迎哦。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值