面试题目_cc++面试-----17道经典编程题目分析

以下是C/C++面试题目,共计17个题目,其中涵盖了c的各种基础语法和算法,

以函数接口设计和算法设计为主。这17个题目在C/C++面试方面已经流行了多

年,大家需要抽时间掌握好,每一个题目后面附有参考答案,希望读者能够抽

时间做完题目后在看参考答案,每一个题目至少做两边,设计出两种解决问题

的算法。

d251a7f3eb6e43ef228c129926db3f03.png

1、比较字符串,输出它们第一个不同字母的位置,大小写不敏感

2、判断一个数是不是回文数,数字 1234321。

3、比较两字符串长短,并返回结果。

4、给一个字符串,编程取其中一个特定的字符并输出。

5、是比较两个英文字符串的不相同的字符的位置(忽略字母大小写)

6、主函数调用一函数

如:检索出字符串中出现次数最多的那个字符,不考虑大小写,然后返回该字符。

7、查找字符串中出现次数最多的字符,并返回该字符,只考虑小写字母,不考虑不同字母出现次数一样多的情况

8、输入一个整数n,计算不大于n的数中和7相关的数的个数,包括能被7整出的数和含有字符7的数。

9、输入一个整数将每一位上的奇数放在一个新整数中,高位放在高位,地位在低位。

10、输入一串数,将其最小的放在第一位,次小的放在最后一位,再小的放在第二位,再再小的放在倒数第二位,以此类推。

11、写一个函数,传入参数为应付钱数。返回值为买家最少付出的钱的张数int get MoneyNum(int iInputMoney)例如:买家应付351元,最少张数为5.备注:可支付的钱币只有100、50、10、5、1不考虑2、20以及小数部分。

12、设有几个人围坐在一圈并按顺时针方向从1到几编号,从第S个人开始进行1到m的报数。报数到第M个人,此人出圈。再从他的下一个人重新开始1到M的报数,如此进行下一直到所有人都出圈为止,输出报数顺序。(其中该题目为选做题)

13、对姓氏进行排名

Char str[ ]=”zhang wang li zhao”

Char str_ new[ ]=”li wang zhang zhao”

接口:

14、将一组整数中为奇数的数提取出来,高低位顺序不变。如:8 3 7 9 5 2 1 4-----》3 7 5 1

15、一组2n+1个元素的正整形数组,按升序排序,然后将小于中间数值的成员替换为中间的值。(貌似还有:“位置不变”,不过实在不理解其含义,看了例子就不用关心它的意思了),例如:1,2,3,4,5,输出为:3,3,3,4,5,原型:int fun(int arry[],int n,char*output){return 0;}

16、输入一个四位的十进制整数,编程实现将这四位整数转化为十六进制的字符串,并输出十六进制的字符串(注意负数的处理)

17、输入:一个四位的整数,比如:2367,输出:2+3+6+7=18

以下是题目的参考答案:

1、比较字符串,输出它们第一个不同字母的位置,大小写不敏感

  int str_cmp_diff(const char *str1,const char *str2)  {      while(str1[i] != '0' && str2[i] != '0')      {          if((str1[i] | 0x20) != (str2[i] | 0x20))                return i + 1;          i++;      }      if(str1[i] != str2[i]) return i + 1;      return 0;  }  int str_cmp_diff(const char *str1,const char *str2)  {      while(str1[i] != '0' || str2[i] != '0')      {          if((str1[i] | 0x20) != (str2[i] | 0x20))                return i + 1;          i++;      }           return 0;  }

2、判断一个数是不是回文数,数字 1234321。

int isrevert(int data) {      data-->temp      if(data == temp)         return 1;      return 0; }

3、比较两字符串长短,并返回结果。

int str_cmp_len(const char *str1,const char *str2)   {          len1 =           len2 =           return (len1 - len2);   }

4、给一个字符串,编程取其中一个特定的字符并输出。

int find_ch(const char *str,char ch)   {        while(str[i] != '0')        {           if(str[i] == ch) return i;           i = i + 1;         }        return -1;   }     char *find_ch(const char *str,char ch)   {   }

5、是比较两个英文字符串的不相同的字符的位置(忽略字母大小写)

int find_diff(const char *str1,const char *str2,int array[]) {       j = 0;       while(str1[i] != '0' && str2[i] != '0')       {           if(str1[i] != str2[i])            {              array[j] = i;              j++;           }           i = i + 1;       }       return j;     }

6、主函数调用一函数
如:检索出字符串中出现次数最多的那个字符,不考虑大小写,然后返回该字符。

char find_max(const char *str)    {      max = 0;      ch = str[0];      while(str[i] != '0')      {        if(isupper(str[i])        {           i = i + 1;           continue;        }          统计str[i]个数          j = i;          ct = 0;          while(str[j] != '0')            if(str[i] == str[j]) {ct++;j++;}      比较记录个数最多的字符          if(max < ct) {max = ct;ch = str[i]};      }      return 字符   }    

7、查找字符串中出现次数最多的字符,并返回该字符,只考虑小写字母,不考虑不同字母出现次数一样多的情况

8、输入一个整数n,计算不大于n的数中和7相关的数的个数,包括能被7整出的数和含有字符7的数。

int count_sever(int data)  {  i = 7;  while(i < n)  {     i是否和7相关           i = i + 1;  }}

9、输入一个整数将每一位上的奇数放在一个新整数中,高位放在高位,地位在低位。

 int fun(int data)  {     temp = 0     bit = 0;     while(data > 0)     {       bit = data % 10;       if(bit % 2 != 0)         temp = temp * 10 + bit;       data = data / 10      }     while(temp > 0)     {       bit = temp % 10;       tep = tem * 10 + bit;       temp = temp / 10     }     return tep;  }12345--->135  int fun(int data)  {     temp = 0     bit = 0;     n = 1;     while(data > 0)     {       bit = data % 10;       if(bit % 2 != 0)       {          temp = temp + bit*n          n = n * 10;       }        data = data / 10      }   }

10、输入一串数,将其最小的放在第一位,次小的放在最后一位,再小的放在第二位,再再小的放在倒数第二位,以此类推。

void sort(int array[],int count)  {      循环count/2        每一次寻找两个数      }

11、写一个函数,传入参数为应付钱数。返回值为买家最少付出的钱的张数int get MoneyNum(int iInputMoney)例如:买家应付351元,最少张数为5.备注:可支付的钱币只有100、50、10、5、1不考虑2、20以及小数部分。

int get MoneyNum(int  iInputMoney){      int ct1 = 0,ct2 = 0,ct3 = 0,ct4 = 0,ct5 = 0;      int money = 0;       ct1 = iInputMoney / 100;      money = iInputMoney % 100;      ct2 = money / 50      money = money % 50;      ct3 = money / 10;      money = money % 10;      ct4 = money / 5     return ct1 + ct2 +...      }

选做题:

12、设有几个人围坐在一圈并按顺时针方向从1到几编号,从第S个人开始进行1到m的报数。报数到第M个人,此人出圈。再从他的下一个人重新开始1到M的报数,如此进行下一直到所有人都出圈为止,输出报数顺序。

13、对姓氏进行排名

Char str[ ]=”zhang wang  li    zhao”

Char str_ new[ ]=”li wang zhang zhao”

接口:

void sort(const char *str,int len,char *str_new)   {              char **strs = (char **)malloc(sizeof(char *) * len);       memset()              for(int i = 0;i < len;i++)       {          strs[i] = (char *)malloc(sizeof(char) * N)          memset()       }       while(str[i] != '0')       {          while(str[i]是字符)str[i]-->strs[j][k]          while(str[i]不是字符)       }     排序        for(i = 0;i < len;i++)        {           strncpy           str_new[] = ' '        }                  }

14、将一组整数中为奇数的数提取出来,高低位顺序不变。如:8 3 7 9 5 2 1 4-----》3 7 5 1

int find_data(int array[],int count,int dest[])  {      }   

15、一组2n+1个元素的正整形数组,按升序排序,然后将小于中间数值的成员替换为中间的值。(貌似还有:“位置不变”,不过实在不理解其含义,看了例子就不用关心它的意思了),例如:1,2,3,4,5,输出为:3,3,3,4,5,原型:

int fun(int arry[],int n,char*output){  if(array == NULL || output == NULL) return -1;  return 0;}

16、输入一个四位的十进制整数,编程实现将这四位整数转化为十六进制的字符串,并输出十六进制的字符串(注意负数的处理)

char *int_to_hex(int data,char *str)  {     if(data < 0)         data = ~(-1 * data) + 1      while(data > 0)      {           bit = data % 16;           if(bit < 10)               str[i] = bit + '0'           else               str[i] = bit - 10 + 'a'           data = data / 16;      }      str逆序      return str;  }

17、输入:一个四位的整数,比如:2367,输出:2+3+6+7=18

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值