C语言中只有字符串常量而没有字符串变量,故选项A不正确;
字符串比较大小是以第一个不相同字符的大小为标准的,跟长度没有关系,故选项B不正确;
字符串比较大小除了使用库函数strcmp()以外,就只能靠自己写的代码来实现了,而不能通过关系运算符来比较大小,因为字符串在表达式中相当于const char*,即常字符指针,代表的是字符串的首地址,关系运算符会将两个字符串的首地址值比较大小,这是毫无意义的,故选项D不正确;
空串的长度为0,而空格打头的字符串的长度至少为1。
有大小的允许范围,但是复精度有限制,不可能都准确无误的表示。范围制和精度是两个概念。这句话应该加上“在精度范围内”的限定才算正确。
C语言规定,一个字符常量代表ASCII码字符集里的一个字符,在程序中用单引号括起来,以便区分。
"y"是字符串常量,不是字符常量。
实数有两种类型,float和double,有两种表现形式:小数和指数。
小数:由数码0~9和小数点组成。例如:0.0、25.0、-267.83等均为合法的实数。整数或小数部分缺省时(不能同时缺省)默认缺省部分为0,例如-.187等价于-0.187,1.等价于1.0。
指数:由十进制数、加阶码标志“e”或“E”、以及阶码(只能为整数,可以带符号)组成,如2.1E5即表示2.1*
1
0
5
10^5
105。
C选项错误,当A为奇数时,(A%2)=1,取非后值为0,则表达式值为“假”,与题目相反。
在C语言中,凡是以”#“开头的行都称为编译预处理命令行,如#include、#define、#if等,每行的末尾不得用";"结束,以区别于C语句、定义和说明语句。选项C中的宏定义为不带参数的宏命令行,宏名之后可以由替换文本,也可以没有。编译预处理是在编译程序对C源程序进行编译前执行的。当然也在程序执行之前执行,因此选项D是错误的。
选项A的结尾没用";",所以不是一条语句;
选项C的表达式不会改变任何变量的内容,也不是合法的赋值语句;
选项D有语法错误,int应该加上括号。
所以,4个选项中只有选项B符合题意,运行后d的内容被减一。
单目运算符和双目运算符的区别只有一个,那就是操作数(变量或常量)数量的不同。
单目运算符只对一个操作数进行逻辑运算。
比如:num++(自增),num–(自减),!num(取非值),~num(按位取反)。
双目运算符只对两个操作数进行逻辑运算。
比如:num1+num2,num1-num2,num1>num2,num1!=num2。
int x,y;
y=(x=0)&&(x=3);
y=(x=0)&&(x=3),首先执行x=0,此时x的结果为0,然后检查&&左边的结果,如果左边是真的话,然后执行右边,但是如果左边是假的话&&逻辑运算符会采用懒惰策略,不执行检查右边的真假。(x=0)&&(x=3)得到的结果为0,然后将0赋值为y。
因此x=0,y=0。
若在函数中定义与全局变量名字相同的局部变量,则全局变量在该函数中将不起作用,因此全局变量的作用域并不一定比局部变量的作用域大,故选项A不正确;
静态变量一旦定义,将在整个程序的运行期间都存在,故选项B正确;
函数的形参只在函数调用的时候分配存储空间,在退出函数时收回存储空间,因此是局部的,故选项C不正确;
没有赋值的auto型变量的初值是随机的,没有赋值的static型变量的初值是0,故选项D不正确。