P086 4.1 一无二次方程求根的二分支.
#include #include int main() { double a,b,c,disc,x1,x2,p,q; scanf("%lf %lf %lf",&a,&b,&c); disc=b*b-4*a*c; if(disc<0) //这是选择结构和其判断条件的示例. printf("This equation hasn't real roots\\n"); else { p=-b/(2.0*a); q=sqrt(disc)/(2.0*a); x1=p+q; x2=p-q; printf("x1=%7.2f\\nx2=%7.2f",x1,x2); } return 0; } P087 4.2 二个数按大小输出. #include int main() //此程序代表按大小顺序输出. { float a,b,t; scanf("%f %f",&a,&b); //出错时,注意检查这里是否按格式输入了.比如有个逗号. if(a>b) { t=a; a=b; b=t; } printf("%5.2f,%5.2f\\n",a,b); return 0; } P088 4.3 三个数按大小输出. #include int main() //此程序代表按大小顺序输出. { float a,b,c,t; scanf("%f %f %f",&a,&b,&c); if(a>b) //此处执行后,a为小者. { t=a; a=b; b=t; } if(a>c) //此处执行后,a为小者. { t=a; a=c; c=t; } if(b>c) //上面已经搞定a是最小者,现在对比得出次小者,并且已经归到变量中. { t=b; b=c; c=t; } printf("%5.2f,%5.2f%5.2f\\n",a,b,c); return 0; } P099 4.4 判断输入字符,并最终按小写输出. #include int main() { char ch; scanf("%c",&ch); ch=(ch>='A'&&ch<='Z')?(ch+32):ch; //条件运算符,真取前,假取后. printf("%c\\n",ch); return 0; } P100 4.5 按要求输出相应的Y值. #include int main() { int x,y; scanf("%d",&x); if(x>=0) { if(x>0) //这个范围要基于x>=0来判断. { y=1; } else { y=0; } } else //这个是x<0的范围. { y=-1; } printf("x=%d,y=%d",x,y); return 0; } P102 4.6 switch的简单应用. #include int main() { char grade; scanf("%c",&grade); printf("Your score:"); switch(grade) { case'a':printf("85-100\\n");break; //当多分支结构过于多时,可以用switch来解决. case'b':printf("70-84\\n");break; case'c':printf("60-69\\n");break; case'd':printf("<60\\n");break; default:printf("Enter data error!\\n"); } return 0; } P104 4.7 按输入执行操作,并且不分大小写. #include void action1(int x,int y) { printf("x+y=%d\\n",x+y); } void action2(int x,int y) { printf("x*y=%d\\n",x*y); } int main() { char ch; int a=15,b=23; ch=getchar(); switch(ch) { case'a': case'A':action1(a,b);break; //a,A共用一个执行语句. case'b': case'B':action2(a,b);break; default:putchar('\\a'); //'\\a'可以控制电脑发出蜂鸣声. } return 0; } P106 4.8 用if的分支来做闰年问题 #include int main() { int year,leap; printf("Please input the year:\\n"); scanf("%d",&year); if(year%4==0) //400年里,在100个可除尽4的年里计算,以下是在全范围内计算. { if(year%100==0) //既是100个内的,又是可以除尽100的,算是且. { if(year%400==0) //相当于且了两次,只余下唯一一个. { leap=1; } else //400年里只有1个除得尽,其它都不是. { leap=0; } } else //这里的范围是(year%4==0)&&(year%100!=0) { leap=1; //在合法的100内,又不是2100,2200一类的,当然属闰年. } } else { leap=0; } if(leap) { printf("%d is ",year); } else { printf("%d is not ",year); } printf("a leap year !"); //不管上面如何判断,最后还是会输出这一句. return 0; } P108 4.9 一元二次等式的全计算过程. #include #include int main() { double a,b,c,disc,x1,x2,realpart,imagpart; scanf("%lf %lf %lf",&a,&b,&c); printf("The equation "); if(fabs(a)<=1e-6) //fabs是绝对值, le-6,即是的负六次方,接近或是等于零. { printf("is not a quadratic !\\n"); printf("x1=x2=%lf",-c/b); } else { disc=b*b-4*a*c; if(fabs(disc)<=1e-6) //指数形式,数字1. { printf("has two equal roots : %lf\\n",-b/(2*a)); } else { if(disc>1e-6) { x1=(-b+sqrt(disc))/(2*a); x2=(-b-sqrt(disc))/(2*a); printf("has distinct real roots : %lf and %lf \\n",x1,x2); } else { realpart=-b/(2*a); imagpart=sqrt(-disc)/(2*a); printf("has complex roots: \\n"); printf("%lf + %lfi\\n",realpart,imagpart); printf("%lf + %lfi\\n",realpart,imagpart); } } } return 0; } P109 4.10 关于多个区间的计算,运费问题为例. #include int main() { double p,w,s,d,f; printf("p,w,s\\n"); scanf("%lf %lf %lf",&p,&w,&s); if(s<250) { d=0.0; f=p*w*s*(1-d); printf("%lf",f); } else if(s<500) { d=0.02; f=p*w*s*(1-d); printf("%lf",f); } else if(s<1000) { d=0.05; f=p*w*s*(1-d); printf("%lf",f); } else if(s<2000) { d=0.08; f=p*w*s*(1-d); printf("%lf",f); } else if(s<3000) { d=0.1; f=p*w*s*(1-d); printf("%lf",f); } else { d=0.15; f=p*w*s*(1-d); printf("%lf",f); } return 0; } P0112 0.4 键盘输入三个数,输出最大者. #include int mina,mida,maxa; int max(int a,int b,int c) { int m; if(a>b) //凡是比较中,大于号代表升序排列. { m=a; a=b; b=m; } if(a>c) { m=a; a=c; c=m; } if(b>c) { m=a; a=c; c=m; } return (c); //此排序后,a,b,c由小到大.所以c是返回中最大的. } int main() { int a,b,c; printf("Please input 3 numbers :"); scanf("%d %d %d",&a,&b,&c); printf("The max is %d !\\n",max(a,b,c)); return 0; } P0112 0.5 一个小于1000的数,有判定条件. #include #include int main() { double a,b; printf("Please input a number :"); scanf("%lf",&a); if(a<1000) { b=sqrt(a); } else { printf("\\a"); //控制蜂鸣声 printf("Please input a number again :"); scanf("%lf",&a);11 b=sqrt(a); } printf("%.0lf",b); //按要求,只取整数. return 0; } P0112 0.9 一个不多于5位的数,按条件输出. #include #include int main() { int i,a,b[4],count=0; printf("Please input a number (five-digit number) :"); //意思是五位数以内. scanf("%d",&a); for(i=0;i<=4;i++) { b[i]=a%10; //是%10,不是/10000,结果就是b[0]至b[4]中存着个,十,百,千,万位. a=a/10; // /10后得到的结果去掉了个数. if(b[i]!=0) { count=count+1; } } printf("%d位数.\\n",count); printf("分别输出每一位数字,如下:"); for(i=4;i>=0;i--) { printf("%d ",b[i]); } printf("\\n"); printf("倒序输出这一个数字,如下:"); for(i=0;i<=4;i++) { printf("%d",b[i]); } printf("\\n"); return 0; } P0112 0.10 按要求提成奖金(if写法). #include int main() { double a,b; printf("Please input profit amount :"); scanf("%lf",&a); if(a<=10) //这个是整个if 的基础. { b=a*0.1; } else if(a<=20) //以上面为基础,这已经代表了10-20间了!!! { b=1+(a-10)*0.075; } else if(a<=40) //同理,这是20-40间. { b=1+0.75+(a-20)*0.05; } else if(a<=60) { b=1+0.75+0.1+(a-40)*0.03; } else if(a<=100) { b=1+0.75+0.1+0.06+(a-60)*0.15; } else //这里是大于100的. { b=1+0.75+0.1+0.06+(a-100)*0.01; } printf("The reward is %lf !\\n",b); return 0; } P0112 0.10 按要求提成奖金(switch写法). #include double GetProfit(double c) { printf("Please input profit amount :"); scanf("%lf",&c); return (c); //返回本身了,如果有进一步的计算结果,将值赋给其它变量,也可以返回. } int main() { double a; char c; printf("Your choice :\\nA : 0-10 ;\\nB : 10-20 ;\\nC : 20-40 ;\\nD : 40-60 ;\\nE : 60-100 ;\\nF : 100-1000 ;\\n"); scanf("%c",&c); //不同档时,应照档的规定数值进行输入,否则结果不会是正确的. switch(c) //前三后三用于比较调用函数. { //GetProfit(c)引入的实参没有意义,返回值和引入的实参没关系,反而由键盘获得. case'A':{ printf("The reward is %lf !\\n",GetProfit(c)*0.1);};break; //0-10 0.100 case'B':{ printf("The reward is %lf !\\n",1+(GetProfit(c)-10)*0.075);}break; //10-20 0.075 case'C':{ printf("The reward is %lf !\\n",1+0.75+(GetProfit(c)-20)*0.05);}break; //20-40 0.050 case'D':{printf("Please input profit amount :");scanf("%lf",&a);printf("The reward is %lf !\\n",1+0.75+0.1+(a-40)*0.03);}break; //40-60 0.030 case'E':{printf("Please input profit amount :");scanf("%lf",&a);printf("The reward is %lf !\\n",1+0.75+0.1+0.6+(a-60)*0.15);}break; //60-100 0.015 case'F':{printf("Please input profit amount :");scanf("%lf",&a);printf("The reward is %lf !\\n",1+0.75+0.1+0.6+0.6+(a-100)*0.01);}break; //100-1000 0.010 default:printf("Error data !");break; //可以有一个执行体,用{}包括起来. } return 0; } P0112 0.11 键盘输入数值,然后排序输出. #include int main() { int a[10],i,j,m,n; //变量可以在写代码过程中再回来临时添加. printf("请输入数值的个数: (十个以内)"); scanf("%d",&m); //到这里需要变量来承载数值的个数,设m,回头去定义变量那写上m. printf("请分别输入相对应个数的数值:"); for(i=0;i scanf("%d",&a[i]); } for(i=0;i for(j=i+1;j if(a[i]>a[j]) //这是选择排序法.升序. { n=a[i]; //这里需要一个用于临时变量的n,所以回头去写上. a[i]=a[j]; a[j]=n; } } } for(i=0;i printf("%d",a[i]); } return 0; }