《C程序设计第三版》实验指导.docx
- 文档编号:27841012
- 上传时间:2023-07-05
- 格式:DOCX
- 页数:23
- 大小:21.86KB
《C程序设计第三版》实验指导.docx
《《C程序设计第三版》实验指导.docx》由会员分享,可在线阅读,更多相关《《C程序设计第三版》实验指导.docx(23页珍藏版)》请在冰豆网上搜索。
《C程序设计第三版》实验指导
重庆文理学院C程序设计
实验指导
实验一C程序的运行环境和运行C程序的方法
一、实验目的
1、了解在所用计算机上如何编辑、编译、连接和运行一个C程序的方法。
2、通过运行简单的C程序,初步了解C源程序的特点。
二、实验内容
1、调用VisualC++6.0或TurboC编辑程序,输入例题1.1——例题1.3,并编辑、编译、连接和运行。
2、输入习题1.5,并编辑、编译、连接和运行。
3、求两个整数a=5,b=-8的差,结果存放在变量c中,输出格式c=-3。
4、掌握在VisualC++6.0或TurboC2.0环境下调试运行C程序的方法
5、打开VC++后,输入以下内容:
main()
{printf(“Thisisacprogram.\n”);
}
main()
{
inta,b,sum;
a=123;b=456;
sum=a+b;
printf(“sumis%d\n”,sum);
}
运行它,查看结果?
结论:
每次只能有一个包含main()的程序,运行完一个程序后,应该重新建立源程序文件。
三、实验要求
1、习题1.5和求两个整数的差,要先编好书面程序。
2、写出实验报告。
其中,习题1.5和求两个整数的差要写出程序清单。
并要求写成完成实验时遇到的问题及其调试的过程。
四、实验时间
2学时
实验二数据类型、运算符和表达式
(2)
一、实验目的
1、掌握C语言数据类型,熟悉如何定义一个整型、字符型、实型变量,以及对它们赋值的方法。
了解以上类型数据输出时所用的格式转换符。
2、学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(--)运算符的使用。
3、进一步熟悉C程序的编辑、编译、连接和运行的过程。
二、实验内容
1、输入并运行第三章例题3.2
2、输入并运行第三章例题3.3,了解如果数据超出了变量的范围,将溢出。
3、输入并运行第三章例题3.4,了解如果数据超出了变量的范围,将产生舍入误差。
4、输入并运行第三章例题3.6
(1)、在例题3.6程序的后面加一个语句:
printf(“%d,%d\n”,c1,c2);观察用十进制整数形式输出字符c1,c2的结果。
(2)、再将程序中c1,c2由字符型charc1,c2;改为整型:
intc1,c2;运行程序,观察程序运行后的结果,掌握字符型数据和整型数据的通用性。
5、输入并运行第三章例题3.7
(1)、将c1=’a’;
c2=’b’;
改为:
c1=a;
c2=b;
运行程序,并观察出错情况(a,b是字符数据,不能直接赋给变量)。
(2)、将c1=’a’;
c2=’b’;
改为:
c1=”a”;
c2=”b”;
运行程序,并观察出错情况(不能把字符串直接赋给变量,因为C语言没有字符串变量)。
6、输入并运行下面程序:
(1)
main()
{
inti,j;
i=3;
printf(“%d\n”,i++);
}
(2)
main()
{
inti,j;
i=3;
printf(“%d\n”,++i);
}
(3)
main()
{
inti,j;
i=3;
printf(“%d\n”,i++);
printf(“%d\n”,++i);
}
总结++和--运算的特点。
(4)
main()
{inti,j;
i=3;
j=(i++)+(i++)+(i++);
printf(“j=%d\n”,j);
}
(5)
main()
{inti;
;i=3;
printf(“%d,%d\n”,i,i++);
}
总结:
函数参数的求值顺序是“自右至左”的。
(6)
main()
{inta=12;
printf(“%d\n”,a+=a-=a*a);
}
掌握赋值表达式的求值方法。
7、输入并运行下面程序:
main()
{inta,b;
unsignedc,d;
longe,f;
a=100;
b=-100;
c=50000;
f=32767;
c=a;
d=b;
printf(“%d,%d\n”,a,b);
printf(“%u,%u\n”,a,b);
printf(“%u,%u\n”,c,d);
c=a=e;
d=b=f;
printf(“%d,%d\n”,a,b);
printf(“%u,%u\n”,c,d);
}
对照程序和运行结果分析:
(1)将一个负数赋给一个无符号变量,会得到什么结果。
画出它们在内存中的表示形式。
(2)将一个大于32767的数赋给整型变量,会得到什么结果。
画出它们在内存中的表示形式。
(3)变化程序中各变量的值,运行程序,并分析其结果。
8、输入并运行习题3.10。
9、输入并运行习题3.12。
10、输入习题3.7的程序并运行。
三、实验要求
1、习题3.7要先编好书面程序。
5、写出实验报告。
其中习题3.7要写出程序清单。
四、实验时间
4学时
实验三最简单的C程序
一、实验目的
1、掌握C语言中使用最多的一种语句——赋值语句的使用方法。
2、掌握各种类型数据的输入、输出方法。
能正确使用各种格式转换符。
二、实验内容
1、掌握各种格式符的正确使用方法
(1)、输入程序
main()
{inta,b;
floatd,e;
charc1,c2;
doublef,g;
longm,n;
unsignnedintp,q;
a=61;b=62;
c1=’a’;c2=’b’;
d=3.56;e=-6.87;
f=3157.890121;g=0.123456789;
m=50000;n=-60000;
p=32768;q=40000;
printf(“a=%d,b=%d\nc1=%c,c2=%c\nd=%6.2f,e=%6.2f\n”,a,b,c1,c2,d,e);
printf(“f=%15.6f,g=%15.12f\nm=%ld,n=%ld\np=%u,q=%u\n”,f,g,m,n,p,);
}
运行此程序,并分析结果。
(2)、在此基础上,修改程序的8-13行:
a=61;b=62;
c1=a;c2=b;
f=3157.890121;g=0.123456789;
d=f;e=g;
p=a=m=50000;q=b=n=-60000;
运行程序,分析结果。
(3)、改用scanf函数输入数据,scanf函数如下:
scanf(“%d,%d,%c,%c,%f,%f,%lf,%lf,%ld,%ld,%u,%u”,
&a,&b,&c1,&c2,&d,&e,&f,&g,&m,&n,&p,&q);
输入的数据如下:
61,62,3.56,-6.87,3157.890121,0.123456789,50000,-60000,37678,40000
分析运行结果。
(说明:
lf和ld格式符分别用于输入double型和long型数据)
(4)、在C的基础上,把printf语句改为:
printf(“a=%d,b=%d,c1=%c,c2=%c\nd=%15.6f,e=%15.12f\n”,a,b,c1,c2,d,e);
printf(“f%f,g=%f\nm=%d,n=%d\np=%d,q=%d\n”,f,g,m,n,p,q);
(5)、将p,q改用%o格式符输出
将scanf函数中的%lf和%ld改为%f和%d,运行程序并观察分析结果。
2、输入并运行习题4.8,4.9,4.10。
三、实验要求
1、习题4.8,4.9要先编好书面程序。
2、写出实验报告。
其中,4.8,4.9题要写出程序清单。
四、实验时间
2学时
实验四选择结构
一、实验目的
1、了解C语言表示逻辑量的方法。
2、学会正确使用逻辑运算符和逻辑表达式。
3、熟练掌握if语句和switch语句。
4、掌握一些简单的算法。
二、实验内容
1、输入并运行例题5.1,例题5.2,掌握简单排序的算法。
2、输入并运行例题5.3,习题5.5,掌握分段函数的计算方法。
3、输入并运行例题5.7,然后改用if语句和if-else语句处理。
4、输入并运行习题5.10(提示:
用距离公式)
实验要求
1、习题5.5和习题5.10写出书面程序。
2、写出实验报告,习题5.5和习题5.10写出程序清单。
四、实验时间
2学时
实验五循环结构
一、实验目的
1、熟练掌握while、do-while和for循环语句的用法。
2、掌握利用循环实现的一些基本算法(如,累加、累乘,递推,迭代等)。
二、实验内容
1、输入并运行例题6.2,例题6.3,例题6.6~例题6.10。
2、输入并运行习题6.1~习题6.10,习题6.11。
三、实验要求
1、习题要写好书面程序。
2、写出实验报告,习题6.1,习题6.2,习题6.10写出程序清单。
四、实验时间
4学时
实验六数组
一、实验目的
1、掌握一维数组和二维数组及字符数组的定义、赋值和输入输出的方法。
2、掌握与数组有关的算法。
如,求最大数、最小数,排序,用筛法求素数
3、掌握与字符数组有关的函数
二、实验内容
1、输入并运行例题7.4,例题7.5,例题7.8,例题7.9。
2、输入并运行习题7.1,7.3,7.5,7.6,
3、编一程序,求任意10个数中的最小数及其序号。
三、实验要求
1、习题要写好书面程序。
2、写出实验报告,习题7.3,7.5要写出程序清单。
四、实验时间
2学时
实验七函数
一、实验目的
1、掌握函数定义的方法。
2、掌握值传递和地址传递的方式。
3、掌握函数嵌套调用和递归调用的方法。
4、掌握全局变量和局部变量,动态变量和静态变量的概念和使用方法。
5、掌握运行多文件的方法。
二、实验内容
1、输入并运行例题8.2,掌握函数调用时的数据传递。
2、输入并运行例题8.3,了解函数值类型与函数类型不同时的返回值。
3、输入并运行例题8.4,了解函数调用时实参的求值顺序。
4、输入并运行例题8.6,了解函数的嵌套调用。
5、输入并运行例题8.7,掌握函数的递归调用。
6、输入并运行例题8.12,掌握一维数组名作实参时的“传址”调用。
7、输入并运行例题8.14,掌握二维数组名作实参时的“传址”调用。
8、输入并运行例题8.13,掌握“选择法”排序的方法。
9、输入并运行例题8.15,了解全局变量的使用方法。
10、输入并运行例题8.17,8.18了解静态局部变量的作用。
11、输入并运行例题8.22,掌握多文件的运行方法。
12、输入并运行习题8.1,8.3,8.10,8.17,8.18
三、实验要求
1、习题要写好书面程序
2、写出实验报告,习题8.1,8.17写出程序清单。
四、实验时间
4学时
实验八指针
一、实验目的
1、掌握指针的概念。
2、能正确定义和使用指针变量。
3、能正确定义和使用数组的指针和指向数组的指针变量。
4、能正确定义和使用字符串的指针和指向字符串的指针变量。
5、能正确定义和使用函数的指针和指向函数的指针变量。
6、了解指向指针的指针的概念及其使用方法。
二、实验内容
1、输入并运行例题10.1,掌握怎么给指针变量赋值,理解“*”运算符的作用。
在例题10.1程序后面增加语句:
①printf(“%x,%x\n”,&a,&b);
②printf(“%x,%x\n”,pointer_1,pointer_2);
其中,语句①输出变量a,b的地址,
语句②输出指针变量pointer_1,pointer_2的值。
观察:
指针变量pointer_1,pointer_2中存放的是不是变量a,b的地址?
结论:
指针变量的值,就是它所指向的变量的地址。
2、输入并运行例题10.2,掌握:
怎么交换两个指针变量的指向。
注意:
程序运行后,*p1,*p2的值是9,5,说明p1已经指向原来的b,p2指向原来的a。
可以增加两个输出语句:
printf(“&a=%x,&b=%x\n”,&a,&b);
printf(“p1=%x,p2=%x\n”,p1,p2);
前一个语句输出变量a和b存放的地址。
后一个语句输出指针变量p1,p2的值。
观察一下p1中存放的是不是变量b的地址,p2中存放的是不是变量a的地址,可以看出p1已经指向原来的b,p2指向原来的a。
3、输入并运行例题10.3。
思考:
在被调用函数swap(int*p1,int*p2)中指针变量p1和p2接收到的是不是变量a和b的地址?
在主函数main中加一个语句:
printf(“&a=%x,&b=%x\n”,&a,&b);(输出变量a和b的地址)
在swap函数中加一个语句:
printf(“p1=%p2=x,%x\n”,p1,p2);(输出p1和p2的值)
比较两个输出结果,得出结论。
掌握:
怎么直接交换两个指针变量所指向的两个变量的值。
4、输入并运行例题10.6。
#include"stdio.h"
voidmain()
{
int*p,i,a[10];
printf("enterarray[10]:
");
p=a;
for(i=0;i<10;i++)
scanf("%d",p++);
printf("\n");
for(i=0;i<10;i++,p++)
printf("%d",*p);
}
在p=a;下面加一个语句:
printf(“p=%x\n”,p);(打印p的值,即数组a的起始地址)
再在for(i=0;i<10;i++)
scanf("%d",p++);
printf("\n");
下面加一个语句:
printf(“p=%x\n”,p);(打印输入完数组元素后,p的值)
思考:
p现在是不是还指向数组起始地址?
能不能马上就用语句:
for(i=0;i<10;i++,p++)
printf("%d",*p);
输出原来数组a的各个元素?
该怎么修改原来的程序?
请修改(提示:
要输出数组的各个元素,必须让指针指向数组的起始地址)。
5、输入并运行例题10.10,掌握用指针处理选择法排序的方法。
思考:
为什么程序中要用3个p=a;
6、输入并运行例题10.13,掌握指向多维数的指针变量处理多维数组的方法。
7、输入并运行例题10.14。
思考:
score和*score代表什么地址,它们的增量是在哪个方向的?
结论:
score和*score都代表数组的起始地址,但是score是在行方向上增量,而*score是在列方向上增量。
8、输入并运行例题10.16和例题10.17,掌握用字符数组存放字符串和用字符指针指向字符串的区别。
思考:
能不能修改程序为:
main()
{icharstring[14];
string=”IloveChina!
”;
printf(“%s\n”,string);
}
能不能修改程序为:
main()
{ichar*sring;
string=”IloveChina!
”;
printf(“%s\n”,string);
}
结论:
9、输入并运行例题10.18及将字符串a复制为字符串b的其它几个程序。
掌握字符串复制的方法。
10、在上例的基础上,编制程序把字符串b连接到字符串a的后面。
11、输入并运行例题10.24,掌握利用函数指针调用函数方法。
12、编写一个用矩形法求定积分的通用函数,分别求几个定积分。
13、输入并运行例题10.26,进一步掌握指向多维数组的指针。
14、输入并运行例题10.27,掌握指针数组处理一批长度不同的数据——整数、实数或字符串的作用。
三、实验要求
1、习题要写好书面程序
2、写出实验报告。
四、实验时间
6学时
实验九结构体、共用体
一、实验目的
1、掌握结构体类型变量的概念、定义和使用方法。
2、掌握结构体类型数组的概念、定义和使用方法。
3、掌握共用体类型变量的概念、定义和使用方法。
掌握结构体类型变量和共用体类型变量的区别以及它们的混合使用。
实验内容
1、输入并运行例题11.1。
2、对例题11.1用另外两种方法定义结构体,然后再运行程序,掌握定义结构体变量的三种方法。
3、把例题11.1最后一行改为:
printf(“NO.%ld%nname:
%s\nsex:
%c\naddress:
%s\n”,a);
看看:
(1)能不能编译,为什么?
(2)能不能正常运行,为什么?
4、输入并运行例题11.3,掌握引用成员的两种方法
5、输入并运行例题11.4,掌握引用成员的第三种方法
6、输入并运行例题11.5,掌握用结构体变量作实参的方法。
7、把例题11.5中main函数中对各结构体成员的赋值改为用下面语句输入:
scanf(“%d%s%f%f%f”,&stu.num,stu.name,&stu.score[0],&stu.score[2],&stu.score[2]);
同时分析:
为什么stu.name前面不加运算符“&“?
输入并运行例题11.6,掌握用结构体变量的指针作实参的方法。
8、比较例题11.5中调用print函数的语句:
print(stu);
和例题11.6中调用print函数的语句:
printf(&stu);
为什么后面这个语句要加运算符“&”?
9、输入并运行例题11.12,掌握共用体变量的使用方法。
10、输入并运行例题11.13,理解枚举类型变量的成员的值是不是就是列出的成员字符串。
11、输入并运行以下程序:
#include
unionun
{inti;
charc[2];
}w;
main(void)
{
printf("%x,%x,%x\n",&w.i,&w.c[0],&w.c[1]);
w.c[0]='A';
w.c[1]='a';
printf("%o\n",w.i);
}
结果是多少?
注意:
共用体中,每一时刻只有一个成员起作用,为什么w.i还有值,这个值是怎么得到的?
12、输入并运行以下程序:
#include
main()
{structexample
{union
{intx;
inty;
}in;
inta;
intb;
}e;
e.a=1;
e.b=2;
e.in.x=e.a*e.b;
e.in.y=e.a+e.b;
printf("%d,%d\n",e.in.x,e.in.y);
printf("%d,%d\n",e.a,e.b);
}
分析为什么结果是:
3,3
1,2
三、实验要求
1、习题要写好书面程序
2、写出实验报告。
四、实验时间
2学时
实验十编译预处理
一、实验目的
掌握宏定义、文件包含和条件编译的方法
二、实验内容
1、输入并运算例题9.1,掌握不带参数的定义方法。
2、输入并运算例题9.2,掌握参数为变量的宏定义方法
3、修改例题9.2:
若area=S(3+a);,请重新定义S(r);通过上机运行掌握参数为表达式时的宏定义方法。
4、输入并运行例题9.4,掌握宏定义返回几个值的方法,并对比宏与函数差别。
5、输入并运行例题9.6,掌握文件包含的概念和方法。
6、输入并运行例题9.7,了解条件编译的作用,掌握条件编译的方法。
7、输入并运行习题9.1,9.8。
三、实验要求
1、习题要写好书面程序
2、写出实验报告,习题9.8写出程序清单。
四、实验时间
2学时
掌握:
调用各函数,进行综合操作的方法。
分析:
为什么只能删除一个节点,为什么只能插入一个节点?
4、把建立、输出、删除和插入链表的函数插入到对链表的综合操作一节第二个主函数main前面,并编译、运行程序。
掌握:
调用各函数,进行综合操作的方法。
分析:
为什么可以删除多个节点,为什么可以插入多个节点?
三、实验要求
1、习题要写好书面程序
2、写出实验报告。
四、实验时间
2学时
位运算、文件
一、实验目的
1、掌握位运算的概念
2、掌握位运算符的运算规则,各种位运算符的应用。
3、理解位段的概念。
二、实验内容
1、输入并运行例题12.1,在TC2.0和VC++6.0中分别运行。
掌握:
怎么构造一个某些位为1,其余位为0的数。
掌握:
按位“与”的作用——与0相与,得0,与1相与,保留原值。
分析:
为什么在TC2.0和VC++6.0中的结果不同?
2、输入并运行例题12.2,在TC2.0和VC++6.0中分别运行。
掌握:
按位“或”的作用——与0相或,保留原值。
分析:
(1)为了保留原值,例题12.1用按位与,而例题12.2用按位或,这是为什么?
(2)为什么在TC2.0和VC++6.0中的结果不同?
3、输入并运行下面程序。
掌握:
按位“或”的作用——与0相或,保留原值。
分析:
为了保留原值,例题12.1用按位与,而例题12.2用按位或,这是为什么?
4、编制程序求解习题12.5,求一个数的补码。
三、实验要求
1、习题要写好书面程序
2、写出实验报告。
四、实验时间
2学时
文件
一、实验目的
1、掌握C文件、缓冲文件系统和文件指针的概念。
2、掌握文本文件和二进制文件的打开、关闭以及读写方法——读写一个字符,读写一个记录。
3、掌握文件定位的方法。
二、实验内容
1、输入并运行例题13.1——输入一些字符,把它保存到磁盘上。
掌握:
建立磁盘文件的方法。
2、编程序,把上述例题13.1存储在磁盘上的文本文件的内容,显示到屏幕上。
掌握:
读出文件的方法。
3、输入并运行例题13.2。
掌握:
复制文件的方法。
4、输入并运行例题13.3。
掌握:
建立和输出记录数据文件的方法。
5、输入并运行例题13.5。
掌握:
fseek文件定位函数的使用方法。
修改例题13.5程序如下:
#include"stdio.h"
structstudent_type
{
charname[10];
intnum;
intage;
charaddr[15];
}stud[4];
voidmain()
{
inti;
FILE*fp;
if((fp=fopen("stu_list","rb"))==NULL)
{
printf("cannotopenfile\n");
exit(0);
}
/*下面输出结构体变量所占字节数——即一个记录的长度*/
/*在TC2.0中,结构体所占字节数为:
29*/
/*在VC6.0中,结构体所占字节数为:
36*/
printf("一个记录的字节数:
%d\n",sizeof(stud[0]));/*增加的语句*/
for(i=0;i<4;i+=2)
{
fseek(fp,i*sizeof(structstudent_type),0);
printf("第%d次定位后,移动的字节数:
%d\n",i/2,ftell(fp));/*增加的语句
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C程序设计第三版 程序设计 第三 实验 指导