C语言分支和循环

前言:c语言是结构化的程序设计语言,而结构化体现在 == > 顺序结构,选择结构,循环结构!观察生活中的日常问题,其解决方法可以被拆分为这三种结构或其组合。

选择结构:if , swith;

循环结构:   for , while , do while;

一 ,操作符

1.1 关系操作符:

C 语⾔⽤于⽐较的表达式,称为 “关系表达式”(relational expression),⾥⾯使⽤的运算符就称
为“关系运算符”(relational operator),主要有下⾯6个。

>     大于运算符

>=   大于等于运算符

<     小于运算符

<=   小于等于运算符

==   相等运算符

!=    不相等运算符

 关系表达式通常返回 0 或 1 ,用其来表示真假,所以多个关系运算符不宜连用!C语言中 0 表示假,非 0 表示真。关系表达式常用于 if 与 while 语句上!

注意:a==b 是判断a是否与b相等,而 a=b 是赋值运算符,表示把b赋值给a。

1.2 条件操作符

条件操作符也叫三⽬操作符,需要接受三个操作数的,形式如下:

exp1 ? exp2(成真): exp3(成假)

例题: 1.如果输入的a值大于5,b取8;如果a小于5,b取-8;

int main()
{
	int a = 0;
	scanf("%d", &a);
	int b = (a > 5) ? 8 : -8;
	printf("a=%d b=%d\n", a, b);
	return 0;
}

2.输入两个数,找到其中的最大值;

int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int max = (a > b) ? a : b;
	printf("两个数的最大值为%d", max);
	return 0;
}

 

1.3 逻辑操作符

逻辑运算符提供逻辑判断功能,⽤于构建更复杂的表达式,主要有下⾯三个运算符。
!      :逻辑取反运算符(改变单个表达式的真假)。
&& :逻辑与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。 全1为1,有0则0
||     :逻辑或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)。 全0为0,有1则1

例题:

1.输入月份,当输入3到5月时,打印春天;(&&)

int month = 0;
 scanf("%d", &month);
 if(month >= 3 && month <= 5)
 {
 printf("春季\n");
}

2.一年中12月或者1月或者2月会下雪;( || )

int month = 0;
scanf("%d", &month);
if(month == 12 || month==1 || month == 2)
{
 printf("会下雪\n");
}

3.判断闰年

1. 能被4整除并且不能被100整除是闰年(&&)
2. 能被400整除是闰年
#include <stdio.h>
//代码1
int main()
{
 int year = 0;
 scanf("%d", &year);
 if(year%4==0 && year%100!=0)
 printf("是闰年\n");
 else if(year%400==0)
 printf("是闰年\n");
 
 return 0;
}

//代码2
int main()
{
 int year = 0;
 scanf("%d", &year);
 if((year%4==0 && year%100!=0) || (year%400==0))
 printf("是闰年\n");
 
 return 0;
}

 二 ,if 语句

2.1 if :

注意:if 与 else 语句 在默认情况下仅可以控制一条语句,要想控制多条语句,需要用到{ };

if ( 表达式 )
    语句

表达式成立 =>> 为真 =>> 语句成立;反之,则不成立;

例题:输⼊⼀个整数,判断是否为奇数

#include <stdio.h>
int main()
{
 int num = 0;
 scanf("%d", &num);
 if(num % 2 == 1)
 printf("%d 是奇数\n", num);
 return 0;
}

 

 2.2 if...else

如果⼀个数不是奇数,那就是偶数了,如果任意⼀个整数,我们要清楚的判断是奇数还是偶数怎么表示呢?
这里需要用到 if...else 语句
if ( 表达式 )
        语句 1
else
        语句2

 例题:输⼊⼀个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印偶数。

#include <stdio.h>
int main()
{
 int num = 0;
 scanf("%d", &num);
 if(num % 2 == 1)
 printf("%d 是奇数\n", num);
 else
 printf("%d 是偶数\n", num);
 return 0;
}

2.3  if...else if...else  

例题:输⼊⼀个⼈的年龄

如果年龄 < 18 岁,打印 " 少年 "
如果年龄在 18 岁⾄ 44 岁打印 " ⻘年 "
如果年龄在 45 岁⾄ 59 岁打印 " 中⽼年 "
如果年龄在 60 岁⾄ 89 岁打印 " ⽼年 "
如果 90 岁及以上打印 " ⽼寿星"
//⽅法1
#include <stdio.h>
int main()
{
 int age = 0;
 scanf("%d", &age);
 if(age<18)
 printf("少年\n");
 else if(age<=44)
 printf("⻘年\n");
 else if(age<=59)
 printf("中⽼年\n");
 else if(age<=89)
 printf("⽼年\n");
 else
 printf("⽼寿星\n");
 return 0;
}

注:如果有多个 if 与 else 语句,else 总是与最近的 if 匹配;

 三 ,switch 语句  

除了 if 语句外,C语言还提供了 switch 语句来实现分支结构; switch 语句是一种特殊形式的 if...else 结构,用于判断条件有多个结果的情况。它把多重的 else...if 改成更易用,可读性更好的形式。

switch (expression)
{
        case value1: statement
        case value2: statement
        default : statement
 }  
注:
switch 后的 expression 必须是整型表达式
case 后的值,必须是整形常量表达式

  

3.1 if 语句和 switch 语句的对比: 

练习:输入任意一个整数值,计算除3之后的余数

if 语句: 

int main()
{
	int n = 0;
	scanf("%d", &n);
	if (n % 3 == 0) {
		printf("余数为0\n");
	}
	else if(n%3==1)
	{
		printf("余数为1\n");
	}
	else {
		printf("余数为2\n");
	}
	return 0;
}

 用switch 语句改写 :

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

 注:case 和后边的数字必须有空格!每一个case语句执行完成后,需要加上break,才能跳出这个switch语句!

3.2 switch语句中break

在前面的例题中,如果去掉break,会出现什么情况呢?

int main()
{
	int n = 0;
	scanf("%d", &n);
	switch (n % 3)
	{
	case 0:
		printf("余数为0\n");
	case 1:
		printf("余数为1\n");
	case 2:
		printf("余数为2\n");
	}
	return 0;
}

 

可见没有了break语句,代码继续往下执行,执行了case 2 中的语句,所以在 switch 语句中break十分重要!但并不是所有 case 语句都需要 break ,需要根据实际情况来选择:

练习:

输⼊⼀个1~7的数字,打印对应的星期⼏
例如:
输⼊:1 输出:星期⼀
输⼊:2 输出:星期⼆
输⼊:3 输出:星期三
输⼊:4 输出:星期四
输⼊:5 输出:星期五
输⼊:6 输出:星期六
输⼊:7 输出:星期天
#include <stdio.h>
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;
 }
 return 0;
}
如果需求发⽣变化,变为:
1. 输⼊1~5,输出的是“⼯作⽇”;
2. 输⼊6~7,输出“休息⽇”
#include <stdio.h>
int main()
{
 int day = 0;
 scanf("%d", &day);
 switch(day)
 {
 case 1:
 case 2:
 case 3:
 case 4:
 case 5:
 printf("⼯作⽇\n");
 break;
 case 6:
 case 7:
 printf("休息⽇\n");
 break;
 }
 return 0;
}

3.3 switch语句中的defalut

switch 后边的 expression 的结果不是 value1 ,也不是 value2 的时候,就会执⾏
default 字句
就比如以上的练习,当Day输入不是1-7时,出现提示:输入错误!
#include <stdio.h>
int main()
{
 int day = 0;
 scanf("%d", &day);
 
 switch(day)
 {
     case 1:
     case 2:
     case 3:
     case 4:
     case 5:
     printf("⼯作⽇\n");
     break;
     case 6:
     case 7:
     printf("休息⽇\n");
     break;
     default:
     printf("输⼊错误\n");
     break;
     }
     return 0;
}

3.4 switch 语句中的case 与defalut 的顺序问题

没有顺序要求,只要满足实际要求即可,但我们一般把defalut放在后面。

四 ,while 循环

4.1 while 

while ( 表达式 )
        语句; // 如果循环体想包含更多的语句,可以加上⼤括号
# include <stdio.h>
int main ()
{
        if ( 1 )
        printf ( "hehe\n" ); //if 后边条件满⾜,打印⼀次 hehe
        return 0 ;
}

4.2 while 语句的执行流程

 4.3 while 循环实践

1.在屏幕上打印10的值:

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

2.输⼊⼀个正的整数,逆序打印这个整数的每⼀位

例如:
输⼊:1234,输出:4 3 2 1
输⼊:521,输出:1 2 5
#include <stdio.h>

 int main()
 {
 int n = 0;
 scanf("%d", &n);
 while(n)
 {
 printf("%d ", n%10);
 n /= 10;
 }
 return 0;
 }

五 ,for 循环

5.1 for

for ( 表达式 1 ; 表达式 2 ; 表达式 3 )
        语句;
表达式1 ⽤于循环变量的初始化
表达式2 ⽤于循环结束条件的判断
表达式3 ⽤于循环变量的调整

5.2 for 循环的执行流程

5.3 for 循环实践

1.在屏幕上打印1-10的值

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

 2.计算1-100之间3的倍数的数字之和

#include <stdio.h>
int main()
{
 int i = 0;
 int sum = 0;
 for(i=1; i<=100; i++)
 {
 if(i % 3 == 0)
 sum += i;
 }
 printf("%d\n", sum);
 return 0;
}
//⼩⼩的优化
//如果能直接产⽣3的倍数的数字就省去了多余的循环和判断
#include <stdio.h>
int main()
{
 int i = 0;
 int sum = 0;
 for(i=3; i<=100; i+=3)
 {
 sum += i;
 }
 printf("%d\n", sum);
 return 0;
}

5.4 while 与for 的对比

 

六 ,do-while 循环

6.1 语法形式

do
        语句;
while ( 表达式 )
while for 这两种循环都是先判断,条件如果满足就进入循环,执行循环语句,如果不满足就跳
出循环; 而do while 循环则是先直接进入循环体,执行循环语句,然后再执行  while 后的判断表达式,表达式为真,就会进行下一次,表达式为假,则不再继续循环。    
    

 6.2 do while循环的执行流程

6.3 do while循环的实例 

1.在屏幕上打印1~10的值 ;

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

 ⼀般 do while 使用在循环体至少被执行一次的场景下,所以较少⼀些。

2.输⼊⼀个正整数,计算这个整数是几位数?

例如:
输⼊:1234 输出:4
输⼊:12 输出:2
#include <stdio.h>
int main()
{
 int n = 0;
 scanf("%d", &n);
 int cnt = 0;
 do
 {
 cnt++;
 n = n / 10;
 } while (n);
 printf("%d\n", cnt);
 return 0;
}

七 ,break 语句 与 continue

在循环执行的过程中,如果某些状况发生的时候,需要提前终止循环,这是非常常见的现象。C语言中 提供了 break continue 两个关键字,就是应用到循环中的。
break 的作用是用于永久的终止循环,只要 break 被执行,直接就会跳出循环,继续往后执
行。
continue 的作用是跳过本次循环中 continue 后边的代码,在 for 循环和 while 循环中有
所差异的。

八 ,goto 语句

C语⾔提供了⼀种非常特别的语法,就是 goto 语句和跳转标号, goto 语句可以实现在同⼀个函数
内跳转到设置好的标号处。
例如:
#include <stdio.h>
int main()
{
 printf("hehe\n");
 goto next;
 printf("haha\n");
 
next:
 printf("跳过了haha的打印\n"); 
 return 0;
}

  • 23
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值