有以下定义语句
double a,b; intw; long c;
若各变量已正确赋值,则下列选项中正确的表达式是______。
D、w=a=b; 错误
若变量a已正确定义,合法的语句是______。
C、a=a++=5错误
若变量已正确定义并赋值,下面符合C语言语法的表达式是______。
B、a=b=c+2 正确 为什么 前两个是错的 最后一个是正确的?
1.以下4个选项中,不能看作一条语句的是______。
A、{;} B、a=0,b=0,c=0;
C、if(a>0); D、if(b==0) m=1;n=2;???
答案:D
2.以下函数值的类型是______。
fun(float x)
{
float y;
y=3*x-4;
return y;
}
A、int B、不确定 C、void D、float
答案:A
3.若有代数式,则不正确的C语言表达式是( C )。
A.a/b/c*e*3 B.3*a*e/b/c C.3*a*e/b*c D. a*e/c/b*3
4.表达式18/4*sqrt(4.0)/8值的数据类型是( C )。
A. int B. floatC. double D. 不确定
5.( × ) 字符数组不要求它的最后一个字符为‘\0’,甚至可以不包含‘\0’。
然后下面5题麻烦讲解下
w=a=b; 这个系统难道不会自动进行强制转换吗?
追答不行的,赋值用组成原理的说法就是通过总线从一个寄存器传递到另一个寄存器,double类型的寄存器和int是不一样的。
追问main()
{ int a;
double c=1.0;
a=c;
printf("%d",a);} 这个不是可以的吗?
你自己看下测试后的程序会有警告的,这样做实际上是精度的丢失。比如3.245转化成int后就变成3了。double和int转换还好,要是其他类型的转化(例如unsigned和int的转换)后果会很严重。
追问如果要赋值需重新对类型进行注释:w=(int)a=(int)b 你这样的注释 跟系统强制的转化有什么区别呢?
追答 我觉得有必要详细说下。我给个程序你:
#include
void main()
{
unsigned x=-1;
if (x<0) printf ("x小于-1");
else printf ("x不是小于-1");
}
这个程序你运行下,执行的else的结果。这是为什么,因为x的值在寄存器里表示的根本不是-1,但是把 if (x<0) 改为 if ((int)x<0)就行了,这是为什么,因为这一步操作实际是把-1的值写入一个有符号的寄存器中。再看下你的程序
main()
{ int a;
double c=1.0;
a=c;
printf("%d",a);} 你看到没,你是用%d输出的,这个就等同于
(int)a这样的操作,你告诉了电脑,先把a的值存入int类型寄存器再输出。再往下说就扯远了,建议看下组成原理和汇编相关书籍关于对信息保存和转移的内容。
char a[4]={'a','b','c','d'} 这个字符数组难道有’\0'么?
追答好吧,是我看错了,字符串必须有\0
那这个应该对的吧