前言:感谢您的关注哦,我会持续更新编程相关知识,愿您在这里有所收获。如果有任何问题,欢迎沟通交流!期待与您在学习编程的道路上共同进步!
一. 主干知识的学习
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语句的具体运用可看前面的博客。
感谢老铁的浏览,希望老铁可以一键三连加个关注,您的支持和鼓励是我前进的动力,后续会分享更多学习编程的内容。