C语言实验二全解.docx
《C语言实验二全解.docx》由会员分享,可在线阅读,更多相关《C语言实验二全解.docx(13页珍藏版)》请在冰豆网上搜索。
C语言实验二全解
实验二、选择结构
一、调试程序训练
注:
本训练中没有必须要完成的任务,但请大家务必掌握这种调试程序的方法,并在今后的程序调试中积极使用这种方法,因为它对于我们分析程序、尤其是那些貌似正确(无语法错误)、但执行结果错误的程序,非常有帮助!
!
!
Eg2-1:
调试训练——改正下列程序中的错误,输入参数a,b,c,求一元二次方程ax2+bx+c=0的根。
#include
#include
voidmain()
{
doublea,b,c,d;
printf("Entera,b,c:
");
scanf("%lf%lf%lf",&a,&b,&c);
d=b*b-4*a*c;//断点1
if(a==0)
{
if(b==0)
{
if(c==0)
printf("参数都为零,方程无意义!
\n");
else
printf("a和b为0,c不为0,方程不成立!
\n");
}
else
printf("x=%0.2f\n",-c/b);
}
else
if(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)源程序:
#include
voidmain()
{
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)源程序:
#include
voidmain()
{
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)的区别
请将程序及运行结果粘贴至下面:
程序:
#include
voidmain()
{
intc,f;
printf("请输入一个华氏温度:
");
scanf("%d",&f);
c=5.0/9.0*(f-32);
printf("%d\n",c);
}
运行结果:
Eg2-5:
用if语句编写一个C程序:
输入a,b,c三个值,输出其中最大者。
在下面写出源程序:
#include
voidmain()
{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)请将源程序粘贴到下面。
#include
voidmain()
{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)程序运行结果抓图至下方: