#include
void f(float x,int *y ,float *z){
*y = (int) x;
*z = x - (int)x;
}
void main()
{
float x=1.234,z;
int y;
f (x,&y,&z);
printf("x=%f y=%d z=%f\n",x,y,z);
}
void f(float x, int *y, float *z)
{
int n = x;
y = &n;
double m= x - n;
z = &m;
}
应该没错吧!
选A,C
A)char s〔80〕;scanf("%s",s);
分配一个包含80个char型的数组s,
用scanf接收用户输入并存入s,没有问题
B)char*s;scanf("%s",s);
错误
这里只声明了一个字符指针,并没有申请任何存储空间,也没有进行初始化。
所以,scanf接收的用户输入会被写入一个野地址,错误。
C)chars〔80〕;gets(s);
分配一个包含80个char型的数组s,
用gets接收用户输入并存入,没有问题。
D)char*s;gets(s);
错误,错误原因和B一样
=======================================
问题补充:7.若有如下程序:
#define X 3
#define Y X+1
#define Z Y*Y/2
main()
{ int n;
for(n=1;n<=Z;n++)printf("%d",n);}
则程序运行后的输出结果是()
A)12345
B)1234567
C)12345678
D)123456
选择D
原因:
由以下宏定义:
#define X 3
#define Y X+1
#define Z Y*Y/2
可以知道:
n<=Z
将#define Z Y*Y/2代入,所以:n<=Y*Y/2
将#define Y X+1代入,所以:n<= X+1*X+1/2
将#define X 3代入,所以:n<= 3+1*3+1/2
3+1*3+1/2=3+3+0=6 (由于1,2都是整数,所以/为取整处理,所以1/2等于0)
所以
for(n=1;n<=Z;n++)printf("%d",n);}
等价于:
for(n=1;n<=6;n++)printf("%d",n);}
所以输出D)123456
注意一点:
对于宏定义,原样带入运算就行,不要主观的加括号
另外,站长团上有产品团购,便宜有保证