实验二、选择结构一、调试程序训练注:本训练中没有必须要完成的任务,但请大家务必掌握这种调试程序的方法,并在今后的程序调试中积极使用这种方法,因为它对于我们分析程序、尤其是那些貌似正确(无语法错误)、但执行结果错误的程序,非常有帮助!!!Eg2-1:调试训练——改正下列程序中的错误,输入参数a,b,c,求一元二次方程ax2+bx+c=0的根。#includestdio.h#includemath.hvoidmain(){doublea,b,c,d;printf(Entera,b,c:);scanf(%lf%lf%lf,&a,&b,&c);d=b*b-4*a*c;//断点1if(a==0){if(b==0){if(c==0)printf(参数都为零,方程无意义!\n);elseprintf(a和b为0,c不为0,方程不成立!\n);}elseprintf(x=%0.2f\n,-c/b);}elseif(d=0)//断点2{printf(x1=%0.2f\n,(-b+sqrt(d))/(2*a));printf(x2=%0.2f\n,(-b-sqrt(d))/(2*a));}else//断点3{printf(x1=%0.2f+%0.2fi\n,-b/(2*a),sqrt(d)/(2*a));printf(x2=%0.2f-%0.2fi\n,-b/(2*a),sqrt(d)/(2*a));}}说明:断点的作用是使程序执行到断点处暂停,让用户可以观察当前变量或表达式的值。设置断点时,先将光标定位到要设置断点的位置,然后单击编译微型工具的“”按钮,断点即设置完毕。如果要取消设置的断点,只需要将光标移到要取消的断点处,单击“”按钮,该断点即取消。(1)打开源程序,对程序进行编译和连接,没有出现错误信息。(2)调试开始,设置三个断点,具体位置见源程序的注释。(3)单击Go按钮,输入a,b,c的值(2.09.03.0)后,程序执行到第一个断点处,在观察窗口输入变量名a,b,c,查看变量a,b,c的值。此时,这些变量的值与输入的值一致。(4)继续单击Go按钮,程序运行到第二个断点处,观察到变量d的值为57,说明方程有实根。(5)再次单击Go按钮,程序运行到最后一个断点处,运行窗口显示x1=-0.36,x2=-4.14,符合题目要求。(6)单击StopDebugging按钮,程序调试结束二、实验内容一(验证及程序分析)Eg2-2:从键盘输入两个0到127的整数,求两数的平方差并输出其值以及这两个整数的ASCII码对应的字符。(1)算法分析:标准ASCII码值范围是0到127,所以在此范围内的数可以以字符形式输出,实现方法是用格式输出函数并用格式符%c控制输出。(2)源程序:#includestdio.hvoidmain(){intx,y,sub;scanf(%d%d,x,y);/*变量前一定要加取地址符&,再次提醒!!*/sub==x*x-y*y;/*注意读题意!!*/printf(%c,%c,%d\n,x,y,sub);}(3)在VC++编辑环境下编辑源程序。(4)编译并运行。如有错误,则改正至无错。(5)从键盘输入10050↙,运行结果如何?(请将运行结果抓图放入下面框内,并体会字符型数据的存储机制!!)运行结果抓图至下方:Eg2-3:输入年份和月份,求该月有多少天。(1)算法分析:要考虑大月有31天,小月有30天,闰年的二月有29天以及非闰年的二月有28天这几种情况。(2)源程序:#includestdio.hvoidmain(){intyear,month,days;printf(请输入年月:);scanf(%d%d,&year,&month);switch(month){case1:case3:case5:case7:case8:case10:case12:/*处理大月*/days=31;break;case4:case6:case9:case11:/*处理小月*/days=30;/*注意跳出处理!!*/case2:/*处理平月*/if(year%4==0&&year%100!=0||year%400==0)days=29;/*如果是闰年,注意体会此判断表达式!!*/elsedays=28;/*不是闰年*/break;default:printf(Inputerror!\n);/*月份输入错误*/days=0;}if(days!=0)printf(%d年%d月有%d天\n,year,month,days);}(3)在VC++编辑环境下编辑源程序。并仔细阅读此程序,理解其编程思路!!(4)编译直到程序没有错误。(5)从键盘输入2008,9↙,运行结果如何?为什么?运行结果:Inputerror!原因:原来的程序是年月,如果输入“,”会被看成字符(6)再输入20106↙,输出结果:运行结果抓图至下方:19002↙,输出结果:运行结果抓图至下方:20002↙,输出结果:运行结果抓图至下方:三、实验内容二(综合及设计类)Eg2-4:输入一个华氏温度,要求输出摄氏温度。公式为c=5/9*(f-32)。提示:注意c=5/9*(f-32)与c=5.0/9.0*(f-32)的区别请将程序及运行结果粘贴至下面:程序:#includestdio.hvoidmain(){intc,f;printf(请输入一个华氏温度:);scanf(%d,&f);c=5.0/9.0*(f-32);printf(%d\n,c);}运行结果:Eg2-5:用if语句编写一个C程序:输入a,b,c三个值,输出其中最大者。在下面写出源程序:#includestdio.hvoidmain(){inta,b,c,max;printf(请输入a,b,c=);scanf(%d%d%d,&a,&b,&c);if((a=b)&&(a=c))max=a;else{if(c=b)max=c;elsemax=b;}printf(%d\n,max);}Eg2-5:编程:编写程序,输入奖金数a,计算并输出税率、应缴税款和实得奖金数。•奖金税率•a<5000.00•500≤a<10000.05•1000≤a<20000.08•2000≤a<50000.10•5000≤a0.15•提示:a=奖金数rate=税率值tax=应缴税款profit=实得奖金数。•计算公式:tax=a*rate,profit=a–tax•程序要求提示语句:“请输入奖金数量:”•运行结果显示:“请缴纳税金:*****”请用switch语句加以实现。(1)请将源程序粘贴到下面。#includestdio.hvoidmain(){unsignedinta,b;floatrate,tax,profit;printf(请输入奖金数量:);scanf(%d,&a);b=a,b=b/500;switch(b){case0:rate=0.00;tax=a*rate,profit=a-a*rate;printf(请缴纳税金:);printf(%0.1f\n,tax);printf(rate=);printf(%1.2f\n,rate);printf(profit=);printf(%0.1f\n,profit);break;case1:rate=0.05;tax=a*rate,profit=a-a*rate;printf(请缴纳税金:);printf(%0.1f\n,tax);printf(rate=);printf(%1.2f\n,rate);printf(profit=);printf(%0.1f\n,profit);break;case2:case3:rate=0.08;tax=a*rate,profit=a-a*rate;printf(请缴纳税金:);printf(%0.1f\n,tax);printf(rate=);printf(%1.2f\n,rate);printf(profit=);printf(%0.1f\n,profit);break;case4:case5:case6:case7:case8:case9:rate=0.10;tax=a*rate,profit=a-a*rate;printf(请缴纳税金:);printf(%0.1f\n,tax);printf(rate=);printf(%0.2f\n,rate);printf(profit=);printf(%0.1f\n,profit);break;default:rate=0.15;tax=a*rate,profit=a-a*rate;printf(请缴纳税金:);printf(%0.1f\n,tax);printf(rate=);printf(%0.2f\n,rate);printf(profit=);printf(%0.1f\n,profit);}}(2)程序运行结果抓图至下方: