一道简单题目求解 C++

来源:百度知道 编辑:UC知道 时间:2024/06/20 11:26:56
10.以下能将字符串:youareluck!正确读入的语句组是()
A)chars〔80〕;scanf("%s",s);
B)char*s;scanf("%s",s);
C)chars〔80〕;gets(s);
D)char*s;gets(s);
选什么! 为什么! 解释一下其他的为何错
7.若有如下程序:
#define X3
#define YX+1
#define ZY*Y/2
main()
{ intn;
for(n=1;n<=Z;n++)printf("%d",n);}
则程序运行后的输出结果是()
A)12345
B)1234567
C)12345678
D)123456
也是一样

选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