零基础入门学习C语言005讲:分支程序设计(3)

条件运算符和条件表达式

条件运算符为“?和:”,它是一个三目运算符,即有三个参与运算的量。

由条件运算符组成条件表达式的一般形式为:

    表达式1?  表达式2: 表达式3

其求值规则为:如果表达式1的值为真,则以表达式2 的值作为条件表达式的值,否则以表达式2的值作为整个条件表达式的值。

条件表达式通常用于赋值语句之中。

例如条件语句:

    if(a>b)  max=a;

        else max=b;

可用条件表达式写为

    max=(a>b)?a:b;

执行该语句的语义是:如a>b为真,则把a赋予max,否则把b 赋予max

使用条件表达式时,还应注意以下几点:

1) 条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符。

因此

    max=(a>b)?a:b

可以去掉括号而写为

    max=a>b?a:b

 

2) 条件运算符?和:是一对运算符,不能分开单独使用

 

3) 条件运算符的结合方向是自右至左

例如:

a>b?a:c>d?c:d

应理解为

a>b?a:(c>d?c:d)

 

这也就是条件表达式嵌套的情形,即其中的表达式3又是一个条件表达式。

【例5.8】

#include "stdio.h"

void main()
{

	int a, b, max;
	printf("\n input two numbers:   ");
	scanf("%d%d", &a, &b);
	printf("max=%d", a>b ? a : b);

}

补充:输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符

#include <stdio.h>
void main() 
{
	char ch;
	scanf("%c", &ch);
	ch = (ch >= 'A'&&  ch <= 'Z') ? (ch + 32) : ch;
	printf("%c\n", ch);
}

switch语句

C语言还提供了另一种用于多分支选择的switch语句, 其一般形式为:

其语义是:计算表达式的值。并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。

【例4.9】

#include <stdio.h>
void main()
{
	int a;
	printf("input integer number:      ");
	scanf("%d", &a);
	switch (a)
	{
		case 1:printf("Monday\n");
		case 2:printf("Tuesday\n");
		case 3:printf("Wednesday\n");
		case 4:printf("Thursday\n");
		case 5:printf("Friday\n");
		case 6:printf("Saturday\n");
		case 7:printf("Sunday\n");
		default:printf("error\n");
	}
}

在上面的程序中,我们运行后输入4,会得到:

input integer number:      4
Thursday
Friday
Saturday
Sunday
error

为了避免上述情况,C语言还提供了一种break语句,专用于跳出switch语句,break 语句只有关键字break,没有参数。

请看后边例子……

【例4.10】

#include <stdio.h>
void main()
{
	int a;
	printf("input integer number:      ");
	scanf("%d", &a);
	switch (a)
	{
		case 1:printf("Monday\n"); break;
		case 2:printf("Tuesday\n"); break;
		case 3:printf("Wednesday\n"); break;
		case 4:printf("Thursday\n"); break;
		case 5:printf("Friday\n"); break;
		case 6:printf("Saturday\n"); break;
		case 7:printf("Sunday\n"); break;
		default:printf("error\n");
	}
}

在使用switch语句时还应注意以下几点:

 

1)  case后的各常量表达式的值不能相同,否则会出现错误。

 

2)  case后,允许有多个语句,可以不用{}括起来。

 

3)  casedefault子句的先后顺序可以变动,而不会影响程序执行结果。

 

4)  default子句可以省略不用。

4.11】输入三个整数,输出最大数和最小数。

#include <stdio.h>
void main(){
	int a, b, c, max, min;
	printf("input three numbers:    ");
	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 (min>c)
		min = c;
	printf("max=%d\nmin=%d", max, min);
}

4.12】计算器程序。用户输入运算数和四则运算符,输出计算结果。

#include "stdio.h"

void main()
{
	double a, b;
	char c;
	printf("input");
	scanf("%lf%c%lf", &a, &c, &b);
	switch (c)
	{
	case '+':
		printf("%lf\n", a + b);
		break;
	case '-':
		printf("%lf\n", a - b);
		break;
	case '*':
		printf("%lf\n", a * b);
		break;
	case '/':
		printf("%lf\n", a / b);
		break;
	default:
		printf("error");
	}
}

作业:

1 输入一个年份,并判断是否为闰年?

#include <stdio.h>

void main(){
	int a;
	printf("input a year:");
	scanf("%d", &a);
	if (a >= 0)
	{
		if (a % 4 == 0 && a % 100 != 0 || a % 400 == 0)
			printf("%d is a run_nian\n", a);
		else
			printf("%d is not a run_nian\n", a);
	}
	else
		printf("Error input!");
}

2.运输公司对用户计算运费。

路程(s)越远,每公里运费越低。标准如下:

   s<250km                       没有折扣

   250≤s<500                2%折扣

   500≤s<1000            5%折扣

   1000≤s<2000        8%折扣

   2000≤s<3000        10%折扣

   3000≤s                            15%折扣

设每公里每吨货物的基本运费为p,货物重为w,距离为s,

折扣为d,则总运费f的计算公式为:

f=p*w*s*(1-d)

#include <stdio.h>

void main()
{
	float p, w, s, d, f;
	printf("input p,w,s:");
	scanf("%f%f%f", &p, &w, &s);
	if (s < 250)
		d = 0;
	else if (s >= 250 && s < 500)
		d = 0.02;
	else if (s >= 500 && s < 1000)
		d = 0.05;
	else if (s >= 1000 && s < 2000)
		d = 0.08;
	else if (s >= 2000 && s < 3000)
		d = 0.1;
	else
		d = 0.15;
	printf("total is %.2f", p*w*s*(1 - d));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值