c语言中switch case怎么表示一个范围

之前我看到这个问题 和解答
比如给出一个分数,90以上是A,80到90是B,70到80是C。想用case语句。我弄了什么case90printf(''a'')好像不能表示一个范围。如果表示范围呢?目前只学了顺序结构和选择结构,没学深层的,希望不要写稍微高级的……谢谢

分享到:

举报| 2011-01-31 11:35提问者采纳
这个其实很简单,你可以转化一下,用分数除以10,那样就是一个范围啊,像这样score/10

然后问题就是 如果题目变成另一个的话 可是我还是得需要用到范围
是不是意思就是 我把原题中的已知常量比如n1 n2 n3....斗同时除以一个值 让它们变成单数 就可以满足
在n1和 n2之间的数也能 在case语句中表达出来?
简单点说我把局的那个例子 90以上是A,80到90是B,70到80是C
同时除以5的话 ‘如果我输入75 他也能正确输出?

1、当判断整数时

示例:判断整数范围

#include<stdio.h>

int main()

{

unsigned char buf[6]={0x00,0x07,0x11,0x60,0x61,0x66};

for(int i=0;i<6;i++)

switch(buf<i>)

{

case 0x00...0x10:printf("buf[%d]is 0x0~0x10\n",i);break;

case 0x11...0x20:printf("buf[%d]is 0x11~0x20\n",i);break;

case 0x30...0x60:printf("buf[%d]is 0x30~0x60\n",i);break;

case 0x61...0xff:printf("buf[%d]is 0x61~0xff\n",i);break;

}

}

2、当判断字符时

示例:将"0x00"~"0xff"转化为数值0x00~0xff

#include&lt;stdio.h&gt;

int main()

{

char buf[6][6]={"0xff","0X02","0X1f","0xf1","0xa1","0Xb0"};

for(int i=0;i&lt;6;i++)

if(buf<i>[0]=='0'&&(buf<i>[1]=='x'||buf<i>[1]=='X'))//匹配前缀

{

unsigned char val=0;

int err=0;

for(int j=2;j&lt;4;j++)

switch(buf<i>[j])

{

case'0'...'9':val=val*16+(buf<i>[j]-'0');break;

case'a'...'f':val=val*16+(buf<i>[j]-'a'+10);break;

case'A'...'F':val=val*16+(buf<i>[j]-'A'+10);break;

default:err=1;break;

}

if(!err)

printf("buf[%d]=0X%02X\n",i,val);

else

printf("buf[%d]ERR\n",i);

}

else

printf("buf[%d]ERR\n",i);

}

扩展资料:

include用法:

#include命令预处理命令的一种,预处理命令可以将别的源代码内容插入到所指定的位置;可以标识出只有在特定条件下才会被编译的某一段程序代码;可以定义类似标识符功能的宏,在编译时,预处理器会用别的文本取代该宏。

插入头文件的内容

#include命令告诉预处理器将指定头文件的内容插入到预处理器命令的相应位置。有两种方式可以指定插入头文件:

1、#include&lt;文件名&gt;

2、#include"文件名"

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-02-16

1、首先打开C-Free5.0,然后一个空白的C语言页面保存为switch.c文件,继续输入一般的C语言的基础格式。

2、C语言的输入语句,首先定义一个整型数值,然后从外面写入这个值。#include <stdio.h>main(){int a;printf("请输入一个1-5之间的数值: ");scanf("%d",&a);}这里的scanf() 就是从外面读入一个值给a。

3、要看下输入的值是不是赋值给了a,可以把a的值输出,如下图调试。从下图可以得出,a的值就是输入的值。

4、接着按照获得的值来执行相应的步骤,代码如下图。

5、从系统中输入一个数值,然后switch根据读到的数值判断应该做什么,注意,输入的值必须是定义的值,就比如本程序里面switch里面是一开始定义的a.int a;printf("请输入一个1-5之间的数值: ");scanf("%d",&a);switch (a){}调试下程序,看看对不对。

第2个回答  推荐于2017-09-10
表示若干个范围,而且范围无规律,最好用条件语句,方便灵活。
-------------------
90以上是A,80到90是B,70到80是C 这种特殊情况,正好以10分为一档,所以它可以把分数除以10,凑成 9,8,7,6,....,于是可以用开关语句。
switch( make/10){
case 9: case 10: printf("A");break;
case 8: printf("B");break;
case 7: printf("C");break;
case 6: printf("D");break;
default: printf("E");break;
}
============
除以5的话
switch( make/5){
case 18: case 19: case 20: printf("A");break;
case 16: case 17: printf("B");break;
case 14: case 15: printf("C");break;
case 12: case 13: printf("D");break;
default: printf("E");break;
}追问

对,我想知道的是,你看那个人提的问题如果,归成90 80 70.....铛的话,输入85就不能被识别,这是为什么,另如果除以一个数的话,对这个数有什么要求,就能使case1和case2之间的数也得以表达出来。。这样子表达,你能不能看懂??

追答

85/10 整型除以整型得整型 85/10 = 8
80/10 得8,
89 / 10 也得 8
它们都在 case 8: 一档里。
============
直接用 80, 90 :
85/10*10 = 80
89/10*10 = 80

追问

你太棒了!这么一说直接懂了

本回答被提问者采纳
第3个回答  推荐于2017-10-01

使用多个case叠加即可。比如下面的代码,当输入字符为+、a、或者大写字母A时,都可以调用f_add()。

#include <stdio.h>
void f_add(void) {printf("execute + operation\n");}
void f_sub(void) {printf("execute - operation\n");}
void f_mul(void) {printf("execute * operation\n");}
void f_div(void) {printf("execute / operation\n");}
int main()

char ch;
scanf("%c", &ch);
switch (ch)
{
case '+':
case 'a':
case'A':
f_add(); break;
case '-':
case 's':
case 'S':
f_sub(); break;
case '*':
case 'm':
case 'M':
f_mul(); break;
case '/':
case 'd':
case 'D':
f_div(); break;
}
 
return 0;
}

第4个回答  2019-12-01
#define Min1 5
#define Max1 15

#define Min2 15
#define Max2 20

void switch_range()
{
//方法① switch语句可以用…来判断范围,要注意其边界条件(且为包含)
switch(x)
{
case Min1 ... Max1:       //等价于    5<=x && x<=15;
;
break;
case Min2 ... Max2:      //等价于    15<=x && x<=20;
;
break;
default:
break;
}

//方法② 另一种常用方法是将其 “/5取商” 常量判断
int x;
switch(x/5)
{
case 1:     //5-9

case 2:     //10-14
printf("5-14");
break;

case 3:    //15-19
printf("15-19");
break;
default:
;
break;
}
}