资源描述
气象信息与网络技术课程设计
题 目 地面/探空电码译码系统
学生姓名 …
学 号 ………….
学 院 电子与信息工程学院
专 业 通信工程
设计时间 16周
二O一三年十二月十六日
《气象信息与网络技术》课程设计
(南京信息工程大学 电子与信息工程学院,江苏 南京 210044)
摘要:地面/探空电码译码系统由地面部分和探空部分两部分组成,地面部分和探空部分均由C语言编程来完成,首先我们将输入地面电码文件,经过电码译码系统的处理将得出相关天气资料要素,同样在探空部分也如此。
关键字:探空、电码、译码
一、 前言
随着经济发展和人们生活水平的不断提高,气象对人类生活的影响程度也越来越大。对事关防灾减灾和应对气候变化能力建设的气象服务需求日益增加。气象电码蕴含了丰富的原始气象观测资料,气象电码的质量关系到天气预报准确度,关系到整个气象事业和人们的生活。科学准确的气象信息可以提高防灾减灾服务的质量,促进和谐社会的发展,提高应对气候变化能力积极推进社会的科学发展。而这些都要求我们有一个稳定、高效的气象电码译码系统,以适应发展的要求。
地面气象电码是地面气象数据载体,国内外专家对气象数据做过较多研究。自动气象站资料实时质量控制应在两个层面进行,一是在观测台站进行基本质量控制;二是在数据处理中心进行,数据处理中心采用综合时间一致性、内部一致性检查外,还应对仪器传感器失效、长期漂移进行评估。由于气象站点空间分布的不均匀性,在质量控制下,并不能以追求差值均方根误差最小为目标简单的对气象数据空间插值,而是应该追求误差稳定性。国内外对气象数据的研究较为丰富,但鲜有直接对气象电码质量控制相关的问题开展研究与讨论。
探空报告亦称高空压、温、湿和风报告,简称探空报。气象站用气球、火箭携带无线电 探空仪升空,对自由大气中各高度上气压、 温度、湿度和风观测结果的报告,或从飞机、 气球上用降落伞投下探空仪进行的观测报告。探空报的国际通用的电码名称代码为TEMP(陆地测站), TEMP SHIP(海洋测站)和TEMP DROP(下投式探空仪观测)。每天在00、12以及06、18时进行观测,并将观测结果按规定的电码型式编成电报,拍发给气象通信中心,再由通信中心汇总编辑后经电传和无线广播,供各地气象台分析高空天气形势和大气层结状况时使用。
我国气象事业是科技型、基础性社会公益事业,而气象单位是科技型、基础性社会公益事业单位。在国务院及相关部委的支持下,气象系统内部的学术研究氛围浓重。全国各级气象部门每年都会有一定量的气象及相关领域课题或项目立项。特别是随着近年来计算机技术和软件工程的发展,气象业务得到了飞快的发展,与计算机技术相关课题越来越受到气象部门重视。
本文将致力于设计一个小的气象地面/探空电码译码系统的研究与实现。
二、 需求分析
气象灾害的频繁发生,对人类的生产、生活造成了极大的影响,气象信息资源对经济社会发展的重要性已是不言自明了。气象信息对许多社会经济部门的发展和人民生活都有很大贡献。其贡献表现在以下方面:
1、政府部门需要根据气象部门提供的气象预报警报信息,对可能出现的暴雨、大风、冰雹、台风等灾害提前采取措施,最大限度地减少灾害对人民生命财产造成的损失;
2、气象信息对水利、电力、民航、运输等部门工作起着关键的作用;
3、气象预报警报信息系统以及公共气象信息服务是一种“公益性”的社会基础设施,利用该设施可以为人民生活或生产提供所需要的优质气象信息服务;
4、气象信息还是重要的经济资源,企业能有效利用气象信息,制定生产和销售计划,可以在一定程度上充分利用自然条件,从而提高经济效益等等。
当前,面对气候变暖等一系列气候、环境问题,各国间的气象信息的共享,对共同爱护地球、保护家园有着不可言说的重大意义气象信息网络系统是气象业务系统的中枢和纽带, 是现代气象业务体系的重要基础支撑,是国家信息基础设施的重要组成部分。说到地面/探空电码译码,也许大家会感到陌生,但是它却实实在在的影响着我们,几乎涉及到我们生活的方方面面。现在我们的手机电脑上都会安装查看天气的软件,看天气已经成了我们习以为常的一件事。
21世纪是我国国民经济持续、快速、健康发展的关键时期,经济建设、社会进步、人民生活和气象预报都有密切关系。改革开放以来,随着我国国力的增强和科学技术的迅速发展,我国气象预报的业务技术水平也有了快速的提高,在防灾减灾和国民经济建设中发挥了巨大作用。天气预报成了一种无形的财富。
在现实生活中,气象信息的主要表现形式便是天气预报,它关系着人们的衣食住行、生产、生活等各种活动,为人们的日常生活导航,使一切有条不紊地进行。而对气象信息的准确采集和翻译是这一切的保证,也是防灾减灾,保障人们生命财产安全的基础。作为气象信息的重要处理环节,电码译码必须要做好。电码译码系统对天气现象观测资料的实时显示以及对历史观测资料的查询权限,为天气预报员提供实时的天气资料,以便天气预报员进行天气分析及准确预报。电码译码系统提供给科研人员过去和现在的天气各要素资料,以便分析总结,研究天气的发展、演变,为揭示天气变化作出贡献。电码译码提高了对天气观测的准确性和可靠性,做好电码译码分析才能将气象信息的作用发挥出来,这也就决定了电码译码系统的广阔发展前景。
三、 概要设计
本系统由地面部分和探空部分两部分组成,地面部分和探空部分均由C语言编程来完成,首先我们将输入地面电码文件,经过电码译码系统的处理将得出相关天气资料要素,同样在探空部分也如此。具体内容如下流图所示:
1、 地面/探空电报译码数据流图
地面/探空电码文件
电码译码系统
各天气资料要素
图3.1地面/探空电码译码数据流程图
2、 地面/探空电报译码程序流图
在电码译码系统中输入相关电码文件(月、日、时次等信息),通过电码译码系统一系列的运算,最终得出相关天气要素。
当输入电码文件时,首先判断该文件是否为地面电码文件,若不是则显示电码资料出错返回电码文件输入;若是就直接读取一行,再输入指定站台号;若站台号输入正确,回车则显示正确的相关天气要素,反之则会显示站台号不存在,资料有误相关信息,同时会有是否继续翻译的提示。具体如流程图所示:
读取电码文件,译出各要素值
译出各要素
连续三次读一行
指定台站?
N
Y
返回
不是地面电码资料,出错
AAXX吗?
读一行
Y
N
行尾为“=”?
读一行
N
是否继续翻译?
Y
N
返回
Y
输入新的站台号
图3.2地面电码译码功能流程图
当输入电码文件时,首先判断该文件是否为探空电码文件,若不是则显示电码资料出错返回电码文件输入;若是就直接读取一行,再输入指定站台号;若站台号输入正确,回车则显示正确的相关天气要素,反之则会显示站台号不存在,资料有误相关信息,同时会有是否继续翻译的提示。具体如流程图所示:
读取电码文件,译出各要素值
译出各要素
连续三次读一行
指定台站?
N
Y
返回
不是探空电码资料,出错
AAXX吗?
读一行
Y
N
行尾为“=”?
读一行
N
是否继续翻译?
Y
N
返回
Y
输入新的站台号
图3.3探空电码译码功能流程图
四、详细设计
1、APPP组电码值翻译流程图
先输入参数,接着判断参数值是否超出范围;若超出,则输出错误信息,否则判断a的值;若a值为4则表示气压变化为上升,为1表示气压变化为不变,为0表示气压下降;做进一步判断,当a值为1或4时变化值为“+”变化量为ppp,输出结果;当a值为0时变化值为“-”变化量为ppp,输出结果;具体流程图如下:
开始
参数输入
参数是否超出范围
输出翻译结果
结束
输出错误信息
N
Y
为‘0’
气压变化为上升
为‘1’
判断a的值
为‘4’
变化值为‘+’
变化量为ppp
气压变化为不变
气压变化为下降
变化值为‘-’
变化量为ppp
图4.1appp组电码值翻译流程图
2、 RRR组电码值翻译流程图
先输入参数,接着判断参数值是否超出范围;如果超出,则输出错误信息,如果参数值没有超出范围则根据RRR值的不同范围翻译成为相应的降水量,并且输出翻译后的结果;具体流程图如下:
开始
参数输入
参数是否超出范围
输出翻译结果
结束
输出错误信息
N
Y
根据不同RRR值范围
翻译成相应降水量
图4.2RRR组电码值翻译流程图
3、 NhCLCMCH组电码值翻译流程图
先输入参数,接着判断参数值是否超出范围;若超出,则输出错误信息,否则判断CL的值;若CL=0或CL=-1时,则总云量为中层云,翻译总云量Nh值,根据CL翻译成对应低云状、根据CM翻译成对应中云状,输出翻译结果;若CL>=0&&CL<=9,总云量为低层云,翻译总云量Nh值,根据CL翻译成对应低云状、根据CM翻译成对应中云状,输出翻译结果;具体流程图如下:
开始
参数输入
参数是否超出范围
输出翻译结果
结束
输出错误信息
N
Y
总云量为中层云
根据CM翻译
成对应中云状
判断CL的值
根据CL翻译
成对应低云状
CL=0或CL=-1
总云量为低层云
翻译总云量Nh值
CL>=0&&CL<=9
根据CM翻译
成对应中云状
图4.3NhCLCMCH组电码值翻译流程图
4、 wwW1W2组电码翻译程序流程图
先输入参数,接着判断参数值是否超出范围;若超出,则输出错误信息,否则根据不同ww值翻译成现在天气现象,根据不同W1W2值翻译成过去天气现象;最后输出翻译结果;具体流程图如下:
开始
参数输入
参数是否超出范围
输出翻译结果
结束
输出错误信息
N
Y
根据不同ww值
翻译成现在天气现象
根据不同W1W2值
翻译成过去天气现象
图4.4 wwW1W2组电码值翻译流程图
5、PPPP组电码值翻译流程图
先输入参数,接着判断参数值是否超出范围;若超出,则输出错误信息,若没有超出继续判断第一个值是否为0;若为0,则海平面气压值超过1000百帕,PPPP翻译成相应海平面气压输出气压值;若不为0,则PPPP直接翻译成相应海平面气压输出气压值;具体流程图如下:
开始
参数输入
参数是否超出范围
输出气压值
结束
输出错误信息
N
Y
海平面气压值超过1000百帕
PPPP翻译成相应海平面气压
判断第一个值是否为0
Y
PPPP翻译成相应海平面气压
N
图4.5 PPPP组电码值翻译流程图
五、 编码设计
本次研究实验主要是采用了C语言编程来实现电码译码系统功能的。程序详见电子稿附录。
六、 运行与调试
(一)地面电码文件
1、输入正确的日期和正确的台站号时:
当输入正确日期5月28时00时刻正确台站号58040时,相关时刻相关站台的天气资料将会全部显示;并且还能继续翻译其他站台的天气信息。如下:
2、输入正确的日期和不正确的台站号时:
当输入正确日期5月29时06时刻和错误台站号10204时,由于此站台号不存在,将不会有相关天气资料显示,不过我们可以继续翻译其他正确的站台,如下:
3、 输入不正确的日期和正确的台站号时
当输入错误日期04月22时00时刻时,由于改程序设计时,只有当日期输入正确并且资料存在时,才会进行下一步输入站台号,因此当输入不正确的日期时,将会提示文件不存在的信息,如下:
(二)探空电码文件
1、 输入正确的日期和正确的台站号时:
当输入正确日期6月3日00时刻正确台站号57494时,相关时刻相关站台的天气资料将会全部显示,如下:
2、输入正确的日期和不正确的台站号时:
当输入正确日期6月3时00时刻和错误台站号85464时,由于此站台号不存在,将不会有相关天气资料显示,不过我们可以继续翻译其他正确的站台,如下:
3、输入不正确的日期和正确的台站号时:
当输入错误日期04月21时06时刻时,由于改程序设计时,只有当日期输入正确并且资料存在时,才会进行下一步输入站台号,因此当输入不正确的日期时,将会提示文件不存在的信息,如下:
七、 总结
对于以上我们实现的电码译码系统,我觉得我们的系统基本上完成了这个电码译码的工作,包括输入、输出、界面设计、错误处理等这些方面做的还很不错。不过我觉得还有很多可以改进和升级的地方。比如说多种方式输入,既支持一段一段输入,又支持文件输入,甚至还支持用ULR调用的网页输入等等;界面的优化,设计出更加美观的图形界面,可以结合地图,使查询结果能更加直观地展现出来;当然在报错,系统稳定性维护上还需进一步细化,还可以结合一些气象预报的知识,直接生成一个气象预报系统。我们可以更深一步的设计出一个更完美的系统,它可以接受各方的信息输入和查询,在互联网中直接实现远距离电码译码,无需将所有观测站的数据都传到总站处理,这样将会减轻各方面的工作量。我觉得以上需要改进和升级的地方便是我们的方向,我们可以努力尝试着去实现。
通过本次课程实验设计,我对电码译码有了更深一步的了解。这次电码译码系统课程设计实验使用C语言进行编程,对我来说实验最大的难点就是编程。这次实验我们在编程上面花了很长的时间,但是我收获了很多。首先了解到了气象地面电码和探空电码的一些基础知识,其次通过运用C语言编程也使得自己的编程能力得到了提高。这次课程设计实验给了我一次将课本学习与实践结合的机会。
鉴于现在平板电脑,智能手机发展势头火爆,我觉得我们可以针对不同的手机系统进行配套开发。不过这也得需要相关政府部门或者其他慈善机构合作,来保证我们的运行。我个人觉得通过这个系统发布预警应该比较具有广泛性,在预报重大自然灾害的前兆时,更能很好地达到预警的效果。相对于一个完善的系统规划,以上见解略显粗糙,一些细节还需进一步去落实,以实现系统的完善和升级,使此系统获得广大的使用和支持,以更好地服务人们。
八、参考文献
[1] 《地面气象电码手册》,中国气象局监测网络司 编,气象出版社,2007年版
[2] 《C语言程序设计教程》,谭浩强 编,高等教育出版社,2008年版
九、附录
电码译码程序:
#include <stdio.h>
#include <string.h>
int readone(char *ch,FILE *fp)
{
if(feof(fp))
return -1;
else
fgets(ch,80,fp);
return strlen(ch)-1;
}
int comp(char *ch,char *s,int n)
{ int i;
for(i=0;i<n;i++)
if (*(ch+i)!=*(s+i)) break;
if (i==n) return 1;
else return 0;
}
void main()
{
FILE *fp;
char station[6];
char ch[80];
char filename[]="AAXX0000.T00";
int month,day,hour,s,i;
int k,h,N1,dd,ff,N;
float VV;
printf("请输入月、日、时次\n");
scanf("%d%d%d",&month,&day,&hour);
filename[4]='0'+month/10;
filename[5]='0'+month%10;
filename[6]='0'+day/10;
filename[7]='0'+day%10;
filename[10]='0'+hour/10;
filename[11]='0'+hour%10;
kaishi:
if(fp=fopen(filename,"rt"))
{ char c;
printf("请输入站台号:\n");
scanf("%s",station);
readone(ch,fp);
readone(ch,fp);
readone(ch,fp);
if(!comp(ch,"AAXX",4))
printf("非地面资料,请检查!!!\n");
else
{
while(1)
{
k=readone(ch,fp);
if(k==-1)
{
printf(" 文件已结束,未找到站台号\n");
break;
}
else
{
if(comp(ch,station,5)) break;
while(k>0&&ch[k-1]!='=') k=readone(ch,fp);
}
}
}
if(k!=-1)
{
int iR,iX;
iR=ch[6];
switch(iR)
{
case '1': printf("是否编报降水量组: 编报\n");break;
case '3': printf("是否编报降水量组: 无降水而不编报\n");break;
case '4': printf("是否编报降水量组: 有降水但因未观测或观测值无法测定而不编报\n");break;
}
iX=ch[7];
switch(iX)
{
case '1':
case '4':printf("是否编报了现在天气和过去天气组: 编报\n");break;
case '2':
case '5':printf("是否编报了现在天气和过去天气组: 不编报(无规定要编报的天气现象)\n");break;
case '3':
case '6':printf("是否编报了现在天气和过去天气组: 不编报(未观测)\n");break;
}
if(ch[8]>'0'&&ch[8]<'9')
{
h=ch[8]-'0';
switch(h)
{
case 0:printf("云高:<50米\n");break;
case 1:printf("云高:50-100米\n");break;
case 2:printf("云高:100-200米\n");break;
case 3:printf("云高:200-300米\n");break;
case 4:printf("云高:300-600米\n");break;
case 5:printf("云高:600-1000米\n");break;
case 6:printf("云高:1000-1500米\n");break;
case 7:printf("云高:1500-2000米\n");break;
case 8:printf("云高:2000-2500米\n");break;
case 9:printf("云高:≥2500米,或无云\n");break;
}
}
else printf("云底高度不明,或云底低于测站而云顶高于测站\n");
VV=(ch[9]-'0')*10+(ch[10]-'0');
if(VV==00) printf("有效能见度:<0.1千米\n");
else if (01<=VV&&VV<=50) printf("有效能见度:%2.1f千米\n",VV/10.0);
else if (51<=VV&&VV<=55) printf("不用\n");
else if (56<=VV&&VV<=79) printf("有效能见度:%3.1f千米\n",VV-50);
else if (VV=80) printf("有效能见度:≥30千米\n");
else if (81<=VV&&VV<=88) printf("有效能见度:%3.1f千米\n",(VV-80)*5+30);
else if (VV==89) printf("有效能见度:>70千米\n");
else if (VV==90) printf("有效能见度:<0.05千米\n");
else if (VV==91) printf("有效能见度:0.05千米\n");
else if (VV==92) printf("有效能见度:0.2千米\n");
else if (VV==93) printf("有效能见度:0.5千米\n");
else if (VV==94) printf("有效能见度:1千米\n");
else if (VV==95) printf("有效能见度:2千米\n");
else if (VV==96) printf("有效能见度:4千米\n");
else if (VV==97) printf("有效能见度:10千米\n");
else if (VV==98) printf("有效能见度:20千米\n");
else printf("有效能见度:≥50千米\n");
if(ch[12]>'0'&&ch[12]<'9')
{
N1=ch[12]-'0';
switch(N1)
{
case 0:printf("无云\n");break;
case 1:printf("总云量:1或微量\n");break;
case 2:printf("总云量:2-3\n");break;
case 3:printf("总云量:4\n");break;
case 4:printf("总云量:5\n");break;
case 5:printf("总云量:6\n");break;
case 6:printf("总云量:7-8\n");break;
case 7:printf("总云量:9\n");break;
case 8:printf("总云量:10\n");break;
case 9:printf("因有雾或无法估计\n");break;
}
}
else printf("总云量未观测\n");
dd=(ch[13]-'0')*10+(ch[14]-'0');
switch(dd)
{
case 0:printf("静风,");break;
case 2:printf("风向:北东北(NNE),");break;
case 4:printf("风向:东北(NE),");break;
case 7:printf("风向:东东北(ENE),");break;
case 9:printf("风向:东(E),");break;
case 11:printf("风向:东东南(ESE),");break;
case 14:printf("风向:东南(SE),");break;
case 16:printf("风向:南东南(SSE),");break;
case 18:printf("风向:南(S),");break;
case 20:printf("风向:南西南(SSW),");break;
case 22:printf("风向:西南(SW),");break;
case 25:printf("风向:西西南(WSW),");break;
case 27:printf("风向:西(W),");break;
case 29:printf("风向:西西北(WNW),");break;
case 32:printf("风向:西北(NW),");break;
case 34:printf("风向:北西北(NNW),");break;
case 36:printf("风向:北(N),");break;
}
ff=(ch[15]-'0')*10+(ch[16]-'0');
if(ff==00) printf("静风\n");
else if(ff==88) printf("平均风速超过仪器所能测定的最大值,也不能确定其具体数值");
else printf("风速:%d米/秒\n",ff);
N=17;
while(ch[N]!='=')
{
float TTT,TdTdTd,P0P0P0P0,PPPP,ppp,RRR;
int UUU,ww,W1,W2,CL,CM,CH,Nh;
if(N==k)
{
k=readone(ch,fp);
N=0;
}
else N=N+1;
if((ch[N]=='3')&&(ch[N+1]=='3')&&(ch[N+2]=='3'))
{
printf("\n");
break;
}
else if(ch[N]=='1')
{
if((ch[N+2]=='/')||(ch[N+3]=='/')||(ch[N+4]=='/'))
printf("温度缺失!!!\n");
else
{
TTT=(ch[N+2]-'0')*10+(ch[N+3]-'0')+(ch[N+4]-'0')/10.0;
if(ch[N+1]=='0') printf("气温:﹢%3.1f℃\n",TTT);
else printf("气温:﹣%3.1f℃\n",TTT);
}
}
else if(ch[N]=='2')
{
if(ch[N+1]=='9')
{
if((ch[N+2]=='/')||(ch[N+3]=='/')||(ch[N+4]=='/'))
printf("相对湿度缺失!!!\n");
else
{
UUU=(ch[N+2]-'0')*100+(ch[N+3]-'0')*10+(ch[N+4]-'0');
printf("相对湿度:%d%\n",UUU);
}
}
else
{
if((ch[N+2]=='/')||(ch[N+3]=='/')||(ch[N+4]=='/'))
printf("露点温度缺失!!!\n");
else
{
TdTdTd=(ch[N+2]-'0')*10+(ch[N+3]-'0')+(ch[N+4]-'0')/10.0;
if(ch[N+1]==0) printf("露点温度:﹢%3.1f℃\n",TdTdTd);
else
{
if(TdTdTd==80.0) printf("露点温度:≤-80℃\n");
else printf("露点温度:﹣%3.1f℃\n",TdTdTd);
}
}
}
}
else if(ch[N]=='3')
{
if((ch[N+2]=='/')||(ch[N+3]=='/')||(ch[N+4]=='/'))
printf("本站气压缺失!!!\n");
else
{
P0P0P0P0=(ch[N+1]-'0')*100+(ch[N+2]-'0')*10+(ch[N+3]-'0')+(ch[N+4]-'0')/10.0;
printf("本站气压:%4.1f百帕\n",P0P0P0P0);
}
}
else if(ch[N]=='4')
{
if((ch[N+2]=='/')||(ch[N+3]=='/')||(ch[N+4]=='/'))
printf("海平面气压缺失!!!\n");
else
{
PPPP=1000+(ch[N+1]-'0')*100+(ch[N+2]-'0')*10+(ch[N+3]-'0')+(ch[N+4]-'0')/10.0;
printf("海平面气压:%5.1f百帕\n",PPPP);
}
}
else if(ch[N]=='5')
{
if((ch[N+2]=='/')||(ch[N+3]=='/')||(ch[N+4]=='/'))
printf("过去三小时本站气压的变化倾向和变量资料缺失!!!\n");
else
{
ppp=(ch[N+2]-'0')*10+(ch[N+3]-'0')+(ch[N+4]-'0')/10.0;
if(ch[N+1]=='4') printf("过去三小时本站气压无变化\n");
else if(ch[N+1]=='2') printf("过去三小时本站气压倾向上升,变量:﹢%4.1f百帕\n",ppp);
else printf("过去三小时本站气压倾向下降,变量:﹣%4.1f百帕\n",ppp);
}
}
else if(ch[N]=='6')
{
if((ch[N+1]=='/')||(ch[N+2]=='/')||(ch[N+3]=='/'))
printf("降水量缺失!!!\n");
else
{
RRR=(ch[N+1]-'0')*100+(ch[N+2]-'0')*10+(ch[N+3]-'0');
if((RRR>=001)&&(RRR<=988)) printf("降水量:%4.1f毫米\n",RRR);
else if((RRR>=991)&&(RRR<=999)) printf("降水量:%2.1f毫米\n",(RRR-990)/10);
else if(RRR==000) printf("不用\n");
else if(RRR==989) printf("降水量≥989毫米\n");
else printf("降水微量\n");
}
}
else if(ch[N]=='7')
{
if((ch[N+1]=='/')||(ch[N+2]=='/'))
printf("现在天气现象缺失!!!\n");
else
{
ww=(ch[N+1]-'0')*10+(ch[N+2]-'0');
switch(ww)
{
case 0:printf("没有出现规定要编报的各种天气现象\n");break;
case 1:printf("不用\n");break;
case 2:printf("不用\n");break;
case 3:printf("不用\n");break;
case 4:printf("现在天气现象:能见度因烟或火山爆发的灰尘障碍而降低\n");break;
case 5:printf("现在天气现象:观测时有霾\n");break;
case 6:printf("现在天气现象:观测时有浮尘,广泛散布的浮在空中的尘土\n");break;
case 7:printf("现在天气现象:由风吹起来的扬沙或尘土,但没有尘卷风或沙尘暴\n");break;
case 8:printf("现在天气现象:有尘卷风,但没有沙尘暴\n");break;
case 9:printf("现在天气现象:有沙尘暴\n");break;
case 10:printf("现在天气现象:轻雾\n");break;
case 11:printf("现在天气现象:有浅雾,呈片状,陆地厚度<2米,海上厚度<10米\n");break;
case 12:printf("现在天气现象:有浅雾,已连续,陆地厚度<2米,海上厚度<10米\n");break;
case 13:printf("现在天气现象:闪电\n");break;
case 14:printf("现在天气现象:有降水,没有到达地面或海面\n");break;
case 15:printf("现在天气现象:有降水,已到地面或海面,但在5000米外\n");break;
case 16:printf("现在天气现象:有降水,已到地面或海面,在测站附近,但本站无降水\n");break;
case 17:printf("现在天气现象:雷暴,但观测时没有降水\n");break;
case 18:printf("现在天气现象:飑,观测时或观测前一小时内在测站或视区内出现\n");break;
case 19:printf("现在天气现象:龙卷,观测时或观测前一小时内在测站或视区内出现\n");break;
case 20:printf("现在天气现象:毛毛雨\n");break;
case 21:printf("现在天气现象:雨\n");break;
case 22:printf("现在天气现象:雪、米雪或冰粒\n");break;
case 23:printf("现在天气现象:雨夹雪,或雨夹冰粒\n");break;
展开阅读全文