【每日一题】(D0810)

这是一份C++编程的基础知识测试题,包含了单选题、多选题、判断题和填空题,涉及范围包括函数指针、内存管理、ASCLL码、结构体、异常处理、文件读取等概念。

一、单选题

1、有以下程序,程序运行后输出的结果是(C)

main()
{
	int k=5,n=0;
	while(k>0)
	{
		switch(k)
		{
			default:break;
			case 1: n += k;
			case 2:
			case 3: n += k;
		}
		k--}
	printf("%d\n",n);
}

  A 0
  B 4
  C 7
  D 5


2、若 fp 是指向某文件的指针,且已读到文件末尾,则库函数 feof(fp) 的返回值是()

  A EOF
  B -1
  C 非零值
  D NULL


3、有以下程序段,while 循环执行的次数是()

int k = 0;
while(k = 1) 
	k++;

  A 无限次
  B 有语法错误,不能执行
  C 一次也不执行
  D 执行一次


4、ASCLL码(含扩展)可以用一个字节表示,则可以表示的 ASCLL 码值个数为(C)

  A 1024
  B 156
  C 128
  D 64


5、有以下程序,程序的输出结果是()

main()
{
	int a[] = {2,4,6,8,10},y = 0,x,*p;
	p = &a[1];
	for(x=1;x<3;x++)
		y += p[x];
	printf("%d\n",y);
}

  A 10
  B 12
  C 14
  D 16


6、设有以下函数,则下面对函数指针的定义和赋值均是正确的是()

void fun(int n,char* s){}

  A void (* pf)(); pf = fun;
  B void *pf(); pf = fun;
  C void *pf(); pf = fun;
  D void (
pf)(int,char); pf = &fun;


7、有以下程序段,以下叙述正确的是()

typedef struct NODE
{
	int num;
	struct NODE *next;
}OLD;

  A 以上的说法形式非法
  B NODE 是一个结构体类型
  C OLD 是一个结构体类型
  D OLD 是一个结构体变量


8、设有如下程序段,则执行 p=s;语句后,以下叙述正确的是()

char s[20] = "Beijing",*p;
p = s;

  A s 数组中元素的个数和 p 所致字符串的长度相等
  B s 和 p 都是指针变量
  C 数组 s 中的内容和指针变量 p 中的内容相等
  D 可以用 *p 表示 s[0]


9、当执行下面的程序时,如果输入 ABC,则 输出结果是

#include "stdio.h"
#include "string.h"
mian()
{
	char ss[10] = "1,2,3,4,5";
	gets(ss);
	struct(ss,"6789");
	printf("%s\n",ss);
}

  A ABC6789
  B ABC67
  C 12345ABC6
  D ABC456789


10、C++ 中不应该在如下哪个方法中抛出异常(B)

  A 构造函数
  B 析构函数
  C 虚方法
  D 以上答案都不对


11、读取二进制文件的函数调用形式为:fread(buffer,size,count,fp); 其中 buffer 代表的是(C)

  A 一个文件指针,指向带读取的文件
  B 一个整型变量,代表带读取的数据的字节数
  C 一个内存块的首地址,代表读入数据存放的地址
  D 一个内存块的字节数


12、下列函数的功能是()

fun(char* a,char* b)
{
	while((*b = *a)!='\0')
	{
		a++;
		b++;
	}
}

  A 将 a 所指字符串赋给 b 所指空间
  B 使指针 b 指向 a 所指字符串
  C 将 a 所指字符串和 b 所指字符串进行比较
  D 检查 a 和 b 所指字符串中是否有 ‘\0’


13、若有定义语句: int a[4] [10],*p, *q[4]; 且 0 <= i <= 4,则错误的赋值是()

  A p = a;
  B q[i] = a[i];
  C p = a[i];
  D p = &a[2] [1]


14、设函数中有整形变量 n,为保证其在未赋值的情况下初始值为 0,应该选择的存储类别是 ()

A auto
B register
C static
D auto 或 register


15、下列选项中,关于虚函数的描述正确的是()

A 子类不能调用父类 private 的虚函数
B 虚函数不能定义为 private
C 虚函数不可以被子类覆盖
D 以上描述都不对


16、已知三个字符:a、Z 和 8,它们的 ASCII 码值升序排列,结果是()

  A 8、a、Z
  B a、8、Z
  C a、Z、8
  D 8、Z、a


17、若变量已正确定义并赋值,下面符合 C 语言语法的表达式是()

  A a := b+1
  B a = b = c + 1
  C int 18.5 % 3
  D a = a + 7 = c + b


18、下列关于栈的描述正确的是()

A 在栈中只能插入元素而不能删除元素
B 在栈中只能删除元素而不能插入元素
C 栈是特殊的线性表,只能在一端插入或删除元素
D 栈是特殊的线性表,只能在一端插入元素,而在一端删除元素


19、在面向对象方法中,不属于“对象”基本特点的是()

A 一致性
B 分类性
C 多态性
D 标识唯一性


20、以下能正确定义且赋初值的语句是()

A int n1 = n2 = 10;
B char c = 32;
C float f = f + 1.1;
D double x = 12.3 E2.5;


21、以下程序,程序运行后的输出结果是()

  A 1,2,1,2
  B 1,2,2,1
  C 2,1,2,1
  D 2,1,1,2


22、当把以下四个表达式用作 if 语句的选择表达式时,有一个选项与其它三个选项含义不同,这个选项是()

  A k%2
  B K%2 == 1
  C (K%2) != 2
  D !K%2 == 1


23、在面向对象方法中,实现信息隐蔽是依靠(C)

  A 对象的继承
  B 对象的多态
  C 对象的封装
  D 对象的分类


24、有以下程序,程序运行后输出的结果是()

main()
{
	char p[]={'a','b','c'};
	q[]="abc";
	printf("%d %d\n",sizeof(p),sizeof(q));
}

  A 4 4
  B 3 3
  C 3 4
  D 4 3


25、下列叙述正确的是()

  A 顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的
  B 顺序存储结构只针对线性结构,链式存储结构只针对非线性结构
  C 顺序存储结构能存储有序表,链式存储结构不能存储有序表
  D 链式存储结构比顺序存储结构节省存储空间


26、对于友元描述正确的是()

  A 友元是本类的成员函数
  B 友元不是本类的成员函数
  C 友元不是函数
  D 友元不能访问本类私有成员


27、有以下程序,其输出结果为(C)

#include<stdio.h>
int fun(char s[])
{
	int n=0;
	while(*s <= '9' && *s >= '0')
	{
		n = 10 * n + *s - '0';
		s++;
	}
	return (n);
}
int main()
{
	char s[10]={'6','1','*','4','9','*','0','*'};
	printf("%d\n",fun(s));
	return 0;
}

  A 9
  B 61490
  C 61
  D 5


28、在 C++ 程序中,对象之间的相互通信通过()

  A 继承实现
  B 调用成员函数
  C 封装实现
  D 重载实现


29、以下叙述正确的是()

  A 调用 printf 函数时,必须要有输出项
  B 使用 putchar 函数时,必须在之前包含头文件 stdio.h
  C 在 C 语言中,整数可以以十二进制、八进制、十六进制的形式输出
  D 调用 getchar 函数读入字符时,可以从键盘上输入字符所对应的 ASCII 码


30、下列选项中,与实现运行时多态性无关的是()

  A 引用
  B 函数重载
  C 指针
  D 虚函数


31、若有语句:char* line[5]; 以下叙述中正确的是(A)

  A 定义 line 是一个数组,每个数组元素是一个基类型为 char 的指针变量
  B 定义 line 是一个指针变量,该变量可以指向一个长度为 5 的字符型数组
  C 定义 line 是一个指针数组,语句中的 * 号称为间址运算符
  D 定义 line 是一个指向字符型函数的指针


32、若进栈顺序为 1,2,3,4,进栈的过程中可以出栈,则不可能的一个出栈序列是()

  A 2,3,4,1
  B 1,4,3,2
  C 3,1,4,2
  D 3,4,2,1


33、this 指针存在的目的是()

  A 保证基类公有成员在子类中可以被访问
  B 保证每个对象拥有自己的数据成员,但共享处理这些数据成员的代码
  C 保证基类保护成员在子类中可以被访问
  D 保证基类私有成员在子类中可以被访问


34、使用值传递方式将实参传给形参,下列说法正确的是(A)

  A 形参是实参的备份
  B 实参是形参的备份
  C 形参和实参是同一对象
  D 形参和实参无联系


35、有以下程序,程序运行以后的输出结果是(C)

#include<stdio.h>
int f(int n)
{
	static int a=1;
	n += a++;
	return n;
}
int main()
{
	int a = 3,s;
	s = f(a);
	s = s + f(a);
	printf("%d\n",s);
	return 0;
}

A 7
B 8
C 9
D 10


36、对类中声明的变量,下列描述中正确的是()

  A 属于全局变量
  B 只属于该类‘
  C 属于该类,某些情况下也可被该类不同实例所共享
  D 任何情况下都可被该类所有实例共享


二、多选题

37、下列选项中,描述正确的是()

  A 类 A 的友元(friend)函数可以访问类 A 的私有成员
  B 类 A 的静态成员函数没有传递 this 指针作为参数
  C 类 A 的静态数据成员为类 A 的所有对象所共享
  D 内联(inline)函数 改善了函数调用的执行效率


38、有如下模板定义:

template <class T>
T test(T x,T y)
{
	return x*x+y*y;
}

在下列对 fun 的调用中,错误的是()

  A test(1,2)
  B test(1.0,2)
  C test(1.0 2.0)
  D test(1.0,2.0)


39、C++ 中的空类默认产生哪些类成员函数(AB)

  A 默认构造函数
  B 析构函数
  C 拷贝构造函数
  D 赋值函数


40、以下描述错误的是(A)

  A 函数的形参在函数未调用时预分配存储空间
  B 若函数的定义出现在主函数之前,则可以不必声明
  C 若一个函数没有 return 语句,则什么值都不用返回
  D 一般来说,函数的形参和实参的类型应该一致


41、如下不能表示一个指向整型数组的指针的定义是()

  A int (* ptr)[]
  B int * ptr[]
  C int* (ptr[])
  D int ptr[]


三、判断题

42、该程序段的输出结果是:hello,是否正确

void GetMemory(char* p)
{
	p = (char*)malloc(100);
}
int main(void)
{
	char* str = NULL;
	GetMemory(str);
	if(!str)
	{
		exit(EXIT_FAILURE);
	}
	strcpy(str,"hello");
	printf("%s\n",str);
	free(str);
	return 0;
}
  • 正确
  • 错误

43、如下程序输出值为 1 2 4 4 8 5,是否正确

int main()
{
	vector<int> vInt;
	for(int i=0;i<5;++i)
	{
		vInt_push_back();
		cout<<vInt.capacity()<<" ";
	}
	vector<int> vTmp(vInt)
	cout<<vTmp.capacity()<<"\n";
	return 0;
}
  • 正确
  • 错误

44、下列程序段的功能是判断字符串是否对称,对称返回1,不对称返回0,横线补充代码:x++,是否正确

bool fun(string str)
{
	int i = 0,j = 0;
	j = _____;
	for(j--;i < j && str[i] == str[j];i++,j--);
	return i==j;
}
  • 正确
  • 错误

四、填空题

45、以下函数把 b 字符串连接到 a 字符串的后面,并返回 a 中新字符串的长度,请填空。

Strcen(char a[],char b[])
{
	int num = 0,n = 0;
	while(*(a+num) != ______ )
		num++;
	while(b[n])
	{
		*(a+num) = b[n];
		num++;
		___________;
	}
	return (num);
}

46、如下程序片段的输出是:(2,5)

int a[] = {1,2,3,4,5};
int *ptr = (int*)(&a+1);
printf("%d,%d\n",*(a+1),*(ptr-1));

47、以下程序运行后输出的结果是:(bcdefgha)

#include<stdio.h>
char *ss(char *s)
{
	char *p,t;
	p = s+1;
	t = *s;
	while(*p)
	{
		*(p-1) = *p;
		p++;
	}
	*(p-1) = t;
	return s;
}
int main()
{
	char* p,str[10] = "abcdefgh";
	p = ss(str);
	printf("%s\n",p);
}

48、请问 sizeof(sstar) 在 32 位操作系统是多少(28),在 64 位操作系统是多少(32)

#pragma pack(2)
class SStar
{
	int number;
	
	union BUF
	{
		char buffer[13];
		int number;
	}buf;
	
	typedef char(*f)(void*);
	
	enum
	{
		Mon,
		Tue,
		Wed
	}day;
	
	unsigned char a:4;
	unsigned char b:4;
}sstar;

  分析: 首先 buf 是一个联合体 buffer 和 number 共用一段内存空间,因此它的大小至少是最大成员的大小,因此 buf 是 13 个字节。然后是 f,f 是一个函数指针,32 位下是 4 字节,64 位下是 8 字节。其次是 day,day 是一个枚举,枚举的定义是一个被命名的整型常数的集合,本质上枚举就是一组常数的集合体,只是这些常数有各自的命名。最后是 a、b 是位段,它们是以二进制位计算大小的。

image-20210815180002735

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值