linux c/c++ 面试题目整理(一)

1、求下面函数的返回值

int func(x)
{
    int countx = 0;
    while(x)
    {
        countx++;
        x = x&(x-1);
    }
    return countx;
}

问:假定x是9999,那么返回多少?
答:返回的是8,解题思路是将x转化为二进制,看含有多少个1,则就返回多少。

2、文件中有一组整数,要求排序后输出到另一个文件中

       如果数不多的情况下,可以直接将文件中所有整数读到set<int>中,set类型会自动排好序,读完后再将所有整数写到另一个文件中去。
       而整数特别多内存又不够的情况下,可以分批读,每次读一部分排好序写到一个小文件中去,直到所有整数都读取完成,这时每个小文件就都是排好序的了,然后将所有小文件中第一个数读出来进行比较,选出最小的放到目标文件中去,然后将该最小的数所在文件的下一个数读取出来进行比较,这样所有小文件都比完之后,目标文件中就是排好序的所有整数了。
       思路:这里采用的是大而化小,化整为零的手段。

3、使用递归将两个有序链表合并为一个有序链表

       思路:理解递归,并定义好结束的条件

Node * Merge(Node *head1, Node* head2)
{
    if (head1 == NULL)
        return head2;
    if (head2 == NULL)
        return head1;
    Node* head = NULL;
    if (head1->data < head2->data)
    {
        head = head1;
        head->next = Merge(head1->next, head2);
    }
        else
    {
        head = head2;
        head->next = Merge(head1, head2->next);
    }
    return head;
}

4、写一个函数找出整数数组中第二大的数

const int minnumber = -32767;
int find_sec_max(int data[], int count)
{
    int maxnumber = data[0];
    int sec_max = minnumber;
    for( int i=1;I < count; i++)
    {
        if (data[i] > maxnumber)
        {
            sec_max = maxnumber;
            maxnumber = data[i];
        }
        else
        {
            if (data[i] > sec_max)
                sec_max = data[i];
        }
    }
    return sec_max;
}

思路:定义两个变量一直保存最大的两个整数

5、如何判断一个单链表是否有环

struct node
{
    char val;
    node* next;
}
bool check(const node* head)
{
    if (head == NULL)
        return false;
    node* low = head,*fast = head->next;
    while(fast != NULL && fast->next != NULL)
    {
        low = low->next;
        fast = fast->next->next;
        if (low == fast)
        {
            return true;
        }
    }
    return false;
}

思路:第一个节点每次走一步,第二个节点每次走两步,即第一个节点走n步的时候,第二个节点走了2n步,如果是有环的链表,n和2n处必定是同一个节点。

6、一个标准的strcpy函数

//strcpy的实现:
char * strcpy(char* strDest, const char* strSrc)
{
    assert( (strDest != NULL) && (strSrc != NULL));
    char *address = strDest;
    while( (*strDest++ = *strSrc++) != ‘\0’);
    return address;
}

返回char*的原因:
返回strDest的原始值使得函数能够支持链式表达式,增加了函数的附加值。同样功能的函数,如果能合理地提高函数的可用性,自然就更加的理想。

7、嵌入式系统可能用到这样的场景,即要求设置一绝对地址为0x67a9的整型变量的值为0xaa66,怎么设置?

int *ptr;
ptr = (int*)0x67a9;
*ptr = 0xaa66;

8、下面的代码输出是什么?为什么?

void foo(void)
{
    unsigned int a = 6;
    int b = -20;
    (a+b) > 6?puts(“>6”):puts(“<=6”);
}

结果是”>6”,原因是当表达式存在有符号类型和无符号类型时所有的操作对象都自动转换为无符号类型,因此-20变成一个非常大的整数与6相加,所以该表达式计算出的结果大于6.

9、strncpy和snprintf的正确用法

//strncpy的正确用法:
strncpy(dest,src,sizeof(dest)-1);
dest[strlen(dest)] = ‘\0’;
//snprintf的正确用法:
snprintf(dest, sizeof(dest)-1, “%s”, src);

总则:
1)snprintf的使用比strncpy简洁
2)snprintf可以获取被拷贝的字节数
3)二者都有性能问题,如果src长度远大于dest,用strncpy,否则用snprintf。

10、printf中%5.3s,这样的怎么看?

int main(void)
{
    printf(“%s, %5.3s\n”, “computer”, “computer”);
    return 0;
}

输出:computer,com
       %5.3s 或者是 %5.3d 中小数点后面表示输出的最大宽度,小数点前面的表示输出的最小宽度;
       %5.3f则表示输出场宽为9的浮点数, 其中小数位为3, 整数位为1, 小数点占一位, 不够9位右对齐;
       默认都是右对齐, 若是%-7s则输出左对齐

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,458评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,454评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,171评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,062评论 0 207
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,440评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,661评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,906评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,609评论 0 200
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,379评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,600评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,085评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,409评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,072评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,088评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,860评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,704评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,608评论 2 270

推荐阅读更多精彩内容

  • 一、 C/C++程序基础 面试例题1——分析代码写输出(一般赋值语句的概念和方法)。 面试例题2—...
    LuckTime阅读 1,925评论 2 42
  • 1.把二元查找树转变成排序的双向链表 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不...
    曲终人散Li阅读 3,240评论 0 19
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,447评论 1 51
  • 1 序 2016年6月25日夜,帝都,天下着大雨,拖着行李箱和同学在校门口照了最后一张合照,搬离寝室打车去了提前租...
    RichardJieChen阅读 5,016评论 0 12
  • 我的第一天生活就要结束了,很糟糕的感冒了。明早有考试,我记得通往考试场地的小道上有个景色很美的地方,糟糕的心...
    一把玻璃阅读 147评论 0 1