选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
注意一点:
对于宏定义,原样带入运算就行,不要主观的加括号
首先,您的输入估计就不是很规则,希望能把空格打出来,还有就是输入法的问题,此'('非‘)’
然后再等待答案……
A C
数组可以保证足够的空间来存储字符串,而字符指针可以通过编译,但是会产生运行时错误。
选A,C;
B,D都是指针,没有初始化时不行的!
正确要改为:char *s = new char[80];
你补充的问题答案是D;
#define语句是定义宏,在运行时只负责展开。不负责运算!
所以Z = X+1*X+1/2 = 3+1×3+1/2 = 6.5;
所以打印123456