C语言分支和循环(基础内容与新手易错)

初衷

写这篇文章旨在分享学习成果记录学习过程,如有知识性错误望各位大佬斧正。

目录

初衷

基础知识介绍

C语言关系运算符

C语言条件操作符(C中唯一的三目操作符)

C语言逻辑操作符

​编辑

​编辑

C语言的三种基本结构

顺序结构

选择结构

if语句

多个if语句的嵌套

悬空else

switch语句

循环结构

while循环

当输入scanf的值不存在比如连续ctrl+z三次,再终止循环。

for循环


基础知识介绍

C语言关系运算符

C语言中用于比较的表达式称为为关系表达式,里面的运算符就是关系运算符有如下六个:

1.>

2.<

3.!=

4.==

5.<=

6.>=

其中特别注意“==”,初学者应为还没习惯经常和赋值符“=”混淆,可以采用把要用的值写在等号左边如:“3==a”这样如果写错编译器会报警,真的可以减少很多不必要的麻烦。

C语言条件操作符(C中唯一的三目操作符)

书写形式:exp1 ? exp2 : exp3 ;

如果exp1为真,整个表达式返回exp2的计算值 ,如果为exp1假则返回exp3的计算值。

//改造前
# include<stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d", &a);
	if (a > 5)
		b = 3;
	else
		b = -3;
	printf("%d\n", b);
	return 0;
}
//改造后
# include<stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d", &a);
	b = a > 5 ? 3 : -3;
	printf("%d\n", b);
	return 0;
}

C语言逻辑操作符

逻辑运算符用于表达更复的关系式一共三种,代表了计算机语言中三种最经典的关系

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

&&:与运算符,只有左右两边的表达式都为真的时候整体才为真(同真为真,一假为假)

||:或运算符,左右两边的表达式有一个为真,整体返回真(一真为真,同假为假)

特别注意“if(12<a<100)”的写法是错误的应该写成“if(12<a&&a<100)”,用第一种程序只要a>12就会返回true达不到效果

C语言的三种基本结构

顺序结构
选择结构
if语句
# include<stdio.h>
int main()
{

if(...)
    printf.....
return 0;
}

if, else之后都只控制一个语句,如想控制多个语句可用大括号括起,大括号部分称为复合语句。

如下


 //编写程序数一下 1到 100 的所有整数中出现多少个数字9
# include<stdio.h>
int main()
{
	int i = 0;
	int count = 0;
	for (i = 1; i <= 100; i++)
	{
		if (i % 10 == 9)
			count++;
		if (i / 10 == 9)
			count++;
	}
	printf("%d", count);
	return 0;
}
多个if语句的嵌套

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

如下

//从大到小输出三个的数字
# include<stdio.h>
int main()
{
	printf("请输入三个数字将为你比较大小:");
	int a = 0;
	int b = 0;	
	int c = 0;
	scanf("%d%*c%d%*c%d", &a, &b, &c);
	if(a>b && b>c)
	{
		printf("%d>%d>%d", a, b, c);
	}
	else {
		if (a > c && c > b)
		{
			printf("%d>%d>%d", a, c, b);
		
		}
		else
		{
			if (b > a && a > c)
			{
				printf("%d>%d>%d", b, a, c);
			}
			else
			{
				if (b > c && c > a)
				{
					printf("%d>%d>%d", b, c, a);
				}
				else
				{
					if (c > b && b > a)
					{
						printf("%d>%d>%d", c, b, a);
					}
					else
					{
						if (c > a && a > b)
						{
							printf("%d>%d>%d", c, a, b);
						}
					}
				}
			}
		}
	}
	return 0;
}
悬空else

如果有多个if配一个else,else只与最近的if构成关系。

如下

此时程序目标输出为“equilateral triangle!”而实际输出多了“ordinary triangle!”。因为else与最近的if连用,第一个if被孤立,但第一个if判断完后执行第二个if,显然不满足第二个if的条件,执行else,所以有了该结果。

更正如下

方法为在第二个if前加else,当第一个if判断结束后不会进行第二个if的判断,也就不会有“ordinary triangle”了。

switch语句
# include<stdio.h>
int main()
{

switch(expression){
case value1:statement
case value2:statement
case value3:statement
default: statement
return 0;

}

switch相当于if语句的一种简写形式如下

//输入任意一个数得该数除以三的的余数
# include<stdio.h>
int main()//if 语句的写法
{
	int a = 0;
	
	scanf("%d", &a);

	if (a % 3 == 0)
		printf("余数为0\n");
	if (a % 3 == 1)
		printf("余数为1\n");
	if (a % 3 ==2)
		printf("余数为2\n");
	return 0;
}

转化为switch后

//输入任意一个数得该数除以三的的余数
# include<stdio.h>
int main()//用switch语句
{
	int a = 0;
	scanf("%d", &a);
	switch (a%3)
	{
	case 0:printf("余数为0");
		break;
	case 1:printf("余数为1");
		break;
	case 2:printf("余数为2");
		break;
	default:
		printf("你输入的数字有误");
		break;
	}
	return 0;
}

当expression==value时就会返回该value之后的内容

default当value里面没有expression时返回default后的内容

case后接的语句只能是整型常量表达式

expression后接的语句只能是整型表达式

case语句后不加break程序 会从上到下依次执行

case和后面的数字必须空一格。

循环结构
while循环
while(条件)
{

语句
}

通过while循环实现多组输入,这种情况在很多编程题目中都会体现如下 

//判断两数大小(使用while循环)
# include<stdio.h>
int main()
{
	int a = 0; int b = 0;
	while (scanf("%d%*c%d", &a, &b)!=EOF)
	{
		if (a > b)
			printf("a>b");
		else if (a < b)
			printf("a<b");
		else if (a == b)
			printf("a=b");

	}
	return 0;
}
当输入scanf的值不存在比如连续ctrl+z三次,再终止循环。
for循环

for循环的一个实例

//打印1000年到2000年之间的闰年
# include<stdio.h>
int main()
{
	int a = 1000;
	for (a = 1000; a <= 2000; a++)
	{
		if (a % 4 == 0&& a % 100 != 0)
		{
			printf("%d\n",a);
		}
		else
		{
		if (a % 400 == 0)
			{
				printf("%d\n", a);
			}
		}
	}	return 0;
}

for循环执行的顺序,for后括号内第一个表达式(判断语句)-》括号内第二个表达式(结束语句)-》for语句后大括号内的内容(实现逻辑)-》a++(实现调试)

for循环也相当于一种特殊的while循环

比较如下

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值