解答:
(1)、
写法1 :
int Several_digits (int n)
{
if (n>9999 && n<100000)
{
printf("五位数字");
}
if (n>999 && n<10000)
{
printf("四位数字");
}
if (n>99 && n<1000)
{
printf("三位数字");
}
if (n>9 && n<100)
{
printf("二位数字");
}
if (n>0 && n<10)
{
printf("一位数字");
}
return 0;
}//最原始的代码,局限性过大,代码量过大,仅局限于五位以内正整数的位数判断。
//当数据量加大时无法适应,无法正确识别负数、零并判断其位数。
写法2 :
int Several_digits (int n)
{
int i;
if (n<=0)
{
printf("NULL");
}
else if (n>0)
{
for ( i=1;(n/10)!=0;i++)
{
n=n/10;
}
return i;
}
}
int main()
{
printf("%d\n",Several_digits(0));
printf("%d\n",Several_digits(-2458));
printf("%d\n",Several_digits(2458));
printf("%d\n",Several_digits(12));
return 0;
}//简单运用if_else语句,对任意给定数字正负性提供判断。
//简单运用for语句,提升函数可实现性。
写法3 :
int Several_digits(int n)
{
int i = 0;
while (n!=0)
{
i++;
n=n/10;
}
return i;
}
int main()
{
printf("%d\n",Several_digits(0));
printf("%d\n",Several_digits(-2458));
printf("%d\n",Several_digits(2458));
printf("%d\n",Several_digits(12));
return 0;
}
//简单运用while语句,提升代码可实现性,但当给定数字位为0时无法正确判断给定数字位数。
写法4:
int Several_digits(int n)
{
int i = 0;
do
{
i++;
n /= 10;
}while(n != 0);
return i;
}
int main()
{
printf("%d\n",Several_digits(0));
printf("%d\n",Several_digits(-2458));
printf("%d\n",Several_digits(2458));
printf("%d\n",Several_digits(12));
return 0;
}
//在写法3的基础上继续优化,可以正确判断出当给定任意数字时,数字的位数。
//此时此程序可以解决当给定任意整数时,输出其位数。
//求位数运算及求给定数字除以10不等于0时的次数的运算。
//do_while语句与while语句循环次数为零次及以上,循环条件为0、1时各不相同,循环条件大于1时完全相同。
//do_while不会总比while多执行一次,仅当循环条件为0时,do_while多执行一次。
(2)、
写法1 :
int Sequential_output(int n)
{
int a,b,c,d,e;
a=n/10000;
b=(n-a*10000)/1000;
c=(n-a*10000-b*1000)/100;
d=(n-a*10000-b*1000-c*100)/10;
e=(n-a*10000-b*1000-c*100-d*10)/1;
printf("%d %d %d %d %d\n",a,b,c,d,e);
return 0;
}//最原始的代码,可以输出给定数字的每一位值,但编写过程过于繁杂,极易出错。
//去掉最高为后,剩余数字为原给定数字除以原给定数最大位数最小数的余数
写法2:
void Sequential_output(int n){
int power=1;
int m=Several_digits (n);
for(int i=1;i<m;i++)
{
power=power*10;
}
for(int j=0;j<m;j++)
{
printf("%d ",n/power);
n=n%power;
power=power/10;
}
printf("\n");
}
//采用for语句,将Several_digits函数的返回值作为循环条件
//需要与Several_digits(写法2)配合使用
写法3 :
void Sequential_output(int n)
{
int count;
int i;
int power = 1;
count = Several_digits(n);
for(int i=0;i<count-1;i++)
{
power = power*10;
}
do
{
printf("%d ",n/power);
n = n % power;
power = power / 10;
}while(n!=0);
printf("\n");
}
//需要与函数Several_digits(写法4)共同使用。
//顺序输出运算即用该数字除以相应位数最小数字的运算
(3)、
写法1 :
int Reverse_output(int n)
{
int a,b,c,d,e;
a=n/10000;
b=(n-a*10000)/1000;
c=(n-a*10000-b*1000)/100;
d=(n-a*10000-b*1000-c*100)/10;
e=(n-a*10000-b*1000-c*100-d*10)/1;
printf("%d %d %d %d %d\n",e,d,c,b,a);
return 0;
}
//最原始代码,仅将顺序输出时的变量顺序进行调整,无实际意义
写法2:
void Reverse_output(int n)
{
int m=Several_digits (n);
for(int i=0;i<m;i++)
{
printf("%d ",n%10);
n=n/10;
}
printf("\n");
}
//采用for语句,将Several_digits函数的返回值作为循环条件
//需要与Several_digits(写法2)配合使用
写法3 :
void Reverse_output(int n)
{
if(n < 0)
{
printf("-");
n = -n;
}
do
{
printf("%d ",n%10);
n /= 10;
}while(n!=0);
printf("\n");
}
//需要与函数Sequential_output(写法3)共同使用
//逆序输出运算即将给定数字按顺序依次除10取余并按顺序输出余数的运算。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- igbc.cn 版权所有 湘ICP备2023023988号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务