分支和循环(1)
正文
一.分支语句和循环语句
分支语句
if switch
循环语句
while for do while go to语句
什么是语句?
c语言中由一个分号(;)隔开的是一条语句。
;//是语句,空语句1.分支语句(选择结构)
1).if语句
if语句的语法结构:
if(表达式) 或 if(表达式)
语句; 者 语句1;
else
语句2;
多分支
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
如果表达式的结果为真,则语句执行(0表示假,非零表示真)
int main()
{
    int age = 111;
    if (age < 18)
        printf("未成年\n");
       else if (age >= 18 && age < 20)  //&&表示逻辑与,如果表达式的结果为真,则语句执行(0表示假,非零表示真)
            printf("青少年\n");
           else if (age >= 20 && age < 50)
                printf("壮年\n");
               else if (age >= 50 && age < 90)
              printf("老年人\n");
                else
                    printf("老不死\n");
    return 0;
}如果条件成立,要执行多条语句,应该使用代码块
#include <stdio.h>
int main()
{
if(表达式)
{
语句列表1;
}
else
{
语句列表2
}
return 0;
}
int main()
{
    int age = 111;
    if (age < 18)
    {
        printf("未成年\n");     //语句列表1
        printf("不能谈恋爱\n");   //可以打印多个printf
    }
    else
    {
            if (age >= 18 && age < 20)
            printf("青少年\n");
            else if (age >= 20 && age < 50)   //语句列表2
                printf("壮年\n");
            else if (age >= 50 && age < 90)
                printf("老年人\n");
            else
                printf("老不死\n");
    }
    return 0;
}这里的{}就是一代码块
悬空else
int main()
{
    int n = 2;
    int m = 2;
    if (1 == n)
        if(2==m)                 //尽量与else对其
        printf("你好\n");
        else                    //else和离的最近的未匹配的if匹配
        printf("你真不好\n");
    return 0;
}
输出的结果为空,能运行//适当的使用{}可以使代码的逻辑更加清楚
//代码风格很重要
练习:输出1~100之间的奇数
int main()
{
  int n=1;
  while(n<100)
  {
  if(1==n%2)
    printf("%d\n",n);
    n++;
  }
  
return 0;
}2).switch语句
switch语句的语法结构:
switch(整型表达式)
{
语句项;
}
语句项是什么?
//是一些case语句
//如下:
case整型常量表达式:
语句;
//switch语句里面可以有if语句
int main()
{
    int day = 0;
    scanf("%d",&day);    //&取地址符,取出变量day
        if (1 == day)     //判断变量day是否等于1,是的话输出星期一               
            printf("星期一\n");
        else if(2 == day)
            printf("星期二\n");
        else if (3 == day)
        printf("星期三\n");
        else if (4 == day)
        printf("星期四\n");
        else if (5 == day)
        printf("星期五\n");
        else if (6 == day)
        printf("星期六\n");
        else if  (7 == day)
        printf("星期日\n");
    return 0;
}
//用else if...else  if 比较复杂,用switch多分支语句比较简单更改后
int main()
{
int day = 0;        //day为整型变量
scanf("%d", &day);
switch (day)      //day为整型表达式
{
    case 1:                  //case 1(1为常变量表达式):   
    printf("星期一\n");
    break;               //break是结束循环的意思
case 2:
    printf("星期二\n");
    break;        
case 3:
    printf("星期三\n");
    break;
case 4:
    printf("星期四\n");
    break;
case 5:
    printf("星期五\n");
    break;
case 6:
    printf("星期六\n");
    break;
case 7:
    printf("星期日\n");
    break;
}
return 0;
}
//总结:通俗易懂在switch语句中的break:
在switch语句中,我们没法实现分支,搭配了break就可以实现真正的分支了。
练习:输入1~5,输出“weekday”;输出6~7,输入“weekend”
int main()
{
  int day=0;
  scanf("%d",&day);
  switch(day)
  {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
      printf("weekday\n");
      break;
    case 6:
    case 7:
      printf("weekend\n");
      break;
    default:        //default可以放在switch的任何地方,当switch表达式的值不等于case标签的值时,这个时候default后面的语句就会执行。
      printf("输入错误\n");
      break;
  }
return 0;
}break语句的实际效果是把语句列表划分为不同的部分。
default子句(default和case没有顺序可言,放在那里都可以用)
如果表达的值与所有case标签的值不一样该怎么样?
其实也没什么,结果就是所有语句都被跳过而已;程序不会终止,也不会报错,因为这种情况在c中并不认为适合报错。
如果你并不想忽略不匹配所有标签的表达式的值时该怎么办?
你可以在语句列表中增加一条default子句,把下面的标签default:写在任何一个case标签可以出现的位置(当switch表达式的值并不匹配所有case标签的值时,这个default子句后面的语句就会被执行。所有,每个switch语句中只能出现一条default子句,但是它可以出现在语句列表中的任意位置,而且语句流会向贯穿case标签一样贯穿default子句。)
练习:
int main()
{
    int n = 1;
    int m = 2;
    switch (n)
    {
    case 1:m++;
    case 2:n++;
    case 3:
        switch (n)
        {//switch允许嵌套使用
        case 1:n++;
        case 2:m++; n++; break;
        }
    case 4:m++;
        break;
    default:
        break;
    }
    printf("m=%d,n=%d\n", m, n);
    return 0;
}1.循环语句
while for do while
1).while语句
while语法结构:(while语句,可实现循环)
while(表达式)
循环语句;
练习:在屏幕上打印1~10
int main()
{
int a=1;
  while(a<=10)
  {
  printf("%d\n",a);
    a++;
  }
return 0;
}break停止
int main()
{
int i=1;
  while(i<=10)
  {
  if(5==i)
    break;
    printf("%d\n",i);
    i++;
  }
return 0;  //打印为1,2,3,4
}continue跳过,进行下一次循环的入口判断
int main()
{
    int i = 1;
    while (i <= 10)
    {
        if (5 == i)
            continue; 
        printf("%d\n", i); //打印1,2,3,4,光标还在闪烁(程序没结束)
        i++;
    }
    return 0;
}结论:continue表示死循环(循环没结束)










