飞道的博客

C语言每日一练(三)

473人阅读  评论(0)

       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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场