计算机综合训练实验指导书.doc_第1页
计算机综合训练实验指导书.doc_第2页
计算机综合训练实验指导书.doc_第3页
计算机综合训练实验指导书.doc_第4页
计算机综合训练实验指导书.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

此文档收集于网络,如有侵权,请联系网站删除计算机综合训练实验指导书综合训练一 结构体及结构体数组一、实验学时 6学时二、实验目的1掌握结构体类型变量和结构体数组的定义和初始化;2掌握结构体数组的输入和输出;3掌握在相关算法中结构体数组的应用。 三、实验内容1. 在解决实际问题时,单独用单个的结构体类型变量的很少,一般是以结构体类型数组的形式出现,结构体数组就是具有相同结构类型的变量集合。例如:若将一个班级20个同学的姓名、性别、学号和三科考试成绩进行定义, 可以定义成一个结构体数组。如下所示: struct / *定义学生结构体类型* /char name20; / *学生姓名* /char sex; / *性别* /long num; / *学号* /float score3; / *三科考试成绩* / stud20; /*定义结构体类型数组stud,数组有2 0个结构体类型元素*/ 也可定义为: struct stu / *定义学生结构体类型* /char name20; / *学生姓名* /char sex; / *性别* /long num; / *学号* /float score3; / *三科考试成绩* /;struct stu stud20; /*定义结构体类型数组,有2 0个结构体类型元素*/结构体数组成员的访问形式为: 结构数组元素.成员名其数组元素各成员的引用形式为:、stud0.sex、stud0.scorei;、stud1.sex、stud1.scorei;.、stud19.sex、stud19.scorei; 2下面的程序在结构体数组worker中存放5个工人的数据包括编号、姓名、年龄、工资,注意观察数据的输入和输出方法。struct work /*职工基本情况*/ char num10; /*工号*/ char name10; /*姓名*/ int age; /*年龄*/ int salary; /*工资*/ worker5; main( ) int i;for(i=0;i5;i+) scanf(%s%s,workeri.num,); /*输入工号和姓名*/ scanf(%d%d,&workeri.age,&workeri.salary); /*输入年龄和工资*/for(i=0;i5;i+) printf(%st%st%dt%dn,workeri.num,,workeri.age,workeri.salary); 3下面的程序在结构体数组worker中存放5个工人的编号和姓名,用gets和puts函数,注意观察数据的输入和输出方法:#include “stdio.h”struct work char num10; char name10; ;main() int i; struct work worker5; for(i=0;i5;i+) gets(workeri.num ); /*输入工号*/ gets(); /*输入姓名*/ for(i=0;i5;i+) puts(workeri.num );printf( ); /*输出工号*/ puts();printf(n); /*输出姓名*/ 4若有一个可以包含20个学生的信息的结构体数组,结构体成员有学号、姓名、语文、数学、英语和平均分,编程实现对于这20个学生的结构体数组的输入和输出及求出每个学生的平均分,参考程序如下。#include struct student /*定义学生结构体类型*/int no; / *学号* /char name20; / *学生姓名* / int chinese; /*语文成绩*/ int maths; /*数学成绩*/ int english; /*英语成绩*/ float ave; /*平均成绩*/stu20; /*定义结构体类型数组,有2 0个结构体类型元素*/main( ) int i,length=0,n; printf(Input the number of student:); scanf(%d,&n); /*输入实际学生人数*/ for(i=length;ilength+n;i+) printf(the %d students no: ,i+1); scanf(%d,&stui.no); /*输入学号* / printf(the %d stdents name: ,i+1); scanf(%s,); /*输入学生姓名* / printf(the %d stdents chinese: ,i+1); scanf(%d,&stui.chinese); /*输入语文成绩*/ printf(the %d stdents maths: ,i+1); scanf(%d,&stui.maths); /*输入数学成绩*/ printf(the %d stdents english: ,i+1); scanf(%d,&stui.english); /*输入英语成绩*/ stui.ave=(stui.chinese+stui.maths+stui.english)/3.0;/*计算每个学生的平均成绩*/ printf(n); length=length+n;printf(tNotNametChinesetMathstEnglishtAveagenn); for(i=0;ilength;i+) printf(%8d%10s%8d%8d%8d%8.1fn,stui.no,,stui.chinese,stui.maths,stui.english,stui.ave); /*输出学生信息*/ 5 某企业四名职工信息的输入和输出,参考程序如下。main( ) struct employee /*职工基本情况*/ int num; /*工号*/char name8; /*姓名*/ int age; /*年龄*/int salary; /*工资*/em4;int i;for(i=0;i4;i+) scanf(%d,&emi.num); /*输入工号*/scanf(%s,); /*输入姓名*/scanf(%d,&emi.age); /*输入年龄*/scanf(%d,&emi.salary); /*输入工资*/for(i=0;i4;i+) printf (%d ,emi.num); /*输出工号*/printf(%s ,); /*输出姓名*/printf(%d ,emi.age); /*输出年龄*/printf(%d ,emi.salary); /*输出工资*/printf(n); 6. 求某企业四名职工工资的平均值main( ) struct employee /*职工基本情况*/ int num; /*工号*/char name8; /*姓名*/ int age; /*年龄*/int salary; /*工资*/em4=1,wang,25,450,1,li,38,890,3,qi,30,234,4,jiang,54,759;float s=0,aver; int i;for(i=0;i4;i+)s+=emi.salary;aver=s/4.0;printf(%fn , aver); /*输出平均工资*/7. 找出企业四名职工工资的最高者及他的全部信息。main( ) struct employee /*职工基本情况*/ int num; /*工号*/char name8; /*姓名*/ int age; /*年龄*/int salary; /*工资*/em4=1,wang,25,450,1,li,38,890,3,qi,30,890,4,jiang,54,759;int i,max=em0.salary;for(i=0;imax) max=emi.salary;printf(%dn ,max);for(i=0;i4;i+)if (emi.salary=max) printf (%d ,emi.num); /*输出工号*/printf(%s ,); /*输出姓名*/printf(%d ,emi.age); /*输出年龄*/printf(%d ,emi.salary); /*输出工资*/printf(n);8查找某企业职工中年龄大于35岁的职工并显示他们的全部信息。main( ) struct employee /*职工基本情况*/ int num; /*工号*/char name8; /*姓名*/ int age; /*年龄*/int salary; /*工资*/em4=1,wang,25,450,1,li,38,890,3,qi,30,234,4,jiang,54,759;int i;for (i=0;i35) printf (%d ,emi.num); /*输出工号*/printf(%s ,); /*输出姓名*/printf(%d ,emi.age); /*输出年龄*/printf(%d ,emi.salary); /*输出工资*/printf(n);9. 将某企业职工的信息按工资从多到少进行排序。main() struct employee /*职工基本情况*/ int num; /*工号*/char name8; /*姓名*/ int age; /*年龄*/int salary; /*工资*/em4=1,wang,25,450,2,li,38,890,3,qi,30,234,4,jiang,54,759;int i,j,x,y,t; char ch8;for(i=0;i4-1;i+ )for(j=0;j4-1-i;j+ )if (emj.salaryemj+1.salary) t=emj.num; /*交换工号*/ emj.num=emj+1.num; emj+1.num=t; strcpy(ch,); /*交换姓名*/strcpy(,emj+1.name); strcpy(emj+1.name,ch); t=emj.age; /*交换年龄*/ emj.age =emj+1.age; emj+1.age =t;t=emj.salary; /*交换工资*/ emj.salary =emj+1.salary; emj+1.salary =t;for(i=0;i4;i+) printf (%d ,emi.num); /*输出工号*/printf(%s ,); /*输出姓名*/printf(%d ,emi.age); /*输出年龄*/printf(%d ,emi.salary); /*输出工资*/printf(n);四、实验注意事项1结构体中各成员是被分别分配独立的存储单元,。2不可以用scanf( )函数对结构体进行整体赋值,只能通过对成员的赋值来改变结构体变量的值。综合训练二 文件的基本操作一、 实验学时 6学时二、实验目的1掌握文件打开、关闭、读写等操作函数的使用方法。2掌握包含文件操作的程序设计和调试方法。三、实验内容1. 建立文件data.tat,从键盘上向data1.dat文件写入10个实型数据,同时在显示器上输出(使用fscanf和fprintf函数实现)。编程提示:(1)使用文件的打开、关闭、写入等函数;(2)首先打开文件,然后写入10个数,最后关闭文件。程序如下:#include main() FILE *fp; /* 定义一个文件指针变量fp */int i;float x;fp=fopen(data1.dat,w); /* 创建文件时,以写方式打开文本文件 */for(i=1;i=10;i+) scanf(%f,&x); /*将数据读入x*/ fprintf(fp,%fn,x); /* 将数据输出到文件data中,即写到data中 */printf(%fn,x); /*将数据输出到屏幕上,以察看文件内容是否与之前的输入一致*/fclose(fp); /* 读文件结束,关闭文件 */说明:格式化读写函数fscanf、fprintf函数与前面使用的scanf和printf 函数的功能相似,都是格式化读写函数。 两者的区别在于 fscanf 函数和fprintf函数的读写对象不是键盘和显示器,而是磁盘文件。这两个函数的调用格式为: fscanf(文件指针,格式字符串,输入表列); fprintf(文件指针,格式字符串,输出表列); 例如: fscanf(fp,%d%s,&i,s); fprintf(fp,%d%c,j,ch);2. 从键盘上输入10个整数,并写入到一磁盘文件中,然后再读取输出(使用fread和fwrie函数实现)。程序如下:#include stdio.hmain( ) FILE *fp; int i,j,k; int a10,b10; char filename20; printf(Enter the file name:); gets(filename); /*输入要建立的磁盘文件名*/ fp=fopen(filename,wb); /*以二进制写方式建立磁盘文件*/ for(i=0;i10;i+) scanf(%d,&ai); /*从键盘输入整数,读入到内存*/ fwrite(a+i,sizeof(int),1,fp); /*从内存中写到磁盘上*/ fclose(fp); /*关闭文件*/ fp=fopen(filename,rb); /*以二进制只读方式打开磁盘文件*/ for(i=0;i10;i+) fread(b+i,sizeof(int),1,fp); /*从磁盘上读入内存*/ printf(%6d,bi); /*在显示器上输出显示*/ printf(n); fclose(fp); /*关闭文件*/说明:该程序中使用了fread函数和fwrite函数用来读写一组数据,要注意这两个函数的各个参数项的含义。本程序中fwrite(a+i,sizeof(int),1,fp)的第一个参数a+i用来代表从内存中向文件输出的数据的首地址,第二个参数sizeof(int)用来表示每次读取的字节数,由于是整数,可以用sizeof()函数返回int数据的字节数,或者直接写为2亦可.3. 建立一个磁盘文件fsin,其内容是090之间每隔5的正弦值。程序如下:#include#include#define PI 3.14159main( )FILE *fp;float S19;int i, a;if(fp=fopen(“fsin”, “wb”)=NULL) printf(“Cannot open file.n”);exit(0);for(i=0,a=-5; i19; i+)a+=5;Si=sin(a*PI/180.0);If (fwrite(S,sizeof(S), 1, fp) != 1)printf(“File error.”);fclose(fp);4把上题所建立的文件fsin的内容读出并打印。程序如下:#includemain( )FILE *fp;float S19;int i, a;if(fp=fopen(“fsin”,“rb”)=NuLL) printf(“Cannot open file.n”);exit(0);if (fread(S, sizeof(S), 1, fp) != 1)printf(“File error.”);printf(“n I sin(i) nn”);for(i=0,a=-5; i=a)&(stri=z) stri= stri-32; /*将小写字母转换成对应的大写字母*/ printf(n%sn,str); fclose(fp);说明:该程序定义了一个一维字符数组来存放输入的一行字符串,在程序中通过从键盘上输入一个字符来确定是否继续输入字符串,要注意的是程序中设置了标志变量来判定是否要继续。6. 利用fwrite与fread函数建立一个存放学生电话簿的二进制数据文件,并读取其中的数据。编程提示:电话簿为结构体类型,其中包含姓名、电话号码。先建立该文件,文件名由用户从键盘输入,读进字符数组filename中。程序如下:#include stdio.hmain( ) FILE *fp; int i; char filename40; /* filename用于存放数据文件名 */ struct tel char name20, tel9; in5, out5;clrscr( ); printf(filename: ); gets(filename); if (fp=fopen(filename,wb)=NULL) printf(Cant open the %sn,filename); exit(0); for(i=0; i5; i+) printf(name: ); gets(); printf(tel: ); gets(ini.tel); fwrite(in, sizeof(struct tel), 5, fp); /* 文件中写入5个学生的电话 */ fclose(fp); /* 建立文件结束,关闭文件 */ printf(nn outfile:n); fp=fopen(filename,rb); /* 以读方式打开二进制文件 */ fread(out,sizeof(struct tel),5,fp); /* 从文件读取5个结构体数据 */ printf(name telephonen); for(i=0; i5; i+) printf(%-20s%-8sn,,outi.tel); fclose(fp); /* 读文件结束,关闭文件 */ 7.从键盘输入两个学生数据,写入到一个磁盘文件中,再从文件中读出这两个学生的数据显示在屏幕上。程序如下:#include stdio.hstruct stu /*定义一个结构体*/ char name10; int num; int age; char addr15;s12,s22;main( ) FILE *fp; char ch; int i; if(fp=fopen(e:stu_list.dat,wb)=NULL) /*以二进制写方式建立磁盘文件*/ printf(Cannot open file strike any key exit!); exit(0); printf(ninput data:n); for(i=0;i2;i+) scanf(%s%d%d%s,,&s1i.num,&s1i.age,s1i.addr); for(i=0;i2;i+) fwrite(&s1i,sizeof(struct stu),2,fp); /*从内存中写到磁盘上*/ fclose(fp); /*关闭文件*/ fp=fopen(e:stu_list.dat,rb); /*以二进制只读方式打开磁盘文件*/ for(i=0;i2;i+) fread(&s2i,sizeof(struct stu),2,fp); /*从磁盘上读入内存*/ printf(%st%dt%dt%st,,s2i.num,s2i.age,s2i.addr);printf(n); fclose(fp); /*关闭文件*/说明:本例程序定义了一个结构体stu,说明了两个结构数组s1和s2。程序中以只写方式打开二进制文件“stu_list”,输入二个学生数据之后,写入该文件中,然后以只读方式打开该二进制文件,把文件内部位置指针移到文件首,读出两块学生数据后,在屏幕上显示。8. 用fscanf和fprintf函数解决上题中的问题。程序如下:#include stdio.hstruct stu char name10; int num; int age; char addr15;s12,s22;main() FILE *fp; char ch; int i; if(fp=fopen(e:stu_list.dat,wb)=NULL) printf(Cannot open file strike any key exit!); exit(0); printf(ninput data:n); for(i=0;i2;i+) scanf(%s%d%d%s,,&s1i.num,&s1i.age,s1i.addr); for(i=0;i2;i+) fprintf(fp,%st%dt%dt%st,,s1i.num,s1i.age,s1i.addr); fclose(fp); fp=fopen(e:stu_list.dat,rb); for(i=0;i2;i+) fscanf(fp,%s%d%d%s,,&s2i.num,&s2i.age,s2i.addr); printf(%st%dt%dt%st,,s2i.num,s2i.age,s2i.addr); printf(n); fclose(fp);说明:fscanf函数,fprintf函数与前面使用的scanf和printf 函数的功能相似,都是格式化读写函数。两者的区别在于fscanf函数和fprintf函数的读写对象不是键盘和显示器,而是磁盘文件。本程序中fscanf和fprintf函数每次只能读写一个结构数组元素,因此采用了循环语句来读写全部数组元素。9有5个学生有三门课的成绩,从键盘输入以上数据(包括学号、姓名、三门课的成绩),计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件“stud.dat”中。程序如下:#include stdio.hstruct student char num6;char name8;int score3;float ave; stu5;main( ) int i,j,sum;FILE *fp;for(i=0;i5;i+) printf(ninput score of sudent %d:n,i+1);printf(number:);scanf(%s,stui.num);printf(name: );scanf(%s,);sum=0;for(j=0;j3;j+) printf(score %d: ,j+1);scanf(%d,&stui.scorej);sum+=stui.scorej; stui.ave=sum/3.0;fp=fopen(stu, w);for(i=0;i5;i+)if (fwrite(&stui,sizeof(struct student),1,fp)!=1)printf(File write errorn);fclose(fp);/*将文件输出到显示器上,以检查文件内容*/fp=fopen(stu, r);for(i=0;i5;i+) fread (&stui,sizeof(struct student),1,fp);printf(n%s,%s,%d,%d,%d,%6.2fn,stui.num,, stui.score0, stui.score1, stui.score2, stui.ave); 说明:数据块读写函数和语言提供了用于整块数据的读写函数和。 可用来读写一组数据,如一个数组元素,一个结构变量的值等等。读数据块函数调用的一般形式为: fread(buffer,

温馨提示

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

评论

0/150

提交评论