南京理工大学MOOC慕课:程序设计基础(Ⅰ)第8章测试选择题答案及解析

题目

第一题

执行下面代码段后,b 的值为________。

int a[] = {1,2,3,4,5,6,7,8};
int * p = a + 4;
int b = 4+ ++*p++;

    A. 9
	B. 8
	C. 语法错误
	D. 10

答案:D
解析:

  1. 第一行,变量 a 指向数组第一个数;
  2. 第二行,变量 p 指向数组第五个数(a + 4);
  3. 第三行,由于“(左)++”的运算符优先级高于“*”,故先进行 ++p,此时,变量 p 指向数组第六个数;接着,*p 取对应地址的数(6);最后, b = 4 + 6 = 10 b=4+6=10 b=4+6=10,故选 D((右)++ 在对变量 b 赋值后执行,对 b 无影响)。

第二题

 以下程序的执行结果是:

using namespace std;
#inlcude <iostream>
void f1(int *x){++*x;}
void f2(int &x){x++;}
void f3(int x){++x;}
int main(){
   int a=10;
   f1(&a); f2(a); f3(a);
   cout<<a;
   return 0;
}

    A. 11
    B. 13
    C. 10
    D. 12

答案:D
解析:函数 f3 是对形参进行自增,对实参 a 没有任何影响。

第三题

若有语句 int a, *(*fun)(int *); fun表示____

    A. 指向函数的指针,该函数返回int;
    B. 一个函数名,该函数返回int;
    C. 指向函数的指针,该函数返回int*;
    D. 一个函数名,该函数返回int*;

答案:C
解析:变量 a 无用,故将源代码简化为 int *(*fun)(int *);,显然返回值类型为 int*(*fun) 表示 fun 函数,故其后面括号内即代表形参数据类型,显然为 int*

第四题

假设有语句如下:

void f3(int (*p)[4]);
int a[4] = {1,2,3,4};
int b[3][4] = { {1,2,3,4}, {5,6,7,8}, {9,10,11,12}};

下面哪一个调用是非法的?

    A. f3(&a);
    B. f3(&b[1]);
    C. f3(b);
    D. f3(b[1]);

答案:D
解析:指针级数不相同。

第五题

设有下面语句:

char *s1 = "C++ Programming";
char s2[]= "C++ Programming";

下面哪一种操作不会导致错误?

    A. strcpy(s2, "Java Programming");
    B. strcpy(s1, "C++");
    C. s1 = "C++";
    D. s2 = s1;

答案:C
解析:选项 A,字符串长度超出字符数组初始化时预设的字符数组长度,不正确;选项 B,char *s1 隐含“常量字符串”之意,无法改变,不正确;选项 C,将 s 指针指向字符串 "C++",合法,正确;选项 D,显然不正确。

第六题

设有 int b[3][5]; 下面哪一条语句是正确的?

    A. (int *)p[5] = b;
    B. int *p[5] = b;
    C. int (*p)[5] = b;
    D. int *p[] = b;

答案:C
解析:显然。

第七题

设有下面语句:

void f4(int **p);
int a[4] = {1,2,3,4};
int b[3][4] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};
int *q[3] = {b[0],b[1],b[2]};

下面哪个调用是合法的?

    A. f4(b);
    B. f4(&a);
    C. f4(q);
    D. f4(a);

答案:C
解析:显然。

第八题

设有语句如下:

char *c1[] = {"Red","Green","Blue"};
char c2[][6] = {"Red","Green","Blue"};

32 位系统中下面哪一种说法是正确的?

    A. sizeof(c1)加4 等于sizeof(c2)
    B. sizeof(c1)加6 等于sizeof(c2)
    C. sizeof(c1)大于sizeof(c2)
    D. sizeof(c1)等于sizeof(c2)

答案:B
解析:c1 是指针数组,32位指针是4个字节;c2 是二维数组,第二维固定是6个字节。所以 sizeof(c1)=3*4=12sizeof(c2)=3*6=18c2[][6]固定分配6个字节,不管初始化,编译器做的。
备注:若想在64位机器下进行32位的编译,可以参考此博客

第九题

设有语句:int k=2, *intp = &k; 那么表达式:

(*fun)(*intp);

是:

    A. 错误表达式。
    B. 说明一个函数指针fun。
    C. 通过函数指针fun 来调用函数,实参为*intp。
    D. 将int 变量k 转换为指针类型fun。

答案:C
解析:显然

第十题

下面哪一个初始化是正确的?

    A. int k, &p = &k;
    B. float f; int *p = &f;
    C. int *p = 0x3000
    D. int k, *p = &k;

答案:D
解析:显然。

第十一题

下面代码段执行输出结果为________。

int a = 2, *pa = &a;
int b = 3, *pb = &b;
*pa *=*pa**pb;
cout<<a<<endl;

    A. 6
    B. 语法错误
    C. 2
    D. 12

答案:D
解析:先将第三行的程序加上等效的空格,增加其可读性 *pa *= *pa * *pb;,显然,其等价于 a = a * a * b = 2 * 2 * 3 = 12,故选 D。

第十二题

以下说明语句中正确的是:

    A. int a,&ra=a,&&ref=ra;
    B. int &refa[10];
    C. int a,&ra=a,&*refp=&ra;
    D. int *pi,*&pref=pi;

答案:D
解析:显然。

第十三题

int a[] = {1,2,3,4,5,6,7,8};
int * p = a + 4;
int b = 4+ ++*p++;

*p 的值为_____。

    A. 4
    B. 5
    C. 6
    D. 7

答案:C
解析:参考第一题的解析。

第十四题

假设语句:

struct Person { 
	string name; 
	Person *father; 
};
Person p1{ "tom" }, p2{"jerry", &p1}, *p = &p2;

下面哪一个表达式的值不是"tom"。

    A. p2.father->name
    B. p->father->name
    C. p1.name
    D. p->name

答案:D
解析:显然

第十五题

设有语句 int b[3][4]; 下面哪一条语句是正确的?

    A. int *p[2] = {b[0], b[1], b[2]};
    B. int *p[] = {b[0], b[1], b[2]};
    C. int *p[] = (int *[])b;
    D. int *p[] = b;

答案:B
解析:显然。

第十六题

下列哪一个main 函数原型是错误的?

    A. main(int arc, char **arv)
    B. main(int argv, char *argc[])
    C. main(int a, char *c[])
    D. main(int argc, char *argv)

答案:C
解析:显然。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值