【C语言】练习3-5
2014-06-23 09:45
211 查看
题目来源:《The C programming language》中的习题P51
练习2-1: 编写函数itob(n, s, b),将整数n转换为以b为底的数,并将转换结果以字符的形式保存到字符串s中。例如,itob(n, s, 16)把整数n格式化成16进制整数保存在s中。
解题思路:这题本身并不难,由于习惯性思维,我们可能会忽略一些关键性的东西。比如,对于题目中的进制数,我们一般只会考虑到有2进制、8进制和16进制,其实 还有3进制,4进制...,总的来说进制数的范围为[2,36]。还有一点,对于整数,我们可能常常考虑的是正整数。下面我们看一下具体的代码实现。
代码实现:
练习2-1: 编写函数itob(n, s, b),将整数n转换为以b为底的数,并将转换结果以字符的形式保存到字符串s中。例如,itob(n, s, 16)把整数n格式化成16进制整数保存在s中。
解题思路:这题本身并不难,由于习惯性思维,我们可能会忽略一些关键性的东西。比如,对于题目中的进制数,我们一般只会考虑到有2进制、8进制和16进制,其实 还有3进制,4进制...,总的来说进制数的范围为[2,36]。还有一点,对于整数,我们可能常常考虑的是正整数。下面我们看一下具体的代码实现。
代码实现:
#include <stdlib.h> #include <stdio.h> #include <string.h> /* 字符串逆转 */ void reverse_itob(char s[]) { int c, i, j; for ( i = 0, j = strlen(s)-1; i < j; i++, j--) { c = s[i]; s[i] = s[j]; s[j] = c; } } void itob(int n, char s[], int b) { static char digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; int i, sign; // 判断是否位于进制数的范围 if ( b < 2 || b > 36 ) { fprintf(stderr, "EX3_5: 不持支持进制数 %d\n", b); exit(EXIT_FAILURE); } // 判断是否为负数 if ((sign = n) < 0){ n = -n; } i = 0; do { s[i++] = digits[n % b]; } while ((n /= b) > 0); if (sign < 0){ s[i++] = '-'; } s[i] = '\0'; reverse_itob(s); } int main(void) { char buffer[10]; int i; for ( i = 2; i <= 37; ++i ) { itob(255, buffer, i); printf("255 转化为%-2d 进制的结果为 : %s\n", i, buffer); } return 0; }
相关文章推荐
- C语言指针练习之矩形法求定积分
- 【C语言】查找_数据结构_练习
- C语言编程练习一
- C语言编程(练习4:循环,三大循环结构 )
- C语言一些关于位操作符的小练习
- 练习用规范的语句写C语言和shell
- C语言第三课练习
- C语言:矩阵操作练习
- 第04天C语言(07):while练习2
- C语言编程(练习4:字符输入和输出 )
- 第05天C语言(10):递归练习02
- C语言编程练习——冒泡排序和选择排序
- C语言编程(练习5:数组与指针)
- C语言小知识点练习总结
- C语言练习之第二章
- C语言:打印输出矩阵生成器练习
- 【C语言】练习5-8
- C语言练习1
- C语言第三次作业练习
- C语言编程练习——查找介于n1与n2(0<n1<n2<32768)之间所有满足下列条件的整数: