选择结构程序综合举例
练习:
- 1、给一个不多于5位的正整数,要求:
(1)求出它是几位数
(2)分别输出每一位数字
(3)按照逆序输出各位数字,例如原数为321,应输出123
#include <stdio.h>
int main(){
int a;
printf("请输入不多于5位的正整数:\n");
scanf("%d",&a);
if(999<a&&a<=9999){
printf("个:%d 十:%d 百:%d 千:%d\n",a%10,a/10%10,a/100%10,a/1000%10);
printf("四位数\n");
printf("逆序后:%d\n",a%10*1000+a/10%10*100+a/100%10*10+a/1000%10);
}
else
if(99<a&&a<=999){
printf("个:%d 十:%d 百:%d \n",a%10,a/10%10,a/100%10);
printf("三位数\n");
printf("逆序后:%d\n",a%10*100+a/10%10*10+a/100%10);
}
else
if(9<a&&a<=99){
printf("个:%d 十:%d \n",a%10,a/10%10);
printf("二位数\n");
printf("逆序后:%d\n",a%10*10+a/10%10);
}
else
if(1<a&&a<9){
printf("个:%d\n",a);
printf("一位数\n");
printf("逆序后:%d\n",a);
}
else
printf("输入错误!");
return 0;
}
- 2、求a
x
2
x^2
x2+bx+c=0的解。
首先编写程序过程中,得知道以下几种情况。
① a=0,不是二次方程。
② b 2 b^2 b2-4ac=0,有两个相等的实根。
③ b 2 b^2 b2-4ac>0,有两个不相等的实根。
④ b 2 b^2 b2-4ac<0,有两个共轭复根。应当以p+qi和p-qi的形式输出复根。其中p=-b/2a,q= b 2 − 4 a c \sqrt { b^2-4ac} b2−4ac/2a。
#include <stdio.h>
#include <math.h>
int main(){
double a,b,c,d,x1,x2,r,i;
printf("输入三个数字: \n");
scanf("%lf %lf %lf",&a,&b,&c);
if(fabs(a)<=1e-6)
printf("不是二元一次方程 \n");
else{
d=b*b-4*a*c;
if(fabs(d)<=1e-6){
printf("有两个相同根:%.2f\n",-b/(2*a));
}
else
if(d>1e-6){
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
printf("两个不相同的实数根:%.2f %.2f\n ",x1,x2);
}
else{
r=-b/(2*a);
i=sqrt(-d)/(2*a);
printf("两个复根:" );
printf("%.2f+%.2fi\n",r,i);
printf("%.2f-%.2fi\n",r,i);
}
}
return 0;
}
其中,由于d(即 b 2 b^2 b2-4ac)是实数,而实数在计算和存储时会有一些微小的误差,因此不能进行如下判断:“if(d==0)…”,因为这样可能会出现本来是零的量,由于上述误差而判别为不等于零而导致结果错误。所以采取的办法是判别d的绝对值(fabs(d))是否小于一个很小的数(例如 1 0 − 6 10^ -6 10−6),如果小于此数,就认为d等于零。