我们已经学习了数据输入输出、赋值语句以及基本的数据类型。下面举一些实例,通过阅读和模仿这些程序,让选手逐步熟悉程序的编写和巩固知识点,为以后各章的学习打好基础。 例2.18 输入一个三位数,要求把这个数的百位数与个位数对调,输出对调后的数。 【分析】先求出自然数的个位、十位、百位,然后个位与百位对调。 程序如下: #include using namespace std; int main() { int a,b,c,m,n; cin>>m; //输入一个三位数 a=m/100; //百位数 b=(m/10)%10; //十位数 c=m%10; //个位数 n=c*100+b*10+a; //重新组合对调后的数 cout<><> } 运行结果: 输入:234 输出:n=432 例2.19 已知某班有男同学x位,女同学y位,x位男生平均分是87分,y位女生的平均分是85,问全体同学平均分是多少分? 【分析】男女生的人数需要用户输入,然后根据题意(x*87+y*85)/(x+y)求出全体同学的平均分。 程序如下: #include using namespace std; int main() { int x,y; cin>>x>>y; //输入男女人数 cout } 例2.20 歌手大奖赛上6名评委给一位参赛者打分,6个人打分的平均分为9.6分;如果去掉一个最高分,这名参赛者的平均分为9.4分;如果去掉一个最低分,这名参赛者的平均分为9.8分;如果去掉一个最高分和一个最低分,这名参赛者的平均是多少? 【分析】首先求出6名评委的总分,然后根据去掉最高分的总分和最低分的总分,求出最高分的分值和最低分的分值,最后总分减去最高分和最低分除以4即是答案。 程序如下: #include int main() { floathigh,low,sc_all,sc_high,sc_low,ans; sc_all=6*9.6; //求6名评委的总分 sc_high=5*9.4; //求去掉最高分后的总分 sc_low=5*9.8; //求去掉最低分后的总分 high=sc_all-sc_high; //求最高分 low=sc_all-sc_low; //求最低分 ans=(sc_all-high-low)/4; //求平均分 printf('%5.2f\n',ans); //%5.2f按实数格式输出,保留2位小数 } //运行结果: 9.60 例2.21 传说古代的叙拉古国王海伦二世发现的公式,利用三角形的三条边长来求取三角形面积。已知△ABC中的三边长分别为a,b,c,求△ABC的面积。(提示:海伦公式 ,其中p=(a+b+c)/2 ) 【分析】公式中p是三角形周长的一半,求出p后直接代入海伦公式中求得面积。 #include #include int main() { float a,b,c,p,s; scanf('%f%f%f',&a,&b,&c); //输入三角形的三边 p=(a+b+c)/2; //求出p的值 s=sqrt(p*(p-a)*(p-b)*(p-c)); //根据p求面面积,sqrt是开方函数 printf('%0.3f\n',s); //输出面积,0.3f按实际位数输出,保留3位小数 } 运行结果: 输入:3 4 5 输出:6.000 例2.22 分钱游戏。甲、乙、丙三人共有24元钱,先由甲分钱给乙、丙两人,所分给的数与各人已有数相同;接着由乙分给甲、丙,分法同前;再由丙分钱给甲、乙,分法亦同前。经上述三次分钱之后,每个人的钱数恰好一样多。求原先各人的钱数分别是多少? 【分析】设甲、乙、丙三人的钱数分别为A,B,C。用倒推(逆序)算法,从最后结果入手,按反相顺序,分步骤推算出每次各人当时的钱数: (在每个步骤中,各人钱数分别存在A、B、C中) #include int main() //调用iostream库,使用printf语句编译通不过 { int a,b,c; a=8; b=8; c=8; //对应于步骤① a=a/2;b=b/2;c=a+b+c; //对应于步骤② a=a/2;c=c/2;b=a+b+c; //对应于步骤③ b=b/2;c=c/2;a=a+b+c; //对应于步骤④ printf('a=%-5db=%-5dc=%-5d\n',a,b,c); //%-5d按5位宽度输出,左对齐。 } 运行结果: a=13 b=7 c=4 例2.23 求一元二次方程x2+3x+2=0的两个实数根。 【分析】方程的系数是常量,分别用A,B,C表示,运用数学求方程的根,采取如下方法 : ① 先求出d=B2-4AC;(求根公式中需用开方运算的那部分) ② 再用求根公式算出x1,x2的值。(x1,x2 = ? ) ③ 输出x1,x2。 #include #include #define A 1 #define B 3 //常量说明,A,B,C表示方程系数 #define C 2 int main() { int d; //d为整型变量 float x1,x2; //x1,x2为实型变量 d=B*B-4*A*C; x1=(-B+sqrt(d))/(2*A); //求方程的根 x2=(-B-sqrt(d))/(2*A); printf('x1=%-8.3fx2=%-8.3f\n',x1,x2); //%-8.3f按8位宽度,3位小数,左对齐 } 运行结果: x1=-1.000 x2=-2.000 【上机练习2.2】 1.有三个小朋友甲乙丙。甲有50粒糖果,乙有43粒糖果,丙有13粒糖果。现在他们做一个游戏。从甲开始,将自己的糖分三份,自己留一份,其余两份分别给乙与丙,多余的糖果自己吃掉,然后乙与丙也依次这样做。问最后甲、乙、丙三人各有多少粒糖果? 2.输入两个正整数A和B,编程交换这两个变量的值。 3.编写程序把一个三位整数反转,例如358反转成853。 4.某车棚存有自行车和三轮车共65辆,它们的轮子数合计为150个,求该棚内存有的自行车和三轮车各是多少辆? 5.五位好朋友相聚。第一位朋友带来了很多糖块赠送给各位朋友,使每人的糖块在各自原有的基础上翻了一倍;接着第二位好友也同样向每人赠送糖块,他同样使每人的糖块在各人已有的数量上翻了一倍;第三、第四、第五位好友都照此办理。经过这样的赠送之后,每人的糖块恰好都为32块。问各位好友原先的糖块数分别是多少? |
|