1.下列函数定义中,有语法错误的是()
A:void fun(int x, int *y){*x *= *y;}
B:void fun(int *x, int y){*x += y;}
C:int * fun(int *x, int y){return x += y;}
D:void fun(int x, int *y){x *= *y;}
正确答案:A
2.一个C语言程序在一台32位机器上运行。程序中定义了三个变量x、y和z,其中x和z为int型,y为short型。当x=127,y=-9时,执行赋值语句z=x+y后,x、y和z的值分别是()
A:x=0000007FH,y=FFF9H,z=00000076H
B:x=0000007FH,y=FFF9H,z=FFFF0076H
C:x=0000007FH,y=FFF7H,z=FFFF0076H
D:x=0000007FH,y=FFF7H,z=00000076H
正确答案:D
解析:
机器当中存储数据的补码形式,便于加减法运算。
x的十六进制表示比较容易得出:0000007FH
y的值是-9,且是short类型,为16位,那么十六进制补码表示即:FFF7H
接下来x与y相加,那么y需要进行符号扩展,由于它是补码形式存在,
所以符号位移到32位最左边,且中间的数字需要补上1,因为现在是对负数补码进行符号扩展!就是:FFFFFFF7H
那么xy相加就是0000007FH与FFFFFFF7H相加,得出00000076H
3.若有以下说明和定义,则叙述正确的是()
1 2 |
|
A:p是int型变量
B:p是基类型为int的指针变量
C:q是基类型为int的指针变量
D:程序中可用INTEGER代替int类型名
正确答案:B
解析:
进行类型定义以后,INTEGER其实就是基类型为int 的指针类型,然后由
INTEGER 米定义两个变量p和*q,则p是基类型为int型的一级指针变量,而q是基类型
为int型的二级指针变量。故正确答案是B。
4.下列程序的功能是什么。
main()
{
long num=0;
FILE *fp:
if((fp=fopen("fname.dat","r"))==NULL)
{
printf("Can’t open the file!");
exit(0):
}
while(!feof(fp))
{
fgetc(fp);
num++;
}
printf("num=%d\n",num);
fclose(fp);
}
A:拷贝文件
B:统计文件的字符数
C:统计文件的单词数
D:统计文件的行数
正确答案:B
解析:
fgetc(fp), 文件指针 fp 指向的文件中读取一个字符,读取一个字节后,光标位置后移一个字节。
feof(fp) 是判断这个是否到文件末尾 没到则为真 所以 !feof(fp) 就是 要是没到末尾就继续循环
5.下列程序的输出结果是:
#include <iostream>
using namespace std;
void f() {
static int i = 15;
i++;
cout << "i=" << i << endl;
}
int main(void){
for(int k = 0;k < 2;k++)
f();
}
A:i=16 i=15
B:i=15 i=17
C:i=16 i=17
D:i=15 i=16
E:i=15 i=18
正确答案:C
解析:
static 修饰的变量只初始化一次, 当下一次执行到这一条语句的时候,直接跳过
6.
设有如下的说明和定义
1 2 3 4 5 6 7 |
|
则以下叙述中正确的是()
A:(p++)->a与p++->a都是合语法的表达式,但二者不等价
B:语句 ++p->a; 的效果是使p增1
C:语句 ++p->a; 的效果是使成员a增1
D:语句 *p->s++; 等价于 (*p)->s++;
正确答案:C
解析:
A (p++)->a与p++->a 抛开++的优先级低于->不说,首先是后置++,所以不管是否加()都是先执行p->a再执行++改变p的值。
B ++P->a 根据优先级先执行p->a,指向成员a的值,然后进行++操作,使得成员a增1
C *P->S++;(*P)->S++ ->优先级大与* ,()大于->,所以加了括号就不等价了
7.
阅读下面代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
上述例程调用的Fun函数顺序为()
B::Fun, D::Fun
B::Fun, B::Fun
D::Fun, D::Fun
D::Fun, B::Fun 正确答案:C
解析:
本题考察两个知识点:
一、赋值兼容:
1.子类对象可以赋值给父类对象
2.子类对象可以初始化父类对象
3.父类指针可以指向子类对象
4.父类引用可以引用子类对象
二、子类重写父类
这两个知识点也就是解释多态的关键
本题中,根据兼容性原则:当父类指针(引用)指向子类对象时,子类对象退化成父类对象,只能访问父类中定义的成员
如果B对象没有virtual修饰的话,B* pb = ⅆ dd就会退化为父类对象,pd就只能访问父类的成员B::Fun()。
但是又virtual修饰的话,就会展现多态行为,会根据实际指针指向的对象判断函数的调用。pb 和pd都指向子类对象,所以调用D::Fun()。
8.设字符型变量x的值是064,表达式“~ x ^ x << 2 & x”的值是()
A:0 333
B:333
C:0x333
D:020
正确答案:A
解析:
1. ~x 按位取反,结果为 11001011
2. x << 2 对x左移2位,结果为11010000
3. x << 2 & x 即第2步的结果与x做按位与操作,结果为 00010000
4. 最后第3步的结果与~x做异或运算,结果为11011011,即333。
9.
有以下程序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
程序运行后的输出结果是?
A:34756
B:5745
C:5795
D:35745
正确答案:B
解析:
for( i = 1; i < 3; i + + )将调用两次fun(a)
第一次调用fun(a)时数组的前两个元素变位3、5,此时j=2;
第二次调用fun(a)时,虽然j=2已经不满足++j<2但还是要执行一次,数组第三个元素变为7
然后for循环下标从1开始,所以输出后4个元素。5745
10.
下⾯函数的功能是()
1 2 3 4 5 |
|
A:计算字符串的位(bit)数
B:复制⼀个字符串
C:求字符串的长度
D:求字符串存放的位置
正确答案:C
今天学习结束,这一期很棒!!!