以下是C/C++面试题目,共计17个题目,其中涵盖了c的各种基础语法和算法,
以函数接口设计和算法设计为主。这17个题目在C/C++面试方面已经流行了多
年,大家需要抽时间掌握好,每一个题目后面附有参考答案,希望读者能够抽
时间做完题目后在看参考答案,每一个题目至少做两边,设计出两种解决问题
的算法。
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