某C语言程序中,x是一个浮点型变量,m是一个值为正整数的整型常量,表达式x%m(x被m除取余数)在(1)时会报错,这是一种(2)错误。

admin2019-03-11  28

问题 某C语言程序中,x是一个浮点型变量,m是一个值为正整数的整型常量,表达式x%m(x被m除取余数)在(1)时会报错,这是一种(2)错误。

选项 A、词法
B、语法
C、语义
D、运行

答案C

解析 动手编过C语言程序的人都知道在x%m中,要求x、m都为整数,若x为浮点型,在TC中编译时会报错“Illegal use of floating point…”,所以根本不能运行。
   ANSI C标准规定可以在C语言源程序中加入一些“预处理命令”,以改进程序设计环境,提高编程效率。这些预处理命令是由ANSI C统一规定的,但是它并非C语言本身的组成部分,不能直接对它们进行编译(因为编译程序不能识别它们)。必须在对程序进行通常所说的编译(包括词法语法分析、代码生成及优化等)之前,先对程序中这些特殊的命令进行“预处理”,即根据预处理命令对程序作相应的处理。C语言提供的预处理功能主要有三种:宏定义(# define…)、文件包含(# include…)和条件编译(# ifdef…# else…# endif)。
   在编译过程的词法分析阶段,编译程序从左到右一个字符一个字符地读入源文件,对构成源文件的字符流进行扫描和分解,识别出一个个具有具体含义的单词,即逻辑上紧密相连的字符串。在此阶段查出的错误称为词法错误,比如,当读入while保留字时,源文件中写成了while,错把i写成了1。接下来是语法分析阶段,它是在词法分析的基础上将单词序列分解成各类语法短语,如分解出if…else…语句、赋值语句等。在此阶段查出的错误属于语法错误。
   程序代码中的错误可分为语法错误和语义错误。程序语言的语法表述的是语言的形式,或者说是语言的样子和结构。程序语言还有更重要的一个方面,就是附着于语言结构上的语义。语义揭示了程序本身的含义、施加于语言结构上的限制或者要执行的动作。程序语言的语义分为静态语义和动态语义。编译时进行的是静态语义的分析,主要包括:检查语言结构的语义是否正确,即是否结构正确的句子所表示的意思也合法;执行规定的语义动作,如表达式的求值、符号表的填写、中间代码的生成等。
   整除取余运算符“%”的有效运算对象是两个整数。在形式上,只要“%”的两个运算对象存在,其语法就是正确的;在语义上,“%”的运算对象中有浮点数则不符合整除取余运算的含义。因此,这是运算对象与运算符的类型不匹配错误,属于静态语义错误,在编译阶段可以发现该错误。
   运行错误指程序在运行过程中出现的错误。例如:
       int a,b,c;
       scanf("%d%d",&a,&b);
       c=b/a;
       printf("c=%d\n",c);
   程序没有错,能运行,但是如果输入a的值为0,就会出现错误,在TC中会在屏幕上报错:Divide error。
   通过上面详细的分析,答案一目了然,分别选A、C。
转载请注明原文地址:https://kaotiyun.com/show/QcRZ777K
0

相关试题推荐
最新回复(0)