【C++】C/C++面试之17道经典编程题目分析
本篇是C/C++面试题目,共计17道经典题。其中涵盖了C的各种基础语法和算法,以函数接口设计和算法设计为主。
(读者可以看着题目先做一遍,做完再看解析,大家可以互相学习)
目录:
- 函数书写
- 经典题题目
- 题解分析
函数书写
函数是为了提高代码重复运用的方法。
接口设计:
功能 名字 参数类型、参数个数及意义 返回值类型及意义
算法设计:
熟练掌握C语言十几种基础算法。
Tips:
1、函数命名(见名知意),变量名。
2、函数返回值。
3、函数参数的设计。
4、printf是一个调试语句,不要出现在子函数中。
5、子函数中不要出现常量。
6、传递字符串时,不要传递长度。传递数组时,传递起始地址和有效数据的个数。
7、if…else分支语句需要return时,return一般在if语句中。
8、能调用库函数的地方,可以使用库函数。
9、const的使用。
经典题题目
1.比较字符串,输出它们第一个不同字母的位置,大小写不敏感。
2.判断一个数是否为回文数。(数字:1234321)
3.比较两个字符串的长短,并返回结果。
4.给一个字符串,编程取其中一个特定的字符并输出。
5.比较两个英文字符串的不相同字符的位置。(忽略字母大小写)
6.检索出字符串中出现次数最多的那个字符,不考虑大小写然后返回该字符。
7.查找字符串中出现次数最多的字符,并返回该字符,只考虑小写字母,不考虑不同字母出现次数一样多的情况。
8.输入一个整数n,计算不大于n的数中和7相关的数的个数,包括能被7整除的数和含有字符7的数。
9.输入一个整数将每一位上的奇数放在一个新整数中,高位放置高位,低位放置低位。
10.输入一串数,将其最小的放在第一位,次小的放在最后一位,再小的放在第二位,以此类推。
11.函数,传入参数为应付钱数。返回值为买家最小付出钱的张数。(int getMoneyNum(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。
16.输入一个四位的十进制整数,编程实现将这四位整数转化成十六进制的字符串,并输出十六进制的字符串。(注意负数的处理)
17.输入一个四位的整数,比如:2367,输出:2+3+6+7=18.(只需结果即可)
题解分析
1.比较字符串,输出它们第一个不同字母的位置,大小写不敏感。
int str_cmp_diff(const char *str1,const char *str2)
{int i = 0;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)
bool isrevert(const int data)
{int temp = 0;int num = data;while(num > 0){temp = num % 10 + temp * 10;num /= 10;}if(data == temp)return true;return false;
}
3.比较两个字符串的长短,并返回结果。
int str_cmp_len(const char *str1,const char *str2)
{return (strlen(str1) - strlen(str2));
}
4.给一个字符串,编程取其中一个特定的字符并输出。
int getChar(const char *str,char ch)
{int i = 0;while(str[i] != '\0'){if(str[i] == ch)return i + 1;i++;}return -1;
}
5.比较两个英文字符串的不相同字符的位置。(忽略字母大小写)
int str_cmp_diff(const char *str1,const char *str2,int array[])
{int i = 0,j = 0;while(str1[i] != '\0' && str2[i] != '\0'){if(str1[i] | 0x20 != str2[i] | 0x20){array[j] = i;j++;}i++;}return j;
}
6.检索出字符串中出现次数最多的那个字符,不考虑大小写然后返回该字符。
char find_max(const char *str)
{ int maxCount = 0,count = 0;char result = 0;int i = 0,j = 0;while(str[i] != '\0'){for(j = i + 1;str[j] != '\0';j++){if((str[i] | 0x20) == (str[j] | 0x20))count++;}if(maxCount < count){result = str[i];maxCount = count;}count = 0;i++;}return result;
}
7.查找字符串中出现次数最多的字符,并返回该字符,只考虑小写字母,不考虑不同字母出现次数一样多的情况。
该题参考第6题。
8.输入一个整数n,计算不大于n的数中和7相关的数的个数,包括能被7整除的数和含有字符7的数。
int count_Seven(int n)
{int count = 0;int temp = 0;while(n > 0){if(n % 7 != 0){temp = n;while(temp > 0){if(temp % 10 == 7){count++;break;}temp /= 10;}}elsecount++;n--;}return count;
}
9.输入一个整数将每一位上的奇数放在一个新整数中,高位放置高位,低位放置低位。
int findOdd(int num)
{int temp = 0,newNum = 0,res = 0;while(num > 0){temp = num % 10;if(temp % 2 != 0)newNum = temp + newNum * 10;num /= 10;}temp = 0;while(data > 0){res = res * 10 + data % 10;data /= 10;}return res;
}
10.输入一串数,将其最小的放在第一位,次小的放在最后一位,再小的放在第二位,以此类推。
#include <algorithm> //sort()排序void sortNum(int *nums,int count)
{sort(nums,nums + count);int *data = nums;while(i < count){if(i % 2 == 0)nums[i / 2] = data[i];elsenums[count - 1 - i / 2] = data[i];i++;}
}
11.函数,传入参数为应付钱数。返回值为买家最小付出钱的张数。(int getMoneyNum(int iInputMoney))例如:买家应付351元,最少张数为5。备注:可支付的钱币面值只有100、50、10、5、1,不考虑2、20以及小数部分。
int getMoneyNum(int iInputMoney)
{int n1 = 0,n2 = 0,n3 = 0,n4 = 0,n5 = 0;int temp = 0;n1 = iInputMoney / 100;temp = iInptMoney % 100;n2 = temp / 50;temp = temp % 50;n3 = temp / 10;temp = temp % 10;n4 = temp / 5;temp = temp % 5;n5 = temp / 1;return (n1 + n2 + n3 + n4 + n5);
}
选做题
12.设有几个人围坐在一圈并按顺时针方向从1到几编号,从第S个人开始进行1到m的报数。报数到第M个人,此人出圈。再从他的下一个人重新开始1到M的报数,如此进行,一直到所有人都出圈为止,输出报数顺序。(此题为选做题)
13.对姓氏排名
char str[ ] = “zhang wang li zhao”
char str_new[ ] = “li wang zhang zhao”
void sortName(const char *str,int len,char *str_new)
{}
14.将一组整数数据中为奇数的数提取出来,高低位顺序不变。如:8 3 7 9 5 2 1 4 ==》3 7 5 1。
int getOdd(int nums[],int n,int array[])
{int i = 0,j = 0;while(i < n){if(nums[i] % 2 != 0){array[j] = nums[i];j++;}i++;}return j;
}
15.一组2n+1个元素的正整形数组,按升序排序,然后将小于中间数值的成员替换为中间的值。例如:1,2,3,4,5,输出结果为:3,3,3,4,5。
#include <algorithm>int midAfter(int *nums,int n)
{sort(nums,nums + n);int mid = n / 2 + 1;int i = 0;while(i < mid){nums[i] = mid;i++;}return i;
}
16.输入一个四位的十进制整数,编程实现将这四位整数转化成十六进制的字符串,并输出十六进制的字符串。(注意负数的处理)
char *intToHex(int data,char *str)
{if(data < 0)data = ~(-1 * data) + 1;int bit = 0, i = 0;while(data > 0){bit = data % 16;if(bit < 10)str[i] = bit + '0';elsestr[i] = bit - 10 + 'a';data = data / 16;i++;}int len = i;char temp = 0;for(i = 0;i < (len / 2);i++){temp = str[i];str[i] = str[len - i - 1];str[len - i - 1] = temp;}str[len] = '\0';return str;
}
17.输入一个四位的整数,比如:2367,输出:2+3+6+7=18.(只需结果即可)
int sumAdd(int num)
{int res = 0;if(num / 1000 <= 0)return 0;res = num % 10 + num % 100 / 10 + num % 1000 / 100 + num / 1000;return res;
}
ps:这些题有未完成或者书写以及算法的不足之处,请大家及时帮我改正。啾咪~ 3
【C++】C/C++面试之17道经典编程题目分析相关推荐
- LeetCode:数组刷题(17道经典题目)
LeetCode 数组刷题(17道经典题目) 本文带来的是以数组为主题的经典题目,主要实现是C++,部分题目也用Python实现了. 704. 二分查找 35.搜索插入位置 34. 在排序数组中查找元 ...
- JAVA50道经典编程题
加强对基础知识的巩固提升,拓展逻辑思维. JAVA50道经典编程题: [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不 ...
- 关于安全测试面试的30道基础概念题目
关于安全测试面试的30道基础概念题目 看看这些面试题目,目的是了解安全测试的基本概念.每一道题目都可以展开到一定的深度和广度. 这里仅仅是一个抛砖引玉,点到为止. Question 1. 什么是安全测 ...
- Python程序设计入门32道基础编程题目与参考代码
声明 本文仅在CSDN发布,其他均为盗版.请支持正版! 正版链接: https://blog.csdn.net/meenr/article/details/107095894 目录 概述 1.简单数值 ...
- stm32经典笔试题_嵌入式面试的30道经典问题!
今天为大家准备了嵌入式工程师面试经常遇到的30个经典问题,希望可以帮助大家提前准备,不再惧怕面试. 基础问题 1讲一下stm32的时钟系统 2C语言中堆和栈的区别:推挽输出是什么? 3假如一个单片机上 ...
- 【面试】50道经典计算机网络面试题
1. HTTP 常用的请求方式,区别和用途? GET: 发送请求,获取服务器数据 POST:向 URL 指定的资源提交数据 PUT:向服务器提交数据,以修改数据 HEAD: 请求页面的首部,获取资源的 ...
- 特斯拉面试,工控经典PLC题目:一键启动功能实现解法分析,少个坑,给自己多个机会
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.问题分析: 二.模拟运行 三.还有没有更简单的 前言 PLC 面试经典题目,一键启动功能:单个按钮按下一次控制灯亮 ...
- java古典兔子问题(java50道经典编程题)
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 谈到这个问题大家可能开始比较懵逼,其实碰到这一类问 ...
- 经典c语言程序编程题,c语言35道经典编程题程序
一份解决你编程困惑的题,对你一定很有用! 1.有1.2.3.四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? #include void main() {int i,j,k,m=0; p ...
最新文章
- JSP页面中验证码的调用方法
- python 数组在最前面插入数据_python – 如何将数组插入数据库?
- opencv python全屏显示、置窗口大小和位置
- 美特斯邦威java面试_在美特斯邦威工作一个月,我学到了什么
- json数据格式 python_python中json是什么文件格式
- SourceInsight 4.0 之二 项目文件关联
- 苹果开发者_苹果,你的开发者文档写得烂透了
- java中什么是守护线程_什么是Java的守护线程?
- SMPP Java示例(客户端)
- c语言加速度积分得到速度_自编微积分教材-第一章 微积分漫谈(1)
- Springboot 自定义Tomcat默认Servlet 资源路径
- 1.组合数据类型练习: 分别定义字符串,列表,元组,字典,集合,并进行遍历。 总结列表,元组,字典,集合的联系与区别。...
- PCM data flow - 2 - ASoC data structure
- Sharepoin学习笔记—架构系列--Sharepoint的网页(Page),网页解析(Parsing)与解析安全处理(Security)...
- 97. ExtJS之EditorGridPanel afteredit属性
- linux系统网桥管理工具brctl 安装及使用
- Mycat分库分表案例demo
- java 65533,java导出excel超出65533行
- 【记录】非常实用,Python编码规范的一些建议(1)
- 看完《第一行代码-第三版》- 郭霖 这本书后的总结