首页 > 就业 > 笔试

C语言笔试题

C语言笔试题



C语言笔试题集锦

  1、编写一个 C 函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是由同一字符组成的。

  char * search(char *cpSource, char ch)

  {

  char *cpTemp=NULL, *cpDest=NULL;

  int iTemp, iCount=0;

  while(*cpSource)

  {

  if(*cpSource == ch)

  {

  iTemp = 0;

  cpTemp = cpSource;

  while(*cpSource == ch)

  ++iTemp, ++cpSource;

  if(iTemp > iCount)

  iCount = iTemp, cpDest = cpTemp;

  if(!*cpSource)

  break;

  }

  ++cpSource;

  }

  return cpDest;

  }

  2、请编写一个 C 函数,该函数在给定的内存区域搜索给定的字符,并返回该字符所在位置索引值。

  int search(char *cpSource, int n, char ch)

  {

  int i;

  for(i=0; i return i;

  }

  一个单向链表,不知道头节点,一个指针指向其中的一个节点,问如何删除这个指针指向的节点?

  将这个指针指向的next节点值copy到本节点,将next指向next->next,并随后删除原next指向的节点。

  #include

  void foo(int m, int n)

  {

  printf(“m=%d, n=%d\n”, m, n);

  }

  int main()

  {

  int b = 3;

  foo(b+=3, ++b);

  printf(“b=%d\n”, b);

  return 0;

  }

  输出:m=7,n=4,b=7(VC6.0)

  这种方式和编译器中得函数调用关系相关即先后入栈顺序。不过不同

  编译器得处理不同。也是因为C标准中对这种方式说明为未定义,所以

  各个编译器厂商都有自己得理解,所以最后产生得结果完全不同。

  因为这样,所以遇见这种函数,我们首先要考虑我们得编译器会如何处理

  这样得函数,其次看函数得调用方式,不同得调用方式,可能产生不同得

  结果。最后是看编译器优化。

  2.写一函数,实现删除字符串str1中含有的字符串str2.

  第二个就是利用一个KMP匹配算法找到str2然后删除(用链表实现的`话,便捷于数组)

  /*雅虎笔试题(字符串操作)

  给定字符串A和B,输出A和B中的最大公共子串。

  比如A=”aocdfe” B=”pmcdfa” 则输出”cdf”

  */

  //Author: azhen

  #include

  #include

  #include

  char *commanstring(char shortstring[], char longstring[])

  {

  int i, j;

  char *substring=malloc(256);

  if(strstr(longstring, shortstring)!=NULL) //如果……,那么返回shortstring

  return shortstring;

  for(i=strlen(shortstring)-1;i>0; i–) //否则,开始循环计算

  {

  for(j=0; j<=strlen(shortstring)-i; j++){

  memcpy(substring, &shortstring[j], i);

  substring[i]='\0';

  if(strstr(longstring, substring)!=NULL)

  return substring;

  }

  }

  return NULL;

  }

  main()

  {

  char *str1=malloc(256);

  char *str2=malloc(256);

  char *comman=NULL;

  gets(str1);

  gets(str2);

  if(strlen(str1)>strlen(str2)) //将短的字符串放前面

  comman=commanstring(str2, str1);

  else

  comman=commanstring(str1, str2);

  printf(“the longest comman string is: %s\n”, comman);

  }

  11.写一个函数比较两个字符串str1和str2的大小,若相等返回0,若str1大于

  str2返回1,若str1小于str2返回-1

  int strcmp ( const char * src,const char * dst)

  {

  int ret = 0 ;

  while( ! (ret = *(unsigned char *)src – *(unsigned char *)dst) && *dst)

  {

  ++src;

  ++dst;

  }

  if ( ret < 0 )

  ret = -1 ;

  else if ( ret > 0 )

  ret = 1 ;

  return( ret );

  }

  3,求1000!的未尾有几个0(用素数相乘的方法来做,如72=2*2*2*3*3);

  求出1->1000里,能被5整除的数的个数n1,能被25整除的数的个数n2,能被125整除的数的个数n3,

  能被625整除的数的个数n4.

  1000!末尾的零的个数=n1+n2+n3+n4;

  #include

  #define NUM 1000

  int find5(int num){

  int ret=0;

  while(num%5==0){

  num/=5;

  ret++;

  }

  return ret;

  }

  int main(){

  int result=0;

  int i;

  for(i=5;i<=NUM;i+=5)

  {

  result+=find5(i);

  }

  printf(” the total zero number is %d\n”,result);

  return 0;

  }

    版权声明:此文自动收集于网络,若有来源错误或者侵犯您的合法权益,您可通过邮箱与我们取得联系,我们将及时进行处理。

    本文地址:https://www.gunzhua.com/jiuye/bishi/44566.html

相关内容

热门阅读
随机推荐