您的位置:首页 > 其它

习题 4.9 给一个不多于5位的正整数,要求:1. 求出它是几位数;2. 分别输出每一位数字;3. 按逆序输出各位数字,例如原数为321,应输出123。

2017-08-06 13:10 686 查看

C程序设计 (第四版) 谭浩强 习题4.9 个人设计

习题 4.9 给一个不多于5位的正整数,要求:

1. 求出它是几位数;

2. 分别输出每一位数字;

3. 按逆序输出各位数字,例如原数为321,应输出123。

代码块:

方法1:(利用条件选择结构)

#include <stdio.h>
int main()
{
int x, a, b, c, d, e;
//输入一个整数
printf("Please enter number: ");
scanf("%d", &x);
//以下是判断整数是否多于5位,多于判断出错,重新输入
while (x < 0 || x > 99999){
printf("Error! Retry!\nPlease enter number: ");
scanf("%d", &x);
}
//以下判断出该数是几位数
a = x / 10000;
b = x / 1000;
c = x / 100;
d = x / 10;
e = x - d * 10;
if (a >= 1 && a <= 9){
printf("%d is 5 bits!\n", x);
printf("%d %d %d %d %d\n", a, b-a*10, c-b*10, d-c*10, e);
printf("%d %d %d %d %d\n", e, d-c*10, c-b*10, b-a*10, a);
}
else if (b >= 1 && b <= 9){
printf("%d is 4 bits!\n", x);
printf("%d %d %d %d\n", b, c-b*10, d-c*10, e);
printf("%d %d %d %d\n", e, d-c*10, c-b*10, b);
}
else if (c >= 1 && c <= 9){
printf("%d is 3 bits!\n", x);
printf("%d %d %d\n", c, d-c*10, e);
printf("%d %d %d\n", e, d-c*10, c);
}
else if (d >= 1 && d <= 9){
printf("%d is 2 bits!\n", x);
printf("%d %d\n", d, e);
printf("%d %d\n", e, d);
}
else{
printf("%d is 1 bits!\n", x);
printf("%d\n", x);
}
return 0;
}


方法2:(利用数组、swtich和循环结构)

#include <stdio.h>
#include <math.h>
int main()
{
int num, i, j, bit, c[7], n[7];
printf("Please enter number: ");               //输入一个整数
scanf("%d", &num);
//判断整数是否多于5位,报错,重新输入
while (num >= 100000){
printf("Error!\nPlease enter number: ");
scanf("%d", &num);
}
//判断整数是几位数
for (i = 1; i < 1000000 && j != 0; i *= 10)
j = num / i;
i /= 100;
switch(i){
case 1: bit = 1; break;
case 10: bit = 2; break;
case 100: bit
c9ec
= 3; break;
case 1000: bit = 4; break;
case 10000: bit = 5; break;
default: break;
}
printf("%d is %d bits!\n", num, bit);
//此处是一个为输出数字的中间模块
for (i = 0; i <= bit; i++)
c[i] = num / pow(10, bit-i);
//分别输出整数的每位数字
for (i = 0; i < bit; i++){
n[i] = c[i+1] - c[i] * 10;
printf("%d ", n[i]);
}
printf("\n");
//逆序输出每位数字
for (i = bit-1; i >= 0; i--)
printf("%d ", n[i]);
printf("\n");
return 0;
}


方法3:(利用函数的模块化设计)

#include <stdio.h>
#include <math.h>
void input();                       //定义输入函数
void bits(int x);                   //定义数字位数函数
void output(int x);                 //定义数字输出函数
void re_output(int x);              //定义数字逆序输出函数
void error();                       //定义报错函数
int num, i, bit, c[7], n[7];        //定义全局变量
int main()
{
input();                        //调用输入函数
bits(num);                      //调用数字位数函数
output(num);                    //调用数字输出函数
re_output(num);                 //调用数字逆序输出函数
return 0;
}
//输入函数
void input()
{
printf("Please enter number: ");
scanf("%d", &num);
//一旦数字超过5位,调用报错函数并递归调用本函数
while (num >= 100000){
error();
input();
}
}
//数字位数函数
void bits(int x)
{
int j;
for (i = 1; i < 1000000 && j != 0; i *= 10)
j = x / i;
i /= 100;
switch(i){
case 1: bit = 1; break;
case 10: bit = 2; break;
case 100: bit = 3; break;
case 1000: bit = 4; break;
case 10000: bit = 5; break;
default: break;
}
printf("%d is %d bits!\n", x, bit);
}
//数字输出函数
void output(int x)
{
for (i = 0; i <= bit; i++)
c[i] = x / pow(10, bit-i);
for (i = 0; i < bit; i++){
n[i] = c[i+1] - c[i] * 10;
printf("%d ", n[i]);
}
printf("\n");
}
//数字逆序输出函数
void re_output(int x)
{
for (i = bit-1; i >= 0; i--)
printf("%d ", n[i]);
printf("\n");
}
//报错函数
void error()
{
printf("Error!\n");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐