C++ 数据结构.算法笔试题

1. 定义一个”数据类型” datatype 类,能处理包含字符型、整型、浮点型三种类型的数据,给出其构造函数。()

#include

class datatype{

enum{

character,

integer,

floating_point

} vartype;

union

{

char c;

int i;

float f;

};

public:

datatype(char ch) {

vartype = character;

c = ch;

}

datatype(int ii) {

vartype = integer;

i = ii;

}

datatype(float ff) {

vartype = floating_point;

f = ff;

}

void print();

};

void datatype::print() {

switch (vartype) {

case character:

cout

break;

case integer:

cout

break;

case floating_point:

cout

break;

}

}

void main() {

datatype A('c'), B(12), C(1.44F);

A.print();

B.print();

C.print();

}

程序运行输出:

字符型: c

整型: 12

浮点型: 1.44

2.用穷举法找出1~100间的质数,显示出来

使用while 循环语句:

#include

#include

void main()

{

int i,j,k,flag;

i = 2;

while(i

{

flag = 1;

k = sqrt(i);

j = 2;

while (j

{

if(i%j == 0)

{

flag = 0;

break;

}

j++;

}

if (flag)

cout

i++;

}

}

3. 在程序中定义一个整型变量,赋以1~100的值,要求用户猜这个数,比较两个数的大小,把结果提示给用户,直到猜对为止。

//使用do„while语句

#include

void main() {

int n = 18;

int m = 0;

do{

cout

cin >> m;

if (n > m)

cout

else if (n

cout

else

cout

}while(n != m);

}

4. 编写函数判断一个数是否是质数,在主程序中实现输入、输出。

解:

#include

#include

int prime(int i); //判一个数是否是质数的函数

void main()

{

int i;

cout

cin >> i;

if (prime(i))

cout

else

cout

}

int prime(int i)

{

int j,k,flag;

flag = 1;

k = sqrt(i);

for (j = 2; j

{

if(i%j == 0)

{

flag = 0;

break;

}

}

if (flag)

return 1;

else

return 0;

}

程序运行输出:

请输入一个整数:1151

1151是质数.

5. 编写函数求两个整数的最大公约数和最小公倍数。(第三章、10)

#include

#include

int fn1(int i,int j); //求最大公约数的函数

void main()

{

int i,j,x,y;

cout

cin >> i ;

cout

cin >> j ;

x = fn1(i,j);

y = i * j / x;

cout

int fn1(int i, int j)

{

int temp;

if (i

{

temp = i;

i = j;

j = i;

}

while(j != 0)

{

temp = i % j;

i = j;

j = temp;

}

return i;

}

程序运行输出:

请输入一个正整数:120

请输入另一个正整数:72

120和72的最大公约数是:24

120和72的最小公倍数是:360

6. 编写递归函数GetPower(int x, int y)计算x 的y 次幂, 在主程序中实现输入输出。 源程序:

#include

using namespace std;

long GetPower(int x,int y);

int main()

{

int i,j;

long s;

cout

cin>>i;

cout

cin>>j;

s=GetPower(i,j);

cout

return 0;

}

long GetPower(int m,int n)

{

if(n==1)

return m;

else

return (m*GetPower(m,n-1));

}程序运行输出:

Enter a number: 3

To what power? 4

3 to the 4th power is 81

7. 定义一个矩形类,有长、宽两个属性,有成员函数计算矩形的面积

#include

class Rectangle

{

public:

Rectangle(float len, float width)

{

Length = len;

Width = width;

}

~Rectangle(){};

float GetArea() { return Length * Width; }

float GetLength() { return Length; }

float GetWidth() { return Width; }

private:

float Length;

float Width;

};

void main()

{

float length, width;

cout

cin >> length;

cout

cin >> width;

Rectangle r(length, width);

cout

}

程序运行输出:

请输入矩形的长度:5

请输入矩形的宽度:4

长为5宽为4的矩形的面积为:20

8. 编写一个函数,统计一个英文句子中字母的个数,在主程序中实现输入、

#include

#include

int count(char *str)

{

int i,num=0;

for (i=0; str[i]; i++)

{

if ( (str[i]>='a' && str[i]='A' && str[i]

}

return num;

}

void main()

{

char text[100];

cout

gets(text);

cout

程序运行输出:

输入一个英语句子:

It is very interesting!

这个句子里有19个字母。

9. 编写一个矩阵转置的函数,矩阵的维数在程序中由用户输入。

#include

void move (int matrix[3][3])

{

int i, j, k;

for(i=0; i

for (j=0; j

{

k = matrix[i][j];

matrix[i][j] = matrix[j][i];

matrix[j][i] = k;

}

}

void main()

{

int i, j;

int data[3][3];

cout

for(i=0; i

for (j=0; j

{

cout

cin >> data[i][j];

}

cout

for(i=0; i

{

for (j=0; j

cout

cout

}

move(data);

cout

for(i=0; i

{

for (j=0; j

cout

cout

}

}

程序运行输出:

输入矩阵的元素

第 1 行第1 个元素为:1

第1 行第2 个元素为:2

第1 行第3 个元素为:3

第2 行第1 个元素为:4

第2 行第2 个元素为:5

第2 行第3 个元素为:6

第3 行第1 个元素为:7

第3 行第2 个元素为:8

第3 行第3 个元素为:9

输入的矩阵的为:

1 2 3

4 5 6

7 8 9

转置后的矩阵的为:

1 4 7

2 5 8

3 6 9

10. 编写函数int index(char *s, char *t),返回字符串t 在字符串s 中出现的最左边的位置,如果在s 中没有与t 匹配的子串,就返回-1。

解:

源程序:

#include

int index( char *s, char *t)

{

int i,j,k;

for(i = 0; s[i] != ‘\0′; i++)

{

for(j = i, k = 0; t[k] != ‘\0′ && s[j] == t[k]; j++, k++);

if (t[k] ==’\0′)

return i;

}

return -1;

}

void main()

{

char str1[20],str2[20];

cout

cin >> str1;

cout

cin >> str2;

n = index(str1,str2);

if (n > 0)

cout

else

cout

}

11. 编写函数reverse(char *s)的倒序递归程序,使字符串s 倒序。

解:

源程序:

#include

#include

void reverse(char *s, char *t)

{

char c;

if (s

{

c = *s;

*t = c;

reverse(++s, –t);

}

}

void reverse( char *s)

{

reverse(s, s + strlen(s) – 1);

}

void main()

{

char str1[20];

cout

cin >> str1;

cout

reverse(str1);

cout

}

12. 一个Shape 基类,在此基础上派生出Rectangle 和Circle ,二者都有GetArea()函数计算对象的面积。使用Rectangle 类创建一个派生类Square 。

解:

#include

#include

#define pi 3.14

class shape

{ public:

virtual float area()=0;

};

class circle:public shape

{

private:

float r;

public:

circle(float r1)

{

r=r1;

}

float area()

{

return (float)pi*r*r;

}

};

class rectangle:public shape

{

private:

float width,height;

public:

rectangle(float w1,float h1)

{

width=w1;height=h1;

}

float area()

{

return width*height;

}

};

class square : public rectangle {

public:

square(float len):rectangle(len,len){}; ~square(){};

float area(float len)

{

return len * len;

};

};

int main()

{

shape* s[2];

s[0]=new circle(1);

coutarea()

s[1]=new rectangle(2,4); coutarea()

cout area()

delete [] s[ i ];

}

return 0;

}

1. 定义一个”数据类型” datatype 类,能处理包含字符型、整型、浮点型三种类型的数据,给出其构造函数。()

#include

class datatype{

enum{

character,

integer,

floating_point

} vartype;

union

{

char c;

int i;

float f;

};

public:

datatype(char ch) {

vartype = character;

c = ch;

}

datatype(int ii) {

vartype = integer;

i = ii;

}

datatype(float ff) {

vartype = floating_point;

f = ff;

}

void print();

};

void datatype::print() {

switch (vartype) {

case character:

cout

break;

case integer:

cout

break;

case floating_point:

cout

break;

}

}

void main() {

datatype A('c'), B(12), C(1.44F);

A.print();

B.print();

C.print();

}

程序运行输出:

字符型: c

整型: 12

浮点型: 1.44

2.用穷举法找出1~100间的质数,显示出来

使用while 循环语句:

#include

#include

void main()

{

int i,j,k,flag;

i = 2;

while(i

{

flag = 1;

k = sqrt(i);

j = 2;

while (j

{

if(i%j == 0)

{

flag = 0;

break;

}

j++;

}

if (flag)

cout

i++;

}

}

3. 在程序中定义一个整型变量,赋以1~100的值,要求用户猜这个数,比较两个数的大小,把结果提示给用户,直到猜对为止。

//使用do„while语句

#include

void main() {

int n = 18;

int m = 0;

do{

cout

cin >> m;

if (n > m)

cout

else if (n

cout

else

cout

}while(n != m);

}

4. 编写函数判断一个数是否是质数,在主程序中实现输入、输出。

解:

#include

#include

int prime(int i); //判一个数是否是质数的函数

void main()

{

int i;

cout

cin >> i;

if (prime(i))

cout

else

cout

}

int prime(int i)

{

int j,k,flag;

flag = 1;

k = sqrt(i);

for (j = 2; j

{

if(i%j == 0)

{

flag = 0;

break;

}

}

if (flag)

return 1;

else

return 0;

}

程序运行输出:

请输入一个整数:1151

1151是质数.

5. 编写函数求两个整数的最大公约数和最小公倍数。(第三章、10)

#include

#include

int fn1(int i,int j); //求最大公约数的函数

void main()

{

int i,j,x,y;

cout

cin >> i ;

cout

cin >> j ;

x = fn1(i,j);

y = i * j / x;

cout

int fn1(int i, int j)

{

int temp;

if (i

{

temp = i;

i = j;

j = i;

}

while(j != 0)

{

temp = i % j;

i = j;

j = temp;

}

return i;

}

程序运行输出:

请输入一个正整数:120

请输入另一个正整数:72

120和72的最大公约数是:24

120和72的最小公倍数是:360

6. 编写递归函数GetPower(int x, int y)计算x 的y 次幂, 在主程序中实现输入输出。 源程序:

#include

using namespace std;

long GetPower(int x,int y);

int main()

{

int i,j;

long s;

cout

cin>>i;

cout

cin>>j;

s=GetPower(i,j);

cout

return 0;

}

long GetPower(int m,int n)

{

if(n==1)

return m;

else

return (m*GetPower(m,n-1));

}程序运行输出:

Enter a number: 3

To what power? 4

3 to the 4th power is 81

7. 定义一个矩形类,有长、宽两个属性,有成员函数计算矩形的面积

#include

class Rectangle

{

public:

Rectangle(float len, float width)

{

Length = len;

Width = width;

}

~Rectangle(){};

float GetArea() { return Length * Width; }

float GetLength() { return Length; }

float GetWidth() { return Width; }

private:

float Length;

float Width;

};

void main()

{

float length, width;

cout

cin >> length;

cout

cin >> width;

Rectangle r(length, width);

cout

}

程序运行输出:

请输入矩形的长度:5

请输入矩形的宽度:4

长为5宽为4的矩形的面积为:20

8. 编写一个函数,统计一个英文句子中字母的个数,在主程序中实现输入、

#include

#include

int count(char *str)

{

int i,num=0;

for (i=0; str[i]; i++)

{

if ( (str[i]>='a' && str[i]='A' && str[i]

}

return num;

}

void main()

{

char text[100];

cout

gets(text);

cout

程序运行输出:

输入一个英语句子:

It is very interesting!

这个句子里有19个字母。

9. 编写一个矩阵转置的函数,矩阵的维数在程序中由用户输入。

#include

void move (int matrix[3][3])

{

int i, j, k;

for(i=0; i

for (j=0; j

{

k = matrix[i][j];

matrix[i][j] = matrix[j][i];

matrix[j][i] = k;

}

}

void main()

{

int i, j;

int data[3][3];

cout

for(i=0; i

for (j=0; j

{

cout

cin >> data[i][j];

}

cout

for(i=0; i

{

for (j=0; j

cout

cout

}

move(data);

cout

for(i=0; i

{

for (j=0; j

cout

cout

}

}

程序运行输出:

输入矩阵的元素

第 1 行第1 个元素为:1

第1 行第2 个元素为:2

第1 行第3 个元素为:3

第2 行第1 个元素为:4

第2 行第2 个元素为:5

第2 行第3 个元素为:6

第3 行第1 个元素为:7

第3 行第2 个元素为:8

第3 行第3 个元素为:9

输入的矩阵的为:

1 2 3

4 5 6

7 8 9

转置后的矩阵的为:

1 4 7

2 5 8

3 6 9

10. 编写函数int index(char *s, char *t),返回字符串t 在字符串s 中出现的最左边的位置,如果在s 中没有与t 匹配的子串,就返回-1。

解:

源程序:

#include

int index( char *s, char *t)

{

int i,j,k;

for(i = 0; s[i] != ‘\0′; i++)

{

for(j = i, k = 0; t[k] != ‘\0′ && s[j] == t[k]; j++, k++);

if (t[k] ==’\0′)

return i;

}

return -1;

}

void main()

{

char str1[20],str2[20];

cout

cin >> str1;

cout

cin >> str2;

n = index(str1,str2);

if (n > 0)

cout

else

cout

}

11. 编写函数reverse(char *s)的倒序递归程序,使字符串s 倒序。

解:

源程序:

#include

#include

void reverse(char *s, char *t)

{

char c;

if (s

{

c = *s;

*t = c;

reverse(++s, –t);

}

}

void reverse( char *s)

{

reverse(s, s + strlen(s) – 1);

}

void main()

{

char str1[20];

cout

cin >> str1;

cout

reverse(str1);

cout

}

12. 一个Shape 基类,在此基础上派生出Rectangle 和Circle ,二者都有GetArea()函数计算对象的面积。使用Rectangle 类创建一个派生类Square 。

解:

#include

#include

#define pi 3.14

class shape

{ public:

virtual float area()=0;

};

class circle:public shape

{

private:

float r;

public:

circle(float r1)

{

r=r1;

}

float area()

{

return (float)pi*r*r;

}

};

class rectangle:public shape

{

private:

float width,height;

public:

rectangle(float w1,float h1)

{

width=w1;height=h1;

}

float area()

{

return width*height;

}

};

class square : public rectangle {

public:

square(float len):rectangle(len,len){}; ~square(){};

float area(float len)

{

return len * len;

};

};

int main()

{

shape* s[2];

s[0]=new circle(1);

coutarea()

s[1]=new rectangle(2,4); coutarea()

cout area()

delete [] s[ i ];

}

return 0;

}


相关内容

  • 批改网c++笔试题
  • 批改网c++笔试题 姓名:李松 联系电话: 选择题(每题5分) 1. 面向对象程序设计思想的主要特征中不包括(D) A. 封装性 B. 多态性 C. 继承性 D. 功能分解,逐步求精 2. 如果派生类以protected方式继承基类,则原基类的protected和public成员在派生类的访问性分别 ...

  • 软件设计师考试经验
  • "软件设计师"考试经验谈 Posted on 2008-10-22 09:55 龙怀玉 阅读(694) 评论(1) 编辑 收藏 第一部分,关于题型 CASL:这是每年必考的一个试型, 在下午试题中最近几年都是一个题, 今年不会有什么变化.依然为一个题,5个空, 每空3分. C/C ...

  • 华为c++面试题及答案
  • 华为面试题1 一.请填写BOOL , float, 指针变量 与"零值"比较的 if 语句.(10分) 请写出 BOOL flag 与"零值"比较的 if 语句.(3分) 标准答案: 请写出 float x 与"零值"比较的 if 语句.( ...

  • 2008年上半年软件设计师考试试题分析
  • * 软件设计师2008年上半年(5月24日)的考试试题较前两年上半年试题难度增加了,出题更为科学.更注重知识的实践应用,死记硬背的东西少了,各类知识点的出题比较均衡.上午试题的分值分布几乎与07年下半年一致,下午试题出题形式也与07年下半年相似,这也正应了我在之前向大家提到的出题趋势.参加希赛辅导平 ...

  • 腾讯笔试&面试
  • 2010腾讯实习生笔试-产品及其他类别 这是我第一次参加笔试~吼吼~后悔没带计算机 虽有保密协定,但是不透露具体题目就差不多了吧,毕竟大家很需要心里有个底的,像我昨天就搜了半天笔经,还是一头雾水 我投的是业务类职位,归为了产品及其他类别,想必有些职位的题型大致相同,而试卷上有写试卷类型代码,估计就是 ...

  • 软考中的软件设计师考试大纲分析
  • 软考中的软件设计师考试大纲分析 一.考试说明分析 软件设计师考试的总体要求 软件设计师主要完成三项工作:(1)编写文档:(2)组织指导程序员开展工作:(3)软件优化和集成测试,开发高质量软件.本工作要求具有工程师的实际工作能力和业务水平. 具体讲就是,通过本考试的合格人 员,能根据软件开发项目管理和 ...

  • 微软面试100题
  • ----------------------------------- 1.把二元查找树转变成排序的双向链表(树) 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表. 要求不能创建任何新的结点,只调整指针的指向. 10 / / 6 14 / / / / 4 8 12 16 转换成双 ...

  • 程序设计基础知识测试题
  • 27 一.选择题程序设计基础知识测试题 1. 不需要了解计算机内部构造的语言是. A. 机器语言B. 汇编语言 C. 操作系统D. 高级程序设计语言 2. 能够把由高级语言编写的源程序翻译成目标程序的系统软件叫. A. 解释程序B.汇编程序 C. 操作系统D. 编译程序3. 不属于结构化程序设计的控 ...

  • 一个游戏程序员的学习资料
  • 一个游戏程序员的学习资料 想起写这篇文章是在看侯杰先生的<深入浅出MFC >时, 突然觉得自己在大学这 几年关于游戏编程方面还算是有些心得 因此写出这篇小文, 介绍我眼中的游戏 程序员的书单与源代码参考.一则是作为自己今后两年学习目标的备忘录, 二来 没准对别人也有点参考价值.我的原则是 ...