我的笔记--C语言三-选择结构程序设计

本文探讨了C语言中的选择结构,包括else if与连续if的区别,强调了else if只会执行一次的特性。接着介绍了条件运算符的使用方法,如 `(a > b) ? a : b`,并给出了实际应用示例。此外,详细阐述了switch语句的工作原理,展示了如何利用break避免多个case的后续执行。最后,提出了两个涉及选择结构的编程作业,用于巩固所学知识。

else if和连续if的区别

两者的区别关键在于,前者最多只会执行一次,而后者是有可能执行多次的

实例:使用if…else语句模拟信号灯

#include<stdio.h>
int main()
{
	int iSignal;	/*定义变量表示信号灯的状态*/
	printf("the Red Light is 0,\nthe Green Light is 1,\nthe Yellow Light is other number\n");   /*输出提示信息*/
	scanf("%d",&iSignal);		/*输入iSignal变量*/
	if(iSignal==1)		/*当信号灯为绿色时*/
	{
		printf("the Light is green,cars can run\n");/*判断结果为真时输出*/
	}
	if(iSignal==0)	/*当信号灯为红灯时*/
	{
		printf("the Light is red,cars can't run\n");	/*判断结果为真时输出*/
	}
	else	/*当信号灯为黄灯时*/
	{
		printf("the Light is yellow,cars are ready\n");
	}
	return 0;
}

假如用户输入的值为1,程序会判断为真,接着就会执行下一条语句

实例:使用ielse if语句模拟信号灯

#include<stdio.h>
int main()
{
	int iSignal;
	while(1)
	{
	printf("the Red Light is 0,\nthe Green Light is 1,\nthe Yellow Light is other number\n");   /*输出提示信息*/
	scanf("%d",&iSignal);
	}
	if(iSignal==1)		/*当信号灯为绿色时*/
	{
		printf("the Light is green,cars can run\n");/*判断结果为真时输出*/
	}
	else if(iSignal==0)	/*当信号灯为红灯时*/
	{
		printf("the Light is red,cars can't run\n");	/*判断结果为真时输出*/
	}
	else	/*当信号灯为黄灯时*/
	{
		printf("the Light is yellow,cars are ready\n");
	}
	return 0;
}

这个时候结果就唯一了,因为lese if 是对一系列互斥条件进行检验。

实例:运输公司对用户按路程计算费用。路程越远,每吨*千米运费折扣越高
s<250:无折扣
250<=s<500:2%折扣
500<=s<1000:5%折扣
1000<=s<20008%折扣
2000<=s<300010%折扣
3000<=s15%折扣
​
include <stdio.h>
int main(int argc, const char *argv[])
{
	float w,s,d,p,f;
	printf("请输入路程和重量和价格:\n");
	scanf("%f%f%f",&s,&w,&p);
	if(s<250&&s>=0)
	{
		d=0;
	}
	else if(s<500&&s>=250)
	{
		d=0.02;
	}
	else if(s<1000&&s>=500)
	{
		d=0.05;
	}
	else if(s<2000&&s>=1000)
	{
		d=0.08;
	}
	else if(s<3000&&s>=2000)
	{
		d=0.1;
	}
	else if(s>=3000)
	{
		d=0.15;
	}
else
{
	printf("input error");
}
f=w*s*p*(1-d);
printf("花费 %f",f);
	return 0;
}

条件运算符

条件运算符的一般形式

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

在运算中,首先对第一个表达式的值进行检验。如果值为真,则返回第二个表达式的结果值;如果值为假,则返回第3个表达式的结果值

 

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

首先判断表达式a>b是否为真,当为真时,将a的值赋给max变量;如果为假,则将b的值赋给max变量

实例:使用条件运算符计算欠款金额

#include<stdio.h>

int main()
{
	float fDues;	/*定义变量表示欠款数*/
	float fAmount;	/*表示要还的总欠款数*/
	int iOntime;	/*表示是否按时归还*/
	char cChar;		/*用来接受用户输入的字符*/

	
	printf("Enter dues amount:\n");	/*显示信息,提示输入欠款金额*/
	scanf("%f",&fDues);				/*用户输入*/
	printf("On Time? (y/n)\n");		/*显示信息,提示还款是否按时还款*/
	getchar();						/*得到回车字符*/
	cChar=getchar();				/*得到输入的字符*/
	iOntime=(cChar=='y')?1:0;		/*使用条件运算符根据字符选择进行选择操作*/
	fAmount=iOntime?fDues:(fDues*1.1);	/*使用条件运算符根据iOntime值的真假进行选择操作*/
	printf("the Amount is:%.2f\n",fAmount);/*将计算的应还的总欠款数输出*/
	return 0;
}

switch语句

switch语句是多分支选择语句一般形式如下:

switch(表达式)
{
	case 1:
		语句1
		break;
	case 2:
	case 3:
		语句2
		break;
	……
default:
		默认语句
		break;
}

可以看到如果在case 2后不使用break语句,那么符合检验时与符合case 3检验时的效果是一样的。也就是说,使用多路开关模式使得多种检验条件使用一种解决方式。

实例:使用switch函数编写日程安排

#include<stdio.h>

int main()
{
	int iDay=0;									/*定义变量表示输入的星期*/

	printf("enter a day of week to get course:\n");		/*提示信息*/
	scanf("%d",&iDay);							/*输入星期*/

	switch(iDay)
	{
	case 1:										/*iDay的值为1时*/
		printf("Have a meeting in the company\n");
		break;
	/*多路开关模式*/
	case 2:		
	case 3:
	case 4:
	case 5:
		printf("Working with partner\n");
		break;
	case 6:										/*iDay的值为6时*/
		printf("Go shopping with friends\n");
		break;
	case 7:										/*iDay的值为7时*/
		printf("At home with families\n");
		break;
	default:									/*iDay的值错误时*/
		printf("error!!\n");
	}
	return 0;
}

break如果去掉,运行结果会将后面的语句全部执行。

 

实例:使用switch函数将大写字母换成小写,将小写字母换成大写

#include <stdio.h>
int main(int argc, const char *argv[])
{
	char ch;
	printf("please input a character:\n");
	scanf("%c",&ch);
	switch (ch)
	{
	case 'A' ... 'Z':
		printf("%c\n",ch+32);break;
	case 'a' ... 'z':
		printf("%c\n",ch-32);break;
default:
		printf("error\n");
	}
	return 0;
}

 

作业1:设计一个程序,输入三个数a,b,c,输出最大的数

#include<stdio.h>

int main()
{
	int a,b,c;
	printf("please enter three numbers\n");
	scanf("%d%d%d",&a,&b,&c);
	if(a>b)
	{
		if(a>c)
		{
			printf("the max is a: %d\n",a);
		}
		else
		{
			printf("the max is c: %d\n",c);
		}
	}
	else
	{
		if(b>c)
		{
			printf("the max is b: %d\n",b);
		}
		else
		{
			printf("the max is c: %d\n",c);
		}
	}
	return 0;
}

先两个数比较大小,用较小的数和另一个数比较

第二种方法:

#include <stdio.h>
int main()
{
    int a,max,b,c;
    scanf("%d%d%d",&a,&b,&c);
    max = (((a>b)?a:b)>c)?((a>b)?a:b):c;
    printf("%d",max);
}

作业2:输入三个数比较大小,从小到大排序

#include <stdio.h>
int main()
{
    int a,b,c,t;    /*定义4个基本整型变量a、b、c、t*/
    printf("Please input a,b,c:\n");    /*双引号内的普通字符原样输出并换行*/
    scanf("%d,%d,%d",&a,&b,&c);    /*输入任意3个数*/
    if(a>b)    /*如果a大于b,借助中间变量t实现a与b值的互换*/
    {
        t = a;
        a = b;
        b = t;
    }
    if(a>c)    /*如果a大于c,借助中间变景t实现a与c值的互换*/
    {
        t = a;
        a = c;
        c = t;
    }
    if(b>c)    /*如果b大于c,借助中间变量t实现b与c值的互换*/
    {
        t = b;
        b = c;
        c = t;
    }
    printf("The order of the number is:\n");
    printf("%d,%d,%d\n",a,b,c);    /*输出函数顺序输出a、b、c的值*/
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是连阿连

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值