前言:感谢您的关注哦,我会持续更新编程相关知识,愿您在这里有所收获。如果有任何问题,欢迎沟通交流!期待与您在学习编程的道路上共同进步!
一. 主干知识的学习
1.switch语句
switch语句可以处理多分支选择问题,根据其中break语句的使用方法,一般分3种情况。
(1)在switch语句的每个语句段中都使用break语句,这是switch语句的主要使用方法,一般使用形式为:
switch(表达式){
case 常量表达式1:语句段1;break;
case 常量表达式2:语句段2;break;
········
case 常量表达式n:语句段n;break;
default: 语句段n+1;break;
下面是该语句的流程图:
执行流程:首先求解表达式,如果表达式的值与某个常量表达式的值相等,则执行该常量表达式后的相应语句段,如果表达式的值与任何一个常量表达式的值都不相等,则执行default后的语句段,每执行完一个语句段后,执行break语句,从而跳出switch语句。
(2)在switch语句中不使用break语句,
switch(表达式){
case 常量表达式1:语句段1;
case 常量表达式2:语句段2;
········
case 常量表达式n:语句段n;
default: 语句段n+1;
区别:若不使用break语句则无法指定跳出循环,即如果表达式的值与常量表达式2的值相等,不但执行语句段2,还执行其后的所有语句段,最后跳出switch循环。
(3)在switch语句的某些语句段的末尾使用break语句,该用法可以在switch语句在执行需要执行的几个指定语句后及时跳出语句,从而实现更多的功能。
2.一个多分支结构
如果if-else语句的内嵌语句是另一条基本的if语句,就形成了嵌套的if-else语句,它的一般形式如下:
if(表达式1)
if(表达式2)语句1;
else 语句2;
else
if(表达式3)语句3;
else 语句4;
该语句实现了4路分支,流程图如下:
注意:这里有一个匹配原则,即else和if的匹配原则,else与最靠近它的且没有与别的else匹配过的if相匹配。
二. switch语句在具体问题中的应用
问题1:查询自动售货机中的价格。假设自动售货机出售4种商品:薯片,爆米花,巧克力和可乐,售价分别为3.0,2.5,4.0,和3.5元。在屏幕上显示以下菜单(编号和选项),用户可以连续查询商品的价格,当查询次数超过5次时,自动退出查询;查询不到5次,用户可以选择退出。当用户输入编号1~4,显示相应的商品的价格(保留一位小数);输入0,退出查询,输入其他编号,显示价格为0。
源程序:
#include <stdio.h>
int main()
{
int choice,i;
double price;
//下面为显示菜单
printf("[1] select crisps\n");
printf("[2] select popcorn\n");
printf("[3] select chocolate\n");
printf("[4] select cola\n");
printf("[0] exit\n");
for (i=1; i<=5; i++) //for循环实现查询5次
{
printf("Enter choice:");
scanf("%d", &choice); //输入数字的读入
if (choice==0)
break; //如果输入0则提前结束for循环
//下面是不同选择对应不同的商品及价格
switch (choice)
{
case 1:price=3.0; break;
case 2:price=2.5; break;
case 3:price=4.0; break;
case 4:price=3.5; break;
default:price=0.0; break; //若非指定选择则输出0.0价格
}
printf("price=%0.1f\n", price); //输出商品价格
}
printf("Thanks\n"); //for语句结束,谢谢查询
return 0;
}
问题2:编写一个简单的计算器程序,可根据输入的运算符,对两个整数进行加,减,乘,除,取余运算,请对除数为0的情况作特别处理。
源程序:
#include <stdio.h>
int main()
{
int value1,value2;
char op;
printf("type in an expression:"); //提示输入一个计算式
scanf("%d%c%d", &value1, &op, &value2);
switch (op)
{
case'+':
printf("=%d\n", value1+value2);
break;
case'-':
printf("=%d\n", value1-value2);
break;
case'*':
printf("=%d\n", value1*value2);
break;
case'/':
if (value2!=0)
{
printf("=%d\n", value1/value2);
}
else //对除数为零做处理
{
printf("Divisor can not be 0!\n");
}
break;
case'%':
if (value2!=0)
{
printf("=%d\n", value1%value2);
}
else
{
printf("Divisor can not be 0!\n");
}
break;
default:
printf("Unknown operator\n");
break;
}
return 0;
}
注意:这里对于字符型数据的运用以及if语句和for语句的使用可看前面的博客。
问题3:设计一个程序用于比较三个数中的最大值
#include <stdio.h>
int main()
{
printf("输入需比较的三个数:");
int a,b,c;
scanf("%d %d %d", &a,&b,&c);
int max;
if (a>b){
if (a>c){
max=a;
} else {
max=c;
}
}
else {
if (c<b){
max=b;
}else {
max=c;
}
}
printf("比较三个数中最大值为:%d", max);
return 0;
}
注意:这里if-else语句的具体运用可看前面的博客。
感谢老铁的浏览,希望老铁可以一键三连加个关注,您的支持和鼓励是我前进的动力,后续会分享更多学习编程的内容。