C笔试题及答案

时间:2024-01-12 07:53:49 试题试卷 收藏本文 下载本文

C笔试题及答案(共11篇)由网友“nry”投稿提供,以下是小编给大家整理的C笔试题及答案,欢迎大家前来参阅。

C笔试题及答案

篇1:C笔试题及答案

(1)算法的时间复杂度是指_______。

A)执行算法程序所需要的时间

B)算法程序的长度

C)算法执行过程中所需要的基本运算次数

D)算法程序中的指令条数

答案:C

评析:所谓算法的时间复杂度,是指执行算法所需要的计算工作量。

(2)下列叙述中正确的是________。

A)线性表是线性结构 B)栈与队列是非线性结构

C)线性链表是非线性结构 D)二叉树是线性结构

答案:A

评析:一般将数据结构分为两大类型:线性结构与非线性结构。线性表、栈与队列、线性链表都是线性结构,而二叉树是非线性结构。

(3)下面关于完全二叉树的叙述中,错误的是_________。

A)除了最后一层外,每一层上的结点数均达到最大值

B)可能缺少若干个左右叶子结点

C)完全二叉树一般不是满二叉树

D)具有结点的完全二叉树的深度为[log2n]+1

答案:B

评析:满二叉树指除最后一层外每一层上所有结点都有两个子结点的二叉树。完全二叉树指除最后一层外,每一层上的结点数均达到最大值,在最后一层上只缺少右边的若干子结点(叶子结点)的二叉树。

(4)结构化程序设计主要强调的是_________。

A)程序的规模 B)程序的易读性

C)程序的执行效率 D)程序的可移植性

答案:B

评析:结构化程序设计主要强调的是结构化程序清晰易读,可理解性好,程序员能够进行逐步求精、程序证明和测试,以保证程序的正确性。

(5)在软件生命周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段是________。

A)概要设计 B)详细设计 C)可行性分析 D)需求分析

答案:D

评析:需求分析是对待开发软件提出的需求进行分析并给出详细定义,即准确地确定软件系统的功能。编写软件规格说明书及初步的用户手册,提交评审。

(6)数据流图用于抽象描述一个软件的逻辑模型,数据流图由一些特定的图符构成。下列 图符名标识的图符不属于数据流图合法图符的是_________。

A)控制流 B)加工 C)数据存储 D)源和潭

答案:A

评析:数据流图从数据传递和加工的角度,来刻画数据流从输入到输出的移动变换过程。数据流图中的主要图形元素有:加工(转换)、数据流、存储文件(数据源)、源和潭。

(7)软件需求分析一般应确定的是用户对软件的__________。

A)功能需求 B)非功能需求 C)性能需求 D)功能需求和非功能需求

答案:D

评析:软件需求分析中需要构造一个完全的系统逻辑模型,理解用户提出的每一功能与性能要求,是用户明确自己的任务。因此,需求分析应确定用户对软件的功能需求和非功能需求。

(8)下述关于数据库系统的叙述中正确的是________。

A)数据库系统减少了数据冗余

B)数据库系统避免了一切冗余

C)数据库系统中数据的一致性是指数据类型的一致

D)数据库系统比文件系统能管理更多的数据

答案:A

评析:由数据的共享自身又可极大地减少数据冗余性,不仅减少了不必要的存储空间,更为重要的是可以避免数据的不一致性。所谓数据的一致性是指在系统中同一数据的不同出现应保持相同的值。

(9)关系表中的每一横行称为一个________。

A)元组 B)字段 C)属性 D)码

答案:A

评析:在关系数据库中,关系模型采用二维表来表示,简称“表”。二维表是由表框架及表元组组成。在表框架中,按行可以存放数据,每行数据称为元组。

(10)数据库设计包括两个方面的设计内容,它们是________。

A)概念设计和逻辑设计 B)模式设计和内模式设计

C)内模式设计和物理设计 D)结构特性设计和行为特性设计

答案:A

评析:数据库设计可分为概念设计与逻辑设计。概念设计的目的是分析数据间内在语义关联,在此基础上建立一个数据的抽象模型。逻辑设计的主要工作是将ER图转换为指定的RDBMS中的关系模型。

篇2:C和C经典笔试题及答案

1.那一种成员变量可以在同一个类的实例之间共享?

答案:必须使用静态成员变量在一个类的所有实例间共享数据.如果想限制对静态成员变量的访问,则必须把他们声明成保护型或私有型.不允许使用静态成员变量去存放一个对象的数据。静态成员数据是在这个类的所有对象间共享的。

静态数据成员:静态成员可以实现多个对象之间的数据共享,并且使用静态数据成员还不会破坏隐藏的原则,即保证了安全性。节省内存;提高时间效率。使用静态数据成员可以因为它是所有对象所公有的,因此,对多个对象来说,静态数据成员只存储一处,供所有对象共用。静态数据成员的值对每个对象都是一样,但它的值是可以更新的。只要对静态数据成员的值更新一次,保证所有对象存取更新后的相同的值,

1、静态数据成员在定义或说明时前面加关键字static。

2、静态成员初始化与一般数据成员初始化不同。静态数据成员初始化的格式如下:

<数据类型><类名>::<静态数据成员名>=<值>

这表明:

(1) 初始化在类体外进行,而前面不加static,以免与一般静态变量或对象相混淆。

(2) 初始化时不加该成员的访问权限控制符private,public等。

(3) 初始化时使用作用域运算符来标明它所属类,静态数据成员是类的成员,而不是对象的成员。

3、静态数据成员是静态存储的,它是静态生存期,必须对它进行初始化。

4、引用静态数据成员时,采用如下格式:

<类名>::<静态成员名>

静态数据成员的访问权限允许的话(即public的成员),可在程序中,按上述格式来引用静态数据成员。

下面举一例子,说明静态数据成员的应用:

#include

class Myclass

{

public:

Myclass(int a, int b, int c);

void GetNumber;

void GetSum;

private:

int A, B, C;

static int Sum;

};

int Myclass::Sum = 0;

Myclass::Myclass(int a, int b, int c)

{

A = a;

B = b;

C = c;

Sum += A+B+C;

}

void Myclass::GetNumber

{

cout<<”Number=”<

}

void Myclass::GetSum

{

cout<<”Sum=”<

}

void main

{

Myclass M(3, 7, 10),N(14, 9, 11);

M.GetNumber;

N.GetNumber;

M.GetSum;

N.GetSum;

}

从输出结果可以看到Sum的值对M对象和对N对象都是相等的。这是因为在初始化M对象时,将M对象的三个int型数据成员的值求和后赋给了Sum,于是Sum保存了该值。在初始化N对象时,对将N对象的三个int型数据成员的值求和后又加到Sum已有的值上,于是Sum将保存另后的值。所以,不论是通过对象M还是通过对象N来引用的值都是一样的,即为54。

静态成员函数

静态成员函数和静态数据成员一样,它们都属于类的静态成员,它们都不是对象成员。因此,对静态成员的引用不需要用对象名。

在静态成员函数的实现中不能直接引用类中说明的非静态成员,可以引用类中说明的静态成员。如果静态成员函数中要引用非静态成员时,可通过对象来引用。下面通过例子来说明这一点。

#include

class M

{

public:

M(int a) { A=a; B+=a;}

static void f1(M m);

private:

int A;

static int B;

};

void M::f1(M m)

{

cout<<”A=”<

cout<<”B=”<

}

int M::B=0;

void main

{

M P(5),Q(10);

M::f1(P); file://调用时不用对象名

M::f1(Q);

}

读者可以自行分析其结果。从中可看出,调用静态成员函数使用如下格式:

<类名>::<静态成员函数名>(<参数表>);

2.判断选择

1. C++语言没有可移植性。 B不正确

2. 定义数组时可以不确定元素个数。 B不正确

3. 指针是一种特殊的变量,只能用来保存地址。 A正确

4. 通过引用或者指针调用对象的成员函数时,如果引用或者指针的类型跟对象的类型不一致时,能自动正确调用对象所属的类中对这个函数的定义。 B不正确

5.类myclass,为myclass类对象以成员函数形式重载后++运算符的声明应该为 C myclass operator++( int );

A. myclass operator++;

B. myclass& operator++;

C. D. myclass& operator++( int );

5. 父类和子类各自定义一个成员函数,函数名相同,参数表不同,那么 C子类中的函数会覆盖父类中的函数。 函数同名,通通覆盖,不同层次的函数不能重载

6. 如果myclass类定义了拷贝构造函数和一个整型参数的构造函数,还重载了赋值运算符,那么语句

myclass obj = 100;会 B调用整型参数的构造函数。等价于 myclass obj = myclass(100)

7. 抽象类指的是 D有纯虚函数的类

8. 多重继承时,如果派生类的两个父类有一个共同的虚基类,那么虚基类的初始化参数由 C派生类

的构造函数来传递。

9. 多态性是通过 C虚函数 实现的。

10. 如果有如下语句

char str[20];

cin >>str;

cout << str;

执行时输入的是“this is a test line!”,则输出的内容是 D 。

A. this is a test line!

B. this is a test line

C. this is a test

D. this

11. 执行语句

char ch = “Hello”;

char * p = &ch[0];

cout << p;

结果是输出 C 。Hello

3.以下生面是否正确?

Class A{ const int size=0;};

答案:常量必须在构造函数的初始化列表里面初始化或者将其设置为static

正确的程序如下:

Class A

{ A{ const int size=0; }};

或者:

Class A

{ static const int size=0; };

篇3:C和C经典笔试题及答案

1. #include using namespace std;

Void GetMemory(int *z) { *z=5; }

Int main { int v; GetMemory(&v); cout<

Getmory把v的地址传了过来,*z是地址里的值,是v的副本.通过直接修改地址里的值,不需要有返回值,也把v给修改了,因为v所指向地址的值发生了改变,最终程序会崩溃.

2. 下面的数据声明都代表什么意思?

(1)float(**def)[10]

Def是一个二级指针,它指向的是一个一维数组的指针,数组的元素都是float。

(2)double*(*gh)[10]

Gh是一个指针,它指向一个一维数组,该数组元素都是double*

(3) double(*f[10])

F是一个数组,f有十个元素,元素都是函数的指针,指向的函数类型是没有参数且返回double的函数

(4)int*((*b)[10])

就跟“int*(b)[10]”是一样的,b是一维数组的指针

(5)long(*fun)(int)

函数指针

(6)int(*(*f)(int,int))(int)

F是一个函数的指针,指向的函数的类型是有两个int参数并且返回一个函数指针的函数,返回的函数指针指向一个int参数且返回int的函数。

3. 指针数组与数组指针

指针数组,是指一个数组里面装着指针,数组指针,代表它是指针,指向真个数组

一个指向整型数组的指针定义为

A. int(*ptr) B.int *ptr C.int*(ptr) D.int ptr

int(*ptr)是以一个指向整型数组的指针

int *ptr是指针数组,ptr里面存的的是地址。它指向位置的值就是*ptr[0],*ptr[1],*ptr[2],不要存*ptr[0]=5,*ptr[1]=6,因为里面没有相应的地址

int*(ptr)与B相同

4. 用变量a给出下面的定义

(1)一个整型数

(2)一个指向整形数的指针

(3)一个指向指针的指针,它指向的指针是一个整型数

(4)一个有10个整型数的数组

(5)一个有10个指针的数组,该指针是指向一个整型数的

(6)一个指向有10个整型数组的指针

(7)一个指向函数的指针,该函数有一个整型参数并返回一个整型数

(8)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整数

Itn a; int *a; int a; int a[10]; int *a[10]; int (*a)[10]; int (*a)(int); int (*a[10])(int)

5.C++中的空类默认产生那些类成员函数?

Class Empty

{ public:

};

答案:对于一个空类,编译器默认产生4个成员函数:默认构造函数,析构函数,拷贝构造函数和赋值函数

篇4:C笔试题及答案

(1)请读程序:

#include

main

{

int a;float b,c;

scanf(“%2d%3P%4f’,&a,&b,&C);

printf(”\na=%d,b=%ec。%f\n”,a,b,C);

}

若运行时从键盘上输入9876543210l,则上面程序的输出结果是________。

A)a=98,b=765,c=432 1

B)a=1 0,b=432,c=8765

C)a=98,b=765.000000,c=432 1.000000

D)a=98,b=765.0,c=432 1.0

答案:C

评析:scanf把用户从键盘录入的数字的第1、2位存入整型变量a;把第3、4、5位存入单精度实型变量b,把第6、7、8、9位存入单精度实型变量c,用户录入的第10位被scanf遗弃。这时变量a、b、c的值分别为:98、765.000000、4321.000000。

(2)一个良好的算法由下面的基本结构组成,但不包括__________。

A)顺序结构 B)选择结构 C)循环结构 D)跳转结构

答案:D

评析:1966年,Bohra和Jacopini提出了以下三种基本结构,用这三种基本结构作为表示一个良好算法的基本单元:1、顺序结构;2、选择结构;3、循环结构。

(3)请选出以下程序的输出结果________。

#include

sub(x,y,z)

int x,y,*z:

{*z=y-x;}

main{

int a,b,c;

sub(10,5,&a);sub(7,a,&b);sub(a,b,&C);

printf(”%d,%d,%d\n”,a,b,C);

}

A)5,2,3 B)-5,-12,-7 C)-5,-12,-17 D)5,-2,-7

答案:B

评析:sub函数的作用是将形参y和x的差赋给了z指向的那个内存地址,所以在sub(10,5,&a/I,10和5属于值传递,a是属于地址传递,也就是a与z指向了同一个存储单元,在执行函数后,a的值随*z变化,所以此次函数被调用后,a的值为y-x=-5,同理可知,在sub(7,a,&b)后,b的值发生变化,其值为-5-7=-12,在sub(a,b,&C)后,c的值发生变化,其值为-12-(-5)=-7。

(4)下面程序在屏幕上的输出是________。

main

{

printf(”ab\b\b c”);

}

A)ab\b\b c B)a c C)abc D)ab c

答案:B

评析:c语言中允许使用一种特殊形式的字符常量,、就是以一个“”开头的字符序列,这样的字符称为“转义字符”。常用的转义字符有:\n,换行;\t,水平制表;\b,退格;\r,回车。

(5)若x是整型变量,pb是基类型为整型的指针变量,则正确的赋值表达式是_______。

A)pb=&x; B)pb=x; C)*pb=&x; D)*pb=

答案:A

评析:选项A将变量x的地址赋给指针变量pb,使pb指向x‘选项B是将x的值当作地址赋给指针pb,Db指向一个地址等于x值的内存单元;选项c将x的地址赋给指针pb指向的地址等于x的内存单元。

(6)设整型数i=5,则printf(“%d”,i+++++i);的输出为________。

A)10 B)1l C)12 D)语法错误

答案:D

评析:c语言中有基本的算术运算符(+、-、*、/)还包括自增自减运算符(++、–),在c语言解析表达式时,它总是进行贪婪咀嚼,这样,该表达式就被解析为i++ ++ +i,显然该表达式不合c语言语法。

(7)若要用下面的程序片段使指针变量p指向一个存储整型变量的动态存储单元

int *p;

p=___________malloc(sizeof(im));

则应填入__________。

A)int B)int C)(*int) D)(int*)

答案:D

评析:不论p是指向什么类型的指针变量,都可以通过强制类型转换的方法使之类型一致,强制类型转换的格式为(数据类型+)。

(8)下面程序输出的结果是__________。

main

{

int i=5,J=9,x;

x=(I==j?i:(j=7));

printf(”\n%d,%d”,I,J);

}

A)5,7 B)5,5 C)语法错误 D)7,5

答案:A

评析:条件表达式的一般形式为:表达式I?表达式2:表达式3;先求解表达式1,若为真则求解表达式2;若表达式l的值为假,则求解表达式3。本题中先判断i==j,不等,执行j=7;然后执行x=7。故本题为A。

(9)若执行下面程序时从键盘上输入5,

main

{

int x:

scanf(”%d”,&x);

if(x++>5)printf(”%d\n”,x);

else printf(”%d\n”,x–);

}

则输出是________。

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

答案:B

评析:根据c语言的语法,x++是在使用x之后,再将x的值加1,在if语句中,x的值为5,条件不成立,执行else后面的语句,因为x的值已经加1,为6,所以打印结果为6。

(10)若有以下定义和语句:

int a={l,2,3,4,5,6,7,8,9,10},*p=a;

则值为3的表达式是_________。

A)p+=2,*(p++) B)p+=2,*++p

C)p+=3,*p++ D)p+=2,++*p

答案:A

评析:引用一个数组元素,可以用:(1)下标法,如a[i]形式;(2)指针法,如*(a+i)或*(p+i)。数组的下标从0开始,值为3的数组元素是a[2]。B、c的内容为a[3],D将a[2]前自加,结果为4。

篇5:C笔试题及答案

(1)设a、b和c都是int型变量,且a=3、b=4、c=5,则下面的表达式中,值为0的表

达式是___________。

A)’a’&&’b’ B)a<=b C)a‖+c&&b-c D)!((a

答案:D

评析z选项A:‘a’&&‘b’是字符a与b的相与,不为0;选项B:a<=b,由题中变量赋值可知,结果为1。选项c:a‖+c&&b-c,结果为1;选项D:!((a

(2)以下程序运行后,输出结果是_________。

main

{

char*d。{“ab”,”cde”};

printf(”%x”,d[1]);

}

A)cde B)字符c的ASCII码值

C)字符c的地址 D)出错

答案:C

评析:指针数组中的每一个元素都相当于一个指针变量。一维指针数组的定义形式为:类型名+数组名[数组长度],在本题main函数中定义指针数组d,它有两个元素,其初值分别是“ab”、“cde”的首地址。dB]的值为”cde”的首地址。%x是指以十六进制数形式输出整数。

(3)设有如下程序

#include

main

{

intk,*j,i=100;

j=&i; k=&j;

printf(”%d\n”,k);

}

上述程序的输出结果是________。

A)运行错误 B)100 C)i的地址 D)j的地址

答案:B

评析:j=&i,j的值就是i的地址,*j=100,将j的地址赋给k,这时*k=j,那么,k=*j,而1=100,所以k=100,最后的打印结果应当为100。

(4)设有以下语句,其中不是对a数组元素的正确引用的是:_______(其中O≤i<10)

int a=[10]={0,1,2,3,4,5,6,7,8,9,},*p=a;

A)a[p-a] B)。(&a[i]) C)p[I] D)*(*(a+i))

答案:D

评析:观察程序可知,a实际上就是数组a的首地址,所以“+(a+i)”表示的就是数组a中的第i个元素的值,进而,我们可以知道+(t(a+i))必然不是对a数组元素的正确引用。

(5)以下程序运行后,输出结果为________。

main

{

int a[2][3]={1,3,5,7,9,1 1},*s[2],**pp,*p;

s[0]=a[0],s[1]=a[1];

pp=s;

p=(int*)malloc(sizeof(int));

**pp=s[1][1];

p=*PP;

printf(”%d\n”,*p);

}

A)l B)7 C)9 D)1l

答案:C

评析:s是一个含有两个元素的指针数组,pp是一个指向指针变量的指针,s[O]是指向二维数组a行下标为0的元素的首地址,即a[0儿0]的地址,s[1]为a[1][0]的地址。pp的值为s[O]的地址。**pp=s[1][l]后,a[0][0]的值将被赋值为all][l]的值,执行p=*pp;后,p中将是s[0]的值,最后的输出语句将输出地址s[0]所指向的数据,即a[0][O]。

(6)有以下程序:

#include

main{

char c[6];

int I=0:

for(;i<6;c[-]=getchar,i++);

for(I=0;i<6;i++)putchar(c[i]);

primf(”\n”);

}

如果从键盘上输入:

ab

c

def

则输出结果为_________.

A)a B)a C)ab D)abcdef

b b c

c c d

d d

e

f

答案:C

评析:1.getchar:此函数的作用是从终端(或系统隐含指定的输入设备)输入一个字符。

2.putchar:此函数的作用是向终端输出一个字符,也可以输出控制字符。

本题在输入字符时,ab和c后面的回车符分别赋给了c[2]和e[4],所以,正确答案为c。

(7)在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是_______。

A)地址传递 B)单向值传递

C)由实参传递给形参,再由形参传递给实参

D)传递方式由用户指定

答案:B

评析:c语言规定,实参变量对形参变量的数据传递是“单向值传递”,只由实参传给形参。在内存中,实参单元与形参单元是不同的单元。调用结束后,实参单元仍保留并维持原值。

(8)下面程序

#include

#include

main

{ char*p1=”abc”,*p2=”ABC”,str[50]=”xyz”;

strcpy(str+2,strcat(p1,p2));

printf(”%s\n”,str);

}

的输出是_________。

A)xyzabcABC B)zabcABC

C)yzabcABC D)xyabcABC

答案:D

评析:strcat(pl,p2)将字符串abcABC放到了*pl所指向的存储单元中;strcpy在本题将abcABC复制到str+2所指向的存储单元中,即覆盖原str数组中的字符z及其后的所有字符,故str的值为”xyabcABC”。

(9)下面程序

int aa[3][3]:{{2},{4},{6}};

main

{ int i,*p:&aa[0][0];

for(I=0;i<2;i++){

if(i==0)aa[I][i+l]=*p+1;

else++p;

printf(”%d’.,。p);

}

}

的输出是__________。

A)23 B)26 C)33 D)36

答案:A

评析:观察题目,可以发现,*p=&aa[01[o]语句实际是将数组aa的首地址赋给了指针变量p,将i的值带入for循环中,i=0时,aa[0][1]=3,+p=2;*p输出的是指针所指向的数组值,此时p所指向的是aa[O][O],输出2,而i=l时执行了++p操作使指针向后移动指向了aa[O儿1],所以在输出*p时应为3。

(10)以下程序的输出结果是_________。

#include

#include

fun(char*w,int n)

{

char t,*s1,*s2;

s1=w;s2=w+n-l:

while(s1

{

t=*s1++:

*sl=*s2–;

*s2=t;

}

}

main

{

char*p;

p=”1234567″;

fun(p,strlen(p));

puts(p);

}

A)1234567 B)7654321 C)1711717 D)717717l

答案:C

评析:在子函数fun中,sl为字符串w的起始地址,s2为字符串的结束地址(字符‘\O’除外),当执行循环结束循环,w=“1711717”。

篇6:c经典笔试题

有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件C中.

#include

#include

int main(int argc,char* argv)

{

FILE* fp;

int i,j,k,num,NUM;

char c[50],t,ch;

if((fp=fopen(“A”,“r”))==NULL)

/*can be replaced by open

* int fd=open(“A”,O_RDONLY|O_CREAT);*/

{

printf(“fileA cannot be opened\n”);

exit(0);

}

printf(“\nA contents are:\n”);

for(i=0;(ch=fgetc(fp))!=EOF;i++)/*一个字符一个字符读*/

{

c[i]=ch;

putchar(c[i]);

}

num=i+1;

fclose(fp);

if((fp=fopen(“B”,“r”))==NULL)

{

printf(“fileB cannot be opened\n”);

exit(0);

}

printf(“\nB contents are :\n”);

for(i=0;(ch=fgetc(fp))!=EOF;i++)

{

c[num+i]=ch;

putchar(c[num+i]);

}

fclose(fp);

NUM=num+i+1;

for(k=0;k

{

for(j=0;j

{

if(c[j]>c[j+1])

{

t=c[j];

c[j]=c[j+1];

c[j+1]=t;

}

}

}

printf(“\nC fileis:\n”);

fp=fopen(“C”,“w”);

for(i=0;i

{

putc(c[i],fp);/*将字符一个个写入文件中*/

putchar(c[i]);/*一个个输出字符*/

}

fclose(fp);

return 1;

}

篇7:c经典笔试题

有一浮点型数组A,用C语言写一函数实现对浮点数组A进行降序排序,并输出结果,要求要以数组A作为函数的入口.(建议用冒泡排序法)

#include

#include

void BubbleSort(int arr, int n)

{

int i,j;

int exchange = 1;//交换标志,提高算法效率;

int temp;

for(i=0;i

{

exchange=0;//本趟排序开始前,交换标志应为假

for(j=0;j

{

if(arr[j+1] >arr[j])

{

temp=arr[j+1];

arr[j+1]=arr[j];

arr[j]=temp;

exchange=1; //发生了交换,故将交换标志置为真

}

}

if(!exchange) //本趟排序未发生交换,提前终止算法

return;

}

}

int main(int argc,char* argv)

{

int arr[5]={1,4,2,6,5};

int i;

BubbleSort(arr, 5);

printf(“after sort,arr is :\n”);

for(i=0;i<5;i++)

{

printf(“%3d”,arr[i]);

}

return 1;

}

篇8:c经典笔试题

写出二分查找的代码:

Int binary_search(int* arr,int key,int size)

{

Intmid;

Intlow=0;

Int high=size-1;

While(low<=high)

{

Mid=(low+high)/2;

If(arr[mid]>key)

High=mid-1;

ElseIf(arr[mid]

Low=mid+1;

Else

Return mid;

}

Return -1;

}

请编写一个C 函数,该函数在一个字符串中找到可能的最长的子字符串,该字符串是由同一字符组成的。

#include

#include

#include

int ChildString(char*p)

{

char* q=p;

int stringlen=0, i=0,j=1,len=0,maxlen=1;

//stringlen=strlen(p);

while(*q!='\0') //不能用strlen,求得长stringlen

{

stringlen++;

q++;

}

while( i< stringlen)

{

if(*(p+i)==*(p+j)&&j< stringlen)

{

len++; //统计子串长度

i++;

j++;

}

else

{

if(len>=maxlen) //统计最大子串长度

{

maxlen=len+1;

len=0;

}

else

len=0;

i++;

j++;

}

}

return maxlen;

}

int main(int argc,char* argv)

{

char arr[11];

int len;

printf(“please input chararr(10):\n”);

scanf(“%s”,arr);

len=ChildString(arr);

printf(“the len of childarr is:%d\n”,len);

return 1;

}

篇9:C基础笔试题及答案

1.编写my_strcpy函数,实现与库函数strcpy类似的功能,不能使用任何库函数;

答:char *strcpy(char *strDest, const char *strSrc)

{

if ( strDest == NULL || strSrc == NULL)

return NULL ;

if ( strDest == strSrc)

returnstrDest ;

char *tempptr = strDest ;

while( (*strDest++ = *strSrc++) != ‘’);

returntempptr ;

}

2. 头文件中的ifndef/define/endif的作用?

答:防止该头文件被重复引用。

3. #i nclude与#i nclude “file.h”的区别?

答:前者编译器从标准库路径开始搜索file.h,而后者编译器从用户的工作路径开始搜索file.h。

4. 在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern“C”?

答:extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,其声明的函数和变量可以在本模块或其它模块中使用。

通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明。

5. 面向对象的三个基本特征,并简单叙述之?

答:1)封装:将客观事物抽象成类,每个类对自身的数据和方法实行protection(private, protected,public)

2)继承:实现继承(指使用基类的属性和方法而无需额外编码的能力)、可视继承(子窗体使用父窗体的外观和实现代码)、接口继承(仅使用属性和方法,实现滞后到子类实现)。

3)多态:允许将子类类型的指针赋值给父类类型的指针。

6. 重载(overload)和重写(overried,有的书也叫做“覆盖”)的区别?

答:从定义上来说:

重载:是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。

重写:是指子类重新定义复类虚函数的方法。

从实现原理上来说:

重载:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数。

重写:当子类重新定义了父类的虚函数后,父类指针根据赋给它的不同的子类指针,动态的调用属于子类的该函数,这样的函数调用在编译期间是无法确定的(调用的子类的虚函数的地址无法给出)。

7. 多态的作用?

答:主要是两个:1)隐藏实现细节,使得代码能够模块化;扩展代码模块,实现代码重用;2)接口重用,为了类在继承和派生的时候,保证使用家族中任一类的实例的某一属性时的正确调用。

8. 分别写出BOOL,int,float,指针类型的变量a 与“零”的比较语句。

答:BOOL :if ( !a ) or if(a)

int :if ( a ==0)

float :const EXPRESSION EXP = 0.000001

if ( a < EXP && a >-EXP)

pointer : if ( a != NULL) or if(a == NULL)

9. 请说出const与#define 相比,有何优点?

答案:1) const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误。

2) 有些集成化的调试工具可以对const 常量进行调试,但是不能对宏常量进行调试。

10.简述数组与指针的区别?

数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。指针可以随时指向任意类型的内存块。

(1)修改内容上的差别

char a = “hello”;

a[0] = ‘X’;

char *p = “world”; // 注意p 指向常量字符串

p[0] = ‘X’; // 编译器不能发现该错误,运行时错误

(2) 用运算符sizeof 可以计算出数组的容量(字节数)。sizeof(p),p 为指针得到的是一个指针变量的字节数,而不是p 所指的内存容量。C++/C 语言没有办法知道指针所指的内存容量,除非在申请内存时记住它。注意当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。

char a = “hello world”;

char *p = a;

cout< cout< 计算数组和指针的内存容量

voidFunc(char a[100])

{

cout< }

篇10:C基础笔试题及答案

1.变量的声明和定义有什么区别?

答:声明变量不分配空间,定义变量要分配空间。声明主要是告诉编译器,后面的引用都按声明的格式。定义其实包含了声明的意思,同时要分配内存空间。

2. 解释堆和栈的区别。

答:堆(heap)——一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。速度比较慢,而且容易产生内存碎片,不过用起来最方便。

栈(stack)——由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。由系统自动分配,速度较快。但程序员是无法控制的。

3. const的作用是什么?

答:(1)可以定义const常量

(2)const可以修饰函数的参数、返回值,甚至函数的定义体。被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。

4. 下列哪两个是等同的

int b;

A constint* a = &b; //指向常量的指针,不能通过指针改变b,但指针的地址可以改变。

B const* int a = &b;// 指针的地址不可以改变,但可以通过指针改变b的值

C constint* const a = &b; //指针指向的值,和指针本身的地址都不能改变

D intconst* const a = &b;//与c相同

5. 完成程序,实现对数组的降序排序

#include

void sort(int array );

int main

{

int array={45,56,76,234,1,34,23,2,3}; //数字任//意给出

sort( array );

return 0;

}

void sort( int array )

{____________________________________

inti,j,k;

for(i=1;i<=7;i++) { if(array[i]>array[i-1])

{

k=ARRAY[i];

j=i-1;

do

{

array[j+1]=array[j];

j– ;

}

while(k>array[j]&&j>=0);

array[j+1]=k;

}

}

—————————————————–

}

6. int i=(j=4,k=8,l=16,m=32); printf(“%d”, i); 输出是多少?

答:相当于 i=j=4;i=k=8;i=l=16;i=m=32; 故最后i=32;

7. 请简述以下两个for循环的优缺点(5分)

1)for (i=0; i {

if (condition)

DoSomething;

else

DoOtherthing;

}

2)if (condition)

{

for (i=0; i DoSomething;

}

else

{

for (i=0; i 0)

{

*psTo++ = *psFrom++;

}

returnpvTo;

}

8 .C++里面如何声明const void f(void)函数为C程序中的库函数?

答:在该函数前添加extern “C”声明。由于编译后的名字不同,C++程序不能直接调用C 函数。

9. 请写出下面代码在 32 位平台上的运行结果,并说明sizeof的性质:

#include

#include

int main(void)

{

char a[30];

char *b = (char *)malloc(20 * sizeof(char));

printf(“%d\n”, sizeof(a));

printf(“%d\n”, sizeof(b));

printf(“%d\n”, sizeof(a[3]));

printf(“%d\n”, sizeof(b+3));

printf(“%d\n”, sizeof(*(b+4)));

return 0 ;

}

答:在32位系统下(如WIN32),指针长度为32位。a是一个有30个元素的字符型数组;b是一个字符串指针;a[3]是字符型;b+3是指针;*(b+4)是字符型。

因此输出: 30、4、1、4、1

篇11:C基础笔试题及答案

1. C++中,关键字struct和class的区别仅仅在于:

struct定义的类的缺省成员为公有的,而class定义的类的缺省成员为私有的;

2. 头文件的作用是什么?

答:1)通过头文件来调用库功能。2)头文件能加强类型安全检查。

3. C++函数中值的传递方式有哪几种?

答:C++函数的三种传递方式为:值传递、指针传递和引用传递。

4. 内存的分配方式的分配方式有几种?

答:1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量。

2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。

3)从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。

5. 设计函数intatoi(char *s)。

答:intatoi (char *s)

{

int i = 0,sum = 0,sign; //输入的数前面可能还有空格或制表符应加判断

while(*s==”||*s==’\t’)

{

i++;

}

sign = (*s==’-')?-1:1;

if(*s==’-'|| *s==’+')

{

i++;

}

while(*s!=’\0′)

{

sum = *s-’0′+sum*10;

i++;

}

return sign*sum;

}

6. 编写strcat函数(6分)

已知strcat函数的原型是char *strcat (char *strDest, const char *strSrc);

其中strDest是目的字符串,strSrc是源字符串。

(1)不调用C++/C 的字符串库函数,请编写函数strcat

答:

char * __cdeclstrcat(char * dst, const char * src)

{

char * cp = dst;

while( *cp )

cp++; /* find end of dst */

while( *cp++ = *src++ ) ; /* Copy src to end of dst */

return(dst ); /* return dst */

}

(2)strcat能把strSrc的内容连接到strDest,为什么还要char * 类型的返回值?

答:方便赋值给其他变量。

7. MFC中CString是类型安全类么?

答:不是,其它数据类型转换到CString可以使用CString的成员函数Format来转换

8.函数模板与类模板有什么区别?

答:函数模板的实例化是由编译程序在处理函数调用时自动完成的,而类模板的实例化必须由程序员在程序中显式地指定。

9. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。

答:#define MIN(A,B) ((A) <= (B) ? (A) : (B)) 宏的副作用(与某些函数的混淆):least = MIN(*p++, b)。宏定义#define MIN(A,B) ((A) <= (B) ? (A) : (B))对MIN(*p++, b)的作用结果是:

((*p++) <= (b) ? (*p++) : (*p++))

10. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?

答:while(1)或者for(;;)

出纳职位笔试题集

笔试题现金出纳

IBM的项目经理面试试题

财务计算笔试题

几道PHP笔试题

PHP笔试题目及答案

笔试题数据的定义

php笔试题附带详细答案

经典数据结构笔试题及答案

寿险公司资产管理笔试题

C笔试题及答案
《C笔试题及答案.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

【C笔试题及答案(共11篇)】相关文章:

医学心理学笔试题2023-07-10

微软面试笔试试题大家谈2022-04-30

网游公司的笔试题大2022-09-01

腾讯笔试题(一、二)2023-08-21

公路造价师技术计量笔试题2024-05-07

笔试题函数类2022-11-20

笔试题假设问题2023-08-06

百度笔试题2023-06-01

上海万国商业网笔试题2022-12-23

数字电路试题及答案2022-10-21