C语言【初阶】——分支和循环语句

目录

分支语句

if语句

switch语句

 循环语句

while循环语句

do-while循环语句

 for循环语句


分支语句

if语句

  • if语句的三种结构
if(表达式)
  语句;


if(表达式)
  语句1;
else
  语句2; 
//注意: if  else这个整体为一个语句,不要认为if(表达式)是一个语句,else又是一个语句



if(表达式1)
  语句1;
else if(表达式2)
  语句2;
else
  语句3;
  •  错误写法
//18~30 青年
//31~50 中年
int main()
{
  int age=0;
  scanf("%d",&age);
  if(18<=age<=30)
    printf("青年");

}

注意:以上写法错误,程序会先进行判断18<=age是否为真,
如果结果为真,则18<=age这个表达式就相当于是1,进而判断1<=30
如果结果为假,则18<=age这个表达式就相当于是0,进而判断0<=30
从而输出结果为:青年

  • 正确写法  
int main()
{
  int age=0;
  scanf("%d",&age);
  if(18<=age&&age<=30)//使用&&符号
    printf("青年");
}

 示例:

/*age<18 未成年
18~30 青年
31~50 中年
51~70 中老年
71~99 老年
>99 老寿星 */
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age < 18)
		printf("未成年");
	else if (age <= 30)
		printf("中年");
	else if (age <= 70)
		printf("中老年");
	else if (age <= 99)
		printf("老年");
	else
		printf("老寿星");
	return 0;
}
int main()
{
 int age = 0;
    scanf("%d", &age);
    if(age<18)
   {
        printf("未成年\n");
   }
    else if(age>=18 && age<=30)
   {
        printf("青年\n");
   }
    else if(age>30 && age<=50)
   {
        printf("中年\n");
   }
    else if(age>50 && age<=70)
   {
        printf("中老年\n");
   }
    else if(age>70&&age<=99)
   {
        printf("老年\n");
   }
    else
   {
        printf("老寿星\n");
   }
    return 0;   
}
  • if else 的配对问题
#include <stdio.h>
int main()
{
    int a = 0;
    int b = 2;
    if(a == 1)
        if(b == 2)
            printf("hehe\n");
    else
//这里即使else和第一个if(a==1)相齐,但实际上它是和if(b==2)是配套的
//这样写容易致使逻辑混乱
        printf("haha\n");
    return 0;
}

 改正

#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;
}
//改正后逻辑就清晰起来了

注:(1)if 和else后面默认只能跟一条语句,如果要执行多条语句,应用{ }括起来

(2)else和离得最近的if匹配

  • 判断常量和变量相等的问题
int main()
{
  int a=10;
  if(5==a)
   printf("hehe\n");
//即使手误写成了a=5这样的赋值语句,编译器也会给出提示
  return 0;
}

 注意:C语言中变量是可以被赋值的,但表达式不行

switch语句

  • 语法结构
switch(表达式)
{
    case常量1:
            语句1;
    case常量2:
            语句2;
    case常量3:
            语句3;
    ...
    case常量n: 
            语句n;
    default: 
            语句; 
}//根据需求添加break
  •  示例
//输入1,输出星期一
//输入2,输出星期二
//输入3,输出星期三
//输入4,输出星期四
//输入5,输出星期五
//输入6,输出星期六
//输入7,输出星期日
int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
		printf("星期一\n");
		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;
    default:
        printf("输入错误\n");
        break;
	}
	return 0;
}

 循环语句

while循环语句

  • 语法结构
while(表达式)
 循环语句;
  •  while语句中存在continue语句
  1. while循环中continue的作用:跳过本次循环的后边的代码,直接去判断部分,看是否进行下一次判断 
  2. while循环中的break是永久的终止循环,只要遇到break,循环就终止
int main()
{
 int i = 1;
 while(i<=10)//判断部分
 {
   if(i==5)
    continue;

   printf("%d ",i);
   i++;
 }
 return 0;
}

 结果为:1 2 3 4 (不断执行)

int main()
{
  int i=1;
  while(i<=10)
  {
    i++;
    if(i=5)
     continue;

    printf("%d ",i);
  }
  return 0;
}

结果为:2 3 4 6 7 8 9 10 11

  • getchar()和putchar的用法 
  1. getchar() 获取(输入)一个字符getchar读取字符成功的时候,返回字符的ASCII码值;读取失败或遇到文件末尾的时候就返回EOF
  2. putchar() 输出一个字符
  3. 运行时 Ctrl+z(敲回车)终止程序

示例

int main()
{
	int ch = 0;
	while ((ch = getchar()) != EOF)
	{
		if (ch < '0' || ch > '9')
			continue;
		putchar(ch);
	}
	return 0;
}

 代码目的:输出字符 '0'~'9'

  • 缓冲区

 

  •  解决

do-while循环语句

  • 语法结构
do
 循环语句;
while(表达式);

语法特点:循环至少执行一次 

#include <stdio.h>
int main()
{
  int i = 10;
  do
  {
   printf("%d ", i);
  }while(i<10);
  return 0;
}

结果:10 

关于break和continue语句在do-while循环语句中的使用和在while语句中的用法相同

 for循环语句

  • 语法结构 
for(表达式1; 表达式2; 表达式3)
 循环语句;

表达式1

表达式1为初始化部分,用于初始化循环变量

表达式2

表达式2为条件判断部分,用于判断循环是否终止

表达式3

表达式3为调整部分,用于循环条件的调整

 执行先后顺序

  •  for循环中的continue语句
#include <stdio.h>
int main()
{
 int i = 0;
 for(i=1; i<=10; i++)
 {
   if(i == 5)
    continue;
   printf("%d ",i);
 }
 return 0;
}

 结果:1 2 3 4 6 7 8 9 10

注:在for循环中,如果遇到continue,会跳过continue后边的代码,直接去循环的调整部分,注意区别while循环中的continue 

  • for循环中的break语句

break在for循环中也是直接终止循环,只要遇到break,循环就直接结束,这里和while循环相同 

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

 结果:1 2 3 4

  • for循环中省略表达式

for循环的三个表达式都可以省略,但是:判断部分如果省略了,就意味着判断部分恒为真,可能导致死循环

 示例:

int main()
{
 //代码1
 for(;;)
 {
    printf("hehe\n");
 }
 return 0;
}

结果:hehe死循环

 示例:

  • 使用多余一个变量控制循环 
int main()
{
  int x=0, y=0;
  for (x = 0, y = 0; x < 2 && y < 5; ++x, y++)
  {
    printf("hehe\n");
  }
  return 0;
}

 结果:hehe

            hehe

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胡闹的猫.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值