分支与循环(一)

本文详细介绍了C语言中的分支结构(if-else、elseif和switch)、循环结构(while、break和continue),包括它们的语法、用法示例以及注意事项,帮助读者理解如何在程序中实现条件控制和重复执行。
摘要由CSDN通过智能技术生成

分支语句和循环语句

C语言是一门结构化的程序设计语言

生活中的结构无非就3种

  1. 顺序结构

  2. 选择结构

  3. 循环结构

现在着重学习后两种

什么是语句?

在C语言中,由;隔开的就是一个语句

int main()
{
  int a = 0;//这是一条语句
  ;//这也是语句——空语句
  return 0;
}

一、分支语句(选择结构)

if语句

if的语法结构:

if(表达式)
语句;

如果结果为真,则执行语句,如果为假,则什么都不执行。

在C语言中如何表示真假?

0表示假,非0表示真,如-1,不是零,表示为真。

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

如果结果为真,则执行语句1,如果为假,则执行语句2。

if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;

如果表达式1成立,执行语句1,表达式1不成立再判断表达式2,表达式2成立就执行语句2,不成立则执行语句3,只能执行这三种的其中一种。

else if可以写多个

int age = 10;
if(age<18)
  printf("未成年\n");

这是一个单支结构,只有一个分支

int age = 10;
if(age<18)
  printf("未成年\n");
else
  printf("成年\n");

if- else语句

int age = 10;
if(age<18)
  printf("未成年\n");
else if(18<=age && age<28)
  printf("青年\n");
else if(28<=age && age<50)
  printf("壮年\n");
else//上述任何一种情况都不成立也就是年龄>=50执行这一行
  printf("老年\n");

如果想写18-28属于青年的话,直接写else if(18<=age<28)是不行的,代码在执行的时候会先执行前半段18<=age,结果为假,这部分的结果变成0,然后接着执行0<28,结果为真,输出结果为青年,而设定的age为10,这显然是个错误的结果。

想同时满足两个条件应该用&&连接。

上述代码写成以下也是可以的,

int age = 10;
if(age<18)
  printf("未成年\n");
else //在age>=18的情况下,再细分
{
  if(18<=age && age<28)
    printf("青年\n");
  else if(28<=age && age<50)
    printf("壮年\n");
  else//上述任何一种情况都不成立也就是年龄>=50执行这一行
    printf("老年\n");
  }

注意

  • if语句控制多条语句要用大括号括起来
int age = 10;
if(age<18)
{
  printf("未成年\n");
  printf("不能打游戏\n");
}
  • 一对大括号{ }就是一个代码块

  • else会和距离最近未为匹配的if匹配

int main()
{
  int a = 0;
  int b = 2;
  if(a==1)
    if(b==2)
      printf("111\n"):
  else//虽然这里的缩进是和第一个if对齐的,但实际上是和第二个if成对。
    printf("222\n");
  return 0;//最终打印结果是空。
}

如何打印出222呢?加一个大括号即可:

int main()
{
  int a = 0;
  int b = 2;
  if(a==1)
    {
    if(b==2)
      printf("111\n"):
    }//这里就变成了一个代码块,条件成立,执行这个代码块,条件不成立,执行else。
  else
    printf("222\n");
  return 0;//最终打印结果是222。
}
  • 使用if的时候要注意代码的可读性,适当的使用{}可以使代码的逻辑更加清楚。
if(condition)
{
  return x;
}
return y;
if(condition)
{
  return x;
}
else
{
  return y;
}

这两段代码表达的意思完全一样:条件成立,返回x的值,条件不成立,返回y的值。但是第一段代码读起来的时候,要理解意思会困难许多。

  • 注意=与==的区别
int num = 4;
if(num = 5)//一个=是赋值,==才是判断相等
{
  printf("111\n");//这样写无论num是多少都会打印这一行。
}

为避免犯这种错误,可以把数字写在变量左边5==num,如果写成了5=num代码会报错,这样就能更容易注意到这个问题了。

打印1-100中所有的奇数

int main()
{
  int i = 1;
  while (i<101)
  {
    if(i%2==1)
    printf("%d ",i);
    i++;
  }
  return 0;
}
int main()
{
  int i = 1;
  while(i<=100)
  {
    printf("%d ",i);
    i+=2;
  }  
  return 0;
}

switch语句

常用于多分支的情况。

switch(整型表达式)
{
case 值:
语句;
break;
}

break是跳出循环,每个case后面都要加

示例:

int main()
{
  int day = 0;
  scanf("%d",&day);
  switch(day)
  {
  case 1:
    printf("星期1\n");
    break;
  case 2:
    printf("星期2\n");
    break;
  case 3:
    printf("星期3\n");
    break;
  }
  return 0;
}

switch( )语句执行时先判断括号内的结果是几,结果是几就会从下面的case中选择一个合适的进去,执行完之后break跳出去,case决定入口,break决定出口。

注意

  • case后面加的是:

  • switch( )括号内的必须是个整型,其他类型会报错。

  • case后面必须是整型常量表达式,不可以是变量。

  • break可以不用加。输入1-5时,输出工作日,6-7,输出工作日

int main()
{
  int day = 0;
  scanf("%d",&day);
  switch(day)
  {
  case 1:
  case 2:
  case 3:
  case 4:
  case 5:
    printf("工作日");
    break;
  case 6:
  case 7:
    printf("休息日");
    break;
  default://上面的情况全都没有,进入下面这个代码块,可写可不写。 
    printf("输入错误\n");
    break;
    }
    return 0;
}
  • break的实际效果是把语句列表划分为不同的部分

  • 最好在最后一个case后面加上break 编程好习惯

  • case是决定代码进入位置的,进去后只要没遇到break就会继续往下运行。

小练习题:m,n的值是多少

#include <stdio.h>
int main()
{
int n = 1;
int m = 2;
switch (n)
{
case 1://从这里进入开始一步一步执行下面的代码
m++;//m=3
case 2:
n++;//n=2
case 3:
  switch (n)
  {//switch允许嵌套使用
  case 1:
  n++;
  case 2://这个switch从这里进入
  m++;//m=4
  n++;//n=3
  break;//跳出case3的switch语句
  }
case 4://继续执行case4
m++;//m=5
break;//跳出switch语句
default:
break;
}
printf("m = %d, n = %d\n", m, n);//结果是m=5,n=3
return 0;
}

二、循环语句

while循环

while的语法结构

while(表达式)
循环语句;

如果表达式为真,执行循环语句,执行完后再次判断,为真再次执行,如果有一次为假,停止循环.

打印1-10

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

break跳出循环,永久终止循环

int main()
{
  int i = 1;
  while(i<=10)
  {
    if(i == 5)//当i=5时会执行这一句
      break;//也就是跳出循环
    printf("%d ",i);
    i++;
  }
  return 0;//最后的结果是1 2 3 4 
}

continue跳过这次循环的剩下内容直接跳到循环开头开始下一次循环

int main()
{
  int i = 1;
  while(i<=10)
  {
    if(i == 5)//i = 5,执行continue
      continue;//剩下的都不执行,跳到循环开始的地方
    printf("%d ",i);
    i++;
  }
  return 0;//结果是1 2 3 4 然后程序没走完但是进入死循环
}

解释以下代码:

#include <stdio.h>
 
int main()
{
  int ch = 0;
  while ((ch=getchar()) != EOF)
  {
     putchar(ch);
  }
  return 0;
}
  • getchar用来接受用户输入的字符,存放在ch里,

  • 每次循环都会要求用户输入一个字符,然后判断字符是否为EOF,如果不是,那就输出刚刚输入的字符

  • EOFend of file文件结束标志,它的值是-1,输入这个东西不是直接在键盘上打EOF三个字母,要按住ctrl+z才行

在这里插入图片描述

  • 文件结束标志和字符串结束标志\0是类似的
  • 26
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值