4.C语言分支结构

分支结构(if、switch)

基础知识

C程序里的3种结构:

1.顺序 2.分支(选择) 3.循环

C语言执行程序的特点:

C语言是面向过程的,代码的执行顺序是一步接着一步的,因此在看代码的时候,我们要把自己当成CPU,一步一步往下走。

if 语句

if 语句:既是条件语句又是判断语句

if的三种基本结构

//1.
	if(表达式)	//表达式如果成立,也就是非0,那么就执行if后面的语句
	{
		语句;
	}
		//否则不进去执行
	if(表达式)
    	语句1;
		语句2;
        语句3;
//注意:不打花括号,上面的if语句实际上是这个样子的,也就是说只有语句1是在if判断条件成立后的执行语句内。
	if(表达式)
       {
       		语句1;
       }
		语句2;
        语句3;


//2.
	if(表达式)	//如果....
	{
		语句1;
	}
	else  //否则.....
	{
		语句2;
	}
	//如果表达式成立 那么执行语句1
	//否则就执行语句2


//3. 
	if(表达式1)
	{}
	else if(表达式2)
	{}
	else if(表达式3)
	{}...
	else
	{}
//先判断表达式1,成立就进去执行
//注意:执行完后,不会再判断后面if里表达式,因为后面if前面都有一个else,因此,if else只能进去一个。
//如果不成立则判断表达式2,表达式2不成立判断表达式3

题目:字符判断

练习题1:从键盘输入一个字符,判断它是否是字母,如果是的那么就打印yes,否则就打印no

//从键盘输入一个字符,判断它是否是字母
#include<stdio.h>
int main()
{
	char c;
	scanf("%c",&c);
	if((c>='A' && c<='Z')||(c>='a' && c<='z'))
		printf("yes\n");
	else
		printf("no\n");
	
	return 0;
}

题目:字符转数字

练习题2: 从键盘输入多个字符(数字字符) ,进行一个加法运算,需要考虑输入字符是字母的情况。
如:
输入9 8
输出 17

// 从键盘输入多个字符(数字字符) ,判断输入字符是否合法进行一个加法运算
#include<stdio.h>
int main()
{
	char a,b;
	char c;
	scanf("%c %c",&a,&b);
	if(('0'<=a && a<='9')&&('0'<=b && b<='9'))
	{
		c = (a - '0') + (b - '0');
		printf("%d\n",c);
	}
	else
		printf("输入错误!\n");
	return 0;
}
/*scanf:
scanf语句怎么写的就怎么输入,不要换行输入
应为回车键也会当做一个字符读入
如果实在想要换行输入,就在scanf输入语句后面添加一句
getchar();用于获取输入的最后一个字符,像下面这样
scanf("%c",&a);
getchar();
scanf("%c",&b);
getchar()是在输入缓冲区顺序读入一个字符(包括空格、回车和Tab)
从缓冲区读走一个字符,相当于清除缓冲区  */

题目:最大最小值

练习题3: 从键盘输入三个数,输出其中的最大值与最小值

//从键盘输入三个数,输出其中的最大值与最小值
#include<stdio.h>
#define P 0
#define MAX(a,b) (a)>(b)? a : b
#define MIN(a,b) (a)<(b)? a : b

int main()
{
	#if P
	//常规做法
	int a,b,c,max,min;
	printf("请输入需要比较的三个数:");
	scanf("%d %d %d",&a,&b,&c);
	if(a>b)
	{
		max = a;
		min = b;
	}
	else
	{
		max = b;
		min = a;
	}
	if(max < c)
		max = c;
	else if(c < min)
		min = c;
	printf("最大值为:%d,最小值为:%d\n",max,min);
	#endif
	//改进后
	int a,b,c;
	printf("请输入需要比较的三个数:");
	scanf("%d %d %d",&a,&b,&c);
	printf("%d\n",MAX(MAX(a, b), c));
	printf("%d\n",MIN(MIN(a, b), c));
	return 0;
}

宏定义:

#define命令是C语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。该命令有两种格式:一种是简单的宏定义,另一种是带参数的宏定义。

(1) 简单的宏定义: #define <宏名>  <字符串>

例: #define PI 3.1415926

(2) 带参数的宏定义 #define <宏名> (<参数表>) <宏体>

例:#define area(x) x*x

题目:三角形判定

练习题4: 输入三个整数,判断这三个整数是否能组成三角形,能打印yes

//判断输入的三个数能否形成三角形
//三角形成立条件:1.三边都大于0 
//2.任意两边之和大于第三边或任意两边之差小于第三边
#include<stdio.h>
#include<stdlib.h>
int main()
{
	int a,b,c;
	scanf("%d %d %d",&a,&b,&c);
	if((a+b)>c && (a+c)>b && (b+c)>a)
		printf("yes\n");
	else
		printf("no!\n");
	return 0;
}
/*法二:
int a,b,c;
if(abs(a-b)<c && abs(a-c)<b && abs(b-c)<a)
	printf("yes!\n");
else
	printf("no!\n");
*/

题目:2个数的排列输出

练习题5:输入两个数,从大到小依次输出

//输入两个数,按大小顺序输出
#include<stdio.h>
int main()
{
	int a,b;
	printf("请输入两个数:");
	scanf("%d %d",&a,&b);
	printf("%d>%d\n",(a>b)?a:b,(a<b)?a:b);
	return 0;
}
/*法二:
	int a,b,temp;
	if(a>b)
	{
		//交换a,b
		temp = a;
		a = b;
		b = temp;
	}
	printf("%d<%d",a,b);

*/

题目:3个数的排列输出

练习题6:输入三个数,从大到小依次输出

/*题目:输入三个数,按从大到小排列好输出
思路:a,b先进行比较,使其大小是a<b,如若不是,
交换a,b的值,同理a再和c比较,使a<c,此时a<b且a<c,
再比较b,c,使b<c,就可得a<b<c*/
#include<stdio.h>
int main()
{
	int a,b,c,temp;
	scanf("%d %d %d",&a,&b,&c);
	if(a>b)
	{
		temp = a;
		a = b;
		b = temp;
	}
	if(a>c)
	{
		temp = a;
		a = c;
		c = temp;
	}
	if(b>c)
	{
		temp = b;
		b = c;
		c = temp;
	}
	printf("%d>%d>%d\n",c,b,a);
	return 0;
}

switch语句

易错点:

case后面只能是常量或常量表达式。

用法:

switch(表达式)
{
    case 常量表达式1:
   			语句1; //可以是复合语句
    case 常量表达式2:
 			语句2; //可以是复合语句
	case 常量表达式3:
			语句3; //可以是复合语句
	case 常量表达式4:
 			语句4; //可以是复合语句
	 .......
	default:
 			语句n;
}

依次往下面执行的原理:

表达式的值先要求出来然后去和下面的常量表达式去比较*

匹配到表达式几 那么就从这里开始往下面执行

注意:如果匹配上常量表达式1

那么它执行的时候会将下面的所有的语句全部执行

语句1;

语句2;

语句3;

语句n;

直到执行到break或把switch里面的所有语句都执行完了才会跳出是switch

case可以共用语句

    switch()

	{
		case 1case 2:

		case 3:

				语句; 

	}

题目:成绩等级判定

练习题1:判断成绩等级

​ 90以上就是优秀

​ 80~90良好

​ 70~80一般

​ 60~70合格

​ 60以下不合格

//判断成绩等级
#include<stdio.h>
void fun(int n);
int main()
{
	int n;
	printf("请输入学生成绩:");
	scanf("%d",&n);
	if(n>100)
		printf("成绩输入有误!\n");
	else
		fun(n);
	return 0;
}
void fun(int n)
{
	switch (n/10)
		{
			case 10:
			case 9:
				printf("优秀\n");break;
			case 8: printf("良好\n");break;
			case 7: printf("一般\n");break;
			case 6: printf("合格\n");break;
			default:printf("不合格\n");break;
		}
}

题目:薪水提成计算

练习题2: 一个公司里面得薪水组成有提成这个环节

​ 如果业绩是0 ~ 100000 提成5%

​ 10w ~ 20w 提成是6%

​ 20w ~ 40w 提成是8%

​ 40w ~ 60w 提成是10%

​ 60w ~ 80w 提成是12%

​ 80w ~ 100w 提成是15%

​ 100w以上的是20%

​ 例:业绩110w 提成 = (110w-100w)*0.2 + 20w * 0.15 + 20w * 0.12 +20w * 0.1 + …+ 10w * 0.05

/*计算提成
思路:从大到小往下判断,如果业绩大于100w,那也一定大于80w*/
//方法1:使用if
#include<stdio.h>
#define P 0
int count(int money);
int main()
{
	int money;
	printf("请输入业绩:");
	scanf("%d",&money);
	printf("%d\n",count(money));
	return 0;
}
int count(int money)
{
	int tc;
	if(money>1000000)
	{
		tc += (money - 1000000) * 0.2;
		money =  money - 1000000;
	}
	if(money>800000)
	{
		tc += (money - 800000) * 0.15;
		money =  money - 800000;
	}
	if(money>600000)
	{
		tc += (money - 600000) * 0.12;
		money =  money - 600000;
	}
	if(money>400000)
	{
		tc += (money - 400000) * 0.1;
		money =  money - 400000;
	}
	if(money>200000)
	{
		tc += (money - 200000) * 0.08;
		money =  money - 2000000;
	}
	if(money>100000)
	{
		tc += (money - 100000) * 0.06;
		money =  money - 100000;
	}
	if(money<100000)
	{
		tc += money  * 0.05;
	}
	return tc;

}
//方法2:使用switch解决提成问题
#include<stdio.h>
int count(int money);
int main()
{
	int money;
	printf("请输入业绩:");
	scanf("%d",&money);
	printf("%d\n",count(money));
	return 0;
}
int count(int money)
{
	int tc;
	switch (money/100000)
	{
		default:
		case 10:
			tc += (money-1000000)*0.2;
			money = money -1000000;
		case 9:
		case 8:
			tc += (money-800000)*0.15;
			money = money -800000;
		case 7:
		case 6:
			tc += (money-600000)*0.12;
			money = money -600000;
		case 5:
		case 4:
			tc += (money-400000)*0.1;
			money = money -400000;
		case 3:
		case 2:
			tc += (money-200000)*0.06;
			money = money -200000;
		case 1:
			tc += money*0.05;
			break;
	}
	return tc;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值