本篇是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道经典编程题目分析相关推荐

  1. LeetCode:数组刷题(17道经典题目)

    LeetCode 数组刷题(17道经典题目) 本文带来的是以数组为主题的经典题目,主要实现是C++,部分题目也用Python实现了. 704. 二分查找 35.搜索插入位置 34. 在排序数组中查找元 ...

  2. JAVA50道经典编程题

    加强对基础知识的巩固提升,拓展逻辑思维. JAVA50道经典编程题: [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不 ...

  3. 关于安全测试面试的30道基础概念题目

    关于安全测试面试的30道基础概念题目 看看这些面试题目,目的是了解安全测试的基本概念.每一道题目都可以展开到一定的深度和广度. 这里仅仅是一个抛砖引玉,点到为止. Question 1. 什么是安全测 ...

  4. Python程序设计入门32道基础编程题目与参考代码

    声明 本文仅在CSDN发布,其他均为盗版.请支持正版! 正版链接: https://blog.csdn.net/meenr/article/details/107095894 目录 概述 1.简单数值 ...

  5. stm32经典笔试题_嵌入式面试的30道经典问题!

    今天为大家准备了嵌入式工程师面试经常遇到的30个经典问题,希望可以帮助大家提前准备,不再惧怕面试. 基础问题 1讲一下stm32的时钟系统 2C语言中堆和栈的区别:推挽输出是什么? 3假如一个单片机上 ...

  6. 【面试】50道经典计算机网络面试题

    1. HTTP 常用的请求方式,区别和用途? GET: 发送请求,获取服务器数据 POST:向 URL 指定的资源提交数据 PUT:向服务器提交数据,以修改数据 HEAD: 请求页面的首部,获取资源的 ...

  7. 特斯拉面试,工控经典PLC题目:一键启动功能实现解法分析,少个坑,给自己多个机会

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.问题分析: 二.模拟运行 三.还有没有更简单的 前言 PLC 面试经典题目,一键启动功能:单个按钮按下一次控制灯亮 ...

  8. java古典兔子问题(java50道经典编程题)

    题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 谈到这个问题大家可能开始比较懵逼,其实碰到这一类问 ...

  9. 经典c语言程序编程题,c语言35道经典编程题程序

    一份解决你编程困惑的题,对你一定很有用! 1.有1.2.3.四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? #include void main() {int i,j,k,m=0; p ...

最新文章

  1. JSP页面中验证码的调用方法
  2. python 数组在最前面插入数据_python – 如何将数组插入数据库?
  3. opencv python全屏显示、置窗口大小和位置
  4. 美特斯邦威java面试_在美特斯邦威工作一个月,我学到了什么
  5. json数据格式 python_python中json是什么文件格式
  6. SourceInsight 4.0 之二 项目文件关联
  7. 苹果开发者_苹果,你的开发者文档写得烂透了
  8. java中什么是守护线程_什么是Java的守护线程?
  9. SMPP Java示例(客户端)
  10. c语言加速度积分得到速度_自编微积分教材-第一章 微积分漫谈(1)
  11. Springboot 自定义Tomcat默认Servlet 资源路径
  12. 1.组合数据类型练习: 分别定义字符串,列表,元组,字典,集合,并进行遍历。 总结列表,元组,字典,集合的联系与区别。...
  13. PCM data flow - 2 - ASoC data structure
  14. Sharepoin学习笔记—架构系列--Sharepoint的网页(Page),网页解析(Parsing)与解析安全处理(Security)...
  15. 97. ExtJS之EditorGridPanel afteredit属性
  16. linux系统网桥管理工具brctl 安装及使用
  17. Mycat分库分表案例demo
  18. java 65533,java导出excel超出65533行
  19. 【记录】非常实用,Python编码规范的一些建议(1)
  20. 看完《第一行代码-第三版》- 郭霖 这本书后的总结

热门文章

  1. Bert 源码(pytorch)超详细的解读
  2. htcvr设备计算机配置,HTC VIVE需要怎样的电脑配置
  3. [Java学习] 最小生成树——Prim算法
  4. 2. 硬件基础知识学习
  5. Django之Cookie和 Session
  6. IT技术外包公司值得去吗?
  7. linux wget
  8. 教你如何学模电——三极管篇
  9. SpringCloud【框架】
  10. 分析IBinder体系中getService的流程