c语言选择结构

选择语句(写给我的组员)

碰巧遇上我们班c语言老师让我们预习c语言经典大红书(身为大学生都懂的)的第四单元,为了方便我的组员更快地熟悉c语言的选择语句,特意写一篇关于选择的教程。毕竟俗话说得好,努力大于天赋,选择大于努力。140

目录结构

  • 逻辑表达式
  • if语句
  • switch语句

一.逻辑表达式

1.1 关系运算符

符号含义
<小于
>大于
<=小于等于
>=大于等于

关系运算符的优先级低于算数运算符,例如:表达式 i+j
c语言中表达式产生的结果是真(结果正确)为1,假(结果错误)为0
特别注意: i < j < k 在c语言中是合法的,但是结果不一定是你希望的结果,因为逻辑运算符是左结合的,所以正确的顺序应该是(i < j )< k,也就是说表达式先会检测i是否小于j,然后用产生的结果(1或者0)来与k再作比较,得出结果。(是不是颠覆了你的三观?)

1.2 判等运算符

我们先思索一个问题,当我们打算去判断一条表达式是否为真的时候,我们怎么表达呢?
假设我们要判断a是否等于b,如果结果为真执行下一个语句块我们该怎么写呢? if(a=b)?是这样吗?我们先回忆一下,=在c语言中是什么呢?是一个赋值符!也就是说我们这样写的话,不仅仅没有判断的效果,还会把b的值赋给a,程序要不报错,要不就会出现我们不希望的结果了。
让我们回到问题的开始,怎么表示判断等于或者不等于呢?这时,我们就需要判等运算符。

符号含义
==等于
!=不等于

下面我们来一段程序演示:

#include<stdio.h>
int main()
{
   int  a=2;
   int b=3;
   if(a==b)
     printf("haichao 是个王八蛋);
   else
     printf("zibo 是个王八蛋");
     return 0;
}  

看,是不是很容易理解呢?

1.3 逻辑判断符

我们思考一下刚刚介绍逻辑表达式时出现的问题,我们究竟怎么表示三个数的大小关系呢?
结合一下我们数电逻辑电路中学过的与或非,应该可以很快反应出来,可以分开表示,并把两个式子与起来,这时候我们就需要用到c语言的逻辑判断符

符号含义
! 逻辑非
&& 逻辑与
|| 逻辑或
程序演示一波(绝对不放过任何一个调侃舍友的机会):
#include<stdio.h>
int main()
{
   
int a=2;
int b=3;
int c=5;
   if(a<b&&b<c)
      printf("haichao is zibo and qiming's father");
   else
      printf("haichao is zibo and qiming's grandfather");
}

要特别注意一点:c语言存在一个“短路”特性。也就是说,这些运算符首先计算出左操作数的值,然后计算右操作数。如果表达式仅由左操作数的值可以推导出来,那么将不再进行又操作数的运算。举个例子, i>0 &&++j >0,如果i>0不成立,那还玩个球,整个式子直接就为0,所以j的自增操作将不再进行,j将还是原值。

二.if表达式

2.1 if语句简析

其实前面的例子已经给出了很多if语句的例子,废话不多说,直接看看if语句的形式

[if语句] if(表达式){语句or语句块}

下面举个例子:

if(line_num ==MAX_lines)
{
    line_num+=1;
    Max_lines-=2;   
}  

如果条件 line_num == MAX_lines成立,则执行下面的代码块。当代码块只有一条语句的时候,中括号可以不用写,但是为了代码规范,最好还是写上。再次提醒,== 不能写成 =,有一些编译器会报错,要是不报错,你就尝尝为了找错误生不如死的感觉吧。

2.2 else子句

[带有else子句的if语句] if(表达式){语句}else{语句}
下面举个例子:

  if(i>j)
  {
     max=i;
  }
   else
  {
    max=j;
  }

提醒大家一下注意一下代码规范,就是同级的else一定要与同级的if对齐,虽然c语言不像python一样用缩进代表层次结构,但是遇上if里面还有if的情况(嵌套),如果不按代码规范来写,就很容易弄乱层次关系。而且,嵌套时千万不要把if都对准同一列,这样会更容易弄错。下面我再举个例子。

if(i>j)
  if(i>k)
     max=i;
  else
     max=k;
 else
   if(j>k)
      max=j;
    else
      max=k;

这样写if…else的对应关系就会比较清楚

2.3 级联式if语句

当选择出现三种或三种以上的时候,if…else就不够用了,级联式if语句的重要性凸显而出。

 if(n<0)
    printf("n is less than 0\n");
 else
   if(n==0)
      printf("n is equal to 0\n");
 else
      printf("n is greater than 0\n);

2.4 悬空else 的问题

看下面的代码,思考else子句究竟属于哪一个if语句:

if (y!=0)
    if(x!=0)
       return=x/y;
else
     printf("Error");

从缩进格式来看,else是属于最外层的if语句,然而,c语言遵循的规则是else子句属于离他最近的且未和其他else匹配的if语句,在这个例子中,else实际上属于最内层的if语句
那么怎么解决这个问题呢,看看下面的代码:

if(y!=0)
{
  if(x!=0)
     return=x/y;
}
else
   printf("Error");

这时,else才属于最外层的if语句,这提醒我们:要代码清晰美观,加{}才是首选。

2.5 条件表达式

这个问题我是不想讲的,谁代码写成这个鬼样,他就是被同事枪毙了估计都没人怜悯,死有余辜,遗臭万年,为了让你们有死的如此壮烈的机会,我决定还是粗略讲一讲。

[表达式] 表达式1?表达式:表达式

这是 一个三元运算符,我们来说说它是个啥意思:

如果表达式1成立,那么表达式2,否则表达式3

下面用代码来举个例子:

int i,j,k;
i=1;
j=2;
k=i>j?i:j;
k=(i>=0?i:0)+j;

让我们看看第一次k的值是多少,很容易看出来,i>j是不成立的,所以此时k=j=2。第二次的k呢?先看第一部分,i>=0是成立的,括号里的值取i,即为1,加上j,所以k的值此时为3.

三. switch 语句

当选择结构选择很多的时候,用if…else if …else会比较麻烦,这个时候有没有什么更好的办法呢?

if(grade==4)   
  printf("Excellent");
else
  if(grade==3)
      printf("Good");
   else 
     if(grade==2)
        printf("Average");
     else
       if(grade==1)
          printf( "Poor");
        else
          if(grade==0)
             printf("Failing");
          else
             printf("Illegal grade");

用switch语句可以这样代替:

switch(grade)
{
       case 4: printf("Excellent");
               break;
       case 3 :printf("Good");
               break;
       case 2: printf("Average");
               break;
       case 1: printf("Failing");
               break;
       default:printf("Illegal grade");
                   break;
}

从程序中可看出,switch语句先将grade(控制变量)列出,然后让grade和case后的数字进行比较,如果符合的话,则通过break跳出语句。switch语句往往比级联式if语句更容易阅读,且执行更快,特别是很多情况要判断的时候。

switch(表达式)
{
       case 常量表达式:语句;
       ...
       case 常量表达式:语句;
       default:语句;
}

switch语句比较复杂,有许多注意事项,请留意一下:

  • switch后面必须跟着括号括起来的整型表达式。原理我不多说,要记住括号里面的变量只能是整型数据或者字符,不能是浮点数和字符串。(学过字符编码知道c语言把字符当整型处理)
  • case后面只能跟常量表达式,如:5,6+8等等,不能出现变量。
  • 每个分支结束一般是break语句,稍后将说说break语句的作用
  • 分支的顺序没有要求,default也不一定在最后面,反正程序都是由上往下判断,一旦有符合的情况,立即跳出。
闲聊一下break语句的作用

break一般用于循环中跳出当前整个循环

在switch语句中使用break则会使程序跳出switch语句,继续执行switch下面的语句,就如上面的程序,加入grade是2,程序从4开始判断,判断到2时,就执行2的语句,然后break跳出,也就是说1和0就不往下走了。

不知不觉又写完一个教程了,说实话,虽然c语言是一门比较底层的语言,但是我一直觉得大学用c语言入门程序语言是一件很反人类的事情,语言没有好坏之分,不同场景使用不同的语言。但是对于刚开始就抓住学生兴趣,让学生能通过做出点小创作来激发自己的学习欲望,那当然是人生苦短,我用python啊。不过既来之,则安之。学就学吧,反正九年义务教育已经把你逼的不像人了。对广大观看我教程的朋友们,我劝你善良,愿你幸福啊哈哈哈哈哈。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HTML cron 表达式选择是针对定时任务的一种选择机制。在编写定时任务时,可以使用cron表达式来指定任务的执行时间和频率。cron表达式是一种时间表达方式,它由6个字段组成,分别表示秒、分、时、日期、月份和星期。可以根据具体需求编写不同的cron表达式。 在HTML中选择cron表达式可以借助一些插件或工具。例如,一些前端库或框架提供了对cron表达式的支持,可以通过调用相应的API来选择和设置cron表达式。此外,还可以通过一些在线cron表达式生成工具,用户可以通过填写相应的表单或拖拽选择器来生成cron表达式。 在选择cron表达式时,需要根据具体的任务需求来确定。根据不同的字段设置,可以实现不同的任务触发时间和周期。例如,如果需要每天早上6点执行任务,可以设置"0 0 6 * * ?"的cron表达式;如果要求每月25日上午10点执行任务,可以设置"0 0 10 25 * ?"的cron表达式。可以根据实际需求进行灵活的设置。同时,还需要注意cron表达式的正确性和合法性,避免设定不合理的表达式导致任务无法正常执行或执行频率不符合预期。 总而言之,HTML cron 表达式选择可以通过插件、库或在线工具来实现。在选择表达式时,需要根据任务需求来确定具体的设定,保证表达式的正确性和合法性。这样可以确保定时任务按照预期的时间和频率正常执行。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值