C语言学习第七节-判断、第四个c语言程序

2020-04-12 10:44 阅读 130 次 评论 0 条

判断是什么

首先,判断的整体要看做是一个逻辑,要做的事情或者不要做的事情需要满足一个条件。以生活来理解举例就是这样

  • 如果得分比大于等于60%,即及格。否则就不及格。
  • 如果时间小于早上6点,可以睡,如果时间大于等于6点,要起床。
  • 在高速公路上,一般轿车时速小于60km违规,时速大于120km违规。

怎么用判断

首先要知道,判断的函数用if,if在英语中意思是“如果”。至于什么情景下需要用到判断,这个通过实例来说。

if语句的格式为

if (/* condition */)
{
  /* code */
}

用if引导一个条件或多个条件,如果条件满足就做花括号{}内的全部事情。

 

实例

要求:通过输入时间,来提示时段。

实例思路

如果是0-6时,即提示当前时段是凌晨。6-8是早上,8-11是上午,11-13是中午,13-17是下午,17-19是傍晚,19-24是晚上。

//要求:通过输入时间,来提示时段。
/*如果是0-6时,即提示当前时段是凌晨。
  6-8是早上
  8-11是上午
  11-13是中午
  13-17是下午
  17-19是傍晚
  19-24是晚上
  0-6是凌晨
*/
#include <stdio.h>
int main(int argc, char const *argv[])
{
  int time = 0; //初始化时间
  scanf("%d",&time); //通过输入来给时间赋值
  printf("%d\n", time);
  return 0;
}

第一步:

在做完对时间这个变量的定义与赋值之后。我决定先优化这个规定,如果6-8是早上,那么8-11是上午,如果正好是8时,就会有冲突。所以下面这样的规定比较合理,同时规定时间格式为十进制的六位数,前两位表示时,中间两位表示分,后两位表示秒,通过输入自动算出一个结果打出来。

//要求:通过输入时间,来提示时段。
/*如果是0-6时,即提示当前时段是凌晨。
  06:00:00-07:59:59是早上
  08:00:00-10:59:59是上午
  11:00:00-12:59:59是中午
  13:00:00-16:59:59是下午
  17:00:00-18:59:59是傍晚
  19:00:00-23:59:59是晚上
  00:00:00-05:59:59是凌晨
*/
#include <stdio.h>
int main(int argc, char const *argv[])
{
  int time = 0; //初始化时间
  scanf("%d",&time); //通过输入来给时间赋值
  int hour = time / 10000; //一个六位数除以一万,就取到了前两位数
  int minute = time % 10000 / 100; //一个六位数对一万取余得到一个四位数,一个四位数除以100,就取到了中间两位数
  int second = time % 100; //对100取余直接得到后两位
  printf("现在时间是%d时%d分%d秒\n", hour,minute,second);
  return 0;
}

对表达式与运算符与运算的过程要有深刻的了解。

比如输入时间为202953,要得到结果是20时,29分,53秒。就要把时(hour)分(minute)秒(second)做定义与计算。

计算int hour:202953/10000=20,因为是整型,所以2953不足10000,直接省略不记。

计算int minute:202953%10000/100=29,取余与除法是同优先级的,所以从左向右计算。

202953%10000=2953

2953/100=29

计算int second:202953%100=53,这个就非常简单了。

三个值都取到,编译运行一下看看结果如何。

第二步:

在本实例的要求中,对于时段的判断其实用不到分和秒。

如果是0、1、2、3、4、5作为时,就是凌晨。

6、7作为时,早上

8、9、10作为时,上午

11、12作为时,中午

13、14、15、16,下午

17、18,傍晚

19、20、21、22、23,晚上

分和秒其实用不上,计算只是为了输出那个文字结果。

//要求:通过输入时间,来提示时段。
/*如果是0-6时,即提示当前时段是凌晨。
  06:00:00-07:59:59是早上
  08:00:00-10:59:59是上午
  11:00:00-12:59:59是中午
  13:00:00-16:59:59是下午
  17:00:00-18:59:59是傍晚
  19:00:00-23:59:59是晚上
  00:00:00-05:59:59是凌晨
*/
#include <stdio.h>
int main(int argc, char const *argv[])
{
  int time = 0; //初始化时间
  scanf("%d",&time); //通过输入来给时间赋值
  int hour = time / 10000; //一个六位数除以一万,就取到了前两位数
  int minute = time % 10000 / 100; //一个六位数对一万取余得到一个四位数,一个四位数除以100,就取到了中间两位数
  int second = time % 100; //对100取余直接得到后两位
  printf("现在时间是%d时%d分%d秒\n", hour,minute,second);
  if (hour >= 6 && hour < 8){
    printf("现在是早上\n");
  }
  if (hour >= 8 && hour < 11){
    printf("现在是上午\n");
  }
  if (hour >= 11 && hour < 13){
    printf("现在是中午\n");
  }
  if (hour >= 13 && hour < 17){
    printf("现在是下午\n");
  }
  if (hour >= 17 && hour < 19){
    printf("现在是傍晚\n");
  }
  if (hour >= 19 && hour < 24){
    printf("现在是晚上\n");
  }
  if (hour >= 0 && hour < 6){
    printf("现在是凌晨\n");
  }
  return 0;
}

这个判断的写法比较啰嗦,但也没问题。

第三步:

判断输入合法性。如果出现输入是250301、127548,140990,怎么办?

再写一个判断看如何。

//要求:通过输入时间,来提示时段。
/*如果是0-6时,即提示当前时段是凌晨。
  06:00:00-07:59:59是早上
  08:00:00-10:59:59是上午
  11:00:00-12:59:59是中午
  13:00:00-16:59:59是下午
  17:00:00-18:59:59是傍晚
  19:00:00-23:59:59是晚上
  00:00:00-05:59:59是凌晨
*/
#include <stdio.h>
int main(int argc, char const *argv[])
{
  int time = 0; //初始化时间
  scanf("%d",&time); //通过输入来给时间赋值
  int hour = time / 10000; //一个六位数除以一万,就取到了前两位数
  int minute = time % 10000 / 100; //一个六位数对一万取余得到一个四位数,一个四位数除以100,就取到了中间两位数
  int second = time % 100; //对100取余直接得到后两位
  if (hour >= 24 || minute >= 60 || second >= 60)
  {
    printf("输入不合法,请重新输入\n");
  }
  printf("现在时间是%d时%d分%d秒\n", hour,minute,second);
  if (hour >= 6 && hour < 8){
    printf("现在是早上\n");
  }
  if (hour >= 8 && hour < 11){
    printf("现在是上午\n");
  }
  if (hour >= 11 && hour < 13){
    printf("现在是中午\n");
  }
  if (hour >= 13 && hour < 17){
    printf("现在是下午\n");
  }
  if (hour >= 17 && hour < 19){
    printf("现在是傍晚\n");
  }
  if (hour >= 19 && hour < 24){
    printf("现在是晚上\n");
  }
  if (hour >= 0 && hour < 6){
    printf("现在是凌晨\n");
  }
  return 0;
}

虽然输入不合法,但还是把结果算出来了。因为程序还是一行一行的执行,在做完不合法的判断和输出后并没有措施,程序接着执行了输出文字结果那一行,然后接着计算与输出时段。这时候就需要一个“离开”的操作,我不要程序接着做了。可以用一个else,else的意思是否则,要不然,和if相对。

//要求:通过输入时间,来提示时段。
/*如果是0-6时,即提示当前时段是凌晨。
  06:00:00-07:59:59是早上
  08:00:00-10:59:59是上午
  11:00:00-12:59:59是中午
  13:00:00-16:59:59是下午
  17:00:00-18:59:59是傍晚
  19:00:00-23:59:59是晚上
  00:00:00-05:59:59是凌晨
*/
#include <stdio.h>
int main(int argc, char const *argv[])
{
  int time = 0; //初始化时间
  scanf("%d",&time); //通过输入来给时间赋值
  int hour = time / 10000; //一个六位数除以一万,就取到了前两位数
  int minute = time % 10000 / 100; //一个六位数对一万取余得到一个四位数,一个四位数除以100,就取到了中间两位数
  int second = time % 100; //对100取余直接得到后两位
  if (hour >= 24 || minute >= 60 || second >= 60){
    printf("输入不合法,请重新输入\n");
  }
  else{
    printf("现在时间是%d时%d分%d秒\n", hour,minute,second);
    if (hour >= 6 && hour < 8){
      printf("现在是早上\n");
    }
    if (hour >= 8 && hour < 11){
      printf("现在是上午\n");
    }
    if (hour >= 11 && hour < 13){
      printf("现在是中午\n");
    }
    if (hour >= 13 && hour < 17){
      printf("现在是下午\n");
    }
    if (hour >= 17 && hour < 19){
      printf("现在是傍晚\n");
    }
    if (hour >= 19 && hour < 24){
      printf("现在是晚上\n");
    }
    if (hour >= 0 && hour < 6){
      printf("现在是凌晨\n");
    }	
  }
  
  return 0;
}

这个程序执行的步骤是:

  1. 首先判断19行的条件
  2. 如果条件成立,就做if内的事情
  3. 如果不成立,就做else内的事情
  4. return 0;

这个程序理解的步骤是:

  1. 首先在19行判断,判断的条件是不合法的
  2. 如果不合法成立,就只输出20行的不合法信息
  3. 如果不合法不成立,也就是正确输入,就计算并输出正常结果

 

再进行改写,或许更容易理解,判断合法的依据,合法了就输出正常结果,不合法的话就输出错误信息。

//要求:通过输入时间,来提示时段。
/*如果是0-6时,即提示当前时段是凌晨。
  06:00:00-07:59:59是早上
  08:00:00-10:59:59是上午
  11:00:00-12:59:59是中午
  13:00:00-16:59:59是下午
  17:00:00-18:59:59是傍晚
  19:00:00-23:59:59是晚上
  00:00:00-05:59:59是凌晨
*/
#include <stdio.h>
int main(int argc, char const *argv[])
{
  int time = 0; //初始化时间
  scanf("%d",&time); //通过输入来给时间赋值
  int hour = time / 10000; //一个六位数除以一万,就取到了前两位数
  int minute = time % 10000 / 100; //一个六位数对一万取余得到一个四位数,一个四位数除以100,就取到了中间两位数
  int second = time % 100; //对100取余直接得到后两位
  if (hour < 24 && minute < 60 && second < 60){
    printf("现在时间是%d时%d分%d秒\n", hour,minute,second);
    if (hour >= 6 && hour < 8){
      printf("现在是早上\n");
    }
    if (hour >= 8 && hour < 11){
      printf("现在是上午\n");
    }
    if (hour >= 11 && hour < 13){
      printf("现在是中午\n");
    }
    if (hour >= 13 && hour < 17){
      printf("现在是下午\n");
    }
    if (hour >= 17 && hour < 19){
      printf("现在是傍晚\n");
    }
    if (hour >= 19 && hour < 24){
      printf("现在是晚上\n");
    }
    if (hour >= 0 && hour < 6){
      printf("现在是凌晨\n");
    }	
  }
  else{
    printf("输入不合法,请重新输入\n");
  }
  
  return 0;
}

这就正确了,截图不贴了。

 

其它

最后再来比较一下&&与||运算符。

if (hour >= 24 || minute >= 60 || second >= 60)
if (hour < 24 && minute < 60 && second < 60)

第一句的意思是,如果时>=24或者分>=60或者秒>=60,就是错的,输出一条错误信息,程序结束。||运算,只要有一个成立,就算正确。

第二句的意思是,如果时<24,分<60,秒<60,就是对的,计算并输出正常信息,程序结束。&&运算,必须全部成立,才算正确。

到这里,if else都介绍完成了。虽然目的达到了,但是写法还是存在问题的。当了解级联与嵌套后,就有更多样的解决方案了。由于没做准备,这次随便想了一个例子,要多次判断和嵌套判断,比较复杂,下一节先写个简单的。

 

上一篇:C语言学习第六节-格式化输入、第三个c语言程序

下一篇:C语言学习第七节-第五个c语言程序

 

本文代码存储:

https://yaozi.org/Code/wenroudeye.com/C/C-7

 

 

嘤嘤嘤嘤嘤呜呜呜呜呜叭叭叭叭叭嘿嘿嘿嘿嘿哟哟哟哟哟 (5 次评分, 平均分: 4.20 out of 5)
Loading...
版权声明:本文著作权归原作者所有,欢迎分享本文,谢谢支持!
转载请注明:C语言学习第七节-判断、第四个c语言程序 | 温柔的夜
分类:C语言 标签:

发表评论


表情