顺序选择

顺序结构

所谓顺序结构就是按照从上到下依次执行的顺序。

选择(if语句 / switch语句)

语法结构

[!Warning] if注意点
![]image

  • else语句的匹配,else总是和最近的那个if相匹配。
  • 缩进格式不能意味着else的匹配;
    image

[!Note] tips

  • 在if else的后面总是用{}-养成良好的编程习惯,便于我/他人/编译器理解。
  • 即使只有一条语句的时候。-养成良好编程习惯;

注意

if如果没有大括号,那么if后面只会嵌套一条语句-带“;”的语句

	#include <stdio.h> /*包含头文件*/

	int main() /*主函数main*/

	{		
		int a=2,b=1;
		if(a<b)
			printf("alsjdfla");
			//
			printf("adsfasdf");
		//结果是:adsfasdf  说明缩进没有让第二个printf嵌套在if语句中
		
		return 0;



	}
	

if 后面如果有两条语句 然后后面再跟一个else那么,else会标红。原因是if 后面如果没有大括号,那么只会嵌套一条语句;

if

if(条件语句){
	语句...;
}

if()else

还有一种是:

//这种形式的话只有()后的一句话可以执行。
if()
	语句...;
else
	语句...;//到第一条语句else结束,而不是想python一样一缩进就是{}

if()else if{}

if(){
	语句1;
}else if(){
	语句2;
}else{
	语句3;
}

switch case

[!Warning] 注意
image

//语法结构
//type必须是整数或者是枚举类型
switch(type){
	//这个1也可以转化成有define定义的常数
	case 1:
		语句1;
		break;
	case 2:
		语句2;
		break;
	case 3:
		语句3;
		break;
	default:
		语句4;
		
}
```C
//分数等级
int score;
scanf("%d",&score);
score/=10;
//不过这样的缺点是不是单一出口,无法后续计算或者调用。
switch(score){
	case 9:
		printf("等级为A");
		break;
	case 8:
		printf("等级为B");
		break;
	case 7:
		printf("等级为C");
		break;
	...
}

用switch写出分段函数

#include<stdio.h>
#include<math.h>
int main()
{
	int x,flag;
	double y=0;
	scanf("%d",&x);
	flag=(x<2)?1:(x<6)?2:(x<10)?3:4;
	switch(flag)
	{
		case 1:y=x;break;
		case 2:y=pow(x,2)+1;break;
		case 3:y=sqrt(x+1);break;
		default:y=1*1.00/(x+1);break;
		
	}
	printf("y=%.2lf\n",y);
	return 0;
}

时间差代码

#include <stdio.h>

int main()
{	//下面需要解决的是,时差之间的分钟借位问题。
	int hour1, minute1;
	int hour2, minute2;
	//值得注意的是:如果int ih ,im;这条语句在不同的编译器中有不同的结果,vs2010C++会报错,vs2022则不会
	int ih , im;
	scanf_s("%d%d", &hour1, &minute1);
	scanf_s("%d%d", &hour2, &minute2);
	ih = hour2 - hour1;
	im = minute2 - minute1;
	if (im < 0) {
		im = 60 + im;
		ih--;
	}
	
	printf("时间差是%d小时%d分钟", ih, im);
	//需要测试的情况:
	//12:00 13:30 | 13:00 12:00 
	//



	return 0;
}

找零程序(if else)

#include <stdio.h>

int main()
{
	//找零计算器
	int price, change, balance;
	printf("请输入你的商品价格:");

	scanf_s("%d", &price);

	printf("请输入你的余额:");

	scanf_s("%d", &balance);

	change = balance - price;
	if (change >= 0) {
		printf("谢谢惠顾,找零%d元,欢迎下次光临", change);
	}
	else {
		printf("抱歉,余额不足,还应再付%d元", -change);
	}



	return 0;
}

两个数最大值程序(MAX/MIN)if / if else 解决方案

#include <stdio.h>
int main(){
	//请找出这两个数中的最大一个数;
	int a,b,max;
	scanf("%d",&a);
	scanf("%d",&b);
	if(a>b){
		max=a;
	}else{
		max=b;
	}
	printf("最大值是:%d",max)
}

求三个数的最大值/最小值

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

	//给出任意的三个数,然后算出最大的数
	int a , b, c;
	int max;
	printf("请输入三个整数:\n");
	scanf("%d%d%d",&a,&b,&c);

	if(a>b){
		if(a>c){
			max=a;
		}else{
			max=c;
		}
	}else{
		if(b>c){
			max=b;
		}else{
			max=c;
		}
	}
	printf("max为%d",max);
	return 0;
}

if ()else if{}

//编写一个数学分段函数;
/*
*f(x)=-1;x<0
	   0;x=0
	   2x;x>0
*/
#include <stdio.h>
int main() {
	//这样把f写在if语句中的好处是:方便后期的计算和或者函数调用;
	int x,f;
	scanf("%d",&x);
	if(x<0){
		printf("f=-1");
		f=-1;
	}else if(x==0){
		printf("f=0");
		f=0;
	}else{
		printf("f=2x");
		f=2*x;
	}
	return 0;
}

判断的条件

image

优先级

算数运算符的优先级>关系运算符

//测试优先级(算数运算符和关系运算符)
	printf("%d",7>=3+4);

关系运算符的优先级>赋值语句

#include <stdio.h>

int main()
{	
	int r,a;
	r=10;

	a=r>0;
	printf("%d",a);


	return 0;
	
}
//结果是 1 ,验证了r>0优先进行,而不是一开始就把r值赋值给a,如果那样结果就是10。

判断是否相等的 == 和 !=的优先级比其他的低,而连续的关系运算符是从左到右进行的,

5>3==6>4 结果为1
6>5>4  结果为0 , 说明在同关系运算符的情况,是从左到右的运行。
a==b==6 
a==b>0 / 2==2>0 (这个式子能够判断出那个优先) 结果是:0 说明是>优先运行。
posted @ 2022-07-13 18:52  Development_UP  阅读(53)  评论(0)    收藏  举报