分支语句(选择结构)——“C”

简介: 分支语句(选择结构)——“C”

各位CSDN的uu们你们好呀,我又来啦,今天,小雅兰给大家介绍的是一个知识点,就是我们的分支语句啦,包括if语句和switch语句,下面,就让我们一起来进入分支语句的世界吧


选择结构和条件判断


在现实生活中,需要进行判断和选择的情况是很多的


 如果你在家,我去拜访你

 如果考试不及格,要补考

 如果遇到红灯,要停车等待

我们的程序也是一样,在很多情况下,还需要根据某个条件是否满足,来决定是否执行指定的操作。或者从给定的两种或多种操作中选择其一,这就是我们今天要学习的选择结构程序设计。


C语言中有两种选择语句:


if语句,比较适合实现两个分支的选择结构(比如上课或者不上课,向左还是向右......)

switch语句,比较适合实现多分支的选择结构(比如从多个选修课中选择一门,选择一个最喜欢的科目)

那么,if语句的语法结构是怎么样的呢?


语法结构:


 if(表达式)


     语句;


 if(表达式)


     语句1;


 else


     语句2;


  //多分支


  if(表达式1)


      语句1;


  else if(表达式2)


      语句2;


  else


      语句3;


下面,我来给大家举几个例子,来更加准确地理解if语句


 例1:输入两个实数,按代数值由小到大的顺序输出这两个数


       解题思路:


            只需要做一次比较,然后进行一次交换即可


            用if语句实现条件决断


            想要实现两个变量值的互换,则要定义第三个变量              


     这是这个题目的一段小代码,我们一起来看看

#include<stdio.h>
int main()
{
   float a=0.0;
   float b=0.0;
   float tmp=0.0;
   scanf("%f %f",&a,&b);
   if(a>b)
   {
      tmp=a;
      a=b;
      b=tmp;
   }
   printf("%.2f,%.2f\n",a,b);
   return 0;
}

例2:输入3个数a,b,c,要求按由小到大的顺序输出


 解题思路:可以先用伪代码写出算法


      if a>b,a和b对换    (a是a、b中的小者)


      if a>c,a和c对换       (a是三者中的最小者)


      if b>c,b和c对换       (b是三者中次小者)


      顺序输出a,b,c

#include<stdio.h>
int main()
{
   int a=0;
   int b=0;
   int c=0;
   int tmp=0;
   scanf("%d %d %d",&a,&b,&c);
   if(a>b)
   {
      tmp=a;   
      a=b;
      b=tmp;
   }
   if(a>c)
   {
      tmp=a;
      a=c;
      c=tmp;
   }
   if(b>c)
   {
      tmp=b;
      b=c;
      c=tmp;
   }
   printf("%d %d %d",a,b,c);
   return 0;
}

悬空else

 当你写了这样一个具有迷惑性的代码:

#include<stdio.h>
int main()
{
   int a=0;
   int b=2;
   if(a==1)
       if(b==2)
         printf("hehe\n");
   else 
       printf("haha\n");
   return 0;
}

一些粗心大意的人,一个不留神,就会出错,会认为这个代码的输出结果是haha,实际上并不是这样,这个代码并无输出结果

其实,我们只要明确地知道:else总是和它离得最近的if匹配

下面,我们把这个代码的格式稍微修改一下

//适当地使用{}可以使代码的逻辑更加清楚
//代码风格很重要
#include<stdio.h>
int main()
{
   int a=0;
   int b=2;
   if(a==1)
   {
      if(b==2)
      {
         printf("hehe\n");
      }
   }
   else
   {
       printf("haha\n");
   }
   return 0;
}

 哈哈,这个代码的输出结果就确确实实为haha了


接下来,就到我们心心念念的switch语句啦


switch是“开关”的意思,它也是一种选择语句,常常用于多分支的情况


switch和if


 从功能上说,switch语句和if语句完全可以相互替代。但从编程的角度,它们又各有各的特点,所以至今为止,也不能说谁可以完全取代谁。

当嵌套的if比较少时(三个以内),用if编程程序会比较简洁。但是当选择的分支比较多时,嵌套的if语句层数就会很多,导致程序冗长,可读性下降。因此C语言提供switch语句来处理多分支选择。在很多大型的项目中,多分支选择的情况经常会遇到,所以switch语句用得还是比较多的。


switch语句说明


switch语句的作用是根据表达式的值,使流程跳转到不同的语句


下面,来给大家举几个例子来深入说明一下switch语句


例3:要求按照用户输入的考试等级输出相应百分制分数段,比如用户输入等级A,则输出85——100,B等为70——84分,C等为60——69分,D等为60分以下。


  解题思路:


      判断出这是一个多分支选择问题


      根据百分制分数将学生成绩分为4个等级


      如果用if语句,至少要用三层嵌套的if,进行3次检查判断


      用switch语句进行一次检查即可得到结果

#include<stdio.h>
int main()
{
   char grade=0;
   scanf("%c",&grade);
   printf("Your score:");
   switch(grade)
   {
   case 'A':
        printf("85——100\n");
        break;
   case 'B':
        printf("70——84\n");
        break;
   case 'C':
        printf("60——69\n");
        break;
   case 'D':
        printf("<60\n");
        break; 
   default:
        printf("enter data error!\n");
        break;
   }
   return 0;
}

break语句的实际效果是把语句列表划分为不同的分支部分。


编程好习惯


  在最后一个 case 语句的后面加上一条 break语句。


(之所以这么写是可以避免出现在以前的最后一个 case 语句后面忘了添加 break语句)


default子句


如果表达的值与所有的case标签的值都不匹配怎么办?


其实也没什么,结构就是所有的语句都被跳过而已。


程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。


但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢? 你可以在语句列表中增加一条default子句,把下面的标签default:写在任何一个 case 标签可以出现的位置。


当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。


所以,每个switch语句中只能出现一条default子句。


但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。


在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 break 。


例4:运输公司对用户计算运输费用。路程(s Km)越远,每吨——千米运费越低。


标准如下:

s<250 没有折扣
250=<s<500 2%折扣
500=<s<1000 5%折扣
1000=<s<2000 8%折扣
2000=<s<3000 10%折扣
s>=3000 15%折扣


该题要求程序能依据用户输入的单价、货物重量以及距离,自动得出折扣,并计算出运费。


 解题思路:


    设每吨每千米货物的基本运费为p,货物重量为w,距离为s,折扣为d


    总运费的计算公式为f=p*w*s*(1-d)


    计算等式中p、w、s为用户输入,所以关键是要找到折扣d的变化规律,由题可知折扣d与输入距离s有关,而且“变化点”都是250的倍数,故引入一折扣变量c,令c的值为s/250,即c代表250的倍数。


    即当c<1时,表示s<250,无折扣


    1=<c<2时,表示250=<s<500,折扣d=2%


    2=<c<4时,表示500=<s<1000,折扣d=5%


    4=<c<8时,表示1000=<s<2000,折扣d=8%


    8=<c<12时,表示2000=<s<3000,折扣d=10%


    c>=12时,表示s>=3000,折扣d=15%


#include<stdio.h>
int main()
{
   int c=0;//倍数
   int s=0;//距离
   float p=0.0;//每吨每千米货物的基本运费
   float w=0.0;//货物的重量
   float d=0.0;//折扣
   float f=0.0;//总运费
   printf("please enter price,weight,distance:");
   scanf("%f %f %d",&p,&w,&s);
   if(s>=3000)
   {
      c=12;
   }
   else 
   {
      c=s/250;
   }
   switch(c)
   {
   case 0:
        d=0;
        break;
   case 1:
        d=2;
        break;
   case 2:
   case 3:
        d=5;
        break;
   case 4:
   case 5:
   case 6:
   case 7:
        d=8;
        break;
   case 8:
   case 9:
   case 10:
   case 11:
        d=10;
        break;
   case 12:
        d=15;
        break;
   }
   f=p*w*s*(1-d/100);
   printf("freight=%10.2f\n",f);
   return 0;
}

好啦,今天的内容就到这里噢,从这篇文章中小雅兰还是学到了很多的,复习了if语句和switch语句,知道了其中的一些小细节。人们常说:“小细节,大进步。

相信各位uu们看了这篇文章之后也能收获颇多,我们一起加油进步努力呀!!!

相关文章
|
5月前
|
Go C语言
分支语句与循环语句,详细讲解
分支语句与循环语句,详细讲解
|
6月前
|
Java C# C++
使用Switch语句实现多分支选择结构
在编程中,经常需要基于某个变量的值来执行不同的代码块。这就是所谓的“多分支选择结构”。在多种编程语言中,如Java、C++、C#等,switch语句是实现这种结构的一种常用方法。 switch语句的基本思想是:将一个表达式的值与多个可能的常量值进行比较,然后根据匹配的结果执行相应的代码块。
75 0
|
6月前
|
Python
phython单分支if语句
phython单分支if语句
|
6月前
|
C语言
用switch语句实现多分支选择结构
用switch语句实现多分支选择结构
46 1
|
5月前
|
C语言
分支和循环语句(1)
分支和循环语句(1)
44 0
|
6月前
|
缓存 编译器 Go
分支语句和循环语句
分支语句和循环语句
69 0
|
编译器 C语言 C++
分支语句和循环语句上
分支语句和循环语句
58 0
分支语句和循环语句上
|
11月前
|
C语言
分支语句和循环语句(1)
分支语句和循环语句(1)
51 0
|
11月前
|
数据安全/隐私保护 C语言
分支语句与循环语句(2)
分支语句与循环语句(2)
58 0
|
编译器
分支语句与循环语句题
分支语句与循环语句题
69 0