C语言实验二分析
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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));
{
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));
(2)调试开始,设置三个断点,具体位置见源程序的注释。
(3)单击Go 按钮,输入a,b,c的值(2.0 9.0 3.0)后,程序执行到第一个断点处,在观察窗口输入变量名a,b,c,查看变量a,b,c的值。此时,这些变量的值与输入的值一致。
(4)继续单击Go 按钮,程序运行到第二个断点处,观察到变量d的值为57,说明方程有实根。
原因:原来的程序是年月,如果输入“,”会被看成字符
(6)再输入
2010 6↙,输出结果:
运行结果抓图至下方:
1900 2↙,输出结果:
运行结果抓图至下方:
2000 2↙,输出结果:
运行结果抓图至下方:
三、实验内容二(综合及设计类)
Eg2-4:输入一个华氏温度,要求输出摄氏温度。公式为c=5/9*(f-32)。
#include <stdio.h>
#include <math.h>
void main( )
{
double a,b,c,d;
printf("Enter a,b,c:");
scanf("%lf%lf%lf",&a,&b,&c);
d=b*b-4*a*c;//断点1
if (a==0)
{
if (b==0)
提示:注意c=5/9*(f-32)与c=5.0/9.0*(f-32)的区别
请将程序及运行结果粘贴至下面:
程序:
#include<stdio.h>
void main()
{
int c,f;
printf("请输入一个华氏温度:");
scanf("%d",&f);
c=5.0/9.0*(f-32);
printf("%d\n",c);
运行结果抓图至下方:
Eg2-3:输入年份和月份,求该月有多少天。
(1)算法分析:要考虑大月有31天,小月有30天,闰年的二月有29天以及非闰年的二月有28天这几种情况。
(2)源程序:
#include <stdio.h>
void main( )
{
int year,month,days;
printf("请输入年月:");
scanf("%d%d",&year,&month);
switch (month)
{
case 1: case 3: case 5: case 7:
case 8: case 10: case 12: /*处理"大"月*/
days=31;break;
case 4: case 6: case 9: case 11: /*处理"小"月*/
(1)算法分析:标准ASCII码值范围是0到127,所以在此范围内的数可以以字符形式输出,实现方法是用格式输出函数并用格式符%c控制输出。
(2)源程序:
#include <stdio.h>
void main( )
{
int x,y,sub ;
scanf("%d%d",x,y); /*变量前一定要加取地址符&,再次提醒!!*/
days=0;
}
if (days!=0) printf("%d年%d月有%d天\n",year,month,days);
}
(3)在VC++编辑环境下编辑源程序。并仔细阅读此程序,理解其编程思路!!
(4)编译直到程序没有错误。
(5)从键盘输入
2008,9↙,运行结果如何?为什么?
运行结果:Input error!
一、调试程序训练
注:本训练中没有必须要完成的任务,但请大家务必掌握这种调试程序的方法,并在今后的程序调试中积极使用这种方法,因为它对于我们分析程序、尤其是那些貌似正确(无语法错误)、但执行结果错误的程序,非常有帮助!!!
Eg2-1:调试训练——改正下列程序中的错误,输入参数a,b,c,求一元二次方程ax2+bx+c=0的根。
days=30;/*注意跳出处理!!*/
case 2: /*处理"平"月*/
if (year%4==0&&year%100!=0||year%400==0)
days=29; /*如果是闰年,注意体会此判断表达式!!*/
else days=28; /*不是闰年*/
break;
default: printf("Input error! \n"); /*月份输入错误*/
}
}
说明:断点的作用是使程序执行到断点处暂停,让用户可以观察当前变量或表达式的值。设置断点时,先将光标定位到要设置断点的位置,然后单击编译微型工具的“ ”按钮,断点即设置完毕。如果要取消设置的断点,只需要将光标移到要取消的断点处,单击“ ”按钮,该断点即取消。
(1)打开源程序,对程序进行编译和连接,没有出现错误信息。
(5)再次单击Go 按钮,程序运行到最后一个断点处,运行窗口显示x1=-0.36,x2=-4.14,符合题目要求。
(6)单击Stop Debugging 按钮,程序调试结束
二、实验内容一(验证及程序分析)
Eg2-2:从键盘输入两个0到127的整数,求两数的平方差并输出其值以及这两个整数的ASCII码对应的字符。
}
运行结果:
Eg2-5:用if语句编写一个C程序:输入a, b, c三个值,输出其中最大者。
在下面写出源程序:
#include<stdio.h>
void ห้องสมุดไป่ตู้ain()
{int a,b,c,max;
printf("请输入a,b,c=");
sub==x*x-y*y ;/*注意读题意!!*/
printf("%c,%c,%d\n",x,y,sub);
}
(3)在VC++编辑环境下编辑源程序。
(4)编译并运行。如有错误,则改正至无错。
(5)从键盘输入
100 50↙,运行结果如何?(请将运行结果抓图放入下面框内,并体会字符型数据的存储机制!!)
}
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));
{
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));
(2)调试开始,设置三个断点,具体位置见源程序的注释。
(3)单击Go 按钮,输入a,b,c的值(2.0 9.0 3.0)后,程序执行到第一个断点处,在观察窗口输入变量名a,b,c,查看变量a,b,c的值。此时,这些变量的值与输入的值一致。
(4)继续单击Go 按钮,程序运行到第二个断点处,观察到变量d的值为57,说明方程有实根。
原因:原来的程序是年月,如果输入“,”会被看成字符
(6)再输入
2010 6↙,输出结果:
运行结果抓图至下方:
1900 2↙,输出结果:
运行结果抓图至下方:
2000 2↙,输出结果:
运行结果抓图至下方:
三、实验内容二(综合及设计类)
Eg2-4:输入一个华氏温度,要求输出摄氏温度。公式为c=5/9*(f-32)。
#include <stdio.h>
#include <math.h>
void main( )
{
double a,b,c,d;
printf("Enter a,b,c:");
scanf("%lf%lf%lf",&a,&b,&c);
d=b*b-4*a*c;//断点1
if (a==0)
{
if (b==0)
提示:注意c=5/9*(f-32)与c=5.0/9.0*(f-32)的区别
请将程序及运行结果粘贴至下面:
程序:
#include<stdio.h>
void main()
{
int c,f;
printf("请输入一个华氏温度:");
scanf("%d",&f);
c=5.0/9.0*(f-32);
printf("%d\n",c);
运行结果抓图至下方:
Eg2-3:输入年份和月份,求该月有多少天。
(1)算法分析:要考虑大月有31天,小月有30天,闰年的二月有29天以及非闰年的二月有28天这几种情况。
(2)源程序:
#include <stdio.h>
void main( )
{
int year,month,days;
printf("请输入年月:");
scanf("%d%d",&year,&month);
switch (month)
{
case 1: case 3: case 5: case 7:
case 8: case 10: case 12: /*处理"大"月*/
days=31;break;
case 4: case 6: case 9: case 11: /*处理"小"月*/
(1)算法分析:标准ASCII码值范围是0到127,所以在此范围内的数可以以字符形式输出,实现方法是用格式输出函数并用格式符%c控制输出。
(2)源程序:
#include <stdio.h>
void main( )
{
int x,y,sub ;
scanf("%d%d",x,y); /*变量前一定要加取地址符&,再次提醒!!*/
days=0;
}
if (days!=0) printf("%d年%d月有%d天\n",year,month,days);
}
(3)在VC++编辑环境下编辑源程序。并仔细阅读此程序,理解其编程思路!!
(4)编译直到程序没有错误。
(5)从键盘输入
2008,9↙,运行结果如何?为什么?
运行结果:Input error!
一、调试程序训练
注:本训练中没有必须要完成的任务,但请大家务必掌握这种调试程序的方法,并在今后的程序调试中积极使用这种方法,因为它对于我们分析程序、尤其是那些貌似正确(无语法错误)、但执行结果错误的程序,非常有帮助!!!
Eg2-1:调试训练——改正下列程序中的错误,输入参数a,b,c,求一元二次方程ax2+bx+c=0的根。
days=30;/*注意跳出处理!!*/
case 2: /*处理"平"月*/
if (year%4==0&&year%100!=0||year%400==0)
days=29; /*如果是闰年,注意体会此判断表达式!!*/
else days=28; /*不是闰年*/
break;
default: printf("Input error! \n"); /*月份输入错误*/
}
}
说明:断点的作用是使程序执行到断点处暂停,让用户可以观察当前变量或表达式的值。设置断点时,先将光标定位到要设置断点的位置,然后单击编译微型工具的“ ”按钮,断点即设置完毕。如果要取消设置的断点,只需要将光标移到要取消的断点处,单击“ ”按钮,该断点即取消。
(1)打开源程序,对程序进行编译和连接,没有出现错误信息。
(5)再次单击Go 按钮,程序运行到最后一个断点处,运行窗口显示x1=-0.36,x2=-4.14,符合题目要求。
(6)单击Stop Debugging 按钮,程序调试结束
二、实验内容一(验证及程序分析)
Eg2-2:从键盘输入两个0到127的整数,求两数的平方差并输出其值以及这两个整数的ASCII码对应的字符。
}
运行结果:
Eg2-5:用if语句编写一个C程序:输入a, b, c三个值,输出其中最大者。
在下面写出源程序:
#include<stdio.h>
void ห้องสมุดไป่ตู้ain()
{int a,b,c,max;
printf("请输入a,b,c=");
sub==x*x-y*y ;/*注意读题意!!*/
printf("%c,%c,%d\n",x,y,sub);
}
(3)在VC++编辑环境下编辑源程序。
(4)编译并运行。如有错误,则改正至无错。
(5)从键盘输入
100 50↙,运行结果如何?(请将运行结果抓图放入下面框内,并体会字符型数据的存储机制!!)