C语言程序设计实验指导书

上传人:tia****g98 文档编号:128995434 上传时间:2022-08-02 格式:DOC 页数:42 大小:98.01KB
收藏 版权申诉 举报 下载
C语言程序设计实验指导书_第1页
第1页 / 共42页
C语言程序设计实验指导书_第2页
第2页 / 共42页
C语言程序设计实验指导书_第3页
第3页 / 共42页
资源描述:

《C语言程序设计实验指导书》由会员分享,可在线阅读,更多相关《C语言程序设计实验指导书(42页珍藏版)》请在装配图网上搜索。

1、C语言程序设计实验指导书安徽师范大学物理与电子信息学院2008年2月前 言 七十年代初,贝尔实验室的Dennis Ritchie等人在B语言的基础上设计出C语言。由于C 语言既具有高级语言的强有力的表达能力,又不失低级语言直接访问内存地址及对硬件进行操作的特性, 从而使它成为近十多年来在计算机应用领域做出巨大贡献的一种语言,并成功地应用于数值计算、文字处理、 数据库和办公自动化等诸多方面。 为了配合课堂教学,我们根据大纲的要求,并结合所用教材,编写了本实验指导书,供学生上机操作使用。指导书包括六个实验,每个实验均由实验目的、基本概念和实验内容三个部分构成。其中实验内容包括“验证性内容”和“设计

2、性内容”两部分。“验证性内容”提供了参考程序,主要是加深对基本概念的理解、增加感性认识;“设计性内容”则是考察对所学知识灵活运用的能力。 上机操作是学好程序设计语言的一个极为重要的环节, 因此要求在每次上机操作之前,仔细阅读实验指导书和教材中的相关内容,弄清基本概念,做好必要的准备(包括“设计性内容”中程序的编制)。上机操作时认真调试程序,细心观察各种现象和结果,从而获得事半功倍的效果,巩固所学的知识。目 录实验一 简单程序设计 1实验二 选择型与循环型程序设计 7实验三 函数、数组与字符串 14实验四 C语言的指针及其应用 21实验五 结构体、共用体、枚举、位运算 26实验六 文件操作 33

3、实验一 简单程序设计一、实验目的1. 学会在Turbo C集成环境下编辑和运行C程序2. 熟悉C语言中的各种表达式和运算符3. 初步掌握C语言输入输出函数的使用二、基本概念1. Turbo C集成环境Turbo C是Borland公司开发的 C语言集成环境系统,该系统集C语言的编辑、编译、连接和执行于一体,在实际中得到广泛应用。在DOS状态下键入TC即可启动Turbo C进入集成环境, 这时出现初始屏幕File Edit Run Compile Project Options Debug Break/watchLine 1 Col 1 Insert Indent Tab Fill Uninde

4、nt C: NONAME.C MessageF1-Help F5-Zoom F6-Switch F7-Trace F8-Step F9-Make F10-Menu其中第一行为若干主菜单项,每项主菜单均可下拉出若干子菜单项。按F10键可激活主菜单,利用光标键和可选择某主菜单项,然后利用光标键和可选择具体的子菜单项, 按回车则执行选定的菜单功能。例如,按F10键激活主菜单,利用光标键和选择File菜单项,表示Load F3Pick Alt-F3New Save F2Write toDirectory Change dirOS shell Quit Alt-x进行文件操作,用键拉出子菜单如下选择其中

5、的New则表示清除当前编辑画面中的程序,为输入新程序做好准备;若选择OS shell则表示不退出Turbo C环境而进入DOS状态,这样可以执行DOS命令,命令执行后键入EXIT则回到Turbo C环境。RunCtrl-F9Program resetCtrl-F2Go to cursorF4Trace into F7Step overF8User screen Alt-F5又例如,按F10键激活主菜单,选择Run菜单项, 拉出其子菜单如下:若选择其中的Run则表示执行用户程序(自动进行编译、连接);若选择User screen则表示进入用户屏幕,观察程序运行结果,因为程序运行结果通常被Turb

6、o C屏敝,进入用户屏幕方能看到。初始屏幕的第二行为状态行, 从中可以了解当前的光标位置、编辑状态和正在编辑的程序文件名。屏幕底部为提示行,显示一些常用功能键的作用。例如, F6-Switch是指F6代表切换,程序编译或连接时若出现错误,出错信息显示在Message栏中,按F6可切换到编辑状态对源程序进行修改。Ctrl-Y 删除光标所在的一行Ctrl-F9 运行程序(包括编译、连接)Alt-F5 进入用户屏幕查看运行结果Alt-X 退出Turbo C集成环境,回到DOS状态记住几个频繁使用的组合键可以大大提高操作效率:2. 运算符与表达式C语言提供了大量的运算符和表达式,为程序的编写提供了很大

7、的方便。它们是:赋值运算符和赋值表达式、算术运算符和算术表达式、关系运算符和关系表达式、逻辑运算符和逻辑表达式、条件运算符和条件表达式等等,应注意这些运算符的优先级和求值顺序。3. 数据的输入和输出scanf(格式字符串,输入表)printf(格式字符串,输出表)C语言中没有专门的输入输出语句,数据的输入输出是通过调用函数实现的。输入数据时常使用 scanf 函数,输出数据时常使用printf函数,这两个函数的调用形式为:在输入输出时,应掌握常用格式字符的用法。三、实验内容(一)分析以下各程序的原理并上机验证首先进入Turbo C集成环境,若当前屏幕含有程序则清除之(调File主菜单中的New

8、项)。1. 编写一个C程序,在屏幕上显示信息Programming is fun.参考程序main()printf(Programming is fun.n);先将程序输入计算机,然后可编译、连接、运行(按F9),并进入用户屏幕观察结果是否正确(按Alt-F5)。注意: 每输入一个新的程序之前,应先将原有程序从编辑屏幕中清除。2. 编程计算35的正弦值。参考程序main()float x,y;x=35*3.14159/180.0;y=sin(x);printf(%fn,y);请分析运行结果是否可靠?在主函数前插入一行#include math.h再看运行结果有何变化?由此体会“头文件”的重要性

9、。3. 输入以下程序,分析格式字符串与输出的关系。参考程序main()int a=3,b=4;printf(The sum of %d and %d is %dn,a,b,a+b);printf(%d+%d=%dn,a,b,a+b);printf(%d,%d,%dn,a,b,a+b);4. 输入圆的半径, 求其周长和面积。参考程序#define PI 3.14159main()float r,c,a;printf(Please input radius here );scanf(%f,&r);c=2*PI*r;a=PI*r*r;printf(The circumference is %f, t

10、he area is %fn,c,a);运行时输入半径5.5,记录运行结果。5. 输入以下程序,仔细分析其运行结果。参考程序main()char ch=A;int n=97;int i,j;printf(ch=%c,ch=%dn,ch,ch);printf(n=%d,n=%cn,n,n);printf(%c,%d,%c,%dn,ch+1,ch+1,n+1,n+1);i=-5-3;j=53;printf(1ti=%d,j=%dn,i,j);i=(-5-3-1);j=(2=24);printf(2ti=%d,j=%dn,i,j);i=(14&74);j=(43|2n1) max=n2;if(n3m

11、ax) max=n3;printf(Max is %5dn,max);2. 编写程序计算函数y的值,已知函数y与自变量x的关系为:2x (x 0)y=x3 (x0)参考程序main()float x,y;printf(Input the value of x:n);scanf(%f,&x);if(x0)y=2*x;elsey=x*x*x;printf(x=%7.2f,y=%7.2fn,x,y);printf(x=%e,y=%en,x,y);printf(x=%g,y=%gn,x,y);运行时x分别输入2.52, -3.7, 1234.5, 记录并分析运行结果。3. 计算级数和 1+2+3+10

12、0。参考程序main()int i,sum=0;i=1;loop: if(i=100)sum+=i;i+;goto loop;printf(sum is %dn,sum);4. 一个简易的菜单程序。参考程序main()int n;again:printf(nttt1-sort);printf(nttt2-search);printf(nttt3-list);printf(nttt0-exit);printf(nntttplease select(0-3);scanf(%d,&n);switch(n)case 1:printf(nYou are sorting);break;case 2:pri

13、ntf(nYou are searching);break;case 3:printf(nYou are listing);break;case 0:exit(0);default:printf(nwrong selection! select again!n);goto again;5. 用while结构计算级数和 1+2+3+100。参考程序main()int sum=0,i=1;while(i=100)sum=sum+i;i=i+1;printf(The sum is %dn,sum);程序的循环体可以改为sum+=i;i+;或简化为sum+=i+;6. 用do while结构重新计算上

14、述级数和。参考程序main()int sum=0,i=1;dosum+=i;i+; while(i=100);printf(The sum is %dn,sum);7. 打印Fibonacci数列的前20项。参考程序#include stdio.hmain()int n;long fib,fib1=1,fib2=1;printf(%ld %ld ,fib1,fib2);for(n=3;n=0)for(x=a;fabs(x*x-a)ERROR;)x=(x+a/x)/2.0;printf(The square root of %f is %fn,a,x);elseprintf(Negative c

15、ant be square rooted!an);运行时分别输入9, 10, -3,记录运行结果。(二)按要求进行程序设计并调试运行1. 从键盘输入任意一个字符,若为小写字母则自动转换为大写输出,其余字符原样输出。(提示:用getchar函数)2. 利用if else if结构判断输入的字符是大写字母、小写字母、数字字符或是其它字符,分别显示相应的提示信息。3. 利用实验题3的方法计算级数1+3+5+99的和。4. 用for结构计算级数和1+2+3+100。5. 验证勒让德计算素数的通项公式an=n2+n+41 (n=0,1,2,)当n为多少时公式失效。实验三 函数、数组与字符串一、实验目的1

16、. 掌握函数的定义与声明2. 掌握函数的常规调用、嵌套调用和递归调用3. 初步掌握变量的存储属性及其使用4. 初步掌握编译预处理中宏定义和文件包含的用法5. 掌握一维数组和二维数组的定义和使用6. 掌握用字符数组处理字符串的方法二、基本概念(一)函数模块化是结构化程序设计的基础,C语言程序是由一个个函数模块组成的,符合这种结构化的要求,因此希望通过本实验, 初步掌握结构化程序设计的方法。1. 函数的定义、声明和调用函数类型函数名(形参及其类型)函数体C语言程序是由一系列函数组成的,每一个函数构成一个模块,这些函数可以是标准库函数,也可以是用户自己定义的函数。函数的定义方法如下:函数定义后便可使

17、用,但为了正确地调用它, 必须作出恰当的声明,函数类型函数名(形参及其类型)以便向编译系统提供必要的信息。函数声明方法如下:C语言中的函数通常是以传值方式调用的,调用可以形成嵌套,即一个函数调用另一个函数。此外,C语言允许函数递归调用,即函数直接或间接地调用自己。但不论何种调用,均必须注意形参和实参之间的对应关系。2. 变量的存储属性C语言中的变量,如按其存储介质,可分为内存变量和寄存器变量;如按其生存期,可分为动态变量和静态变量;如按其作用域,可分为全局变量和局部变量。要掌握变量的这些分类方法,能够在程序中灵活运用不同的变量。3. 编译预处理宏定义和文件包含是C语言中最常见的预处理操作。#d

18、efine 宏名宏体#define 宏名(参数表) 宏体宏定义分为无参数和有参数两种,它们的形式分别为利用宏定义可以有效地增加程序的灵活性, 但在使用时应注意带参宏定义与函数之间的区别。#include “文件名” 或 #include 文件包含的形式为它常用于包含头文件,因为C语言中大量的库函数一般要使用一些公共的定义和说明信息,这些信息均保存于“头文件”中。 应注意不同类的库函数对应的是不同的头文件,包含时不可弄错。(二)数组数组是一种构造类型的数据,即类型相同的一组数据的有序集合,它们具有相同的名字和不同的序号,这个相同的名字就是数组名,不同的序号就是下标。数组类型 数组名元素个数数组类

19、型 数组名行数列数数组可分为一维数组、二维数组和多维数组。在实际使用中,以一维数组和二维数组较常见。数组的定义形式为:前者定义一维数组,后者定义二维数组。数组经过定义,便可用来存放数据。数组的引用可以通过带下标的数组元素来进行,也可将数组名作为函数的参数进行传递。(三)字符数组和字符串如果数组中存放的是字符数据,则称为字符数组,字符数组常用来存放字符串,应记住字符串是以0作为结束字符的。利用字符数组,再结合字符串运算函数,如字符串拷贝strcpy、字符串连接strcat、字符串比较strcmp、测字符串长度strlen等, 便可实现字符及字符串的各种处理操作。三、实验内容(一)分析以下各程序的

20、原理并上机验证1. 将计算xn编写为函数,然后在主函数中调用,并计算210和(-4)3。参考程序main()float power(float x,int n);float x,p;int n;printf(Input x and nn);scanf(%f,%d,&x,&n);p=power(x,n);printf(%f to the %dth power is %fn,x,n,p);float power(float x,int n)int i;float p=1;for(i=0;i=65&c=90?c+32:c)main()char c;scanf(%c,&c);printf(The or

21、iginal is %cn,c);printf(The new is %cn,LOWER(c);运行时分别输入字符B、Q、a、4、*,记录运行结果。3. 已知一组数据从小到大排列(设为1,3,5,7,9) 任意输入一个数,插入到该数列中,并保持原有顺序不变。参考程序main()int a6=1,3,5,7,9;int i,new,position;printf(Enter the new number to be inserted n);scanf(%d,&new);for(i=0;inew) break;position=i;for(i=5;iposition;i-)ai=ai-1;apos

22、ition=new;printf(The new array isn);for(i=0;i=5;i+)printf(%d ,ai);运行时分别输入6,12,-3,7,记录运行结果。4. 已知10名学生的成绩,求其平均成绩,试将数组名作为函数参数传递。参考程序main()float average(float array,int n);float score10=95,86.5,100,78,56,93.5,68,72,84,92;printf(The average score is %6.2fn,average(score,10);float average(float array,int

23、n)int i;float aver,sum=array0;for(i=1;in;i+)sum+=arrayi;aver=sum/n;return(aver);5. 在屏幕上显示sinx和 cos(2x+30)两条曲线,每隔10显示一个点。参考程序 将整个屏幕看作一个二维字符数组,分为24行 80列,则有以下程序#define PI 3.14159#include math.hmain()char graph2480;int i,j1,j2;float x,y1,y2;for(i=0;i24;i+)for(j1=0;j179;j1+)graphij1= ;graphi79=0;for(j1=0

24、;j179;j1+)graph12j1=-;for(x=0;x=2*PI;x+=PI/18)y1=sin(x);y2=0.5*cos(2*x+PI/6);i=10*x;j1=12-10*y1;j2=12-10*y2;graphj1i=*;graphj2i=o;for(i=0;i24;i+)puts(graphi);6. 输入一行文字,再输入一个字符,则能够从这行文字中将所有的该字符均删除,试写出相应的程序。参考程序main()char text80,del;int i=0;printf(Input the line of textn);gets(text);printf(What charac

25、ter to be deleted? );scanf(%c,&del);while(texti)if(texti=del) strcpy(&texti,&texti+1);elsei+;puts(text);运行时输入word process system及字符s,记录运行结果。(二)按要求进行程序设计并调试运行1. 写出计算级数和1+2+3+n的递归函数和相应的主调用函数,并计算出1+2+3+100的和。2. 定义一个宏,交换两个参数的值,并上机调试运行。3. 有一个数组存放了10个整数,要求找出最小的数和它的下标,然后将它和数组的首元素交换。4. 写一个函数void strcopy(cha

26、r str1, char str2, int n),能将str2中前n个字符拷贝到str1中,并在其后加上0。(注意: 不允许用库函数strcpy)实验四 C语言的指针及其应用一、实验目的1. 掌握指针及指针变量、指针型函数、指针数组等概念2. 掌握指针在函数、数组和字符串中的应用3. 初步掌握带参主函数的设计二、基本概念1. 指针与指针变量数据类型 *变量名指针是C语言中一个非常重要的概念,也是C语言的主要特色。指针其实就是地址,指针变量就是存放地址的变量,尽管指针变量中存放的是地址,但必须知道该地址中的数据类型,即指针变量所指数据的类型。指针变量的定义形式为:2. 指针与函数指针可以作为函

27、数的参数来传递,从而实现不同函数间数据的双向通讯。数据类型 *函数名(形参)一个函数若返回的结果是一个地址,则该函数是指针型的函数。指针型函数的定义形式为:3. 指针与数组一个数组,若所有的元素存放的均为地址,则该数组是指针数组。指针数组的定义形式为:数据类型 *数组名元素个数指针在函数的设计、数组的表示、字符串处理中都有着广泛的应用。三、实验内容(一)分析一下各程序的原理并上机验证1. 从键盘输入任意三个数,要求设三个指针变量p1,p2,p3, 使p1指向三个数中最大者,p2指向次大者,p3指向最小者, 然后从大到小输出三个数。参考程序main()int i,j,k,*p1=&i,*p2=&

28、j,*p3=&k,*p;printf(Enter three numbers );scanf(%d,%d,%d,&i,&j,&k);if(*p1*p2)p=p1;p1=p2;p2=p;if(*p1*p3)p=p1;p1=p3;p3=p;if(*p2%d,p2-%d,p3-%dn,*p1,*p2,*p3);运行时分别输入3,7,5和6,-4,2,记录运行结果。2. 编写一个指针型函数,根据指定的数字,返回该数字对应的是星期几。例如数字3则返回Wednesday。参考程序main()char *weekname(int n);char *p;int num;scanf(%d,&num);p=wee

29、kname(num);printf(The day is %sn,p);char *weekname(int n)char *name=Illegal day,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday;return(n7 ? name0:namen);运行时分别输入3,7,9,记录运行结果。3. 输入并执行下列程序,记录运行结果,分析二维数组中行地址、列地址的变化情况和数组元素的各种表示方法。参考程序main()int a35=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15;printf(%x,%x

30、,%x,%x,%xn,a,a0,&a00,*a,&a0);printf(%x,%x,%x,%x,%xn,a+1,a0+1,&a00+1,*a+1,&a0+1);printf(%d,%d,%dn,a00,*a0,*a);printf(%d,%d,%dn,*(a2+3),*(*(a+2)+3),a23);4. 有3个学生,每个学生考4门课,要求编一函数,能检查每个学生有无不及格的课程。若某学生有一门或一门以上的课程不及格,就输出该学生的号码(设号码从0算起,即0,1,2)及各门课程的成绩。参考程序#define N 3#define M 4void check(float (*p)M,int n,

31、int m)int i,j,flag=0;for(i=0;in;i+)for(j=0;jm;j+)if(*(*(p+i)+j)60) flag=1;if(flag=1)printf(nstudent %dt,i);for(j=0;jstr2则函数返回正数;若str1=str2,则返回0;若str1str2,则返回负数。参考程序int strcmp(char*str1,char*str2)int n1,n2,n;don1=*(str1+);n2=*(str2+);while(n1=n2 & n1!=0 & n2!=0);return(n1-n2);main()char s110,s210;get

32、s(s1); gets(s2);printf(%dn,strcmp(s1,s2);运行时比较下列三对字符串:that和the,string和string,house和flat。(二)按要求进行程序设计并调试运行1. 已知数组int a20= 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20;今要求编一个函数void rearrange(int *p,int m,int n),能够从数组中指定位置m开始的n个数按相反顺序重新排列。例如m=5,n=10,则得到新数组 1,2,3,4,14,13,12,11,10,9,8,7,6,5,15,16,1

33、7,18,19,20。2编写一个函数int strlen(char*s),能返回字符串s的长度。在main函数中输入一个字符串,调用函数strlen,然后输出字符串的长度。3编写一个函数char*index(char *str,char c),能从字符串str中寻找字符c第一次出现的位置,若找不到则返回0。在主函数中输入字符串“information”,然后分别输出字符 i、f、x的相对位置。4. 编写一个带参主函数,能将命令行中的字符串按给定的次数重复打印。假定程序名为wang,则运行时输入wang computer 3,可将computer打印3次;若输入wang program 5,则可

34、将 program打印5次;若输入时参数不够则能显示适当的信息。实验五 结构体、共用体、枚举、位运算一、实验目的1. 掌握结构体类型数据的定义和使用2. 初步掌握用链表实现内存的动态分配3. 掌握共用体和枚举类型数据的定义和使用4. 掌握位运算及其应用二、基本概念1. 结构体类型struct 结构体名 结构体成员;结构体是构造类型的数据, 它允许我们将不同类型的数据组织在一起,作为一个整体来处理。结构体类型的定义形式为:在结构体类型定义的基础上,可以定义结构体类型的变量、数组和函数,以满足我们处理复杂问题的需要。2. 动态存储分配和链表利用包含指针项的结构体变量作为结点,并通过指针将这些结点联

35、系起来就形成一个链表。有了链表这一数据结构,再结合C语言提供的动态存储分配函数malloc、calloc、realloc、free,就可以实现内存的动态分配。实现内存的动态分配可以提高内存的利用率,降低内存的开销。3. 共用体类型共用体也是一种构造类型的数据,它将不同类型的数据组织在相同的存union 共用体名 共用体成员;储空间中。共用体类型的定义形式为: 在共用体类型定义的基础上,可以定义共用体类型的数据。共用体的引入,增加了程序的灵活性,可在一定程度上节省内存空间。4. 枚举类型enum 枚举名枚举元素;枚举类型专门用于处理离散的有限的数据, 它使我们在解决某些问题时更为形象和直观。枚举

36、类型的定义形式为:在此基础上,可以定义枚举类型的数据。5. 位运算对数据按位进行操作是C语言的一个重要特点,这种操作在系统软件设计中和自动控制中是十分有用的。位运算有:取反()、左移()、按位与(&)、按位或(|)、按位异或()。在位运算中,还常常引入位段的概念,以增加位操作的灵活性。位段是一种特殊形式的结构体成员,这些成员所占据的空间不是以字节为单位,而是以位为单位。三、实验内容(一)分析以下各程序的原理并上机验证1. 有N个学生,每个学生的数据包括姓名name20,三门课成绩score3,总分total和平均分ave。要求在main 函数中输入姓名和成绩,然后调用函数count计算出总分和

37、平均分,最后在main函数中打印各项数据。参考程序#define N 4#include stdlib.h#include stdio.hstruct studentchar name20;float score3;float total;float ave;studN;main()struct student count(struct student x);struct student y;int i,j;char numstr10;for(i=0;iN;i+)printf(Enter name and scoresn);gets(studi.name);for(j=0;j3;j+)gets

38、(numstr);studi.scorej=atof(numstr);for(i=0;iN;i+)y=count(studi);printf(%10s,y.name);for(j=0;j3;j+)printf(%6.1f,y.scorej);printf(%6.1f,%6.1fn,y.total,y.ave);(接下页)struct student count(struct student x)int j;float sum=0;for(j=0;j3;j+)sum+=x.scorej;x.total=sum;x.ave=sum/3;return(x);说明程序中假定学生数N为4,若人数有变化,

39、 只需修改宏定义即可。运行时输入4名学生的姓名及其成绩,记录运行结果。2. 有一个unsigned long型整数,想分别将前2个字节和后2 个字节作为两个unsigned int 型输出,用一个函数实现之,且将long型数作为实参,在函数中输出这两个int数。参考程序main()void two_int(unsigned long x);unsigned long l;printf(Enter the long numbern);scanf(%ld,&l);two_int(l);void two_int(unsigned long x)unionunsigned long u;int i2;

40、mix;mix.u=x;printf(The two ints is %d,%dn,mix.i1,mix.i0);运行时分别输入1234,65536,65538,记录并分析运行结果。3. 编写程序实现十六进制数到二进制数的转换。参考程序main()int j,num,bit;unsigned int mask=0x8000;printf(nEnter your number:);scanf(%x,&num);printf(binary of %04x is:,num);for(j=0;j=1;运行时分别输入1,cdef,9102,记录运行结果。4. 编号为1n的n个人围成一圈,以第一个人为起点

41、从1到3 循环报数,每数到3的退出圆圈。问最后留下的人其编号是几?说明这是一个环形链表的例子。运行时分别输入人数35,20,记录运行结果。参考程序#include alloc.hmain()struct personint position;struct person*next;*head,*new,*this;int i,n;printf(How many people?);scanf(%d,&n);/*定义第一个结点,并使头指针指向它*/this=(struct person*)malloc(sizeof(struct person);this-position=1;head=this;/

42、*定义其余n-1个结点,并形成链表*/for(i=2;iposition=i;this-next=new;this=new;/*链尾指向链头*/this-next=head;/*从第一个结点开始,依条件陆续删除结点,直至最后一个结点*/this=head;while(this-next!=this)/*this-next=this则只剩一个结点*/for(i=1;inext;new-next=this-next;/*链指针跨过第三个结点*/new=this;/*new指向待删除的第三个结点*/this=this-next;free(new);/*释放被删除的结点*/printf(The peo

43、ple left is No.%dn,this-position);(二)按要求进行程序设计并调试运行1. 已知结构体类型struct studchar name20;int age;char sex;定义该结构体类型的数组并输入4名学生的相关信息,计算并输出他们的平均年龄。2. 编写程序,将字符a、b、c、d连续组成的4 个字节拼成一个long型数输出。(提示:定义一个共用体,包含一个long 成员和一个字符数组成员)3. 写一个函数,使一个整数i中的低4位改为1, 将得到的数作为函数值返回。试在主函数中调用该函数并记录运行结果。4. 自行编写一个枚举变量的应用程序,并上机调试运行。实验六

44、文件操作一、实验目的1. 了解文件类型指针的概念2. 掌握文件的读写方法3. 初步掌握文件的定位与随机读写二、基本概念1. 文件对文件进行操作是高级语言的一个重要功能。高级语言所要操作的文件主要是磁盘数据文件,数据文件按其数据的组织形式可分为字符文件(文本文件)和二进制文件,字符文件以ASCII码方式存储在磁盘上,二进制文件则以数据在内存中的存储形式原样存储在磁盘上。2. 文件类型指针FILE *变量名C语言在处理文件时,为每一个文件开辟一个“文件信息区”,文件信息区中的信息被保存在结构体变量中,与此相应的结构体类型由系统定义并取名为FILE。由于FILE类型专门用于文件处理,故称为文件类型,

45、相应的指针变量则称为文件类型指针变量, 其定义形式为: 通过文件类型指针,我们可以方便地进行文件处理。3. 文件的打开与关闭在对文件进行读写之前,先必须打开文件, 使用完之后应关闭文件以保持数据的完整性。打开文件利用C的标准库函数fopen,其调用形式为:fopen(文件名, 文件使用方式)调用后返回一个文件类型(FILE)指针,指向该文件的文件信息区。fclose(文件指针变量)关闭文件利用函数fclose,其调用形式为:调用后文件被关闭,并释放相应的文件信息区。4. 文件的读写fgetc (FILE *fp)fputc(char ch, FILE *fp)fgets (char *str,

46、 int n, FILE *fp)fputs (char *str, FILE *fp)fscanf (FILE *fp, 格式字符串, 输入表)fprintf(FILE *fp, 格式字符串, 输出表)fread(void *p, unsigned size, unsigned n, FILE *fp)fwrite(void *p, unsigned size, unsigned n, FILE *fp)读写文件时,可以通过函数fgetc和fputc(或getc和putc) 读写一个字符,也可以通过函数fgets和fputs读写一个字符串, 还可以通过函数fscanf和fprintf实现数据

47、的格式化读写。如果处理的是二进制文件,则可以通过函数fread和fwrite来读写。这些函数的调用形式为5. 文件的定位与随机读写rewind (FILE *fp)fseek (FILE *fp, long offset, int base)ftell(FILE *fp)文件随机读写的关键就是文件位置指针的移动,即文件的定位。文件定位相关的三个函数为rewind、fseek、ftell, 它们的调用形式分别是:其中rewind函数将位置指针移到文件的起始处,fseek函数则根据基点base和位移量offset设置位置指针,ftell函数则报告当前位置指针的位移量。三、实验内容(一)分析以下各程

48、序的原理并上机验证1. 编写一个程序,能将键盘上输入的内容以写字符的方式存入文件,直到输入一个*为止,然后用读字符串的方式从文件中读出数据显示在屏幕上。参考程序#include stdio.hmain()FILE *fp;char c,str81,file13;printf(Enter the name of the file to be created:);gets(file);if(fp=fopen(file,w)=NULL)printf(cannot open this file);exit(0);printf(Enter the contents to be saved in the

49、above filen);while(c=getchar()!=*)fputc(c,fp);fclose(fp);if(fp=fopen(file,r)=NULL)printf(cannot open the file);exit(0);while(fgets(str,81,fp)!=NULL)puts(str);fclose(fp);运行时分别将abort存入文件a1.dat、将boy存入文件a2.dat以备后面实验使用。此外,将下列短文存入另一个文件(文件名自定)。C language was designed by Dennis Ritchie, an expert in the Bell Laboratory.C is

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!