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

2402

被折叠的 条评论
为什么被折叠?



