HZAU-专业C++作业7-8
一、判断题
1. 结构体的定义不为它分配具体的内存空间。T    (2分)
2. C++语言结构体类型变量在程序执行期间,所有成员驻留在内存中。
3. 允许用户将不同类型的数据组合成一个有机的整体,这些数据互相联系;这种数据结构称为结构体(structure)    (2)T
4. struct是关键字,不能省略:结构体名用作结构体类型的标志,是用户定义的标识符。    (2)T
5. 结构体变量所占的内存长度等于每个成员长度之和(字符型特殊)T    (2)
6. 结构体中的成员(),不可以单独使用。F    (2)
7. 结构体变量能整体进行输入输出。F    (2)
8. 如果成员本身又属于一个结构体类型,则要用若干个成员运算符,一级一级的到最低一级的成员。只能对最低一级的成员进行赋值、存取或运算。
9. 把整个结构体变量传递给函数默认情况下采取的是值传递方式,要求形参也必须是同类型的结构体变量。当然也可由程序员控制用指针参数或引用参数传递。    (2)T
10. 结构体变量的各个初值用花括号{}括起来,花括号内各个成员变量的值之间用分号分隔,其值必须与成员变量一一对应,且数据类型应与成员变量一致。sizeof结构体大小F   
11. 宏替换时先求出实参表达式的值,然后带入形参运算求值。F    (2)
12. 宏替换不存在类型问题,它的参数也是无类型的。T    (2)
13. C++语言标准库头文件中包含了许多系统函数的原型声明,因此只要程序中使用了这些函数,则应包含这些头文件。T  (2)
14. H头文件只能由编译系统提供。 F  (2)
15. #include命令可以包含一个含有函数定义的C++语言源程序文件。 T  (2)
16. #include <…>命令中的文件名是不能包括路径的。t    (2)
17. 可以使用条件编译命令来选择某部分程序是否被编译T    (2)
18. 宏定义中的形参是标识符,在宏调用中的实参不可以是表达式。  F  (2)
19. 一个#include命令一次只能包含一个文件,若想包含多个文件,须用多个#include命令。  T2分)
2、选择题
1. 以下叙述中错误的是(  C )。
A. 预处理命令行都必须以#开始
    B. 在程序中凡是以#开始的语句都是预处理命令行
    C. C++程序在执行过程中对预处理命令行进行处理
    D. 预处理命令行可以出现在C++程序中任意一行上
2. 以下有关宏替换的叙述中错误的是( D )。
A.宏替换不占用运行时间    B. 宏名无类型   
C. 宏替换只是字符替换    D. 宏名必须用大写字母表示
3. #define P(x) x/x,执行语句cout<<P(3*5);后的输出结果是(  C  )。
A.     B.     C. 25    D. 15
4. 若有宏定义#define MOD(x,y) x%y,下面程序段的结果是(D    )。
int z,a=15;float b=100;
z=MOD(b,a);
cout << z++;
A. 11    B. 10    C.     D. 语法错误
5. 在任何情况下计算平方都不会引起二义性的宏定义是(  D )。
A. #define POWER(x) x*x
    B. #define POWER(x) (x)*(x)
    C. #define POWER(x) (x*x)
    D. #define POWER(x) ((x)*(x))
6. 下面关于条件编译命令的叙述中正确的是(      D )。
A. 条件编译命令只能处理1个分支
    B. 条件编译命令只能处理2个分支
    C. 条件编译命令只能处理3个分支
    D. 条件编译命令可以处理若干个分支
7. 在“文件包含”预处理命令形式中,当#include后面的文件名用“”括起来时,寻被包含文件的方式是(    B)。
A. 直接按系统设定的标准方式搜索目录
    B. 先在源文件所在目录中搜索,再按系统设定的标准方式搜索
    C. 仅仅搜索源文件所在目录
    D. 仅仅搜索当前目录
8. 关于编译预处理说法错误的是(C)。
A. 预处理命令必须以#开头
    B. 预处理命令必须单独占据一行
    C. 预处理命令只能位于源程序中所有语句之前
    D. 预处理命令不是C++语句
9. 下面关于结构体概念的叙述中,正确的说法是()。
A. 相同类型数据的集合称为结构体
    B. 不同类型数据的集合称为结构体
    C. 数据的集合称为结构体
    D. 整数的集合称为结构体
10. 设有以下说明语句:
        struct abc
        {
            int  m;
            float    n;
            }stype;
则下面错误的叙述是(  B  )。
A. struct是定义结构体类型的关键字    B. stype是结构体类型名 
C. mn都是结构体成员名    D. stype是结构体变量名
11. 若有以下说明和语句:
  struct  worker
  { int no;  char  name;  }work, p=&work;
  则以下引用方式不正确的是(  D  )。
A. workNo    B. (p)no    C. p->no    D. work->no
12. 有如下定义:
  struct  date  { int  year, month, day;  };
  struct  worklist  { char name[20];  char  sex;
  struct  date  birthday;  }person;
  对结构体变量person的出生年份进行赋值时,下面正确的赋值语句是()。
A. year=1958    B. birthdayyear=1958   
C. personbirthdayyear=1958    D. personyear=1958
13. C++语言结构体类型变量在程序执行期间 )。
A. 所有成员一直驻留在内存中    B. 只有一个成员主留在内存中   
C. 部分成员驻留在内存中    D. 没有成员驻留在内存中
14. 有如下定义
struct person{char name[9]; int age;};
struct person class[10]={Johu, 17,
Paul, 19
Mary, 18,
Adam 16,};
根据上述定义,能输出字母M的语句是(  D  )。
A. cout<<class[3].mane ;
    B. cout<<class[3].name[1] ;
    C. cout<<class[2].name[1] ;
    D. cout<<class[2].name[0] ;
15. 设有如下定义
struct ss
{ char name[10];
int age;
char sex;
} std[3],* p=std;
下面各输入语句中错误的是(  B  )。
A. cin>>&(*p).age ;
    B. cin>>&std.name ;
    C. cin>>&std[0].sex ;
    D. cin>>&(p->sex) ;
16. 以下结构类型可用来构造链表的是(  B  )。
A. struct aa{ int aint * b}
    B. struct bb{ int abb * b}
    C. struct cc{ int * acc b}
    D. struct dd{ int * aaa b}
17. 以下程序的输出结果是(  A )。
amovep(int *p, int a[3][3],int n)
{ int i, j;
for( i=0;i<n;i++)
for(j=0;j<n;j++){ *p=a[i][j];p++; }
}
void main()
{ int *p,a[3][3]={{1,3,5},{2,4,6}};