当前位置: 首页 > news >正文

网站策划包括哪些内容大学两学一做网站

网站策划包括哪些内容,大学两学一做网站,网页版梦幻西游五色石,宝安建设工程交易中心1. 用预处理指令#define 声明一个常数#xff0c;用以表明1年中有多少秒#xff08;忽略闰年问题#xff09; #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 2. 写一个“标准”宏MIN#xff0c;这个宏输入两个参数并返回较小的一个。 #define MIN(A,B) ((A) (B) (…1. 用预处理指令#define 声明一个常数用以表明1年中有多少秒忽略闰年问题 #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 2. 写一个“标准”宏MIN这个宏输入两个参数并返回较小的一个。 #define MIN(A,B) ((A) (B) (A) : (B)) 注意大小写的问题、括号的问题 4. 嵌入式系统中经常要用到无限循环你怎么样用C编写死循环呢 这个问题用几个解决方案。我首选的方案是  while(1)  {  }  一些程序员更喜欢如下方案  for(;;)  {  }  第三个方案是用 goto  Loop:  ...  goto Loop;5. 用变量a给出下面的定义  a) 一个整型数An integer int a b) 一个指向整型数的指针A pointer to an integer int* ptr c) 一个指向指针的的指针它指向的指针是指向一个整型数A pointer to a pointer to an integer int** ptr d) 一个有10个整型数的数组An array of 10 integers int a[10] e) 一个有10个指针的数组该指针是指向一个整型数的An array of 10 pointers to integersint* p[10]  f) 一个指向有10个整型数数组的指针A pointer to an array of 10 integers in (*p)[10] g) 一个指向函数的指针该函数有一个整型参数并返回一个整型数A pointer to a function that takes an integer as an argument and returns an integer int (*p)(int) h) 一个有10个指针的数组该指针指向一个函数该函数有一个整型参数并返回一个整型数 An array of ten pointers to functions that take an integer argument and return an integer int (*p[10])(int)答案是  a) int a; // An integer  b) int *a; // A pointer to an integer  c) int **a; // A pointer to a pointer to an integer  d) int a[10]; // An array of 10 integers  e) int *a[10]; // An array of 10 pointers to integers  f) int (*a)[10]; // A pointer to an array of 10 integers  g) int (*a)(int); // A pointer to a function a that takes an integer argument and returns an integer  h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer 6. 关键字static的作用是什么 这个简单的问题很少有人能回答完全。在C语言中关键字static有三个明显的作用  1). 在函数体一个被声明为静态的变量在这一函数被调用过程中维持其值不变。  2). 在模块内但在函数体外一个被声明为静态的变量可以被模块内所用函数访问但不能被模块外其它函数访问。它是一个本地的全局变量。  3). 在模块内一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是这个函数被限制在声明它的模块的本地范围内使用。 修饰变量在函数内表示此变量在调用的过程中它的值维持不变在函数外表示静态变量可以被本文件使用但不能被其他文件使用。 修饰函数表示是静态函数只能被该文件中其他函数调用7关键字const是什么含意  const int a; 表示a是一个常整数 int const a; 表示a是一个常整数 const int *a; 表示a是一个指向常整数的指针 int * const a; 表示a是一个指向整数类型的常指针 int const * a const;表示a是一个指向常整数类型的常指针前两个的作用是一样a是一个常整型数。第三个意味着a是一个指向常整型数的指针也就是整型数是不可修改的但指针可以。第四个意思a是一个指向整型数的常指针也就是说指针指向的整型数是可以修改的但指针是不可修改的。最后一个意味着a是一个指向常整型数的常指针也就是说指针指向的整型数是不可修改的同时指针也是不可修改的。如果应试者能正确回答这些问题那么他就给我留下了一个好印象。8. 关键字volatile有什么含意 并给出三个不同的例子。 一个定义为volatile的变量是说这变量可能会被意想不到地改变这样编译器就不会去假设这个变量的值了。精确地说就是优化器在用到这个变量时必须每次都小心地重新读取这个变量的值而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子  1). 并行设备的硬件寄存器如状态寄存器  2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)  3). 多线程应用中被几个任务共享的变量 表示该变量是易变的编译器不应该去优化该值即编译器不会去假设这个变量的值。它必须去内存中重新获取该值而不是用寄存器中保存的值。 1并行设备的硬件寄存器 2一个服务子程序中访问到的非自动变量。 3多线程应用中被几个任务共享的变量。1). 一个参数既可以是const还可以是volatile吗解释为什么。  可以比如寄存器变量我们希望它是只读的但是仍可能是易变的。 2). 一个指针可以是volatile 吗解释为什么。  buffer指向一个地址被A线程使用B线程修改了buffer所指的地址同时希望A线程使用新地址设置volatile。 3). 下面的函数有什么错误  int square(volatile int *ptr)  {  return *ptr * *ptr;  }  Ptr由于是volatile类型是易变的两次取得的值可能不一样。因此此函数可能无法完成平方的功能。 Ptr内容可能被修改无法保证两次取得同一个值应该先取出值放入一个变量中然后通过这个变量来计算 9. 嵌入式系统总是要用户对变量或寄存器进行位操作。给定一个整型变量a写两段代码第一个设置a的bit 3第二个清除a 的bit 3。在以上两个操作中要保持其它位不变。 #define BIT3 (0x13)  static int a;  void set_bit3(void)  {  a | BIT3;  }  void clear_bit3(void)  {  a ~BIT3;  } #define BIT3 (0x13) //注意括号 void set_bit3(void) { a | BIT3 } Void clear_bit3 {A~BIT3 }10. 嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。在某工程中要求设置一绝对地址为0x67a9的整型变量的值为0xaa66。编译器是一个纯粹的ANSI编译器。写代码去完成这一任务。 Int *p; P(int*)0x67a9; *p0xaa66;Int *p(int *)0x67a9; *p0xaa6;11. 中断是嵌入式系统中重要的组成部分这导致了很多编译开发商提供一种扩展—让标准C支持中断。具代表事实是产生了一个新的关键字__interrupt。下面的代码就使用了__interrupt关键字去定义了一个中断服务子程序(ISR)请评论一下这段代码的。 __interrupt double compute_area (double radius)  {  double area PI * radius * radius;  printf( Area %f, area);  return area;  } (1)中断不应该有返回值 (2)中断子程序中应该尽量少使用浮点类型因为不可重入以及printf也是不可重入的在不同平台移植会出错。 (3)中断不应该传参12 . 下面的代码输出是什么为什么 void foo(void)  {  unsigned int a 6;  int b -20;  (ab 6) puts( 6) : puts( 6);  } 6   无符号整形和符号整形数字相加时后者自动转化为无符号整形因此应该是6 13. 评价下面的代码片断unsigned int zero 0;  unsigned int compzero 0xFFFF;  /*1s complement of zero */ 因为不知道该平台是几位的因此这个写法是不对的正确写法应该是 unsigned int compzero~014. 尽管不像非嵌入式计算机那么常见嵌入式系统还是有从堆heap中动态分配内存的过程的。那么嵌入式系统中动态分配内存可能发生的问题是什么 主要有三种类型: 内存泄露、 内存碎片、 内存崩溃   内存崩溃是内存使用最严重的结果主要原因有数组访问越界、写已经释放的内存、指针计算错误、访问堆栈地址越界等等。碎片收集的问题变量的持行时间等等 下面的代码片段的输出是什么为什么char *ptr;  if ((ptr (char *)malloc(0)) NULL)  puts(Got a null pointer);  else  puts(Got a valid pointer);  该代码的输出是“Got a valid pointer”。15. Typedef 在C语言中频繁用以声明一个已经存在的数据类型的同义字。也可以用预处理器做类似的事。例如思考一下下面的例子  #define dPS struct s *  typedef struct s * tPS; 答案是typedef更好。思考下面的例子  dPS p1,p2;  tPS p3,p4; 第一个扩展为  struct s * p1, p2;上面的代码定义p1为一个指向结构的指p2为一个实际的结构这也许不是你想要的。第二个例子正确地定义了p3 和p4 两个指针。16. C语言同意一些令人震惊的结构,下面的结构是合法的吗如果是它做些什么  int a 5, b 7, c;  c ab; 上面的代码被处理成  c a b;  因此, 这段代码持行后a 6, b 7, c 12。 17.找错题试题1void test1() {char string[10];char* str1 0123456789;strcpy( string, str1 ); } 试题2void test2() {char string[10], str1[10];int i;for(i0; i10; i){str1[i] a;}strcpy( string, str1 ); } 试题3void test3(char* str1) {char string[10];if( strlen( str1 ) 10 ){//假如str110那么它的长度就是11了拷贝不下了strcpy( string, str1 );} } 解答试题1字符串str1需要11个字节才能存放下包括末尾的’\0’而string只有10个字节的空间strcpy会导致数组越界对试题2如果面试者指出字符数组str1不能在数组内结束可以给3分如果面试者指出strcpy(string, str1)调用使得从str1内存起复制到string内存起所复制的字节数具有不确定性可以给7分在此基础上指出库函数strcpy工作方式的给10分对试题3if(strlen(str1) 10)应改为if(strlen(str1) 10)因为strlen的结果未统计’\0’所占用的1个字节。18写出字符串strcpy的函数实现过程式 void strcpy( char *strdest, char *strsrc ) {while( (*strdest * strsrc) ! ‘\0’ ); } 4分void strcpy( char *strdest, const char *strsrc )  //将源字符串加const表明其为输入参数加2分 {while( (*strdest * strsrc) ! ‘\0’ ); } 7分void strcpy(char *strdest, const char *strsrc)  {//对源地址和目的地址加非0断言加3分assert( (strdest ! null) (strsrc ! null) );while( (*strdest * strsrc) ! ‘\0’ ); } 10分//为了实现链式操作将目的地址返回加3分char * strcpy( char *strdest, const char *strsrc )  {assert( (strdest ! null) (strsrc ! null) );char *address strdest; while( (*strdest * strsrc) ! ‘\0’ ); return address; } 20经典getmemory问题讨论 试题4void getmemory( char *p ) {p (char *) malloc( 100 ); }void test( void )  {char *str null;getmemory( str ); strcpy( str, hello world );printf( str ); } 试题5char *getmemory( void ) { char p[] hello world; return p;  }void test( void ) { char *str null; str getmemory(); printf( str );  } 试题6void getmemory( char **p, int num ) {*p (char *) malloc( num ); }void test( void ) {char *str null;getmemory( str, 100 );strcpy( str, hello ); printf( str );  } 试题7void test( void ) {char *str (char *) malloc( 100 );strcpy( str, hello );free( str ); ... //省略的其它语句 } 解答试题4传入中getmemory( char *p )函数的形参为字符串指针在函数内部修改形参并不能真正的改变传入形参的值执行完char *str null; getmemory( str ); 后的str仍然为null试题5中char p[] hello world;  return p; 的p[]数组为函数内的局部自动变量在函数返回后内存已经被释放。这是许多程序员常犯的错误其根源在于不理解变量的生存期。试题6的getmemory避免了试题4的问题传入getmemory的参数为字符串指针的指针但是在getmemory中执行申请内存及赋值语句*p (char *) malloc( num ); 后未判断内存是否申请成功应加上if ( *p null ) {...//进行申请内存失败处理 } //申请内存后一定要加上内存申请成功与否的语句而且最后进行释放试题7存在与试题6同样的问题在执行char *str (char *) malloc(100); 后未进行内存是否申请成功的判断另外在free(str)后未置str为空导致可能变成一个“野”指针应加上str null; 试题6的test函数中也未对malloc的内存进行释放。21下面的一段程序有什么错误swap( int* p1,int* p2 ) {int *p;*p *p1;这里只是对指针所指向的内容的赋值而不是指针赋值*p1 *p2;*p2 *p; } 在swap函数中p是一个“野”指针有可能指向系统区导致程序运行的崩溃。在vc中debug运行时提示错误“access violation”。该程序应该改为 //申请指针后同一赋值为NULL swap( int* p1,int* p2 ) {int p;p *p1;*p1 *p2;*p2 p; } 22分别给出boolintfloat指针变量 与“零值”比较的 if 语句假设变量名为var解答bool型变量if(!var)int型变量 if(var0)float型变量const float epsinon 0.00001;if ((x - epsinon) (x epsinon)指针变量  if(varnull)剖析考查对0值判断的“内功”bool型变量的0判断完全可以写成if(var0)而int型变量也可以写成if(!var)指针变量的判断也可以写成if(!var)上述写法虽然程序都能正确运行但是未能清晰地表达程序的意思。 一般的如果想让if判断一个变量的“真”、“假”应直接使用if(var)、if(!var)表明其为“逻辑”判断如果用if判断一个数值型变量(short、int、long等)应该用if(var0)表明是与0进行“数值”上的比较而判断指针则适宜用if(varnull)这是一种很好的编程习惯。浮点型变量并不精确所以不可将float变量用“”或“”与数字比较应该设法转化成“”或“”形式。如果写成if (x 0.0)则判为错得0分。23以下为windows nt下的32位c程序请计算sizeof的值void func ( char str[100] ) {sizeof( str ) ?//数目名字是一个指针指针占4个字节 }void *p malloc( 100 ); sizeof ( p ) ? 解答 …… sizeof( str ) 4 sizeof ( p ) 4 char str[10]; cout sizeof(str) endl; 24写一个“标准”宏min这个宏输入两个参数并返回较小的一个。另外当你写下面的代码时会发生什么事least min(*p, b); 解答#define min(a,b) ((a) (b) ? (a) : (b)) min(*p, b)会产生宏的副作用25 为什么标准头文件都有类似以下的结构 #ifndef __incvxworksh #define __incvxworksh  #ifdef __cplusplusextern c { #endif  /*...*/  #ifdef __cplusplus }#endif  #endif /* __incvxworksh */ 解答头文件中的编译宏#ifndef __incvxworksh #define __incvxworksh #endif 的作用是防止被重复引用。 为了实现c和c的混合编程c提供了c连接交换指定符号extern c来解决名字匹配问题函数声明前加上extern c后则编译器就会按照c语言的方式将该函数编译为_foo这样c语言中就可以调用c的函数了。26 编写一个函数作用是把一个char组成的字符串循环右移n个。比如原来是“abcdefghi”如果n2移位后应该是“hiabcdefgh” 函数头是这样的//pstr是指向以\0结尾的字符串的指针 //steps是要求移动的nvoid loopmove ( char * pstr, int steps ) {//请填充... } 解答正确解答1void loopmove ( char *pstr, int steps ) {int n strlen( pstr ) - steps;char tmp[max_len]; strcpy ( tmp, pstr n ); strcpy ( tmp steps, pstr); *( tmp strlen ( pstr ) ) \0;strcpy( pstr, tmp ); } 正确解答2void loopmove ( char *pstr, int steps ) {int n strlen( pstr ) - steps;char tmp[max_len]; memcpy( tmp, pstr n, steps ); memcpy(pstr steps, pstr, n ); memcpy(pstr, tmp, steps );  } 27  static关键字至少有下列n个作用1函数体内static变量的作用范围为该函数体不同于auto变量该变量的内存只被分配一次因此其值在下次调用时仍维持上次的值2在模块内的static全局变量可以被模块内所用函数访问但不能被模块外其它函数访问3在模块内的static函数只可被这一模块内的其它函数调用这个函数的使用范围被限制在声明它的模块内28 const关键字至少有下列n个作用1欲阻止一个变量被改变可以使用const关键字。在定义该const变量时通常需要对它进行初始化因为以后就没有机会再去改变它了2对指针来说可以指定指针本身为const也可以指定指针所指的数据为const或二者同时指定为const3在一个函数声明中const可以修饰形参表明它是一个输入参数在函数内部不能改变其值4对于类的成员函数若指定其为const类型则表明其是一个常函数不能修改类的成员变量29请写一个c函数若处理器是big_endian的则返回0若是little_endian的则返回1解答int checkcpu() {{union w{ int a;char b;} c;c.a 1;return (c.b 1);} } 30. 堆和栈的区别 栈区stack- 由编译器自动分配释放 存放函数的参数值局部变量的值等。其操作方式类似于数据结构中的栈。 堆区heap - 一般由程序员分配释放 若程序员不释放程序结束时可能由OS回收 。1 从静态存储区域分配。内存在程序编译的时候就已经分配好这块内存在程序的整个运行期间都存在。例如全局变量static 变量。2 在栈上创建。在执行函数时函数内局部变量的存储单元都可以在栈上创建函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集。3 从堆上分配亦称动态内存分配。程序在运行的时候用malloc 或new 申请任意多少的内存程序员自己负责在何时用free 或delete 释放内存。动态内存的生存期由程序员决定使用非常灵活但问题也最多。31.struct 和 class 的区别答案struct 的成员默认是公有的而类的成员默认是私有的。struct 和 class 在其他方面是功能相当的。 从感情上讲大多数的开发者感到类和结构有很大的差别。感觉上结构仅仅象一堆缺乏封装和功能的开放的内存位而类就象活的并且可靠的社会成员它有智能服务有牢固的封装屏障和一个良好定义的接口。既然大多数人都这么认为那么只有在你的类有很少的方法并且有公有数据这种事情在良好设计的系统中是存在的!时你也许应该使用 struct 关键字否则你应该使用 class 关键字。 32. #include stdafx.h #define SQR(X) X*X int main(int argc, char* argv[]) {int a 10;int k 2;int m 1;a / SQR(km)/SQR(km); printf(%d\n,a); return 0; } 这道题目的结果是什么啊?   21*21/21*21220.521 -------------------------------------------------------------------------- 33. const 符号常量 (1)const char *p (2)char const *p (3)char * const p 说明上面三种描述的区别如果const位于星号的左侧则const就是用来修饰指针所指向的变量即指针指向为常量 如果const位于星号的右侧const就是修饰指针本身即指针本身是常量。 (1)const char *p 一个指向char类型的const对象指针p不是常量,我们可以修改p的值使其指向不同的char但是不能改变它指向非char对象如 const char *p; char c1a; char c2b; pc1;//ok pc2;//ok *pc1;//error (2)char const *p (3)char * const p 这两个好象是一样的此时*p可以修改而p不能修改。 (4)const char * const p 这种是地址及指向对象都不能修改。 34.下面是C语言中两种if语句判断方式。请问哪种写法更好为什么int n;if (n 10) // 第一种判断方式if (10 n) // 第二种判断方式 如果少了个号,编译时就会报错,减少了出错的可能行,可以检测出是否少了 35.写出运行结果: {// test2union V {struct X {unsigned char s1:2;unsigned char s2:3;unsigned char s3:3;} x;unsigned char c;} v;v.c 100;printf(%d, v.x.s3);  }3  //011 36.用C写个程序如何判断一个操作系统是16位还是32位的不能用sizeof()函数 A1: 16位的系统下 int i 65536; cout i; // 输出0 int i 65535; cout i; // 输出-1 32位的系统下 int i 65536; cout i; // 输出65536 int i 65535; cout i; // 输出65535 A2: int a ~0; if( a65536 )  {cout32 bitendl; } else {cout16 bitendl; } 37.C和C有什么不同? 从机制上c是面向过程的但c也可以编写面向对象的程序c是面向对象的提供了类。但是c编写面向对象的程序比c容易 从适用的方向c适合要求代码体积小的效率高的场合如嵌入式c适合更上层的复杂的  llinux核心大部分是c写的因为它是系统软件效率要求极高。 从名称上也可以看出c比c多了说明c是c的超集那为什么不叫c而叫c呢是因为c比c来说扩充的东西太多了所以就在c后面放上两个于是就成了c C语言是结构化编程语言C是面向对象编程语言。 C侧重于对象而不是过程侧重于类的设计而不是逻辑的设计。 38.在不用第三方参数的情况下交换两个参数的值 #include stdio.h void main() {int i60;int j50;iij;ji-j;ii-j;printf(i%d\n,i);printf(j%d\n,j); } 方法二 i^j; j^i; i^j; 方法三 // 用加减实现而且不会溢出 a ab-(ba) .进程间通信的方式有? 进程间通信的方式有 共享内存 管道 Socket 消息队列 ,等 39 struct A  {  char t:4;  char k:4;  unsigned short i:8;  unsigned long m;  }  sizeof(A)?不考虑边界对齐 7 40给定结构struct A  {char t:4;char k:4;unsigned short i:8;unsigned long m; };问sizeof(A) ? 给定结构struct A  {char t:4; 4位char k:4; 4位unsigned short i:8; 8位     unsigned long m; // 偏移2字节保证4字节对齐 }; // 共8字节41下面的函数实现在一个固定的数上加上一个数有什么错误改正  int add_n(int n)  { static int i100; in; return i;  }  答: 因为static使得i的值会保留上次的值。 去掉static就可了 42 union a {int a_int1;double a_double;int a_int2; }; typedef struct {a a1;char y; } b; class c {double c_double;b b1;a a2; }; 输出coutsizeof(c)endl;的结果? 43 i最后等于多少? int i 1; int j i; //j1  i2 if((ij) (i j)) ij; 答: i 5 44 unsigned short array[]{1,2,3,4,5,6,7}; int i 3; *(array i) ? 答: 4 45 试编写函数判断计算机的字节存储顺序是开序(little endian)还是降序(bigendian) 答: bool IsBigendian() {unsigned short usData 0x1122;unsigned char  *pucData (unsigned char*)usData;return (*pucData 0x22); } 46简述Critical Section和Mutex的不同点 答: 对几种同步对象的总结 1.Critical Section A.速度快 B.不能用于不同进程 C.不能进行资源统计(每次只可以有一个线程对共享资源进行存取) 2.Mutex A.速度慢 B.可用于不同进程 C.不能进行资源统计 3.Semaphore A.速度慢 B.可用于不同进程 C.可进行资源统计(可以让一个或超过一个线程对共享资源进行存取) 4.Event A.速度慢 B.可用于不同进程 C.可进行资源统计 47 请指出下列程序中的错误并且修改 void GetMemory(char *p){p(char *)malloc(100); } void Test(void){char *strNULL;GetMemory(str);strcpy(str,hello world);printf(str); } A:错误--参数的值改变后不会传回 GetMemory并不能传递动态内存Test函数中的 str一直都是 NULL。 strcpy(str, hello world);将使程序崩溃。 修改如下: char *GetMemory(){char *p(char *)malloc(100);return p; } void Test(void){char *strNULL;strGetMemory(){strcpy(str,hello world);printf(str); } 方法二:void GetMemory2(char **p)变为二级指针. void GetMemory2(char **p, int num) {*p (char *)malloc(sizeof(char) * num); } 48用C 写一个输入的整数,倒着输出整数的函数,要求用递归方法 ; 答: void fun( int a ) {printf( %d, a%10 );a / 10;if( a 0 )return;fun( a ); } 49.头文件中的 ifndef/define/endif 干什么用预处理 答防止头文件被重复引用50. i nclude 和 i nclude “filename.h” 有什么区别 答前者用来包含开发环境提供的库头文件后者用来包含自己编写的头文件。51.在C 程序中调用被 C 编译器编译后的函数为什么要加 extern “C”声明 答函数和变量被C编译后在符号库中的名字与C语言的不同被extern C修饰的变 量和函数是按照C语言方式编译和连接的。由于编译后的名字不同C程序不能直接调 用C 函数。C提供了一个C 连接交换指定符号extern“C”来解决这个问题。 52. 回答下面的问题(6分) (1).Void GetMemory(char **p, int num){ *p (char *)malloc(num); } void Test(void){ char *str NULL; GetMemory(str, 100); strcpy(str, hello); printf(str); } 请问运行Test 函数会有什么样的结果 答输出“hello” (2). void Test(void){ char *str (char *) malloc(100); strcpy(str, “hello”); free(str); if(str ! NULL){ strcpy(str, “world”); printf(str); } } 请问运行Test 函数会有什么样的结果 答输出“world” (3). char *GetMemory(void){ char p[] hello world; return p; } void Test(void){ char *str NULL; str GetMemory(); printf(str); } 请问运行Test 函数会有什么样的结果 答无效的指针输出不确定 53. 编写strcat函数(6分) 已知strcat函数的原型是char *strcat (char *strDest, const char *strSrc); 其中strDest 是目的字符串strSrc 是源字符串。 1不调用C/C 的字符串库函数请编写函数 strcat 答 char * strcat (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 */ } 2strcat能把strSrc 的内容连接到strDest为什么还要char * 类型的返回值 答方便赋值给其他变量 54.程序什么时候应该使用线程什么时候单线程效率高。 答1耗时的操作使用线程提高应用程序响应 2并行操作时使用线程如C/S架构的服务器端并发线程响应用户的请求。 3多CPU系统中使用线程提高CPU利用率 4改善程序结构。一个既长又复杂的进程可以考虑分为多个线程成为几个独立或半独 立的运行部分这样的程序会利于理解和修改。 其他情况都使用单线程。55.TCP/IP 建立连接的过程?(3-way shake) 答在TCP/IP协议中TCP协议提供可靠的连接服务采用三次握手建立一个连接。第一次握手建立连接时客户端发送syn包(synj)到服务器并进入SYN_SEND状态等待服务器确认 第二次握手服务器收到syn包必须确认客户的SYNackj1同时自己也发送一个 SYN包synk即SYNACK包此时服务器进入SYN_RECV状态 第三次握手客户端收到服务器的SYNACK包向服务器发送确认包ACK(ackk1)此包发送完毕客户端和服务器进入ESTABLISHED状态完成三次握手。 56.ICMP是什么协议,处于哪一层? 答Internet控制报文协议处于网络层IP层57 winsock建立连接的主要实现步骤? 答服务器端socker()建立套接字绑定bind并监听listen用accept 等待客户端连接。 客户端socker()建立套接字连接connect服务器连接上后使用send()和recv 在套接字上写读数据直至数据交换完毕closesocket()关闭套接字。 服务器端accept发现有客户端连接建立一个新的套接字自身重新开始等待连 接。该新产生的套接字使用send()和recv写读数据直至数据交换完毕closesock et()关闭套接字。 58 动态连接库的两种方式? 答调用一个DLL中的函数有两种方法 1载入时动态链接load-time dynamic linking模块非常明确调用某个导出函数 使得他们就像本地函数一样。这需要链接时链接那些函数所在DLL的导入库导入库向 系统提供了载入DLL时所需的信息及DLL函数定位。  2运行时动态链接run-time dynamic linking运行时可以通过LoadLibrary或Loa dLibraryEx函数载入DLL。DLL载入后模块可以通过调用GetProcAddress获取DLL函数的 出口地址然后就可以通过返回的函数指针调用DLL函数了。如此即可避免导入库文件了 59 IP组播有那些好处? 答Internet上产生的许多新的应用特别是高带宽的多媒体应用带来了带宽的急剧 消耗和网络拥挤问题。组播是一种允许一个或多个发送者组播源发送单一的数据包 到多个接收者一次的同时的的网络技术。组播可以大大的节省网络带宽因为无 论有多少个目标地址在整个网络的任何一条链路上只传送单一的数据包。所以说组播 技术的核心就是针对如何节约网络资源的前提下保证服务质量。 60.描述实时系统的基本特性在特定时间内完成特定的任务实时性与可靠性。 61.全局变量和局部变量在内存中是否有区别如果有是什么区别全局变量储存在静态数据库局部变量在堆栈。 62.什么是平衡二叉树左右子树都是平衡二叉树 且左右子树的深度差值的绝对值不大于1。 63.堆栈溢出一般是由什么原因导致的没有回收垃圾资源。 64.冒泡排序算法的时间复杂度是什么时间复杂度是O(n^2)。 65.Internet采用哪种网络协议该协议的主要层次结构Tcp/Ip协议主要层次结构为 应用层/传输层/网络层/数据链路层/物理层。 66.Internet物理地址和IP地址转换采用什么协议ARP (Address Resolution Protocol)地址解析協議 67.IP地址的编码分为哪俩部分IP地址由两部分组成网络号和主机号。不过是要和“子网掩码”按位与上之后才能区分哪些是网络位哪些是主机位。 68.不能做switch()的参数类型是 switch的参数不能为实型。 注必须是整数型常量包括charshortintlong等不能是浮点数。Int main() {Float a3;Switch(a){Case 3:Printf(“a”); }Return 0; }//error C2450: switch expression of type float is illegal69、局部变量能否和全局变量重名答能局部会屏蔽全局。要用全局变量需要使用:: 局部变量可以与全局变量同名在函数内引用这个变量时会用到同名的局部变量而不会用到全局变量。对于有些编译器而言在同一个函数内可以定义多个同名的局部变量比如在两个循环体内都定义一个同名的局部变量而那个局部变量的作用域就在那个循环体内。 70、如何引用一个已经定义过的全局变量答extern可以用引用头文件的方式也可以用extern关键字如果用引用头文件方式来引用某个在头文件中声明的全局变理假定你将那个变写错了那么在编译期间会报错如果你用extern方式引用时假定你犯了同样的错误那么在编译期间不会报错而在连接期间报错。 71、全局变量可不可以定义在可被多个.C文件包含的头文件中为什么答可以在不同的C文件中以static形式来声明同名全局变量。可以在不同的C文件中声明同名的全局变量前提是其中只能有一个C文件中对此变量赋初值此时连接不会出错。 72、语句for( 1 )有什么问题它是什么意思答无限循环和while(1)相同。 73、do……while和while……do有什么区别答前一个循环一遍再判断后一个判断以后再循环。 74 程序的局部变量存在于栈中全局变量存在于静态区 中动态申请数据存在于 堆中。 75、设有以下说明和定义 typedef union {long i; int k[5]; char c;} DATE;     //25 struct data { int cat; DATE cow; double dog;} too;  //37 DATE max; 则语句 printf(%d,sizeof(struct date)sizeof(max));的执行结果是___52____62 76、队列和栈有什么区别队列先进先出栈后进先出77、请找出下面代码中的所以错误 说明以下代码是把一个字符串倒序如“abcd”倒序后变为“dcba” includestring.h main() {char*srchello,world;char* destNULL;int lenstrlen(src);dest(char*)malloc(len);char* ddest;char* ssrc[len];while(len--!0) ds--;printf(%s,dest);return 0; }  答 int main(){ char* src hello,world; int len strlen(src); char* dest (char*)malloc(len1);//要为\0分配一个空间 char* d dest; char* s src[len-1];//指向最后一个字符 while( len-- ! 0 ) *d*s--; *d 0;//尾部要加\0 printf(%s\n,dest); free(dest);// 使用完应当释放空间以免造成内存汇泄露 return 0; }78.用两个栈实现一个队列的功能要求给出算法和思路 设2个栈为A,B, 一开始均为空. 入队: 将新元素push入栈A; 出队: (1)判断栈B是否为空 (2)如果不为空则将栈A中所有元素依次pop出并push到栈B (3)将栈B的栈顶元素pop出 79.对于一个频繁使用的短小函数,在C语言中应用什么实现,在C中应用什么实现? c用宏定义c用inline80.软件测试都有那些种类? 黑盒针对系统功能的测试   白合测试函数功能各函数接口81进程和线程的差别。 线程是指进程内的一个执行单元,也是进程内的可调度实体. 与进程的区别: (1)调度线程作为调度和分配的基本单位进程作为拥有资源的基本单位 (2)并发性不仅进程之间可以并发执行同一个进程的多个线程之间也可并发执行 (3)拥有资源进程是拥有资源的一个独立单位线程不拥有系统资源但可以访问隶属于进程的资源.  (4)系统开销在创建或撤消进程时由于系统都要为之分配和回收资源导致系统的开销明显大于创建或撤消线程时的开销。网络编程中设计并发服务器使用多进程 与 多线程 请问有什么区别 1进程子进程是父进程的复制品。子进程获得父进程数据空间、堆和栈的复制品。 2线程相对与进程而言线程是一个更加接近与执行体的概念它可以与同进程的其他线程共享数据但拥有自己的栈空间拥有独立的执行序列。 两者都可以提高程序的并发度提高程序运行效率和响应时间。 线程和进程在使用上各有优缺点线程执行开销小但不利于资源管理和保护而进程正相反。同时线程适合于在SMP机器上运行而进程则可以跨机器迁移。82.测试方法  人工测试个人复查、抽查和会审 机器测试黑盒测试和白盒测试 83Heap与stack的差别。 Heap是堆stack是栈。 Stack的空间由操作系统自动分配/释放Heap上的空间手动分配/释放。 Stack空间有限Heap是很大的自由存储区 C中的malloc函数分配的内存空间即在堆上,C中对应的是new操作符。 程序在编译期对变量和函数分配内存都在栈上进行,且程序运行过程中函数调用时参数的传递也在栈上进行84 一语句实现x是否为2的若干次幂的判断 int i 512;((i (i - 1)) ? false : true);85 main() {int a[5]{1,2,3,4,5};int *ptr(int *)(a1);printf(%d,%d,*(a1),*(ptr-1)); } 输出2,585 char* sAAA; printf(%s,s); s[0]B; printf(%s,s); 有什么错 AAA是字符串常量。s是指针指向这个字符串常量所以声明s的时候就有问题。 cosnt char* sAAA; 然后又因为是常量所以对是s[0]的赋值操作是不合法的。86 列举几种进程的同步机制并比较其优缺点。原子操作  信号量机制自旋锁管程会合分布式系统 87.进程之间通信的途径 共享存储系统 消息传递系统 管道以文件系统为基础 88.进程死锁的原因 资源竞争及进程推进顺序非法 89.死锁的4个必要条件 互斥、请求保持、不可剥夺、环路 90.死锁的处理 鸵鸟策略、预防策略、避免策略、检测与解除死锁 91.  操作系统中进程调度策略有哪几种 FCFS(先来先服务)优先级时间片轮转多级反馈92.数组和链表的区别 数组数据顺序存储固定大小 连表数据可以随机存储大小可动态改变 93.ISO的七层模型是什么tcp/udp是属于哪一层tcp/udp有何优缺点 应用层 表示层 会话层 运输层 网络层 物理链路层 物理层 tcp /udp属于运输层 TCP 服务提供了数据流传输、可靠性、有效流控制、全双工操作和多路复用技术等。 与 TCP 不同 UDP 并不提供对 IP 协议的可靠机制、流控制以及错误恢复功能等。由于 UDP 比较简单 UDP 头包含很少的字节比 TCP 负载消耗少。 tcp: 提供稳定的传输服务有流量控制缺点是包头大冗余性不好 udp: 不提供稳定的服务包头小开销小  94(void *)ptr 和 (*(void**))ptr的结果是否相同其中ptr为同一个指针 .(void *)ptr 和 (*(void**))ptr值是相同的95要对绝对地址0x100000赋值我们可以用 (unsigned int*)0x100000 1234; 那么要是想让程序跳转到绝对地址是0x100000去执行应该怎么做 *((void (*)( ))0x100000 ) ( );96分析 typedef struct AA {int b1:5;int b2:2; }AA; void main() {AA aa;char cc[100];strcpy(cc,0123456789abcdefghijklmnopqrstuvwxyz);memcpy(aa,cc,sizeof(AA));cout aa.b1 endl;cout aa.b2 endl; } 答案是 -16和97分析 struct bit  {  int a:3; int b:2; int c:3;  };  int main()  { bit s; char *c(char*)s; coutsizeof(bit)endl;*c0x99;cout s.a endl s.bendls.cendl; int a-1;printf(%x,a);return 0;  }  输出为什么是  1001 1001 4 1 -1 -4 ffffffff98改错 i nclude stdio.h int main(void) {int **p;int arr[100];p arr;return 0; } 解答 搞错了,是指针类型不同, int **p; //二级指针 arr; //得到的是指向第一维为100的数组的指针 i nclude stdio.h int main(void) { int **p, *q; int arr[100]; q arr; p q; return 0; }99下面这个程序执行后会有什么错误或者效果:#define MAX 255int main() {unsigned char A[MAX],i;//i被定义为unsigned charfor (i0;iMAX;i)A[i]i; } 解答死循环加数组越界访问C/C不进行数组越界检查
http://www.zqtcl.cn/news/359924/

相关文章:

  • 马克斯网站建设外贸电商平台哪个网站最好
  • 国外网站做任务套利网络推广员怎么做
  • 如何创建一个网站用来存放东西wordpress 可以干嘛
  • 做健身俱乐部网站的目的和意义商超网站
  • 网站点击排名phpcms安装
  • 鹧鸪哨网站1v1深度开发最吸引人的营销广告文案
  • 网站建设可以学吗如何修改wordpress的登录
  • 保定做网站的公司百度软件商店
  • 金华市金东区建设局网站wordpress好看的下载页面
  • 英文网站seo发展前景成都网站开发建设推广
  • p2p网贷网站建设方案制作网站专业公司吗
  • 益阳网站建设企业房地产市场最新动态
  • 关于公司网站改版通知jmr119色带
  • 城关区建设局网站珠海中英文网站建设
  • 长春哪家做网站便宜手机英语网站
  • 应城网站建设莱芜拉呱
  • 如何建立淘宝客网站HTML网站建设课程
  • 网站建设供需chrome不安全的网站设置
  • 网站dns修改中国楼市未来发展趋势
  • 网站超级链接怎么做帮别人发广告赚钱平台
  • 做网站可以赚钱么注册做网站的公司
  • 河南省建协网官方网站建网站卖阀门
  • 医院网站怎么制作重庆安全监督工程信息网
  • 饰品网站建设规划书搭建微信网站
  • 开发网站访问流量赚钱加盟网站需要怎么做
  • 装饰协会网站源码湖南省郴州市北湖区
  • 花都网站建设价格重庆市住房和城乡建设厅网站
  • 北京住总第一开发建设有限公司网站wordpress 网站访问认证页面
  • 网站制作的管理苏州百度推广服务中心
  • 厦门建行网站首页企业展厅建筑外观