(转载)C++面试宝典2011版 (41)

线程是指进程内的一个执行单元,也是进程内的可调度实体.与进程的区别:
(1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间;
(2)进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源
(3)线程是处理器调度的基本单位,但进程不是.
(4)二者均可并发执行.

111.插入排序和选择排序

插入排序基本思想:(假定从大到小排序)依次从后面拿一个数和前面已经排好序的数进行比较,比较的过程是从已经排好序的数中最后一个数开始比较,如果比这个数,继续往前面比较,直到找到比它大的数,然后就放在它的后面,如果一直没有找到,肯定这个数已经比较到了第一个数,那就放到第一个数的前面。那么一般情况下,对于采用插入排序法去排序的一组数,可以先选 取第一个数做为已经排好序的一组数。然后把第二个放到正确位置。

选择排序(Selection Sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。以此类推,直到所有元素均排序完毕。

112.运算符优先级问题

能正确表示a和b同时为正或同时为负的逻辑表达式是(D )。

sssA、(a>=0||b>=0)&&(a<0||b<0) 
B、(a>=0&&b>=0)&&(a<0&&b<0) 
C、(a+b>0)&&(a+b<=0) 
D、a*b>0

以下关于运算符优先顺序的描述中正确的是(C)。 
A、关系运算符<算术运算符<赋值运算符<逻辑与运算符 
B、逻辑与运算符<关系运算符<算术运算符<赋值运算符 
C、赋值运算符<逻辑与运算符<关系运算符<算术运算符 
D、算术运算符<关系运算符<赋值运算符<逻辑与运算符

113.字符串倒序

写一个函数将"tom is cat" 倒序打印出来,即 "cat is tom"

//a.ch

#define SPACE \' \'
#define ENDL \'\0\'

char* str = "Tom is cat"; // 字符串
char* p1 = str+strlen(str)-1;
char* p2 = p1; // 开始时,p1,p2都指向字符串结尾处
char t=0; // 临时变量,用来保存被临时替换为ENDL的字符

while(str!=p1--)
{
  if(SPACE!=*p1){
     for(p2=p1+1;SPACE!=*p1; p1--, t=*p2, *p2=ENDL);

     // p1+1指向单词的第一个字母,p2指向单词的结尾,此时输出这个单词
                printf("%s ",p1+1);
                *p2=t;
                p2=p1;
         }
}

Output:
cat is Tom

----------------------------------------------------------------------
1)写一个递归函数将内存中的字符串翻转"abc"->"cba"
2)写一个函数将"tom is cat" 将内存中的字符串翻转,即 "cat is tomm" 

#include <stdio.h>
#define SPACE \' \'
#define ENDL \'\0\'
char* s = "The quick brown fox jumps over the lazy dog";

void str_reverse(char* p1,char* p2){
      if(p1==p2)return;
    *p1 = (*p1)+(*p2);
    *p2 = (*p1)-(*p2);
    *p1 = (*p1)-(*p2);
      if(p1==p2-1)return;
      else str_reverse(++p1,--p2);
}

void str_word_reverse(char* str){
      char *q1=str, *q2=str, *t;

while(*q1==SPACE)q1++;
      if(*q1==ENDL)return; //!
      else q2=q1+1;

while( (*q2!=SPACE) && (*q2!=ENDL) )q2++;
    
     t=q2--; 
    str_reverse(q1,q2);

if(*t==ENDL)return;
      else str_word_reverse(t);
}

int
main(int a ,char** b)
{
    printf("%s\n",s);
    str_reverse(s,s+strlen(s)-1);
    printf("%s\n",s);
    str_word_reverse(s);
    printf("%s\n",s);
           return 0;
}

Output:

The quick brown fox jumps over the lazy dog
god yzal eht revo spmuj xof nworb kciuq ehT
dog lazy the over jumps fox brown quick The

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgwfdg.html