C语言用if和switch语句解决一个问题

有一位超级战士被空降到一个未知的地区,该战士带有一个GPS接收机和PDA设备。该地区中有5个特殊的区域:A区、B区、C区、D区、O区。该地区的示意地图如下图所示。其中,A区为雷区,B区中有陷阱,C区中有埋伏,D区为武器库,O区为人质区。
该战士携带的GPS接收机,可以告诉他降落地点的经纬度坐标(用X, Y表示)。若将由GPS接收机显示的坐标值输入到他的PDA中,PDA中会显示出他所在的区域。

如果他的位置在A区,则PDA上会显示“你现在在A区,小心地雷!”;
如果他的位置在B区,则PDA上会显示“你现在在B区,小心有陷阱!”;
如果他的位置在C区,则PDA上会显示“你现在在C区,小心敌人埋伏!”;
如果他的位置在D区,则PDA上会显示“你现在在D区,可以补充武器!”;
如果他的位置在O区,则PDA上会显示“你现在在O区,快去解救人质!”;
如果他在上述5个区之外,则PDA上会显示“你现在在任务区外!”;
如果落在两个区域的边界线上,则PDA上会显示“你现在在两个区域的边界线上!”;
请你用C语言编程实现上面的PDA中的程序功能。
1) 超级战士的位置坐标(X、Y)要求在程序运行时输入;
2) 所在区域可以使用一个字符变量表示;
3) 判断战士所在区域、显示区域信息分别用不同的程序段编写;
 判断战士所在的区域的程序段要求使用if语句编写;
 PDA上显示区域信息程序段要求使用switch语句编写;
答案采纳后,多多的分给您

我用的是vc,因为tc下中文不能显示。
区域应该都是矩形的,现在给出区域的左上角和右下角的顶点坐标:
A:(A1,A2),(A3,A4);
B:(B1,B2),(B3,B4);
C:(C1,C2),(C3,C4);
D:(D1,D2),(D3,D4);
O:(O1,O2),(O3,O4);
代码如下:
#include
<stdio.h>
#define
A1
0
/*开始定义各区域的坐标,我这里取简单的情况:区域为线性排列的,大小相等的正方形*/
#define
A2
0
#define
A3
100
#define
A4
100
#define
B1
100
#define
B2
0
#define
B3
200
#define
B4
100
#define
C1
200
#define
C2
0
#define
C3
300
#define
C4
100
#define
D1
300
#define
D2
0
#define
D3
400
#define
D4
100
#define
O1
400
#define
O2
0
#define
O3
500
#define
O4
100
/*区域设定结束*/
#define
X
0
#define
Y
1
void
main(void)
{
int
loc[2],flag;
/*我用数组来储存坐标*/
printf("请输入坐标:");
scanf("%d%d",&loc[X],&loc[Y]);
if(loc[X]>A1&&loc[Y]>A2&&loc[X]<A3&&loc[Y]<A4)
flag='A';
else
if(loc[X]>B1
&&
loc[Y]>B2
&&
loc[X]<B3
&&
loc[Y]<B4)
flag='B';
else
if(loc[X]>C1
&&
loc[Y]>C2
&&
loc[X]<C3
&&
loc[Y]<C4)
flag='C';
else
if(loc[X]>D1
&&
loc[Y]>D2
&&
loc[X]<D3
&&
loc[Y]<D4)
flag='D';
else
if(loc[X]>O1
&&
loc[Y]>O2
&&
loc[X]<O3
&&
loc[Y]<O4)
flag='O';
else
if(loc[X]==A1
||
loc[Y]==A2
||
loc[X]==A3
||
loc[Y]==A4)
flag=0;
else
if(loc[X]==B1
||
loc[Y]==B2
||
loc[X]==B3
||
loc[Y]==B4)
flag=0;
else
if(loc[X]==C1
||
loc[Y]==C2
||
loc[X]==C3
||
loc[Y]==C4)
flag=0;
else
if(loc[X]==D1
||
loc[Y]==D2
||
loc[X]==D3
||
loc[Y]==D4)
flag=0;
else
if(loc[X]==O1
||
loc[Y]==O2
||
loc[X]==O3
||
loc[Y]==O4)
flag=0;
else
flag=1;
switch(flag)
{
case
'A':
printf("\n你现在在A区,小心地雷");break;
case
'B':
printf("\n你现在在B区,小心有陷阱!");break;
case
'C':
printf("\n你现在在C区,小心敌人埋伏!");break;
case
'D':
printf("\n你现在在D区,可以补充武器!");break;
case
'O':
printf("\n你现在在O区,快去解救人质!");break;
case
0:
printf("\n你现在在两个区域的边界线上!");break;
case
1:
printf("\n你现在在任务区外!");break;
default:
printf("error");
}
getch();
}
不好意思,我刚学的C语言,可能代码质量不是很好。多多交流
温馨提示:内容为网友见解,仅供参考
第1个回答  2019-02-04
#include
"stdio.h"
/*
此处是gps定位函数
*/
char*
getplace(double
x,
double
y)
{
char*
returnvalue="你现在在两个区域的边界线上";
if(x>=0
&&
x<=75)
{
if
(y>45
&&
y<=60)
{
returnvalue="你现在在a区,小心地雷!";
}
else
if(y>=0
&&
y<=20)
{
returnvalue="你现在在c区,小心敌人埋伏!";
}
}

if
(y>20
&&
y<=45)
{
if(x>=0
&&
x<=20)
{
returnvalue="你现在在b区,小心有陷阱!";
}
else
if
(x>20
&&
x<=45)
{
returnvalue
=
"你现在在o区,快去解救人质!";
}
else
if
(x>50
&&
x<=75)
{
returnvalue
=
"你现在在d区,可以补充武器!";
}
}
return
returnvalue;
}
void
main()
{
double
x=0,y=0;
printf("请输入x坐标:\n");
scanf("%lf",&x);
printf("请输入y坐标:\n");
scanf("%lf",&y);
printf("%s",getplace(x,y));
//防止闪屏一下子消失
scanf("%lf",&x);
}
第2个回答  2019-02-17
这个我的手头上现在没有C的运行环境,我大概可以说一下,当然实现是比较简单的。
设置一个传参char
t;
你先输入坐标(scanf("%d,%d",&x,&y))(你可以用浮点型)
首先至于在哪个区域(是a,b,c,d等)你肯定有个判断的依据,这个是程序先前肯定得自己先定义。
用if判断if(x>0&&x<3y>0&&x<3)(假如这个是A区)
t='A'
以下下类推t=‘B’.....
边界也可以用if语句if(x=3&&y&&3||x=....)
t='F'
下面switch(t)
case
'A':
printf();break;
case
'B':printf();break;
.
.
.
case
'F'
:printf("您现在在两个区域边界上!");break;
default:printf("您现在在任务区域之外!");break;
大概是这么了。
第3个回答  2010-04-22
我用的是vc,因为tc下中文不能显示。

区域应该都是矩形的,现在给出区域的左上角和右下角的顶点坐标:
A:(A1,A2),(A3,A4);
B:(B1,B2),(B3,B4);
C:(C1,C2),(C3,C4);
D:(D1,D2),(D3,D4);
O:(O1,O2),(O3,O4);

代码如下:
#include <stdio.h>
#define A1 0 /*开始定义各区域的坐标,我这里取简单的情况:区域为线性排列的,大小相等的正方形*/
#define A2 0
#define A3 100
#define A4 100
#define B1 100
#define B2 0
#define B3 200
#define B4 100
#define C1 200
#define C2 0
#define C3 300
#define C4 100
#define D1 300
#define D2 0
#define D3 400
#define D4 100
#define O1 400
#define O2 0
#define O3 500
#define O4 100 /*区域设定结束*/
#define X 0
#define Y 1
void main(void)
{
int loc[2],flag; /*我用数组来储存坐标*/
printf("请输入坐标:");
scanf("%d%d",&loc[X],&loc[Y]);
if(loc[X]>A1&&loc[Y]>A2&&loc[X]<A3&&loc[Y]<A4)
flag='A';
else if(loc[X]>B1 && loc[Y]>B2 && loc[X]<B3 && loc[Y]<B4)
flag='B';
else if(loc[X]>C1 && loc[Y]>C2 && loc[X]<C3 && loc[Y]<C4)
flag='C';
else if(loc[X]>D1 && loc[Y]>D2 && loc[X]<D3 && loc[Y]<D4)
flag='D';
else if(loc[X]>O1 && loc[Y]>O2 && loc[X]<O3 && loc[Y]<O4)
flag='O';
else if(loc[X]==A1 || loc[Y]==A2 || loc[X]==A3 || loc[Y]==A4)
flag=0;
else if(loc[X]==B1 || loc[Y]==B2 || loc[X]==B3 || loc[Y]==B4)
flag=0;
else if(loc[X]==C1 || loc[Y]==C2 || loc[X]==C3 || loc[Y]==C4)
flag=0;
else if(loc[X]==D1 || loc[Y]==D2 || loc[X]==D3 || loc[Y]==D4)
flag=0;
else if(loc[X]==O1 || loc[Y]==O2 || loc[X]==O3 || loc[Y]==O4)
flag=0;
else flag=1;

switch(flag)
{
case 'A':
printf("\n你现在在A区,小心地雷");break;
case 'B':
printf("\n你现在在B区,小心有陷阱!");break;
case 'C':
printf("\n你现在在C区,小心敌人埋伏!");break;
case 'D':
printf("\n你现在在D区,可以补充武器!");break;
case 'O':
printf("\n你现在在O区,快去解救人质!");break;
case 0:
printf("\n你现在在两个区域的边界线上!");break;
case 1:
printf("\n你现在在任务区外!");break;
default:
printf("error");
}
getch();
}

不好意思,我刚学的C语言,可能代码质量不是很好。多多交流

参考资料:原创

本回答被提问者采纳
第4个回答  2019-05-13
我用的是vc,因为tc下中文不能显示。
区域应该都是矩形的,现在给出区域的左上角和右下角的顶点坐标:
A:(A1,A2),(A3,A4);
B:(B1,B2),(B3,B4);
C:(C1,C2),(C3,C4);
D:(D1,D2),(D3,D4);
O:(O1,O2),(O3,O4);
代码如下:
#include
<stdio.h>
#define
A1
0
/*开始定义各区域的坐标,我这里取简单的情况:区域为线性排列的,大小相等的正方形*/
#define
A2
0
#define
A3
100
#define
A4
100
#define
B1
100
#define
B2
0
#define
B3
200
#define
B4
100
#define
C1
200
#define
C2
0
#define
C3
300
#define
C4
100
#define
D1
300
#define
D2
0
#define
D3
400
#define
D4
100
#define
O1
400
#define
O2
0
#define
O3
500
#define
O4
100
/*区域设定结束*/
#define
X
0
#define
Y
1
void
main(void)
{
int
loc[2],flag;
/*我用数组来储存坐标*/
printf("请输入坐标:");
scanf("%d%d",&loc[X],&loc[Y]);
if(loc[X]>A1&&loc[Y]>A2&&loc[X]<A3&&loc[Y]<A4)
flag='A';
else
if(loc[X]>B1
&&
loc[Y]>B2
&&
loc[X]<B3
&&
loc[Y]<B4)
flag='B';
else
if(loc[X]>C1
&&
loc[Y]>C2
&&
loc[X]<C3
&&
loc[Y]<C4)
flag='C';
else
if(loc[X]>D1
&&
loc[Y]>D2
&&
loc[X]<D3
&&
loc[Y]<D4)
flag='D';
else
if(loc[X]>O1
&&
loc[Y]>O2
&&
loc[X]<O3
&&
loc[Y]<O4)
flag='O';
else
if(loc[X]==A1
||
loc[Y]==A2
||
loc[X]==A3
||
loc[Y]==A4)
flag=0;
else
if(loc[X]==B1
||
loc[Y]==B2
||
loc[X]==B3
||
loc[Y]==B4)
flag=0;
else
if(loc[X]==C1
||
loc[Y]==C2
||
loc[X]==C3
||
loc[Y]==C4)
flag=0;
else
if(loc[X]==D1
||
loc[Y]==D2
||
loc[X]==D3
||
loc[Y]==D4)
flag=0;
else
if(loc[X]==O1
||
loc[Y]==O2
||
loc[X]==O3
||
loc[Y]==O4)
flag=0;
else
flag=1;
switch(flag)
{
case
'A':
printf("\n你现在在A区,小心地雷");break;
case
'B':
printf("\n你现在在B区,小心有陷阱!");break;
case
'C':
printf("\n你现在在C区,小心敌人埋伏!");break;
case
'D':
printf("\n你现在在D区,可以补充武器!");break;
case
'O':
printf("\n你现在在O区,快去解救人质!");break;
case
0:
printf("\n你现在在两个区域的边界线上!");break;
case
1:
printf("\n你现在在任务区外!");break;
default:
printf("error");
}
getch();
}
不好意思,我刚学的C语言,可能代码质量不是很好。多多交流

C语言用if和switch语句解决一个问题
1 void main(void)

请各位解一条关于C语言的问题,用 switch 语句来编!
用switch的话很麻烦,你要定义几个变量来记录购买的状态,然后才能switch。不如直接用if语句。这样程序的效率高些。你参考一下,不是很好 include <stdio.h> void main(void){ int shyi=0,kuzi=0,taoshu=0;int flag =0;int sum=0;scanf("%d %d",­i,&kuzi);if(shyi>=kuzi){ taoshu=...

用c#解决商场问题,需要switch语句
if (int.TryParse(str, out x) == false){ \/\/把字符串转成double数字,但如果你输入的不是数字,是字母或者其他,就会结束程序 Console.WriteLine("你输入的根本不是数字!");} else \/\/如果输入的是数字,就开始switch计算 { int money = x \/ 1000; \/\/除1000基数 double real = 0;switch...

...我为下面这道题编个程序,分别用if else 和switch语句做
int x = 0, y = 0;printf("***请按提示选择***\\n");printf("a---本校全日制学生\\n");printf("b---本校夜大学生\\n");printf("c---外校学生\\n");scanf("%c", &c);if(c == 'a'){ printf("你是本校全日制学生,不收付费 ^_^\\n");} if(c == 'b'){ printf("本...

根据下面函数关系,对输入的每一个x,计算相应的y值,要求用C语言...
return 0;} 用switch case语句:#include <stdio.h>int main(){ int x,y;scanf("%d",&x);if(x<0) y=0;else { switch(x\/10) { case 0:y=x; break;case 1:if(x==10) y=x;else y=10;break;case 2:if(x==20){ y=10; break;} case 3:y=-0.5*x+20; break;} } p...

C语言中switch case语句的问题
void main(){ int I, k, a, b, c, d, e, f,g;printf("请输入利润I:\\n");scanf("%d", &I);a = I * (1.0f\/10); \/\/此处强制为浮点类型,不然a一直是0,看你的意思了 b = (I - 100000) * 75\/1000;c = (I - 200000) * 5\/100;d = (I - 400000) * 3\/1...

这个C语言程序怎么写??进来看看,拜托啦~
cGrade = 'A';千万不可用findlingocode的if语句,如果score < 60的话会一直运行下来的,这样无形中浪费很多时间了!\/\/\/ 如果想速度更快的话可以用下面这种:cGrade = 'E';nScore \/= 10;if( 10==nScore )cGrade = 'A';else { if( nScore >= 6 ){ cGrade = cGrade - (nScore -...

...按下式输出它的等级,要求分别写作if结构和swi
int main(){ int score = 0; char ret; printf("请输入学生的成绩:\\n"); scanf("%d", &score); if(score >= 90) ret = 'A'; else if(score >= 80) ret = 'B'; else if(score >= 70) ret = 'C'; else if(score >= 60) ret = ...

几个简单的c语言小问题 解决一题给十分
一。 d=20 if(a) d=d-10; a=0 if条件语句为假不执行 else if(!b) 不执行 if(!c) d=15; else d=25;是 else if(!b)下的语句 也不执行 二。 x=1 y=z=x; 赋值语句 x先赋给z 再赋给y x=y==z 先判断条件语句 y==z 是真 的...

一个C语言解决邮费的问题。用switch编写,怎么写最简单,最直观!_百度...
&a,&b,&h);if (a>1||b>1||h>1){printf("包裹长宽高不符合要求,不予邮寄\\n");return 0;}printf("请输入包裹重量:");scanf("%f",&weight);if (weight>30){printf("重量超过30kg,不予邮寄\\n");return 0;}s=(int)(weight-0.001)\/10;\/\/假定每个包裹重量超过1克switch (s)...

相似回答
大家正在搜