最近在通过《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; }