C语言问题,急!高手帮忙,今天晚上10:00之前要答案,急!

来源:百度知道 编辑:UC知道 时间:2024/06/21 11:29:05
1. 数据类型中属于构造类型的有什么:
共用型,结构型,有数组型吗?
2. sizeof(float)是:
A 一种函数调用 B 一个整形表达式
能说明原因吗?

3. 写输出结果:
printf("%d\n",strlen("\t\"\065\xff\n));
答案是5,把\065算做一个字符,说是一个八进制。
但书上说:转义字符\ 后面表示八进制的时候,开头不写0,所以我觉得这里应该看成\0 , 65 。
这当然是不对的,但我还是不理解为什么可以写成 \065 ?

4. int a[]={0,1,2,3,4,5,6,7,8,9},*p=a;
int i;
其中0≤i≤9,则对a数组元素不正确的引用是:
A. a[p-a] B. p[i] C. *(*(a+i))
我知道应该选C
(1)为什么A 是正确的?
(2)p[i]表示的是数组元素的值吗?
(3)为什么C 中的(a+i) 是数组a中第i项元素的值?那么里面的a表示什么,数组名?数组的首地址?

5.下面程序的运行结果是
char *format=" %s,a=%d,b=%d\n";
int a=11,b=10;
a+=b;
printf(format,"a+=b",a,b);
A. for,"a+=b",ab B.format,"a+=b"
C. a+=b,a=21,b=10 D.以上结果都不对
我选了C,但不清楚具体为什么? 还有printf里的format算是什么成分啊?

6. 设有如下语句:
char x=3,y=6,z;
z=x∧y<<2;
则z的二进制值是?

1.共用型,结构型,枚举型,数组不算是构造类型,属于组合类型。
2.sizeof属于操作符,象+,-一样,sizeof(float)可算表达式。
3.strlen("\t\"\065\xff\n)); 看不懂你写得什么,语法错误。八进制\o xxx,十六进制\x xx。不写o应该识别不出是什么进制。如果是strlen("\t\\065\xff\n")); 则答案是7。
4.(1).A里p-a是指针得运算,得到的是一整数,可以作为索引来取值。
(2).是,第i-1个元素。
(3).(a+i)表示第i个元素的地址。*(a+i)表示第i个元素。 在运算中,a表示的当然是首地址。
5.这其实就是:printf(" a+=b,a=%d,b=%d\n"; ,a,b);的变体而已,只不过把a+=b用一个字符串来赋给一char *而已。
6.答案给的是00011011 。〈〈的优先级高,先左移再异或。
7.输出:6,980,return 0表示函数int fun(int*s,int t,int*k) 的返回值是0 。
8.你的想法是对的,叶子节点是2的(5-1)次方。
9.p+=3;只是用来迷惑你的;事实上strcpy(p,"ABCD") 是以p 为新首地址的复制,而不是以原来的char*p为首地址。复制后是"ABCD"。
10.答案是C。

建议你换本书看,你的书错误太多。

1、数组是构造类型
2、sizeof不是函数,是运算符,所以选B
3、你说的“\ 后面表示八进制的时候,开头不写0”我没看到过,我只看到\后面跟1到3个数表示八进制(这些数不能超过7)
4、
(1)p这时候等于a啊,所以p-a==0,a[p-a] 不就是a[0]么
(2)是,和a[i]是一个意思
(3)a是数组名,C语言规定数组名即表示数组首地址的常量,它和这里的p都是int *