自学C语言——分支和循环(一)

接上一篇     自学C语言——数据类型和变量(二)

分支和循环(上)

C语言支持的三种结构:顺序,选择,循环

1.if语句

if

if (表达式)
语句

 表达式成立(为真),则语句执行,反之不执行

0为假,非0为真

//输入一个整数判断是否为奇数
int main()
{
	int num = 0;
	scanf("%d", &num);
	if (num % 2 == 1)
		printf("奇数\n");//C语言中一个=为赋值,两个==为相等
	return 0;
}

 输出:

3

奇数

else

if……else……

//输入一个整数判断是否为奇数,是奇数输出奇数,否则输出偶数
int main()
{
	int num = 0;
	scanf("%d", &num);
	if (num % 2 == 1)
		printf("奇数\n");//C语言中一个=为赋值,两个==为相等
	else
		printf("偶数\n");
	return 0;
}

 输出:

2

偶数

//输入一个年龄,>=18岁就输出:成年,否则就输出未成年
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age >= 18)
		printf("成年\n");
	else
		printf("未成年\n");
	return 0;
}

分支中包含多条语句

要用{ }括起来

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//输入一个年龄,>=18岁就输出:成年,否则就输出未成年
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age >= 18)
	{
		printf("成年\n"); 
		printf("可以恋爱了\n");
	}
	else
	{
		printf("未成年\n");
		printf("不能沉迷游戏\n");
	}
		
	return 0;
}

嵌套if

在if else语句中,else可以与另一个if语句连用,构成多重判断

//要求输入一个整数,判断输入的整数是0,还是正数或负数
int main()
{
	int n = 0;
	scanf("%d", &n);
	if (n == 0)
		printf("输入的值是0\n");
	else
	{
		if(n>0)
			printf("输入的值是正数\n");
		else
			printf("输入的值是负数\n");
	}//一条语句{}可以省略

	return 0;
}
省略{}写法
int main()
{
	int n = 0;
	scanf("%d", &n);
	if (n == 0)
		printf("输入的值是0\n");
	else if(n>0)
			printf("输入的值是正数\n");
	else
			printf("输入的值是负数\n");

	return 0;
}

 输入一个整数,如果是正数,判断是奇数还是偶数,并输出。如果不是正数则输出非正数。

int main()
{
	int n = 0;
	scanf("%d", &n);
	if (n > 0)
	{
		if (n % 2 == 1)
			printf("奇数\n");
		else
			printf("偶数\n");
	}
	else
	{
		printf("非正数\n");
	}
	return 0;
}

 输入一个人的年龄
如果年龄 < 18岁,打印"少年"
如果年龄在18岁至44岁打印"青年"
如果年龄在45岁至59岁打印"中老年"
如果年龄在60岁至89岁打印"老年"
如果90岁及以上打印"老寿星"

//输入一个人的年龄
//如果年龄 < 18岁,打印"少年"
//	如果年龄在18岁至44岁打印"青年"
//	如果年龄在45岁至59岁打印"中老年"
//	如果年龄在60岁至89岁打印"老年"
//	如果90岁及以上打印"老寿星"
int main()
{
	int age = 0;
	scanf("%d", &age);
	//判断
	if (age < 18)
		printf("少年\n");
	else if (age <= 44)//18-44
		printf("青年\n");
	else if (age <= 59)
		printf("中老年\n");
	else if (age <= 89)
		printf("老年\n");
	else
		printf("老寿星\n");

	return 0;
}

悬空else问题

如果有多个 if 和 else ,else总是和最近的if匹配。

int main()
{
	int a = 0;
	int b = 2;
	if (a == 1)
		if (b == 2)
			printf("hehe\n");
		else
			printf("haha\n");

	return 0;
}
//运行无结果
int main()
{
	int a = 0;
	int b = 2;
	if (a == 1)
	{
		if (b == 2)
			printf("hehe\n");
	}
		else
			printf("haha\n");

	return 0;
}
//运行结果为haha

2.关系操作符

常见的关系操作符

C语言用于比较的表达式,称为“关系表达式”,里面使用的运算符称为“关系运算符”,主要有六个

  • > 大于运算符
  • < 小于运算符
  • >= 大于等于运算符
  • <= 小于等于运算符
  • == 相等运算符
  • != 不相等运算符
a > b
a < b
a >= b
a <= b
a == b
a != b

关系表达式通常返回0或1表示真假。

C语言中,0表示假,所有非零值表示真。比如:20>12返回1,12>20返回0。

int main()
{
	int x = 0;
	scanf("%d", &x);
	if (3 == x)
		printf("hehe\n");

	return 0;
}
//输入3,输出hehe
//输入4,无输出

关系操作符连用

错误写法


int main()
{
	int a = 3;
	int b = 5;
	int c = 2;
	if (a < b < c)//先计算a<b,再计算1<c
		printf("hehe\n");

	return 0;
}

 应该改为

int main()
{
	int a = 3;
	int b = 5;
	int c = 2;
	if (a < b && b < c)//&并且
		printf("hehe\n");

	return 0;
}
//不会打印

关系表达式常用于 if 或 while 结构。

3.条件操作符

条件操作符也叫三目操作符,需要接受三个操作数

exp1 ? exp2 : exp3 

计算逻辑:如果exp1为真,exp2计算;如果exp1为假,exp3计算。计算的结果是整个表达式的结果。 

int main()
{
	int a = 0;
	int b = 0;
	scanf("%d", &a);
	b = (a > 5 ? 3 : -3);//三目操作符,也叫条件操作符
	printf("%d\n", b);

	return 0;
}

 使用条件表达式实现找两个数中的较大值。

int main()
{
	int a = 0;
	int b = 0;
	/*int m = 0;*/
	scanf("%d %d", &a, &b);
	int m = a > b ? a : b;
	printf("%d\n", m);

	return 0;
}

4.逻辑操作符:&&、||、!

!:逻辑取反运算符(改变单个表达式的真假)。

&&:逻辑与运算符,并且(两侧表达式都为真,则为真,否则为假)

||:逻辑或运算符,就是或者的意思(两侧至少有一个表达式为真,则为真,否则为假)

逻辑取反运算符!

a                !a

非零             0

0                   1

int main()
{
	int flog = 0;
	scanf("%d", &flog);

	if (!flog)
	{
		printf("hehe\n");
	}
	return 0;
}

flag为真,!flag就是假,反之...... 

逻辑与运算符

a            b        a&&b

非0        非0       1

非0        0           0

0           非0        0

0            0           0

有0就是0,两边都是真才是真

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

逻辑或运算符

a            b        a||b

非0        非0       1

非0        0           1

0           非0        1

0            0           0

有真为真,两个同时假才为假。

int main()
{
	int month = 0;
	scanf("%d", &month);
	if(month == 12||month == 1||month == 2)
	printf("冬天\n");
return 0;

}

判断year是否为闰年


1)能被4整除而不能被 100整除。
2)能被400整除。

#include <stdio.h>
int main()
{
	int year;
	printf("请输入具体年份:");
	scanf("%d", &year);
	if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0)
		printf("%d是闰年\n", year);
	else
		printf("%d不是闰年\n", year);
	return 0;
}

短路

C语言逻辑运算符,总是先对左侧的表达式求值,再对右边的表达式求值,如果左边的表达式满足逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。

int main()
{
	int i = 0, a = 0, b = 2, c = 3, d = 4;
//i = a++ && ++b && d++;
	i = a++||++b||d++;
	printf("a=%d\nb =%d\nc =%d\nd = %d\n", a, b, c, d);
return 0;
}

输出:

a=1
b =3
c =3
d = 4

——————————End——————————

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

混迹网络的权某

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

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

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

打赏作者

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

抵扣说明:

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

余额充值