ngaut

asm/c/c++/......

常用链接

统计

积分与排名

others

something special

经典的c/c++

朋友的网上家园

最新评论

前段时间做的部分笔试题和答案(提醒自己)

编写一函数实现数组的递归求和
#include <stdio.h>
#include 
"config.h"


int sum(int A[], size_t n)
{
    
if (1 == n)
    
{
        
return 1;
    }

    
else
    
{
        
return sum(&A[n-1], n-1+ n;
    }

}



int main(void)
{
    
int A[] = 123591};

    printf(
"%d\n", sum(A, ARRAY_LENGTH(A)));

    
return 0;
}
头文件config.h的内容如下:
#ifndef CONFIG_H
#define CONFIG_H


#define ARRAY_LENGTH(x) sizeof(x)/sizeof(x[0])


#endif





编写一函数实现str到long的转换
#include <stdio.h>
#include 
<string.h>
#include 
<assert.h>



long str2long(const char* str)
{
    
long result = 0;

    
while ('\0' != *str)
    
{
        result 
= result * 10 + (*str - '0');
        
++str;
    }


    
return result;
}





int main(void)
{
    
char *str = "1234";

    printf(
"\n%d\n", str2long(str));

    
return 0;
}

上面的代码没有考虑负数^_^



实现strcpy函数
char *mystrcpy(char *dst, const char *src)
{
    assert(NULL 
!= dst && NULL != src);
    
while (*dst++ = *src++);
    
    
return dst;
}
 


int main(void)
{
    
char *dst[20];
    
char *src = "test";
    mystrcpy(dst, src);

    puts(dst);

    
return 0;
}



判断一个整数是否是回文
long symm(long n)
{
    
long i, m;
    m 
= 0;
    i 
= n;
    
while (i)
    
{
        m 
= m * 10 + i % 10;
        i 
/= 10;
    }

    
return (n == m ? 1:0);
}



实现Insertion sort
#include <stdio.h>
#include 
<string.h>

typedef 
int ElemType;

void InsertionSort(ElemType A[], size_t n)
{
    
int i;
    
int pass;
    ElemType tmp;

    
for (pass = 1; pass < n; pass++)
    
{
        tmp 
= A[pass];
        
for ( i = pass; i > 0 && A[i-1> tmp; i--)
        
{
            A[i] 
= A[i-1];
        }

        A[i] 
= tmp;
    }

}


int main(void)
{
    
int i;
    ElemType A[] 
= {124869811254435};

    puts(
"Before sort:");
    
for(i = 0; i< sizeof(A)/sizeof(ElemType); i++)
    
{
        printf(
"%d  ", A[i]);
    }

    printf(
"\n");

    InsertionSort(A, 
sizeof(A)/sizeof(ElemType));

    puts(
"After sort:");
    
for(i = 0; i< sizeof(A)/sizeof(ElemType); i++)
    
{
        printf(
"%d  ", A[i]);
    }


    printf(
"\n");

    
return 0;
}

posted on 2006-04-18 09:08 ngaut 阅读(1037) 评论(9)  编辑 收藏 引用 所属分类: c/c++/ds

评论

# re: 前段时间做的部分笔试题和答案 2006-04-18 12:05 芋头

sum函数如果是完成你所说的功能,那么它就是错的,结果正确是巧合,因为1+2+3+4+5+6和1+2+3+5+9+1刚好相等。  回复  更多评论   

# re: 前段时间做的部分笔试题和答案 2006-04-18 12:29 芋头

mystrcpy实现错误,它应该返回dst,你返回的是dst经过运算以后的地址。  回复  更多评论   

# re: 前段时间做的部分笔试题和答案 2006-04-18 13:05 任我行

char *mystrcpy(char *dst, const char *src)
{
char *ret = dst;
assert(NULL != dst && NULL != src);
while (*dst++ = *src++);

return ret;
}   回复  更多评论   

# re: 前段时间做的部分笔试题和答案 2006-04-18 16:58 笑笑生

sum函数错了  回复  更多评论   

# re: 前段时间做的部分笔试题和答案 2006-04-18 17:02 笑笑生

int sum(int A[], size_t n)
{
if (1 == n)
{
return A[0];
}
else
{
return sum(A, n-1) + A[n-1];
}
}  回复  更多评论   

# re: 前段时间做的部分笔试题和答案 2006-04-18 17:10 笑笑生

long symm(long n)
{
long i, m;
m = 0;
i = n;
while (i)
{
m = m * 10 + i % 10;
i /= 10;
}
return (n == m ? 1:0); -> return n == m;
}  回复  更多评论   

# re: 前段时间做的部分笔试题和答案 2006-04-18 17:41 ngaut

实在汗颜啊,多谢“任我行”和 “笑笑生”指点。这个帖子还是留着警示我吧,所以错误就不修改了,该贴将在我的blog置顶  回复  更多评论   

# re: 前段时间做的部分笔试题和答案(提醒自己)[未登录] 2008-03-30 20:08 hh

int sum(int A[], size_t n)
{
if (1 == n)
{
return 0;
}
else
{
return sum(A, n-1) + A[n-1];
}
}   回复  更多评论   

# re: 前段时间做的部分笔试题和答案(提醒自己)[未登录] 2008-03-30 20:10 hh

@hh
int sum(int A[], size_t n)
{
if (0 == n)
{
return 0;
}
else
{
return sum(A, n-1) + A[n-1];
}
}   回复  更多评论   


标题  
姓名  
主页
验证码 *
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
[使用Ctrl+Enter键可以直接提交]
相关链接:
网站导航: