C语言学习笔记——控制流语句

一、控制流语句

控制流语句:分支控制流、选择控制流、循环控制流

  • 分支控制流:
  • 单道型:if(表达式){语句;}
  • 分支型:if(表达式){语句1;}else{语句2;}
  • 多分支型:if(表达式1){语句1;}else if(表达式2){语句2;}else{语句3;}
  •  注:else 会与最近的 if 语句 组合。
  • 选择控制流:
  • 常用格式:
  • switch(常量表达式)
  •          case 常量1:
  •                              语句1;break;
  •          case 常量2:
  •                              语句2;break;
  •          ........
  •          default :
  •                               语句n;break;
  • 注意:case 后若不跟break,则会接着往下执行接下来的语句。(这是一个特点!)
  • 循环控制流:
  • 常用格式:
  • while(表达式){语句;}
  • do{语句;}while(表达式),先执行一次语句,再去判断表达式
  • for(表达式1;表达式2;表达式3){语句;}
  •  
  • int i =0;
  • for(i=0;i<100;i++)
  • {
  •     语句;
  •   }
  •  
  • 注:当使用在自加(++)、自减(--)时,处于 位置的不同(表达式 或者 语句中),循环的次数也不同!!!
  • 看下面例子。
  • 若 ++a 放在表达式中,由于先自加,再使用的原因,循环次数将会少1次,而a++ 则与在语句内的循环次数相同
  • 若是a++ 或者 ++a 放在语句中,则循环次数相同
  • 例1:
  • case 后面写了break 与 未写break 的区别。
#include<stdio.h>

void main()
{
	int a = 10 ;

	switch(a)
	{
		case 10:
		{
			printf("a equal 10\n" );
			break;
		}
		case 20:
		{
			printf("a equal 20\n" );
			break;
		}
		case 30:
		{
			printf("a equal 30\n" );
			break;
		}
	}
}

加入break后,输出结果如图所示:

未加break,输出结果如图所示:

  • 例2:
  • 利用switch的特性不加break,连续输出余下语句的特性!
  • 实现涌入输入年月,输出剩下的天数,考虑闰年 和 平年
  • 如:输入2018-11,输出2018剩下61天。
#include<stdio.h>

/*
实现用户输入年月, 输出剩下日期,考虑闰年 和 平年
如
输入: 2018-11
输出:2018年剩下61天。
 */

void main(int argc, char const *argv[])
{
	char f;
	int years, months, days;

	while(1)
	{		
		printf("输入格式,如:2018-9\n");
		printf("请输入年月:\n");

		int ret = scanf("%d %c %d", &years, &f, &months);

		if(ret == 3 && f == '-')
		{
			break;
		}
		else
		{
			printf("输入错误,请重新输入!\n");
			while(getchar() != '\n');
		}	
	}

	//闰年:能被4整除,不能被100整除,能被400整除
	if(( (years%4 == 0) && (years%100 != 0) )|| (years%400 == 0))
	{
		switch(months)
		{
			case 1:
				days +=31;
			case 2:
				days +=29;
			case 3:
				days +=31;
			case 4:
				days +=30;
			case 5:
				days +=31;
			case 6:
				days +=30;
			case 7:
				days +=31;
			case 8:
				days +=31;
			case 9:
				days +=30;
			case 10:
				days +=31;
			case 11:
				days +=30;
			case 12:
				days +=31; 
		}
	}
	else //平年
	{
		switch(months)
		{
			case 1:
				days +=31;
			case 2:
				days +=28;
			case 3:
				days +=31;
			case 4:
				days +=30;
			case 5:
				days +=31;
			case 6:
				days +=30;
			case 7:
				days +=31;
			case 8:
				days +=31;
			case 9:
				days +=30;
			case 10:
				days +=31;
			case 11:
				days +=30;
			case 12:
				days +=31; 
		}
	}

	printf("%d 年还剩下 %d天!\n",years,days);
}

输出结果,如图所示:

  • 例3:
  • 自加、自减处于 循环中的位置不同(表达式 或者 语句中),循环次数也不同
#include<stdio.h>
void main()
{
	int a = 1, n = 0;

	//while
	while(a++<10)
	{
		n++;
	}
	printf("while(a++<10) = %d\n", a);
	printf("循环了%d 次\n", n);

	a = 1, n = 0;

	while(++a<10)
	{
		n++;
	}	
	printf("while(++a<10) = %d\n", a);
	printf("循环了%d 次\n", n);

	a = 1, n = 0;

	while(a<10)
	{
		a++;
		n++;
	}	
	printf("while(a<10)a++ = %d\n", a);
	printf("循环了%d 次\n", n);

	a = 1, n = 0;

	while(a<10)
	{
		++a;
		n++;		
	}
	printf("while(a<10)++a = %d\n", a);	
	printf("循环了%d 次\n", n);
}

输出结果如图所示:

二、break 与 continue 的一些注意事项

  • break:
  • 只能在循环语句 或者 switch 中使用
  • 跳出与break最近的循环体
  • continue:
  • 只能在循环语句中使用
  • 跳出本次循环,进入到下一次循环中

猜你喜欢

转载自blog.csdn.net/laifengyuan1/article/details/86095666