C语言程序实验报告谭浩强Word下载.docx
《C语言程序实验报告谭浩强Word下载.docx》由会员分享,可在线阅读,更多相关《C语言程序实验报告谭浩强Word下载.docx(59页珍藏版)》请在冰点文库上搜索。
实验2
1.实验目的与要求
(1)进一步熟悉c语言程序设计环境。
(2)明确c语言程序的结构。
2.程序检测与调试
程序一
错误程序:
main()
(
printf("
Thisiscprogram."
)
调试结果:
程序缺少“#include<
”,main函数下面应该是“{}”而不是“()”。
改正后的程序:
#include<
Thisiscprogram.\n"
程序二
;
a=3,b=5;
c=a*b;
Theproductis:
"
c)
“#include<
”后面没有“;
”,对变量a,b,c没有定义,“}”前缺少“;
”。
inta,b,c;
Theproductis:
%d\n"
c);
3.实验总结
程序不能缺少“#include<
”,函数中出现的变量都应该对其进行定义声明,“}”前不能缺少“;
实验3
(1)掌握变量名的构成规则
1>
测试那些字符可以组成变量名。
2>
测试那些单词可以用做变量名。
3>
测试变量名的长度限制。
(2)赋值运算符的意义和正确用法
测试赋值运算符的意义。
测试那些运算符可以放在赋值号的左边。
(1)分析下面字符的功能
!
#%*()-+=;
”‘等等
测试程序:
Intmain(void)
Inta?
b,c/d;
由此程序可看出变量名中不能有“?
/等等”。
(3)分析程序
错误程序:
#include<
Intmain()
Inta=3,b=5,c=7,x=1,y,z;
a=b=c;
x+2=5;
z=y+3;
return0;
}
intmain()
inta=3,b=5,c=7,x=1,y,z;
a=b=c;
y=x+2;
z=y+3;
%d,%d\n"
y,z);
return0;
程序分析:
赋值符号左边不能放表达式。
实验4
1.实验目的与要求
(1)理解常用运算符的意义。
(2)掌握c语言表达是的运算规则。
2.实验准备。
(1)整数除的危险性
分析三个表达式的值,再设计程序测试,进行比较和分析。
inta=5,b=7,c=100,d,e,f;
d=a/b*c;
e=a*c/b;
f=c/b*a;
d=0,e=71,f=70.
程序测试:
inta=5,b=7,c=100,d,e,f;
printf("
%d,%d,%d\n"
d,e,f);
结果:
(3)分析下面程序
是比较x++与++x之间的区别。
例如:
inta=5,b=8;
a++=%d\n"
a++);
a=%d\n"
a);
++b=%d\n"
++b);
b=%d\ny"
b);
运行结果:
由上述程序可以看出,x++是先使用x在使x+1,而++x是先使x+1在使用x。
(4)分析下列表达式的值
测试程序:
inta,b,c,d,e,f;
scanf("
a=%d,b=%d\n"
a,b);
c=b+a+++a;
d=b+(a++)+a;
e=b+a+(++a);
f=b+a+++a++;
c=%,d=%d,e=%d,f=%d\n"
c,d,e,f);
实验5
1.试验目的与要求
(1)深入了解c语言数据类型的意义。
(2)测试不同类型数值数据的存储空间大小、取值范围、有效数字位数和精度。
2.实验准备
(1)编写程序测试基本数据类型的取值范围
例如:
测试char类型的取值范围
charmain()
charc0,c1,c2,c4,c5,c6;
c0=-129;
c1=-128;
c2=-127;
c4=128;
c5=127;
c6=126;
%d,%d,%d,%d,%d,%d\n"
c0,c1,c2,c4,c5,c6);
有结果可以看出,c0,c4的值发生改变,原因是超过其取值范围。
所以char类型的取值范围是【-128,127】。
(2)编写程序测试基本数据类型的有效数字长度和精度
例如,测试double类型的有效数字长度和精度
floatd1=0.123456789,d2=12345678901234567890.123456789;
%lf\n%lf\n"
d1,d2);
floatf1=2.1234567,f2=12345678901234567.123456789;
inti1,i2;
i1=f1;
i2=f2;
%d\n%d\n"
i1,i2);
有结果显示,只能精确的显示前七位。
(3)编写程序测试不同数据类型之间转换所出现的截取高位。
丢失精度和变得不可知等问题。
charc1=35,c2='
A'
c3;
c3=c1+c2;
%d\n%c\n"
c3,c3);
}
(4)编写程序测试字符型数据的算术特征
实验6
(1)掌握printf()进行格式化输出的方法。
(2)掌握scanf()进行格式化输入的方法。
(3)掌握其他控制台输入、输出函数。
(1)设计一个程序来测试printf()函数中数据参数被引用的顺序
#include<
inta=1;
%d,%d,%d\n"
++a,++a,++a);
有结果看出,参数被引用的顺序是由右及左。
(2)设计一个程序来测试printf()函数中格式符的意义
doubled=123456789.234567;
%e\n"
d);
%e的意义是数据按指数形式输出。
(3)设计一个程序来测试scanf()函数中格式符的意义
例如
doublex,y;
%f,%lf\n"
&
x,&
y);
x);
y,&
(4)设计一个程序来测试用scanf()输入含有字符型数据的多个选项时,数据之间的分隔问题。
例如;
charc1,c2,c3;
inta1,a2,a3;
%d%d%d"
a1,&
a2,&
a3);
a1,a2,a3);
%c%c%c"
c1,&
c2,&
c3);
c1,c2,c3);
%c%c%c"
%c%c%c\n"
运行结果;
实验7
(1)测试关系表达式和逻辑表达式的意义和取值。
(2)测试关系运算符和逻辑运算符的优先级和结合性。
(3)掌握逻辑运算的基本规律。
(1)编写一个用于测试关系表达式意义和取值的程序。
举例:
inta=5,b=5,c=5;
%d,%d,%d,%d\n"
a==b,a==c,a!
=b,a!
=c);
a>
=b,a>
=c,a<
=b,a<
b,a>
b);
其中运行结果中的“1”和“0”分别表示程序中运算的正确与错误。
(2)阅读下面程序并分析其运行结果
将分析结果与上机结果进行比较
floatx;
scanf(“%1f”,&
if(x=1.23)printf(“OK!
”);
分析结果:
有输入表达式可知,当从键盘输入数据1.23时,运行输出“OK!
与分析结果一致!
(3)编写一个用于测试逻辑表达式的意义和取值程序
inta=3,b=5,c=5;
printf(“%d,%d,%d,%d”,a==b&
&
a===c,a!
=b&
a!
=c,a>
a>
a<
=c);
printf(“%d,%d,%d,%d”,!
(a==b),!
(a>
=b),!
=c),!
(a<
=b));
预先写出程序运行结果,以便与上机结果进行比较。
分析结果:
0,1,0,11,1,1,0
运行结果:
(4)编写程序来测试下列逻辑表达式的值
预先写出程序的执行结果,以便与上级验证的结果进行比较。
(5)分析下面程序段的执行结果并验证自己所做推断的程序
inta=3,b=5,c=6;
%d"
a<
5||(a==b&
b<
c,printf("
OK!
)));
5&
(a==b||b<
推断:
不会输出“OK!
”
输出:
10
实验8
(1)掌握分支程序的基本结构。
(2)掌握分支程序的测试与调试方法。
(1)观察图3.1所示分支算法。
图见书
要求:
编写一个C语言程序,要求使用上述分支结构,并使其能接受由键盘输入的a,b,x。
编写程序如下:
inta,b,x;
scanf("
%d,%d,%d"
a,&
b,&
if(a>
1&
b==0)
x=x*a;
if(a==2||x>
1)
x=x+2;
a,b,x);
能够达到要求!
(2)语句覆盖测试
设计一组a,b,x,是程序中的所有语句都能至少执行一遍,目的是测试这些语句能否正确执行。
要求这组数据量最少。
a=a+1;
b=a+b;
x=a*b;
每个语句都能够正常运行!
(3)分支覆盖测试
设计一组a,b,x,使程序中的每个分支都能至少执行一遍,目的是测试这些分支能否正确执行。
、
每个分支能够正确执行!
(4)条件覆盖测试
设计一组a,b,x,使程序中的每个条件都能至少执行一遍,目的是测试这些条件能否正确执行。
每个条件都正确执行了!
(5)修改上面的程序以使操作者知道这些语句、分支或条件已被执行
提示:
在恰当的位置插入输出语句。
修改程序如下:
x);
由运行结果知这些语句、分支或条件已被执行!
(5)进一步的测试问题
从键盘输入三个数,用以代表3条线段的长度。
先编写一个程序,判断由着3条线段所组成的三角形的类型——不等边三角形、等腰三角形、等边三角形、直角三角形或不能构成三角形。
画出这个问题的流程图,设计程序,并未该程序分别设计语句覆盖、分支覆盖、条件覆盖的测试用例。
为检测测试用例的好坏,可人为的设置一些错误。
inta,b,c,max,m,x,y,z;
c);
max=b;
=max)max=a;
if(c>
=max){max=c;
m=a+b+c-max;
x=a^2+b^2;
y=a^2+c^2;
z=b^2+c^2;
if((m>
max)&
(a!
=0)&
(b!
(c!
=0))
if((x==(c^2))||(y==(b^2))||(z==(a^2)))
此三角形为直角三角形!
if(a==b==c)
此三角形为等边三角形!
if(a!
=b&
a!
=c&
b!
=c)
此三角形为不等边三角形!
if(((a==b)&
=c))||((a==c)&
=b))||((b==c)&
(b!
=a)))
此三角形等腰三角形"
elseprintf("
不能构成三角形!
实验9
1..实验目的与要求
(1)掌握在设计条件性循环结构时,如何正确的设定循环条件以及如何控制循环次数。
(2)了解条件型循环结构的基本测试方法。
(1)阅读下面程序,画出流程图或N-S图,分析程序功能。
doublee=1.0,x=1.0,y,detax;
inti=1;
\npleaseenteraerror:
%1f"
detax);
y=1/x;
while(y>
=detax)
{
x=x*i;
e=e+y;
++i;
}
%12.101f"
e);
流程图:
功能:
计算出当y>
=detax时e的值!
(2)设计一组detax,使程序能分别按照下面的要求运行。
A、不进入循环。
当时detax>
1.0。
B、只循环一次。
当1>
=detax>
=0.5时。
C、只循环两次。
当0.5>
detax>
=1/6时。
D、进入死循环。
当detax<
=0时。
(3)为了获取程序循环次数,应该在程序中增加怎样一条语句?
改进后程序:
inti=1,n=0;
while(y>
x=x*i;
e=e+y;
n++;
%12.101f,%d"
e,n);
3.实验内容与步骤
(2)试将while的控制表达式y>
=detax,分别替换成一下语句。
A,y>
detax时程序仍然正确。
但是循环区间变为0<
=detax<
1。
为了不会进入死循环,修改程序如下:
inti=1,;
if(0<
detax)
{
}
B,y=detax时程序让然正确。
但是程序只有在当detax=1时才会循环,当detax为其他值是将直接跳出循环。
为了不会进入死循环,修改程序如下:
if(detax=1.0)
while(y=detax)
C,y<
=detax时程序仍然正确。
但是当detax<
1时将直接跳出循环,当detax>
=1将进入死循环。
if(detax<
while(y<
D,y<
但是当detax=<
1将进入死循环。
\nplea