嵌入式软件常见的笔试题(c)

 

找工作的事情告一段落,现在把一些公司常见的笔试题型整理一下,本人主要是找嵌入式软件方面的工作,笔试的也主要是C语言、数据结构,大体上都比较基础,但是得早作准备,才会占得先机。

 

1:整型数求反

2:字符串求反,字符串加密,越界问题

3:字符串逆序,两端对调;字符串逆序,指针法

4:递归求n

5:不用库函数,比较两个字符串的大小

6:求0-3000中含有92的全部数之和

7:质因数分解

8:判断一个数(x)是否是2n次方

9:判断CPU的大小端

10: 字符串转成成整型数

11: 整型数转换成字符串

12: //插入法//选择法//冒泡法

13: 二分收索法

14: //编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒。如输入2004//1231235959秒,则输出200511000

15: //1、滤除给定字符串首尾的空格,和字符串中的TAB符和换行符

//2、滤除空格

//3、判断质数

16:文件的读写操作

fopen(“name”,”rw”),fputc(ch,fp),fgetc(fp),fclose(fp),feof(fp)

 //1从键盘输入一些字符,逐个把它们送到磁盘上去,直到输入一个“#”为止

   //2将一个磁盘文件中的信息复制到另一个磁盘文件中

   //3/*fread(buffer,size,count,fp) ,fwrite(buffer,size,count,fp)*/

   //4//rewind(fp1);//使位置指针重新返回文件的开头,此函数没有返回值

   //5 seek(fp,位移量(long),起始点)

 

17: 字符串常量指针问题

18:union struct sizeof()

 

 

 

 

 

//-----------------------------------------------------------------

/*整型数求反*/

//-----------------------------------------------------------------

#include<stdio.h>

 

int main()

{

         int num1 = 8765439;

         int num2 = 0;

         while(num1 > 0)

         {

                   num2 = num2 * 10 + (num1 % 10);

                   num1 = num1/10;

 

         }

 

         printf("%d", num2);

 

         return 0;

}

//-------------------------------------------------------------------

 

 

//-----------------------------------------------------------------

/*字符串求反,字符串加密,越界问题*/

//-----------------------------------------------------------------

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

 

 

 

void fun1(unsigned char *p);

void fun2(unsigned char *q);

 

void main()

{

    unsigned char str[]="abcdefg";

        

         printf("%s\n",str);

 

         fun1(str);

         printf("%s\n",str);

 

         fun2(str);

         printf("%s\n",str);

 

 

 

}

 

void fun1(unsigned char *p)

{

         while(*p !='\0')

         {

                   if((*p=(*p * 2+10) ) >=128)

                   {

                            *p= *p / 3;

                   }

                   p++;

         }

        

 

}

 

//字符串逆序,两端对调

void fun2(unsigned char *q)

{

         char temp,i,len;

         len=strlen((char * )q);

//      len=7;

         for(i=0;i<(len-1)/2;i++)

         {

                   temp=q[len-1-i];

             q[len-1-i]=q[i];

             q[i]=temp;

         }

}

//字符串逆序,指针法

void pointer_str(void)

{

                   char *src="hello,world";

                   char *dest=NULL;

                   int len=strlen(src);

                   dest=(char *)malloc((len+1)* sizeof(char));

                   char *d=dest;

                   char *s=&src[len-1];

 

                   while(len-- != 0)

                   {

                            *(d++) = *(s--);

                   }

                  

                   *d='\0';

                   printf("%s\n\n",src);

                   printf("%s\n\n",dest);

                   free(dest);

}

 

 

//递归求n

int n_jiecheng(unsigned char n)

{

         if(n==1)

         {

                   return 1;

         }

         else if(n>1)

         {

                   n=n*n_jiecheng(n-1);

                  

         }

         printf("n=%d\n",n);

         return n;

}

 

//不用库函数,比较两个字符串的大小

int strcmp_z( char *src, char *dest)

{

/*     while((*src != '\0') && (*src == *dest) )

         {

                   src++;

                   dest++;

         }

         return ((*src) - (*dest) ) ? -1 : 0 ;

*/

         int i;

         for(i=0;src[i]==dest[i];i++)

         {

                   if(src[i] == '\0' && dest[i] == '\0')

                   {

                            return 0;

                   }

                  

         }

          return -1;

}

 

//-----------------------------------------------------

//0-3000中含有92的全部数之和

//-----------------------------------------------------

 

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

 

int fun(char *);

 

int fun(char *p)

{

         char flag_9=0,flag_2=0;

         while(*p != '\0')

         {

                   if('9'== *p)

                   {

                            flag_9=1;

                   }

                   else if ('2'== *p)

                  {

                            flag_2=1;

                   }

                   p++;

         }

 

         if(2==(flag_9+flag_2))

         {

                   return 1;

         }

 

         return 0;

}

 

int main()

{

         int i,j=0;

         unsigned int  sum = 0

         char table[]="0123";

         char *str=table;

         for(i=0;i<3000;i++)

         {

                   itoa(i,str,10);

                   if(fun(str))

                   {

                            sum+=i;

                            printf("%u,%u,%s,%u\n",j++,i,str,sum);

                   }

         }

         return 0;

}

//---------------------------------------------------------------

 

 

//-------------------------------------------------------------

//质因数分解

//--------------------------------------------------------------

#include <stdio.h>

#include <math.h>

#include <stdlib.h>

int j=0;

int IsPrime(int Num)

{

    int i;

    for(i=3; i<=sqrt(Num); i=i+2)

    {

        if (Num%i==0)

        {

            return 0;

        }   

    }

    return 1;

}

int resolve(int Num)

{

 int i,n;

   

    for(i=2; i<Num/2;i++)

    {

        if(IsPrime(i)==1 && Num%i==0)

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值