zoukankan      html  css  js  c++  java
  • 单词长度、GPS数据处理——第8周C编程练习

    1、单词长度(4分)

    题目内容:

    你的程序要读入一行文本,其中以空格分隔为若干个单词,以‘.’结束。你要输出这行文本中每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如“it’s”算一个单词,长度为4。注意,行中可能出现连续的空格。

    输入格式:

    输入在一行中给出一行文本,以‘.’结束,结尾的句号不能计算在最后一个单词的长度内。

    输出格式:

    在一行中输出这行文本对应的单词的长度,每个长度之间以空格隔开,行末没有最后的空格。

    输入样例:

    It’s great to see you here.

    输出样例:

    4 5 2 3 3 4

    时间限制:500ms内存限制:32000kb
    
    // 单词长度
    
    #include<stdio.h>
    int main(){
        char word;
        int i=0;
        while(1){
            scanf("%c", &word);
    // 分三种情况讨论,当遇到'.'时,如果前面有单词,输出单词位数,没有则直接跳出循环
            if (word == '.'){
                if (i!=0) printf("%d", i);
                break;
            }
    // 当遇到' '时,如果前面有单词,输出单词位数,且单词计数置零
            else if(word == ' '){
                if (i!=0) printf("%d ", i);
                i = 0;
            }
    // 遇到单词时,直接计数++
            else i++;
        }
        return 0;
    }
    

    2、GPS数据处理(6分)

    题目内容:

    NMEA-0183协议是为了在不同的GPS(全球定位系统)导航设备中建立统一的BTCM(海事无线电技术委员会)标准,由美国国家海洋电子协会(NMEA-The National Marine Electronics Associa-tion)制定的一套通讯协议。GPS接收机根据NMEA-0183协议的标准规范,将位置、速度等信息通过串口传送到PC机、PDA等设备。

    NMEA-0183协议是GPS接收机应当遵守的标准协议,也是目前GPS接收机上使用最广泛的协议,大多数常见的GPS接收机、GPS数据处理软件、导航软件都遵守或者至少兼容这个协议。

    NMEA-0183协议定义的语句非常多,但是常用的或者说兼容性最广的语句只有GPGGAGPGGA、GPGSA、GPGSVGPGSV、GPRMC、GPVTGGPVTG、GPGLL等。

    其中$GPRMC语句的格式如下:

    $GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,,,A*50
    

    这里整条语句是一个文本行,行中以逗号“,”隔开各个字段,每个字段的大小(长度)不一,这里的示例只是一种可能,并不能认为字段的大小就如上述例句一样。

    字段0:$GPRMC,语句ID,表明该语句为Recommended Minimum Specific GPS/TRANSIT Data(RMC)推荐最小定位信息
    
    字段1:UTC时间,hhmmss.sss格式
    
    字段2:状态,A=定位,V=未定位
    
    字段3:纬度ddmm.mmmm,度分格式(前导位数不足则补0)
    
    字段4:纬度N(北纬)或S(南纬)
    
    字段5:经度dddmm.mmmm,度分格式(前导位数不足则补0)
    
    字段6:经度E(东经)或W(西经)
    
    字段7:速度,节,Knots
    
    字段8:方位角,度
    
    字段9:UTC日期,DDMMYY格式
    
    字段10:磁偏角,(000 - 180)度(前导位数不足则补0)
    
    字段11:磁偏角方向,E=东W=西
    
    字段16:校验值
    

    这里,“”为校验和识别符,其后面的两位数为校验和,代表了“$”和“”之间所有字符(不包括这两个字符)的异或值的十六进制值。上面这条例句的校验和是十六进制的50,也就是十进制的80。

    提示:运算符的作用是异或。将$和*之间所有的字符做运算(第一个字符和第二个字符异或,结果再和第三个字符异或,依此类推)之后的值对65536取余后的结果,应该和*后面的两个十六进制数字的值相等,否则的话说明这条语句在传输中发生了错误。注意这个十六进制值中是会出现A-F的大写字母的。

    现在,你的程序要读入一系列GPS输出,其中包含$GPRMC,也包含其他语句。在数据的最后,有一行单独的

    END
    

    表示数据的结束。

    你的程序要从中找出GPRMC2GPRMC语句,计算校验和,找出其中校验正确,并且字段2表示已定位的语句,从中计算出时间,换算成北京时间。一次数据中会包含多条GPRMC语句,以最后一条语句得到的北京时间作为结果输出。

    你的程序一定会读到一条有效的$GPRMC语句。

    输入格式:

    多条GPS语句,每条均以回车换行结束。最后一行是END三个大写字母。

    输出格式:

    6位数时间,表达为:

    hh:mm:ss
    

    其中,hh是两位数的小时,不足两位时前面补0;mm是两位数的分钟,不足两位时前面补0;ss是两位数的秒,不足两位时前面补0。

    输入样例:

    $GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,,,A*50
    
    END
    

    输出样例:

    10:48:13
    
    时间限制:500ms内存限制:32000kb
    
    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
        char a[1000] = "$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,,,A*50",*p;
        int hour, min, sec;
        int check, value;
        do {
            
            gets(a);
            p = a;
    
            if ( strncmp(a,"$GPRMC",6) == 0 && strncmp(strchr(a+6,','),",A",2) ) {    //这里一定要注意A定位
                check = *(++p);
                for ( p = p + 1; *p != '*'; p++ ) {
                    check = check ^ *p;
                }
                check = check%65536;
    
                value = 0;
                for ( p = p + 1; *p != ''; p++ )    //十六进制-->十进制
                {
                    if ( 'A' <= *p && *p <= 'F' )
                        value = value * 16 + *p - 'A' + 10;
                    else
                        value = value * 16 + *p - '0';
                }
    
                if ( (check) == value )
                {
                    hour = (a[7]-'0')*10+(a[8]-'0')+8;
                    if (hour > 24)
                        hour -= 24;
                    min = (a[9]-'0')*10+(a[10]-'0');
                    sec = (a[11]-'0')*10+(a[12]-'0');
                }
            }
    
        } while ( strcmp(a,"END") != 0 );
        
        printf("%02d:%02d:%02d
    ", hour, min, sec);
    
        return 0;
    }
    
    欢迎查阅
  • 相关阅读:
    17.1.2.1 Advantages and Disadvantages of Statement-Based and Row-Based Replication
    17.1.2 Replication Formats
    Setting the Master Configuration on the Slave
    17.1.1.9 Introducing Additional Slaves to an Existing Replication Environment
    17.1.1.8 Setting Up Replication with Existing Data
    17.1.1.7 Setting Up Replication with New Master and Slaves
    17.1.1.6 Creating a Data Snapshot Using Raw Data Files
    列出display的值,并说明它们的作用
    CSS设置DIV居中
    CSS选择符有哪些?哪些属性可以继承?优先级算法如何计算?
  • 原文地址:https://www.cnblogs.com/gh110/p/11827704.html
Copyright © 2011-2022 走看看