C语言作为嵌入式Linux开发的必备工具,作为嵌入式Linux开发的基础语言,那么在面试嵌入式工程师时C语言定是面试中的重中之重 。作为一名大三的老学长,不得不为找工作做必要准备。每天做一道C语言面试题,为面试打基础。
2020.09.04
题目描述
输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数。
输入描述:
输入一个整数(int类型)
输出描述:
这个数转换成2进制后,输出1的个数
示例1
输入
5
输出
2
题目解析:
一般的思路可能是先将这个整数转换为二进制数,将转换后的每一位存放在数组中,然后通过这个数组统计1的个数。其实这是下下策,耗费内存同时遍历数组也消耗时间。那么我们可以换一种思路,通过位运算来实现统计1的个数,可以大大提高效率。
#include <stdio.h>
int func(x)
{
int countx = 0;
while(x)
{
countx ++;
x = x&(x-1);
}
return countx;
}
int main()
{
int data;
scanf("%d",&data);
printf("%d", func(data));
}
2020.09.05
题目描述:
输入一个整数,将这个整数以字符串的形式逆序输出
程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001
输入描述:
输入一个int整数
输出描述:
将这个整数以字符串的形式逆序输出
示例1:
输入
1516000
输出
0006151
题目解析:
一开始拿到题目的思路是通过sprintf函数将整数转换成字符串并存放在数组str1中,然后通过循环来实现交换。但是实际测试时发现只能通过50%,具体什么原因我也不知道。
#include<stdio.h>
#include<string.h>
int main()
{
int n,i,size;
char str1[100],temp;
scanf("%d",&n);
sprintf(str1,"%d",n);
size=strlen(str1);
for(i=0;i<=(size/2);i++){
temp=str1[i];
str1[i]=str1[size-i-1];
str1[size-i-1]=temp;
}
printf("%s\n",str1);
}
去问了一下群友,才发现太马虎大意了,这个程序对于只有奇数个字符时并没有影响,但是对于偶数个字符时就会出错,原因就是在循环结束的判断条件应该是小于而不是小于等于。
不过换一种思路就很简单,通过对整个整数求余数得出最低位然后输出不妨为一个很好的方法,10行代码就能够搞定。
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
for(;n>0;){
printf("%d",n%10);
n=n/10;
}
}
2020.09.06
题目描述:
将一个字符串str的内容颠倒过来,并输出。str的长度不超过100个字符。 如:输入“I am a student”,输出“tneduts a ma I”。
输入参数:
inputString:输入的字符串
返回值:
输出转换好的逆序字符串
输入描述:
输入一个字符串,可以有空格
输出描述:
输出逆序的字符串
示例1
输入
复制
I am a student
输出
复制
tneduts a ma I
题目解析:
#include<stdio.h>
#include<string.h>
int main()
{
int i,size;
char str1[100],temp;
gets(str1);
size=strlen(str1);
for(i=0;i<(size/2);i++){
temp=str1[i];
str1[i]=str1[size-i-1];
str1[size-i-1]=temp;
}
printf("%s\n",str1);
}
2020.09.07
题目描述
公元前五世纪,我国古代数学家张丘建在《算经》一书中提出了“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
输入描述:
输入任何一个整数,即可运行程序。
示例1
输入
1
输出
0 25 75
4 18 78
8 11 81
12 4 84
题目解析:
#include<stdio.h>
#include<string.h>
int main()
{
int a,b,n;
while(scanf("%d",&n)!=EOF)
{
for(a=0;a<20;a++)
{
for(b=0;b<34;b++)
{
if(((a*5+b*3+(100-a-b)/3)==100)&&(100-a-b)%3==0)
printf("%d %d %d\n",a,b,100-a-b);
}
}
}
}
2020.09.08
题目描述:
功能:等差数列 2,5,8,11,14。。。。
输入描述:
输入一个正整数。
输出描述:
输出一个相加后的整数。
示例1
输入
2
输出
7
题目解析:
#include<stdio.h>
int main()
{
int a0,q,n,sum;
a0=2;
q=3;
while(scanf("%d",&n)!=EOF)
{
sum=n*a0+(n*(n-1)*q/2);
printf("%d\n",sum);
}
}
2020.09.09
题目描述:
写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)
输入描述:
输入N个字符
输出描述:
输出该字符串反转后的字符串
示例:
输入:abcd
输出:dcba
题目解析:
看到题目后,这应该是一个C语言中比较基础的题目了。常规的方法就是将一个字符串给分成两半,对称位置进行交换,然后再正序输出。题目只是让逆序输出字符串,并没有规定方法那么我们在输出时直接通过for循环逆序输出不就可以了嘛!那么代码就可以简化为下面的了嘛!
#include<stdio.h>
#include<string.h>
int main()
{
char str[1000];
scanf("%s",str);
int len=strlen(str);
for(int i=len-1;i>=0;i--)
{
printf("%c",str[i]);
}
return 0;
}
2020.09.10
题目描述:
正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。
输入描述:
输入两个正整数A和B。
输出描述:
输出A和B的最小公倍数。
题目解析:
本题目是求最小公倍数,而最小公倍数等于两个数相乘除以两个数的最大公约数。实际上就转换为了求最大公约数的问题了,我们可以通过辗转相除法来求最大公约数。
#include "stdio.h"
t gcd(int a, int b)//辗转相除法求最大公约数
{
while(a%b){
int tmp=a;
a=b;
b=tmp%b;
}
return b;
}
int main()
{
int a, b;
scanf("%d %d",&a,&b);
printf("%d",a*b/gcd(a,b));
return 0;
}
不积小流无以成江河,不积跬步无以至千里。而我想要成为万里羊,就必须坚持学习来获取更多知识,用知识来改变命运,用博客见证成长,用行动证明我在努力。
如果我的博客对你有帮助、如果你喜欢我的博客内容,记得“点赞” “评论” “收藏”一键三连哦!听说点赞的人运气不会太差,每一天都会元气满满呦!如果实在要白嫖的话,那祝你开心每一天,欢迎常来我博客看看。
转载:https://blog.csdn.net/weixin_44895651/article/details/108546829