基础题
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<
cout<
cout<
cout<
cout<
cout<
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
using namespacestd;
int main()
{
int n;
cout<<”please input a number”< cin>>n; do { cout< } while (n/=10); return 0; } 2 一个字符串右移n,改变字符串的输出。 例如:字符串”abcdefghi”右移n=2后,输出”hiabcdefg”. 答: #include #include using namespacestd; void reser(char*q,char* p) { while(q
{ *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< } 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:"< return 0; } 3 将一个intdata[10]={0,1,4,7,8,5,2,3,6,9}通过冒泡排序后得到升序,再用vector删除为偶数的元素。 答: #include #include #include #include using namespacestd; voidbuble_sort(int data[],size_t size) { int i,j; for(i=0;i { int order=1; for(j=0;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 cout<
cout<<"----------------"< // vector 删除数组里面是偶数的元素 vector for(int j=0;j in_vec.push_back(data[j]); vector 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< } while(1); return 0; } 综合题 有a,b,c,d 4个球,分别出现的概率是10%,20%,30%,40%,要求编写RunDemo,每调用一次函数RunDemo,就按上面的概率出现球。 答: #include #include #include 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< getchar(); return 0; }