【分支语句与循环语句】

简介: 【分支语句与循环语句】

一、分支语句

1、多分支语句

if else语句,if与else if的使用

int main()
  {
    int age = 100;
    if (age < 18)
      printf("未成年\n");
    else if (age >= 18 && age < 28)  
      printf("青年\n");
    else if (age >= 28 && age < 50)
      printf("壮年\n");
    else if (age >= 50 && age < 90)
      printf("老年\n");
    else
      printf("长寿\n");
    return 0;
  }

if与else if的使用,if与else if使用时,如果if执行else if就不会执行。

2、悬空else

else与最近的且未匹配的if匹配

int main()
  {
    int a = 0;
    int b = 2;
    if (a == 1)
      if (a == 2)               //若在这加{}else就无法和这个if匹配
        printf("hehe\n");
      else
        printf("haha\n");
    return 0;
  }

3、switch语句

switch(整型表达式)

{

case(整型常量表达式):

}

int main()
  {
    int day = 0;
    scanf("%d", &day);
    switch(day)          //switch括号内的必须是整型表达式
    {
    case 1:             //case后面必须是整型常量表达式
      printf("星期一\n");
      break;
    case 2:                               //若1-5的内容都相同
      printf("星期二\n");               //case 1:
      break;                           //case 2:
    case 3:                              //case 3:
      printf("星期三\n");              //case 4:
      break;                          //case 5:
    case 4:                             //       printf();
      printf("星期四\n");             //       break;
      break;
    case 5:
      printf("星期五\n");
      break;
    case 6:
      printf("星期六\n");
      break;
    case 7:
      printf("星期天\n");
      break;
    default:                        
      printf("输入错误\n");
      break;
    }
    return 0;
  }

2.循环语句

2.1 while循环

int main()
  {
    int i = 1;
    while (i <= 10)
    {
      if (i == 6) 
        break;
      printf("%d ", i);
      i++;
    }
    return 0;
  }

结论:break的作用------直接跳到结尾(只要遇到break直接终止所有循环)

int main()
  {
    int i = 0;
    while (i < 10)
    {
      i++;
      if (i == 6)
        continue;
      printf("%d ", i);
    }
    return 0;
  }

结论:continue的作用-----回到开头-----终止本次循环,即本次continue后面的语句不再执行,跳回while的判断部分

2.2 getchar()和putchar()

getchar()-----读取一个字符

putchar()-----输出/打印一个字符

int main()
  {
    char password[20] = { 0 };
    printf("请输入密码:");
    scanf("%s", password);
    //清理缓冲区
    while (getchar() != '\n')
    {
      ;
    }
    //scanf读取完password后剩余一个\n,若不加getchar();会直接读取\n然后输出放弃确认
    printf("请确认(Y/N):");
    int ch = getchar();
    int ret = getchar();
    if (ret == 'Y')
    {
      printf("确认成功\n");
    }
    else
    {
      printf("放弃确认\n");
    }
    return 0;
  }

2.3 for循环

for(表达式1; 表达式2; 表达式3)
  {
    循环语句;
  }

表达式1:初始化

表达式2:判读

表达式3:调整

int main()
  {
    int i = 0;
    for (i = 1; i <= 10; i++)
      printf("%d\n", i);
    return 0;
  }

2.4 do…while循环

do…while()循环-----先执行再判断

do
   {
    循环语句;
   }
  while(表达式);     (判断)
  如:
  int main()
  {
    int i = 1;
    do
    {
      printf("%d ", i);
      i++;
    } 
    while (i <= 10);
    return 0;
  }

2.5 在arr数组(有序的)中找到某个数-----二分查找

int main()
  {
    int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
    int k = 7;
    int sz = sizeof(arr) / sizeof(arr[0]);    //计算元素个数
    int left = 0;          //左下标(以中间元素的下标为标准)      数组元素   1 2 3 4 5 6 7 8 9 10
    int right = sz-1;     //右下标(以中间元素的下标为标准)          下标    0 1 2 3 4 5 6 7 8 9
    while (left <= right)     //若查找的元素存在,右下标是会比左下标大的
    {
      //int mid = (left + right) / 2;
      int mid = left + (right - left) / 2;
      if (arr[mid] > k)
      {
        right = mid - 1;
      }
      else if (arr[mid] < k)
      {
        left = mid + 1;
      }
      else
      {
        printf("找到了,下标是:%d\n",mid);
        break;
      }
    }
        if (left > right)            //若查找的元素不存在,左下标是会比右下标大的
        printf("找不到\n");
        return 0;
      }

2.6 编写代码,演示多个字符从两端移动,向中间汇聚

int main()
  {
    char arr1[] = "welcome to LOL!!!!!";
    char arr2[] = "###################";
    int left = 0;
    int right = strlen(arr1)-1;
    while (right >= left)
    {
      arr2[left] = arr1[left];   //使arr1数组左边的元素赋给arr2左边,下同 
      arr2[right] = arr1[right];
      printf("%s\n", arr2);
      Sleep(1000);           //休息1秒,需引用头文件#include<windows.h>
      system("cls");         //执行系统命令的一个函数-cls-清空屏幕,需引用头文件#include<stdlib.h>
      left++;
      right--;
    }
    printf("%s\n", arr2);
    return 0;
  }

2.7 编写代码实现,模拟登陆情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则提示登陆成功,如果三次都输入错误,则退出程序)

int main()
  {
    int i = 0;
    char password[20] = { 0 };
    for (i = 0; i < 3; i++)
    {
      printf("请输入密码:");
      scanf("%s", &password);
      if (strcmp(password, "123456") == 0)      //(password=="123456"), == 不能用来比较两个字符串是否相等,应该使用一个库函数-strcmp
      {
        printf("登陆成功\n");
        break;
      }
      else
      {
        printf("密码错误\n");
      }
    }
    return 0;
  }

2.8 猜数字游戏

void menu()
  {
    printf("****************************************\n");
    printf("****       1.play     0.exit        ****\n");
    printf("****************************************\n");
  }
  void game()
  {
    //1.电脑生成一个随机数-使用rand()函数--在调用rand之前,使用srand函数为伪随机数生成器种子--在srand()函数里面要放一个随机值,所以引用时间戳放进去
    int ret = 0;
    int guess = 0;
    //拿时间戳来设置随机数的生成起点
    //time_t time(time_t *timer)  -时间戳的使用方法time函数(需引用time.h头文件)--time_t是它的类型,实质是long(长整型)--time_t *是指针类型
    ret = rand() % 100 + 1;
    //printf("%d\n", ret);
    //2.猜数字,猜大了提示你大了,......
    while (1)
    {
      printf("请输入一个整数(1-100):\n");
      scanf("%d", &guess);
      if (guess > ret)
      {
        printf("猜大了\n");
      }
      else if (guess < ret)
      {
        printf("猜小了\n");
      }
      else
      {
        printf("恭喜你,猜对了\n");
        break;
      }
    }
  }
  int main()
  {
    int input = 0;
    //srand 放在主函数,防止在game()函数里面过于频繁使用,以至于生成的随机值过于相近
    srand((unsigned int)time(NULL));
    do
    {
      menu();
      printf("请选择:\n");
      scanf("%d", &input);
      switch (input)
      {
      case 1:
        game();
        break;
      case 0:
        printf("退出游戏\n");
        break;
      default:
        printf("选择错误\n");
        break;
      }
    } while (input);
    return 0;
  }

2.9 goto语句的应用-----一个关机程序

在cmd中输入shutdown -s -t 60,电脑会在60s后关机;输入shutdown -a 会取消。代码形式:

int main()
{
  char input[] = { 0 };
  //system()--执行系统命令
  system("shutdown -s -t 60");
again:
  printf("请注意,你的电脑将在1分钟内关机,如果输入:我是猪,就会取消关机\n请输入:");
  scanf("%s", input);     //这里的input是数组,可以不用加&
  if (strcmp(input, "我是猪") == 0)      //strcmp()比较两个字符串
  {
    system("shutdown -a");
  }
  else
  {
    goto again;
  }
  return 0;
}

用循环形式:

int main()
{
  char input[] = { 0 };
  //system()--执行系统命令
  system("shutdown -s -t 60");
  while (1)
  {
    printf("请注意,你的电脑将在1分钟内关机,如果输入:我是猪,就会取消关机\n请输入:");
    scanf("%s", input);     //这里的input是数组,可以不用加&
    if (strcmp(input, "我是猪") == 0)      //strcmp()比较两个字符串
    {
      system("shutdown -a");
      break;
    }
  }
  return 0;
}

2.10 辗转相除法求最大公约数

求两个数的最大公约数-----辗转相除法:

假如两个数a=24,b=18,先让k=a%b=6,若结果不为0,则将b的值赋给a(a=b=18),k的值赋给b(b=k=6),a%b=0,则b为他们的最大公约数

int main()
      {
        int a = 190;
        int b = 25;
        int k = 0;
        while (a % b)         //a%b不等于0即为真,执行下面内容;a%b等于0为假,不执行
        {
          k = a % b;
          a = b;
          b = k;
        }
        printf("最大公约数为:%d\n", b);   //5
        return 0;
      }
目录
相关文章
|
15天前
|
Go C语言
分支语句与循环语句,详细讲解
分支语句与循环语句,详细讲解
|
8天前
|
C语言
分支和循环语句(3)
分支和循环语句(3)
12 0
分支和循环语句(3)
|
8天前
|
C语言
分支和循环语句(1)
分支和循环语句(1)
28 0
|
1月前
|
缓存 编译器 Go
分支语句和循环语句
分支语句和循环语句
56 0
|
10月前
|
算法
分支与循环语句的练习
分支与循环语句的练习
|
7月前
|
编译器 C语言 C++
分支语句和循环语句上
分支语句和循环语句
41 0
分支语句和循环语句上
|
6月前
|
C语言
分支语句和循环语句(1)
分支语句和循环语句(1)
38 0
|
6月前
|
数据安全/隐私保护 C语言
分支语句与循环语句(2)
分支语句与循环语句(2)
44 0
|
7月前
|
算法 数据安全/隐私保护
分支语句与循环语句——练习
分支语句与循环语句——练习
39 0
|
7月前
|
缓存 Go 数据安全/隐私保护
分支语句和循环语句下
分支语句和循环语句
57 0