一个C语言面试编程题

原创 2007年09月11日 22:01:00
今天去一家公司面试,CTO要求我编一个程序看看 ,题目是:不用C语言库函数实现整数转换为字符串。
开始想到的只是用对10取余数来获取该整数所包含的一个个数字。不过这种方法有一个缺点,就是得到的字符串是反的,也就是先是低位数字、然后才是高位的数字。又仔细想了想,发现可以用递归来实现,回来后用lcc编译运行发现没有问题。用递归实现整数到字符串转换,代码比较清晰易懂,函数也比较简单。优化后的源代码如下:
#include <stdio.h>

#define MAX_LEN  15  /* 最大位数 */

/* 转换时用到的递归函数 */
char *trans_int(int num,char *str)
{
    int node_num,digit;
    char *ptr;

    if(num < 10) /* 只剩个位 */
    {
        *str=num + '0';  /* 数字转换为对应的ascii代码 */
        return str;
    }
    else
    {
        node_num = num / 10;
        ptr=trans_int(node_num,str); /*递归调用*/
        digit = num - node_num * 10;
        ptr++;
        *ptr = digit + '0';
        return ptr;
    }
}

/* 转换函数 */
char * itoa(int num)
{
    static char str[MAX_LEN+1];
    int positive_num;
    char *ptr;

    ptr = str;
    if(num >= 0)
    {
        ptr=trans_int(num,str);
    }
    else /* 处理负数 */
    {
        *(ptr++) = '-';
        positive_num = num * -1;  /* transform to positive integer */
        ptr=trans_int(positive_num,ptr);
    }
    ptr++;
    *ptr='/0';

    return str;
}

/* 测试用main函数 */
void main()
{
    int n;
    printf("Input a integer:");
    scanf("%d",&n);
    printf("The integer %d to string result is : '%s'/n",n,itoa(n));
}

一个中兴的面试题,输入两个数n和m,从数列1,2,3……n中随意取几个数,使其和等于m,要求将其中所有组合列出来编程求解(c语言递归函数分解法)

原题目:输入两个数n和m,从数列1,2,3……n中随意取几个数,使其和等于m,要求将其中所有组合列出来编程求解 c语言解法分析:            先判定n和m的大小,如果m小于n,则只需从1...

linux下的c语言-网络-网络编程面试题

基础部份: 1.下列程序在32位linux或unix中的结果是什么? func(char *str) {     printf("%d",sizeof(str));     print...

[面试算法]有一无符号整型数组,大小为10, 初始的数值随机,但在[0, 99]之间。请用C语言写一个过滤程序,令数组内的数据互不相等。

写了个算法实现,就想做个记录。以后有时间测试下正确性,以及是否有更好的思路。 //有一无符号整型数组,大小为10, 初始的数值随机,但在[0, 99]之间。请用C语言写一个过滤程序,令数组内...
  • claien
  • claien
  • 2014年02月25日 22:35
  • 2335

C语言笔试面试常见编程题目(更新中)

1. 请编写程序,把文件a.txt和文件b.txt的内容都拷贝到文件c.txt中。 2. 请编写一个程序,在一个升序的整形数组中是否有一个需要找的数,用折半查找法? 3. 请编写一个程序,输出一个sh...

socket编程之C语言一个简单监听程序

坚持 成长 每日一篇一下是一个监听指定IP和端口号的服务端程序,只接收一次请求然后退出程序,程序环境是Mac环境,其他环境可以去掉NSlog#import #import #import #im...

C语言关于socket编程解释比较清楚的一个博文

本文摘录自《UNIX网络编程 卷1》。 基本套接字函数      socket函数     为了执行网络I/O,一个进程必须做的第一件事就是调用socket函数,指定期望的通信...

一个javafx初学者实现国际象棋简单方法(很粗暴)棋子实现不再提供 没有使用java编程思想用的很基础的c语言思想

没有使用java编程思想用的很基础的c语言思想 如果想改写可以使用接口 写一个棋子接口各种不同的棋子实现类 既可以实现java编程思想 提供的主要是虚拟棋盘的想法...

学习较底层编程:动手写一个C语言编译器

动手编写一个编译器,学习一下较为底层的编程方式,是一种学习计算机到底是如何工作的非常有效方法。 编译器通常被看作是十分复杂的工程。事实上,编写一个产品级的编译器也确实是一个庞大的任务。但是写一个小巧...

学习较底层编程:动手写一个C语言编译器

动手编写一个编译器,学习一下较为底层的编程方式,是一种学习计算机到底是如何工作的非常有效方法。 编译器通常被看作是十分复杂的工程。事实上,编写一个产品级的编译器也确实是一个庞大的任务。但是写一个小巧...

编程两个小问题,C语言中如何读取一行字符串的问题和VS2008中调试出错一个问题

问题一: 经常在链接是报link2001错误,其中一般是函数体没有定义错误。但是排除以上简单的外,还有一种如下无法解析系统文件中的函数定义。如下: LINK : warning LNK4098...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个C语言面试编程题
举报原因:
原因补充:

(最多只允许输入30个字)