广州趣炫笔试题

基础题

 

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;

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值