习题 4.9 给一个不多于5位的正整数,要求:1. 求出它是几位数;2. 分别输出每一位数字;3. 按逆序输出各位数字,例如原数为321,应输出123。
输出 一个 数字 要求 习题 分别 一位 逆序
2023-09-14 09:06:57 时间
C程序设计 (第四版) 谭浩强 习题4.9 个人设计
习题 4.9 给一个不多于5位的正整数,要求:
1. 求出它是几位数;
2. 分别输出每一位数字;
3. 按逆序输出各位数字,例如原数为321,应输出123。
代码块:
方法1:(利用条件选择结构)
#include <stdio.h>
#include <stdlib.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);
}
system("pause");
return 0;
}
方法2:(利用数组、swtich和循环结构)
#include <stdio.h>
#include <stdlib.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 = 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");
system("pause");
return 0;
}
方法3:(利用函数的模块化设计)
#include <stdio.h>
#include <stdlib.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); //调用数字逆序输出函数
system("pause");
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");
}
方法4: (利用for循环和数组)
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n, i, j, k, b[5];
printf("Please enter number: ");
for (i=0; ; i++){
scanf("%d", &n);
if (n<100000) break;
else printf("Error!\nPlease enter number: ");
}
for (i=1, j=1; i<=10000; i*=10, j++)
if (n/i>0&&n/i<10){
printf("Bit=%d\n", j);
break;
}
for (k=0; i>=1; b[k++]=n/i, n%=i, i/=10);
for (i=0; i<j; printf("%d ", b[i++]));
printf("\n");
for (i=j-1; i>=0; printf("%d ", b[i--]));
printf("\n");
system("pause");
return 0;
}
方法5:(根据大神@yingxuanying提出的方法,利用C++的string变量定义简化)
#include <iostream>
#include <string>
using namespace std;
int main()
{
string number;
int len;
cout<<"Please enter number: ";
cin>>number;
len=number.length();
cout<<len<<endl;
cout<<number<<endl;
string re_number(number.rbegin(), number.rend());
cout<<re_number<<endl;
system("pause");
return 0;
}
方法6:(动态分配内存)
#include <stdio.h>
#include <stdlib.h>
void input(int *n);
void bits(int n);
void output(int n);
void reverse(int n);
int main()
{
int *num=(int*)malloc(sizeof(int));
input(num);
bits(*num);
output(*num);
reverse(*num);
system("pause");
return 0;
}
void input(int *n)
{
printf("Enter number: ");
scanf("%d", n);
while(*n>10000){
printf("Error! Enter number: ");
scanf("%d", n);
}
}
void bits(int n)
{
int i, g;
for(i=1, g=n/i; i<=1000&&g>10; i*=10, g=n/i);
switch(i){
case 1: printf("%d is 1 bits.\n", n); break;
case 10: printf("%d is 2 bits.\n", n); break;
case 100: printf("%d is 3 bits.\n", n); break;
case 1000: printf("%d is 4 bits.\n", n); break;
default: break;
}
}
void output(int n)
{
int mod, i;
for(i=1000, mod=i; i>=1; i/=10){
mod=n/i;
if(mod!=0)
printf("%d ", mod);
n=n%i;
}
printf("\n");
}
void reverse(int n)
{
int mod, i;
for(i=10; n!=0; n/=i){
mod=n%i;
printf("%d ", mod);
}
printf("\n");
}
相关文章
- 输入一个整数,将这个整数以字符串的形式逆序输出 程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001
- golang中time包一个简单的时间格式输出
- 一个漂亮的输出MySql数据库表结构的PHP页面
- 用Python输出一个杨辉三角的例子
- 成功解决连接SQL输出出现中文乱码问题(10001, 'oracle¿ìËÙÈëÃÅ', 'Íõº£ÁÁ', 'Ë®Àû³ö°æÉç',
- 【单片机仿真项目】引脚上输出一个脉冲信号,周期为2s,占空比为20%
- Python os.walk() 方法--输出在目录中的文件名
- 利用Lucene把文本的字体格式进行改动,然后输出到一个新的文件里
- 习题 6.16 输入一个字符串,内有数字和非数字字符,如。。。将其中连续的数字作为一个整数,依次存放到一数组a中。例如,123放在a[0],456放在a[1]。。。统计共有多少个整数,并输出这些数。
- 习题 12.4 写一个程序,定义抽象基类Shape,由它派生出3个派生类:Circle(圆形)、Rectangle(矩形)、Triangle(三角形),用一个函数printArea分别输出以上。。。
- 习题 4.3 写一个判别素数的函数,在主函数输入一个整数,输出是否为素数的信息。
- 习题 7.1 定义一个结构体变量(包括年、月、日),编写程序,要求输入年、月、日,程序能计算并输出该日在本年中是第几天。注意闰年问题。
- 习题4.3 编写一个Java应用程序,输出1~100之间所有既可以被3整除,又可被7整除的数。
- 解答私信@icey�192 //2021-11-1 C++ 已知1900是鼠年,输入一个年份,输出其对应的生肖。
- Python:数字的格式化输出
- LabVIEW中心对齐的PWM输出
- 有一个TIME的类要求输出分和秒的值
- 输入一个 N 位整数(N<=6),输出其个、十、百、千、万。。。位上的数字。
- 时间类-输入和输出(C++版本)
- C语言: 定义一个函数int isprime(int n),用来判别一个正整数n是否为素数。在主函数中输入两个正整数m和n(m>=1,n>m),统计并输出m和n之间的素数的个数以及这些素数的和。
- C语言: 定义一个函数int fun(int n),用来计算整数的阶乘,在主函数中输入一个变量x,调用fun(x)输出x及以下的阶乘值。
- 原子半导体第7题:请使用超过一种方法去写一个可综合的Verilog代码去选择一个64个输入数据给输出。
- 高通平台printk输出log到串口