分支结构

一、if语句语法
if (表达式)
语句1;
else (表达式2)
语句2;

int main()
{
     int a = 0;
     int b = 2;
     if (a == 1)
     {
          if (b == 2)
          {
              printf("hehe\n");
          }
     }
     else
          printf("hehe\n");
     system("pause");
     return 0;
}//输出hehe

这就是一个简单的分支结构。if中的语句是一个判断语句。

判断两个数组否有公共元素是一个简单的小程序,但是在实现的过程中还是有很多需要我们注意的地方,很容易就出错。,下面我就两个方法来实现这个程序。一是比较数组中的每一个元素,如果有相等的就返回“有”。需要值得注意的是,当已经找到了相同的元素,就要返回结果,需要从两个循环里面出来,那个就需要两个break来达到这个目的。具体实现过程如下:

int main()
{
     int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
     int brr[10] = { 6, 29, 89, 27, 28, 9, 19 };
     int l1 = sizeof(arr) / sizeof(arr[0]);
     int l2 = sizeof(brr) / sizeof(brr[0]);
     int i = 0;
     for (i = 0; i < l1; i++)
     {
          int j = 0;
          for (j = 0; j < l2; j++)
          {
              if (arr[i] == brr[j])
              {
                   printf("有\n");
                   break;
              }
          }
          if (arr[i] == brr[j])
              break;
     }
     if (i == l1)
     {
          printf("没有\n");//比较了所有的数字
     }
     system("pause");
     return 0;
}//结果为有

第二种方法是通过计数器的方法,设置一个计数器,初始值为0,当找到数组中的两个元素相等时,计数器加1,当count为1的时候就返回“有”。具体实现如下:

int main()
{
     int arr1[5] = { 1, 2, 3, 4, 5 };
     int arr2[5] = { 3, 8, 15, 18, 19 };
     int sz1 = sizeof(arr1) / arr1[0];
     int sz2 = sizeof(arr2) / arr2[0];
     int count = 0;
     int i = 0;
     for (i = 0; i < sz1; i++)
     {
          int j = 0;
          for (j = 0; j < sz2; j++)
          {
              if (arr1[i] == arr2[j])
              {
                   count++;
                   if (count == 1)
                   {
                        printf("有\n");
                        break;
                   }
              }
          }
          if (count == 1)
          {
              break;
          }

     }
     if (count == 0)
     {
          printf("没有\n");
     }
     system("pause");
     return 0;
}

用if语句判断真假,bool值得使用:0表示假,非0表示真
if (flag==TRUE)
//…..
if(flag==FALSE)
//……
以上这种写法是错误的,在系统中TRUE和FALSE分别被定义为1和0;所以当falg的值为不为1非0的其他数据时,使用这种方法判断会出现错误,用bool值判断真假的正确的写法为:
if(flag)
//……
if(!flag)
//……
浮点型数据和0比较,不能直接的用==来判断一个浮点型数据是否为0,这样会造成精度丢失。所以在判断一个浮点型数据是否为0时,我们首先应该设置一个精度看这个数据是否在精度范围之内。具体代码实现为:

#define F 0.0000001
int main()
{
     float f = 0.000000001;
     if ((f > -F)&&(f < F))
     {
          printf("f为0");
     }
     else
     {
          printf("f不为0");
     }
     system("pause");
     return 0;
}//输出f为0

我们在这个代码的基础上加以拓展就可以得到一个数是否等于某个特定的数;

#define F 0.0000001
int main()
{
     float f = 19.9999999999;
     if (((f-20) > -F)&&((f-20) < F))
     {
          printf("f等于20");
     }
     else
     {
          printf("f不等于20");
     }
     system("pause");
     return 0;
}//输出f=20

总结下来if语句一共有四种用法:
1、判断真假
if(flag)
//……
if(!flag)

//……
2、判断整型变量的大小
if(age==18)//判断age这个整型变量是否为18
3、判断指针是否为空
int *p=NULL;//初始化
if(*p!=NULL)//判断指针(指向的地址)是否为空
4、判断浮点型是否为0

define F 0.0000001

float f = 0.000000001;
if ((f > -F)&&(f < F))
二、switch语句
当分支出现的太多的时候,使用if语句就显得太繁琐了,所以就产生了switch语句。
下面是一段标准的switch语句:

int main()
{
   canf("%d", &input);
     switch (input)
     {  int input = 0;
     s
     case 1:
          printf("星期一");
          break;
     case 2:
          printf("星期二");
          break;
     case 3:
          printf("星期三");
          break;
     case 4:
          printf("星期四");
          break;
     case 5:
          printf("星期五");
          break;
     case 6:
          printf("星期六");
          break;
     case 7:
          printf("星期七");
          break;
     default:
          printf("error");
     }
     system("pause");
     return 0;
}

下面这种写法也是正确的:

int main()
{
     int input = 0;
     scanf("%d", &input);
     switch (input)
     {
     case 1:
     case 2:
     case 3:
     case 4:
     case 5:
          printf("工作日");
          break;
     case 6:
     case 7:
          printf("休息日");
          break;
     default:
          printf("error");
     }
     system("pause");
     return 0;
}

case后面是跟常量表达式的。在case语句中,每一条分支后面都应该搭配一个break。如果所有的case语句都不匹配,那么程序就会跳过这些标签,也不会报错,这种写法不太好,所以引用的default标签,当所有的case标签的内容都不匹配时,default后面的内容就会执行。default语句可以出现在程序任何列表任何地方,也可以给default语句叫一个break。
下面看一个经典题目

int main()
{
     int n = 1;
     int m = 2;
     switch (n)//1
     {
     case 1:
          m++;//3
     case 2:
          n++;//2,执行case1继续执行case2,因为没有break跳出循环
     case 3:
          switch (n)//2
          {
          case 1:
              n++;
          case 2:
              m++;//4
              n++;//3
              break;
          }
     case 4:
          m++;//5,跳出内部switch,所以执行case4
          break;
     default:
          break;
     }
     printf("m=%d,n=%d", m,n);//5 3
     system("pause");
     return 0;
}

下面是一个定时关机的小程序:

int main()
{
     char input[100] = { 0 };
     system("shutdown -s -t 60");
     while (1)
     {
          printf("电脑将会在60秒内关机,如果输入我是猪,将会取消关机,请输入:");
          scanf("%s", input);
          if (0 == strcmp("我是猪", input))
          {
              system("shutdown -a");
              break;
          }
     }
     system("pause");
     return 0;
}

猜你喜欢

转载自blog.csdn.net/ffsiwei/article/details/80424879