我要投稿 投诉建议

c面试题目

时间:2022-09-25 17:44:57 面试试题 我要投稿
  • 相关推荐

c面试题目

  1、outputstr 所指的值为 123456789

c面试题目

  int continumax(char *outputstr, char *inputstr)

  {

  char *in = inputstr, *out = outputstr, *temp, *final;

  int count = 0, maxlen = 0;

  while( *in != '\0' )

  {

  if( *in > 47 && *in < 58 )

  {

  for(temp = in; *in > 47 && *in < 58 ; in++ )

  count++;

  }

  else

  in++;

  if( maxlen < count )

  {

  maxlen = count;

  count = 0;

  final = temp;

  }

  }

  for(int i = 0; i < maxlen; i++)

  {

  *out = *final;

  out++;

  final++;

  }

  *out = '\0';

  return maxlen;

  }

  2、不用库函数,用 C 语言实现将一整型数字转化为字符串

  方法 1:

  int getlen(char *s){

  int n;

  for(n = 0; *s != '\0'; s++)

  n++;

  return n;

  }

  void reverse(char s[])

  {

  int c,i,j;

  for(i = 0,j = getlen(s) - 1; i < j; i++,j--){

  c = s[i];

  s[i] = s[j];

  s[j] = c;

  }

  }

  void itoa(int n,char s[])

  {

  int i,sign;

  if((sign = n) < 0)

  n = -n;

  i = 0;

  do{/*以反序生成数字*/

  s[i++] = n%10 + '0';/*get next number*/

  }while((n /= 10) > 0);/*delete the number*/

  if(sign < 0)

  s[i++] = '-';

  s[i] = '\0';

  reverse(s);

  }

  方法 2:

  #include

  using namespace std;

  void itochar(int num);

  void itochar(int num)

  {

  int i = 0;

  int j ;

  char stra[10];

  char strb[10];

  while ( num )

  {

  stra[i++]=num%10+48;

  num=num/10;

  }

  stra[i] = '\0';

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

  {

  strb[j] = stra[i-j-1];

  }

  strb[j] = '\0';

  cout<

  }

  int main()

  {

  int num;

  cin>>num;

  itochar(num);

  return 0;

  }

  3、求组合数: 求 n 个数(1....n)中 k 个数的组合....

  如:combination(5,3)

  要求输出:543,542,541,532,531,521,432,431,421,321,

  #include

  int pop(int *);

  int push(int );

  void combination(int ,int );

  int stack[3]={0};

  top=-1;

  int main()

  {

  int n,m;

  printf("Input two numbers:\n");

  while( (2!=scanf("%d%*c%d",&n,&m)) )

  {

  fflush(stdin);

  printf("Input error! Again:\n");

  }

  combination(n,m);

  printf("\n");

  }

  void combination(int m,int n)

  {

  int temp=m;

  push(temp);

  while(1)

  {

  if(1==temp)

  {

  if(pop(&temp)&&stack[0]==n) //当栈底元素弹出&&为可能取的最小值,循环退出break;

  }

  else if( push(--temp))

  {

  printf("%d%d%d ",stack[0],stack[1],stack[2]);//§ä¨ì¤@?

  pop(&temp);

  }

  }

  }

  int push(int i)

  {

  stack[++top]=i;

  if(top<2)

  return 0;

  else

  return 1;

  }

  int pop(int *i)

  {

  *i=stack[top--];

  if(top>=0)

  return 0;

  else

  return 1;

http://www.cnrencai.com/