C程序设计语言学习笔记(一)

最近在通过《C程序设计语言》 重新系统学习C语言,书中第三章中的部分习题记录下来。读国外出版的教材与国内的教材,感触比较大的就是,国外教材的讲解通俗易懂,而练习题相对复杂,需要学生自己思考钻研才能比较完善的做出来。而国内的教材很多都晦涩难懂,且习题很水,比较不能激发学生自己的思考能力。废话不说,大致代码如下,主要是一些数字和字符串的转换代码

#include<stdio.h>
#include<string.h>

/*反转字符串*/
void reverse(char s[])
{
    int i,l;
    char c;
    for(i = 0,l = strlen(s) - 1;i < l;i++,l--)
    {
        c = s[i];
        s[i] = s[l];
        s[l] = c;
    }
}
/*将数字转换为字符串*/
void rtitoa(int n, char s[])
{
    int sign = 1;
    int i = 0;
    unsigned long nn;
    if(n < 0)
    {
        sign = -1;
        nn = (unsigned long)(-n);  /*此处的转换为了防止负数溢出,如最小的负数求相反数仍是负数,故需转换成unsigned long*/
    }
    else
    {
        nn = (unsigned long)n;
    }

    do
    {
        s[i++] = (nn % 10) + '0';
    }while((nn /= 10) > 0);

    if(sign == -1)
    {
        s[i++] = '-';
    }
    s[i] = '\0';
    reverse(s);
}
/*将数字转换为字符,并指定最小宽度*/
void rtitoa2(int n, char s[], int l)
{
    int sign = 1;
    int i = 0;
    unsigned long nn;
    if(n < 0)
    {
        sign = -1;
        nn = (unsigned long)(-n);
    }
    else
    {
        nn = (unsigned long)n;
    }

    do
    {
        s[i++] = (nn % 10) + '0';
    }while((nn /= 10) > 0);

    if(sign == -1)
    {
        s[i++] = '-';
    }
    while(i < l)
      s[i++] = ' ';
    s[i] = '\0';
    reverse(s);
}

/*将数字转换为字符串,并以base为进制*/
void rtitob(int n, char s[], int base)
{
    int i = 0;
    int digit = 0;
    unsigned long nn = (unsigned long)n;

    do
    {
        digit = nn %base;
        if( digit <= 9 )
        {
            s[i++] = digit + '0';
        }
        else
        {
            s[i++] = digit - 10 + 'a';
        }
    }while((nn /= base) > 0);

    s[i] = '\0';
    reverse(s);
}
int main()
{
    int x = -1234;
    char s[33] = "";
    rtitoa2(x,s,6);
    printf("%s\n", s);
    return 0;
}

 

 

posted on 2012-12-08 15:47  泡泡腾  阅读(235)  评论(0编辑  收藏  举报

导航