关于C语言标识符,这道2017年上海市高等学校计算机等级考试二级C三套试卷其中一套最后一道编程大题,我们来讲解下:
上海高校二级C题目以灵活多变著称,很能体现学生水平。并且只有题目说明,需要自己创建工程和代码。
题目咋一看,好像挺复杂,判断是否合法还要输出错误所在下标。其实理好思路并不难。题目已经说明,先输入一个字符串,第二步就是看里面是否有非法字符,找到非法字符就停止并输出。所以这个题目跟字符串处理的题目是一类的,主要是通过循环遍历字符数组所有元素。
循环里面对每个元素判断,只能是字母、数字字符、下划线,并且数字字符不能是开头。判断条件具体分解一下,元素应为 大写字母 or 小写字母 or 下划线 or (数字字符 and 不是第一个)。
我们用 char s[80]存放要判断的字符串,i来表示数组下标,对应的表达式为:
(s[i]>='A'&&s[i]<='Z') || (s[i]>='a'&&s[i]<='z') || s[i]=='_'
|| (i>0 && s[i]>='0' && s[i]<='9')
满足以上条件,继续循环判断下一个元素;否则不满足,找到错误,结束循环。
参考答案如下:
#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遇到空格字符会截断,只能判断空格前面的字符。
学习编程,规则语法是基础的知识,最重要的是要锻炼出程序设计思维。思路清楚了,再复杂的题目只要按步骤一步步写出来就简单了。