膜法家

2012-2013《程序设计基础》期末考试 write-up

rASP
Jan 14, 2018
阅读本文需要 2 分钟

Section 1

4.

scanf("%d%c%d", &op1, &op2, &op3);

当输入为 1 * 2 时,1* 间的空格会被传给 op2

如果把代码改成:

scanf("%d %c%d", &op1, &op2, &op3);

的话,1* 间的空格就会被忽略掉


7.

按照执行的顺序,可以把 while (*s++ = *t++); 展开为:

while (1)
{
    auto temp = *t;    // auto 是 c++ 的关键词,它能根据 temp 的值自动决定类型
    t++;
    *s = temp;
    s++;
    if (temp == '\0') break;
}

8.

实话说,感觉这题比较恶心…

char s[2][3] = {"ab", "cd"};
char *p = (char *)s;

注意题干的 equivalent,也就是说我们输出的字符和 s[1][1] 的相等就行。我在做这道题的时候误以为要用不同的写法来输出 s[1][1]

D 选项 *++p+2。原本 p 指向 s[0][0],先自加,p 指向 s[0][1],取值 b,加2,得 d,与 s[1][1] 的值相等。


9.

#define type1 char *
typedef char * type2
type1 s1, s2;
type2 s3, s4;

#define 是 C 语言用来定义宏的,对于 C 来说就是在编译前对代码进行简单粗暴的文字替换。

typedef 则是用来为复杂的定义申明简单别名的。

这道题的代码等于:

char *s1, s2;
char *s3
char *s4;

也就是说,#define 只是把 type1 替换成规定的 char *,而 typedef 则申明 type2 是字符指针。