C语言程序实验报告谭浩强.docx
- 文档编号:28866724
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:59
- 大小:312.74KB
C语言程序实验报告谭浩强.docx
《C语言程序实验报告谭浩强.docx》由会员分享,可在线阅读,更多相关《C语言程序实验报告谭浩强.docx(59页珍藏版)》请在冰豆网上搜索。
C语言程序实验报告谭浩强
C语言程序设计实验报告
学校:
内蒙古科技大学经济与管理学院
班级:
信息管理与信息系统2011级
******
学号:
**********
实验一C语言开发环境建立……………………………………3
实验二C语言程序初步…………………………………………3
实验三变量与赋值………………………………………………4
实验四运算符与表达式…………………………………………5
实验五数据类型…………………………………………………7
实验六控制台输入/输出………………………………………...9
实验七关系运算与逻辑运算……………………………………11
实验八分支程序的测试与调试…………………………………12
实验九条件型循环结构及其测试………………………………16
实验十计数型循环结构及其测试………………………………20
实验十一函数及其测试……………………………………………24
实验十二变量的储存性质…………………………………………26
实验十三数组………………………………………………………30
实验十四指针………………………………………………………32
实验十五结构体和共用体…………………………………………37
实验十六文件………………………………………………………40
实验1
1、实验目的与要求
(1)掌握C语言开发环境的软/硬件配置和安装方法。
(2)为了自己的方便进行工作环境配置。
(3)测试所建立的C语言程序开发环境。
2、实验
测试一个简单的程序,对所建立的程序开发环境进行测试
例如,可以准备一个简单的程序如下。
#include
intmain(void)
{
printf("IamstudyingprogrammingwithC.");
}
编译结果
运行结果
3.分析
与预期结果相同
实验2
1.实验目的与要求
(1)进一步熟悉c语言程序设计环境。
(2)明确c语言程序的结构。
2.程序检测与调试
程序一
错误程序:
main()
(
printf("Thisiscprogram.");
)
调试结果:
程序缺少“#include
改正后的程序:
#include
main()
{
printf("Thisiscprogram.\n");
}
程序二
错误程序:
#include
main()
{
a=3,b=5;
c=a*b;
printf("Theproductis:
",c)
}
调试结果:
“#include
改正后的程序:
#include
main()
{
inta,b,c;
a=3,b=5;
c=a*b;
printf("Theproductis:
%d\n",c);
}
3.实验总结
程序不能缺少“#include
“#include
实验3
1.实验目的与要求
(1)掌握变量名的构成规则
1>测试那些字符可以组成变量名。
2>测试那些单词可以用做变量名。
3>测试变量名的长度限制。
(2)赋值运算符的意义和正确用法
1>测试赋值运算符的意义。
2>测试那些运算符可以放在赋值号的左边。
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;
}
改正后的程序:
#include
intmain()
{
inta=3,b=5,c=7,x=1,y,z;
a=b=c;
y=x+2;
z=y+3;
printf("%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.
程序测试:
#include
intmain()
{
inta=5,b=7,c=100,d,e,f;
d=a/b*c;
e=a*c/b;
f=c/b*a;
printf("%d,%d,%d\n",d,e,f);
}
结果:
(3)分析下面程序
是比较x++与++x之间的区别。
例如:
#include
intmain()
{
inta=5,b=8;
printf("a++=%d\n",a++);
printf("a=%d\n",a);
printf("++b=%d\n",++b);
printf("b=%d\ny",b);
}
运行结果:
由上述程序可以看出,x++是先使用x在使x+1,而++x是先使x+1在使用x。
(4)分析下列表达式的值
测试程序:
#include
intmain()
{
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++;
printf("c=%,d=%d,e=%d,f=%d\n",c,d,e,f);
}
实验5
1.试验目的与要求
(1)深入了解c语言数据类型的意义。
(2)测试不同类型数值数据的存储空间大小、取值范围、有效数字位数和精度。
2.实验准备
(1)编写程序测试基本数据类型的取值范围
例如:
测试char类型的取值范围
#include
charmain()
{
charc0,c1,c2,c4,c5,c6;
c0=-129;
c1=-128;
c2=-127;
c4=128;
c5=127;
c6=126;
printf("%d,%d,%d,%d,%d,%d\n",c0,c1,c2,c4,c5,c6);
}
运行结果:
有结果可以看出,c0,c4的值发生改变,原因是超过其取值范围。
所以char类型的取值范围是【-128,127】。
(2)编写程序测试基本数据类型的有效数字长度和精度
例如,测试double类型的有效数字长度和精度
#include
charmain()
{
floatd1=0.123456789,d2=12345678901234567890.123456789;
printf("%lf\n%lf\n",d1,d2);
}
#include
charmain()
{
floatf1=2.1234567,f2=12345678901234567.123456789;
inti1,i2;
i1=f1;
i2=f2;
printf("%d\n%d\n",i1,i2);
}
运行结果:
有结果显示,只能精确的显示前七位。
(3)编写程序测试不同数据类型之间转换所出现的截取高位。
丢失精度和变得不可知等问题。
例如:
#include
charmain()
{
floatf1=2.1234567,f2=12345678901234567.123456789;
inti1,i2;
i1=f1;
i2=f2;
printf("%d\n%d\n",i1,i2);
}
#include
charmain()
{
charc1=35,c2='A',c3;
c3=c1+c2;
printf("%d\n%c\n",c3,c3);
}
运行结果:
(4)编写程序测试字符型数据的算术特征
例如:
#include
charmain()
{
charc1=35,c2='A',c3;
c3=c1+c2;
printf("%d\n%c\n",c3,c3);
}
运行结果:
实验6
1.实验目的与要求
(1)掌握printf()进行格式化输出的方法。
(2)掌握scanf()进行格式化输入的方法。
(3)掌握其他控制台输入、输出函数。
2.实验准备
(1)设计一个程序来测试printf()函数中数据参数被引用的顺序
例如:
#include
intmain()
{
inta=1;
printf("%d,%d,%d\n",++a,++a,++a);
}
运行结果:
有结果看出,参数被引用的顺序是由右及左。
(2)设计一个程序来测试printf()函数中格式符的意义
例如:
#include
intmain()
{
doubled=123456789.234567;
printf("%e\n",d);
}
运行结果:
%e的意义是数据按指数形式输出。
(3)设计一个程序来测试scanf()函数中格式符的意义
例如
#include
intmain()
{
doublex,y;
scanf("%f,%lf\n",&x,&y);
printf("%f,%lf\n",&x,&x);
printf("%f,%lf\n",&y,&y);
}
运行结果:
(4)设计一个程序来测试用scanf()输入含有字符型数据的多个选项时,数据之间的分隔问题。
例如;
#include
intmain()
{
charc1,c2,c3;
inta1,a2,a3;
scanf("%d%d%d",&a1,&a2,&a3);
printf("%d%d%d",a1,a2,a3);
scanf("%c%c%c",&c1,&c2,&c3);
printf("%c%c%c",c1,c2,c3);
scanf("%c%c%c",&c1,&c2,&c3);
printf("%c%c%c\n",c1,c2,c3);
}
运行结果;
实验7
1.实验目的与要求
(1)测试关系表达式和逻辑表达式的意义和取值。
(2)测试关系运算符和逻辑运算符的优先级和结合性。
(3)掌握逻辑运算的基本规律。
2.实验准备
(1)编写一个用于测试关系表达式意义和取值的程序。
举例:
#include
intmain()
{
inta=5,b=5,c=5;
printf("%d,%d,%d,%d\n",a==b,a==c,a!
=b,a!
=c);
printf("%d,%d,%d,%d,%d,%d\n",a>=b,a>=c,a<=b,a<=c,ab);
}
运行结果;
其中运行结果中的“1”和“0”分别表示程序中运算的正确与错误。
(2)阅读下面程序并分析其运行结果
将分析结果与上机结果进行比较
#include
intmain()
{
floatx;
scanf(“%1f”,&x);
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>=b&&a>=c,a<=b&&a<=c);
printf(“%d,%d,%d,%d”,!
(a==b),!
(a>=b),!
(a>=c),!
(a<=b));
预先写出程序运行结果,以便与上机结果进行比较。
分析结果:
0,1,0,11,1,1,0
运行结果:
(4)编写程序来测试下列逻辑表达式的值
预先写出程序的执行结果,以便与上级验证的结果进行比较。
(5)分析下面程序段的执行结果并验证自己所做推断的程序
inta=3,b=5,c=6;
printf("%d",a<5||(a==b&&b "))); printf("%d",a>5&&(a==b||b "))); 推断: 不会输出“OK! ” 输出: 10 运行结果: 实验8 1.实验目的与要求 (1)掌握分支程序的基本结构。 (2)掌握分支程序的测试与调试方法。 2.实验准备 (1)观察图3.1所示分支算法。 图见书 要求: 编写一个C语言程序,要求使用上述分支结构,并使其能接受由键盘输入的a,b,x。 编写程序如下: #include main() { inta,b,x; scanf("%d,%d,%d",&a,&b,&x); if(a>1&&b==0) x=x*a; if(a==2||x>1) x=x+2; printf("%d,%d,%d",a,b,x); } 运行结果: 能够达到要求! (2)语句覆盖测试 设计一组a,b,x,是程序中的所有语句都能至少执行一遍,目的是测试这些语句能否正确执行。 要求这组数据量最少。 编写程序如下: #include main() { inta,b,x; scanf("%d,%d,%d",&a,&b,&x); a=a+1; b=a+b; x=a*b; printf("%d,%d,%d",a,b,x); } 运行结果: 每个语句都能够正常运行! (3)分支覆盖测试 设计一组a,b,x,使程序中的每个分支都能至少执行一遍,目的是测试这些分支能否正确执行。 要求这组数据量最少。 编写程序如下: 、 #include main() { inta,b,x; scanf("%d,%d,%d",&a,&b,&x); if(a>1&&b==0) x=x*a; if(a==2||x>1) x=x+2; printf("%d,%d,%d",a,b,x); } 运行结果: 每个分支能够正确执行! (4)条件覆盖测试 设计一组a,b,x,使程序中的每个条件都能至少执行一遍,目的是测试这些条件能否正确执行。 要求这组数据量最少。 编写程序如下: #include main() { inta,b,x; scanf("%d,%d,%d",&a,&b,&x); if(a>1&&b==0) x=x*a; if(a==2||x>1) x=x+2; printf("%d,%d,%d",a,b,x); } 运行结果: 每个条件都正确执行了! (5)修改上面的程序以使操作者知道这些语句、分支或条件已被执行 提示: 在恰当的位置插入输出语句。 修改程序如下: #include main() { inta,b,x; scanf("%d,%d,%d",&a,&b,&x); if(a>1&&b==0) x=x*a; printf("%d\n",x); if(a==2||x>1) x=x+2; printf("%d\n",x); printf("%d,%d,%d",a,b,x); } 运行结果: 由运行结果知这些语句、分支或条件已被执行! (5)进一步的测试问题 从键盘输入三个数,用以代表3条线段的长度。 先编写一个程序,判断由着3条线段所组成的三角形的类型——不等边三角形、等腰三角形、等边三角形、直角三角形或不能构成三角形。 画出这个问题的流程图,设计程序,并未该程序分别设计语句覆盖、分支覆盖、条件覆盖的测试用例。 为检测测试用例的好坏,可人为的设置一些错误。 编写程序如下: #include main() { inta,b,c,max,m,x,y,z; scanf("%d,%d,%d",&a,&b,&c); max=b; if(a>=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! =0)&&(c! =0)) { if((x==(c^2))||(y==(b^2))||(z==(a^2))) printf("此三角形为直角三角形! "); if(a==b==c) printf("此三角形为等边三角形! "); if(a! =b&&a! =c&&b! =c) printf("此三角形为不等边三角形! "); if(((a==b)&&(a! =c))||((a==c)&&(a! =b))||((b==c)&&(b! =a))) printf("此三角形等腰三角形"); } elseprintf("不能构成三角形! "); } 运行结果: 实验9 1..实验目的与要求 (1)掌握在设计条件性循环结构时,如何正确的设定循环条件以及如何控制循环次数。 (2)了解条件型循环结构的基本测试方法。 2.实验准备 (1)阅读下面程序,画出流程图或N-S图,分析程序功能。 #include intmain(void) { doublee=1.0,x=1.0,y,detax; inti=1; printf("\npleaseenteraerror: "); scanf("%1f",&detax); y=1/x; while(y>=detax) { x=x*i; y=1/x; e=e+y; ++i; } printf("%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)为了获取程序循环次数,应该在程序中增加怎样一条语句? 改进后程序: #include intmain(void) { doublee=1.0,x=1.0,y,detax; inti=1,n=0; printf("\npleaseenteraerror: "); scanf("%1f",&detax); y=1/x; while(y>=detax) { x=x*i; y=1/x; e=e+y; ++i; n++; } printf("%12.101f,%d",e,n); } 3.实验内容与步骤 (2)试将while的控制表达式y>=detax,分别替换成一下语句。 A,y>detax时程序仍然正确。 但是循环区间变为0<=detax<1。 为了不会进入死循环,修改程序如下: #include intmain(void) { doublee=1.0,x=1.0,y,detax; inti=1,; printf("\npleaseenteraerror: "); scanf("%1f",&detax); y=1/x; if(0<=detax<1) { while(y>detax) { x=x*i; y=1/x; e=e+y; ++i; } } printf("%12.101f,%d",e); } B,y=detax时程序让然正确。 但是程序只有在当detax=1时才会循环,当detax为其他值是将直接跳出循环。 为了不会进入死循环,修改程序如下: #include intmain(void) { doublee=1.0,x=1.0,y,detax; inti=1,; printf("\npleaseenteraerror: "); scanf("%1f",&detax); y=1/x; if(detax=1.0) { while(y=detax) { x=x*i; y=1/x; e=e+y; ++i; } } printf("%12.101f,%d",e); } C,y<=detax时程序仍然正确。 但是当detax<1时将直接跳出循环,当detax>=1将进入死循环。 为了不会进入死循环,修改程序如下: #include intmain(void) { doublee=1.0,x=1.0,y,detax; inti=1,; printf("\npleaseenteraerror: "); scanf("%1f",&detax); y=1/x; if(detax<1) { while(y<=detax) { x=x*i; y=1/x; e=e+y; ++i; } } printf("%12.101f,%d",e); } D,y 但是当detax=<1时将直接跳出循环,当detax>1将进入死循环。 为了不会进入死循环,修改程序如下: #include intmain(void) { doublee=1.0,x=1.0,y,detax; inti=1,; printf("\nplea
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 程序 实验 报告 谭浩强