前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >习题:标识符判断

习题:标识符判断

作者头像
用户6755376
发布2020-03-19 15:00:28
4920
发布2020-03-19 15:00:28
举报

关于C语言标识符,这道2017年上海市高等学校计算机等级考试二级C三套试卷其中一套最后一道编程大题,我们来讲解下:

上海高校二级C题目以灵活多变著称,很能体现学生水平。并且只有题目说明,需要自己创建工程和代码。

题目咋一看,好像挺复杂,判断是否合法还要输出错误所在下标。其实理好思路并不难。题目已经说明,先输入一个字符串,第二步就是看里面是否有非法字符,找到非法字符就停止并输出。所以这个题目跟字符串处理的题目是一类的,主要是通过循环遍历字符数组所有元素。

循环里面对每个元素判断,只能是字母、数字字符、下划线,并且数字字符不能是开头。判断条件具体分解一下,元素应为 大写字母 or 小写字母 or 下划线 or (数字字符 and 不是第一个)。

我们用 char s[80]存放要判断的字符串,i来表示数组下标,对应的表达式为:

代码语言:javascript
复制
(s[i]>='A'&&s[i]<='Z')  ||  (s[i]>='a'&&s[i]<='z')  ||  s[i]=='_'
 || (i>0 && s[i]>='0' && s[i]<='9')

满足以上条件,继续循环判断下一个元素;否则不满足,找到错误,结束循环。

参考答案如下:

代码语言:javascript
复制
#include <stdio.h>
int main()
{
    char s[80];
    int i;
    gets(s);
    for (i=0;s[i]!='\0';i++)
        if ((s[i]>='A'&&s[i]<='Z')||(s[i]>='a'&&s[i]<='z')||s[i]=='_')
            ;
        else if (i>0 && s[i]>='0' && s[i]<='9')
            ;
        else
            break;
    if (s[i]=='\0')
        printf("Yes\n");
    else
        printf("Error[%d]=%c\n",i,s[i]);
    return 0;
}

说明:

1、参考答案判断用了if嵌套,用我们上面写的表达式一个if就可以了,一样效果。

2、循环结束有两种情况,一种是找到错误提前break结束的,另一种是判断到字符串结束\0循环结束。第二种情况是满足标识符规则的。对应最后一个if判断。

3、字符串输入使用gets(),不能用scanf()。字符串中出现空格不符合标识符规则,需要找出,但scanf遇到空格字符会截断,只能判断空格前面的字符。

学习编程,规则语法是基础的知识,最重要的是要锻炼出程序设计思维。思路清楚了,再复杂的题目只要按步骤一步步写出来就简单了。


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 计算机二级C语言 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档