基础题
1 const和#define有什么区别?
答:(1)编译器处理方式不同
Define宏时在预处理阶段展开
Const 常量是编译运行阶段使用
(2)类型和安全检查不同
Define宏没有类型,不做任何类型检查,仅仅是展开
Const常量具有类型,在编译阶段会执行类型检查
(3)存储方式不同
Define宏仅仅是展开,有多少地方使用,就展开多少次,不分配内存
Const常量会在内存中分配(可以在对中也可以在栈中)
(4)const可以节省空间,避免不必要的内存分配
2 指针和引用有什么区别?
答:相同点:
都是地址的概念;
指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。
区别:
1 指针是一个实体,而引用仅是个别名;
2 指针可以为空,引用不能为空;
3 指针有const,引用没有const;
4 引用只能在定义时被初始化一次,之后不可变,指针可变;
5 从内存分配上看:程序为指针变量分配内存区域,而引用不需要分配内存区域。
3 在C++程序中调用被C编译器编译后的函数,为什么要加extern“C”声明?
答:因为C语言 或 C++语言的编译规则不一样,所以要告诉系统哪些函数时 C 方式 编译,哪些函数需要用C++方式编译,
如果不加exctern “C” 系统会提示找不到此函数。
4 求sizeof。
struct
{
short a1;
short a2;
}A;
struct
{
long b1;
short b2;
}B;
char data[100];
int test[100];
char* pstr="abcdefghij";
char* str="a\n";
cout<<sizeof(A)<<endl; // 4
cout<<sizeof(B)<<endl; // 8
cout<<sizeof(data)<<endl; // 100
cout<<sizeof(test)<<endl; // 400
cout<<sizeof(pstr)<<endl; // 4
cout<<sizeof(str)<<endl; // 4
5 internet 上的通信协议有哪些,此协议分几层?
答:Internet 通信协议有:
TCP/IP协议:使计算机记性无障碍的通信,让其有相通的语言,即统一的通信协议。
TCP协议:在发送与接收计算机系统之间维持连接,同时还要提供无差错的通信服务,将发送的数据报文还原并组装起来,自动根据计算机系统间的距离远近修改通信确认的超时值。
IP协议:控制网络上的数据传输。
Internet网络通信的工作分为7层,由低到高分别是:
物理层(Physical Layer),
数据链路层(Data Link Layer)
,网络层(Network Layer),
传输层(Transport Layer),
会话层(Session Layer),
表示层(Presen tation Layer),
应用层(Application Layer)
编程题
1 编写程序输入实现123->321。
答:
#include<iostream>
using namespacestd;
int main()
{
int n;
cout<<”please input a number”<<endl;
cin>>n;
do
{
cout<<n%10;
} while (n/=10);
return 0;
}
2 一个字符串右移n,改变字符串的输出。
例如:字符串”abcdefghi”右移n=2后,输出”hiabcdefg”.
答:
#include<iostream>
#include<string>
using namespacestd;
void reser(char*q,char* p)
{
while(q<p)
{
*q ^= *p;
*p ^= *q;
*q ^= *p;
q++;
p--;
}
}
voidloopMove(char* str,int steps)
{
char *q = str;
int n=strlen(str);
char *p = str+n-1-steps;
reser(q,p);//先翻转前一段
q = p+1;
p = str+n-1;
reser(q,p);//翻转后一段
q = str;
reser(q,p);//翻转整个字符串
//cout<<str<<endl;
}
int main()
{
char str[100];
cout<<"please input string andnumber:";
cin>>str;
int steps = 0;
cout<<"please inputsteps:";
cin>>steps;
loopMove(str,steps);
cout<<"after move steps stringis:"<<str<<endl;
return 0;
}
3 将一个intdata[10]={0,1,4,7,8,5,2,3,6,9}通过冒泡排序后得到升序,再用vector删除为偶数的元素。
答:
#include<iostream>
#include<vector>
#include<iterator>
#include<list>
using namespacestd;
voidbuble_sort(int data[],size_t size)
{
int i,j;
for(i=0;i<size-1;i++)
{
int order=1;
for(j=0;j<size-1-i;j++)
{
if(data[j]>data[j+1])
swap(data[j],data[j+1]);
}
order=0;
}
}
int main()
{
int data[10]={0,1,4,7,8,5,2,3,6,9};
size_t size=10;
buble_sort(data,size);
for(int i=0;i<size;i++)
cout<<data[i]<<endl;
cout<<"----------------"<<endl;
// vector 删除数组里面是偶数的元素
vector<int> in_vec;
for(int j=0;j<size;j++)
in_vec.push_back(data[j]);
vector<int>::iterator it;
for(it=in_vec.begin();it!=in_vec.end();it++)
{
if(*it%2!=0)
break;
else if(*it%2==0)
in_vec.erase(it);
cout<<*it<<endl;
}
while(1);
return 0;
}
综合题
有a,b,c,d 4个球,分别出现的概率是10%,20%,30%,40%,要求编写RunDemo,每调用一次函数RunDemo,就按上面的概率出现球。
答:
#include<iostream>
#include<ctime>
#include<string>
using namespacestd;
string RunDemo()
{
stringstr[4]={"a","b","c","d"};
int i=rand()%10;
switch(i)
{
case 0:
return str[0];
break;
case 1:case 2:
return str[1];
break;
case 3:case 4:case 5:
return str[2];
break;
case 6:case 7:case 8:case 9:
return str[3];
break;
}
}
int main()
{
srand(time(0));
for(int i=0;i<10;i++)
cout<<RunDemo()<<endl;
getchar();
return 0;
}