第五次实验报告张明娟.docx
- 文档编号:3157345
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:35
- 大小:168.23KB
第五次实验报告张明娟.docx
《第五次实验报告张明娟.docx》由会员分享,可在线阅读,更多相关《第五次实验报告张明娟.docx(35页珍藏版)》请在冰点文库上搜索。
第五次实验报告张明娟
LIAOCHENGUNIVERSITY
计算机学院实验报告
【2015~2016学年第2学期】
【一、基本信息】
【实验课程】
高级语言程序设计
【设课形式】
非独立
【课程学分】
4
【实验项目】
指针、结构与文件程序设计
【项目类型】
基础□综合□设计□研究创新□其它[]
【项目学时】
6
【学生姓名】
张明娟
【学号】
2015205550
【系别专业】
电子商务
【实验班组】
2015级3班组台
【同组学生】
【实验室名】
【实验日期】
2016-6
【报告日期】
2016-6
【二、实验教师对报告的最终评价及处理意见】
实验成绩:
(涂改无效)
指导教师签名:
年月日
注:
要将实验项目、实验课程的成绩评定及课程考核办法明确告知学生,并报实验管理中心备案
实验预习
实验目的和要求
1、深刻理解普通变量和指针变量、地址的概念,掌握使用指针变量的方法;
2、掌握带有指针形参的函数的定义及调用方法;
3、正确使用指针数组元素、字符串;
4、正确使用函数指针调用函数;
5、掌握结构类型变量与数组的定义和使用;
6、掌握使用结构指针和结构变量名使用结构成员的方法;
7、掌握链表的基本概念和操作;
8、掌握文件与文件指针的概念;
9、学习使用文件打开、文件关闭、读写文件等基本的文件操作函数。
实验内容和原理或涉及的知识点:
1、编写函数printArray,使用指针实现打印一维整型数组中所有元素的操作。
要求:
每行打印5个整数。
在main函数中定义一个整型数组并初始化,验证printArray函数。
2、编写函数swap,实现交换调用函数中两个整型变量值的操作。
要求:
使用形参为指针的函数swap完成交换功能。
3、编写函数strcat,实现两个字符串连接。
要求:
不允许调用C的字符串函数strcat。
主程序中从键盘输入一个字符串。
调用strcat函数实现字符串拷贝操作。
输出拷贝后字符串的内容。
4、编写函数strcmp,实现2个字符串的比较。
函数原型为:
intstrcmp(char*p1,char*p2)
5、编写函数sort,使用指针实现对一个整型数组从小到大进行排序。
6、从键盘输入4个学生的学号、姓名、语文、数学、英语信息,然后计算出每个学生的平均成绩,最后按平均成绩从高到低的顺序输出。
要求:
学生的信息包括学号、姓名、语文、数学、英语、平均成绩。
4个学生的成绩存放在一维数组中。
7、下面的程序,构造一个如图2所示的三个结点的链表,并顺序输出链表中结点的数据。
图2包含三个结点的链表
8、利用共用体输出一个float类型数据在计算机内部的二进制形式。
9、利用指向函数的指针作为参数,构造一个可以对字符串作不同处理的通用的函数。
要求:
通用字符串处理函数名是voidstringHandler(char*,void(*p)(char*)),写出两个具体的字符串处理函数:
voidfirstUpper(char*),将字符串中每个单词的首字母大写。
voidallUpper(char*),将字符串中所有字母大写。
然后分别使用stringHandler调用这两个具体处理函数,分别输出结果进行验证。
10、编写程序,从键盘输入某宿舍楼6家住户某月的水电消耗量及水费和电费标准,计算各户应交纳的水费和电费。
数据及要求如下:
(1)水费标准为:
1.5元/吨,电费标准为:
0.5元/度,6户人家的信息如下表:
住户地址
水耗(吨)
电耗(度)
101
5
150
201
4
90
301
4
120
401
3
78
501
5
60
601
6
105
将表中信息按下面格式组织在文件input.dat中:
1.50.5
1015150
201490
3014120
401378
501560
6016105
要求程序从文件input.dat中读取上述数据。
(2)分别计算每户应交纳的电费、水费以及电费水费的总和。
●汇总全部住户水费、电费的总和;
●将计算结果按下面格式写入文件charge.dat中。
表格线不必输出,第一行内容可使用英文或拼音码表示。
住户地址
水耗(吨)
水费(元)
电耗(度)
电费(元)
合计(元)
101
5
7.5
150
75
82.5
201
4
6
90
45
51
301
4
6
120
60
66
401
3
4.5
78
39
43.5
501
5
7.5
60
30
37.5
601
6
9
105
52.5
61.5
total
27
40.5
603
301.5
342
●
实验条件:
1、装有Windows操作系统的微型计算机;
2、CodeBlocks软件。
实验设计方案:
1、分析问题。
2、画出程序的流程图。
3、实现程序。
实验数据和实验结果记录
1.解:
#include
intprintArray(int*m,intn)
{
inti;
for(i=0;i { printf("%d",*(m+i)); if(((i+1)%5)==0) printf("\n"); } } intmain() { inta[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; printArray(a,15); } 2.解: #include intswap(int*m,int*n) { intp; p=*m; *m=*n; *n=p; } intmain() { inta,b; int*pointer1,*pointer2; scanf("%d,%d",&a,&b); pointer1=&a; pointer2=&b; swap(pointer1,pointer2); printf("%d,%d",a,b); } 3.解: #include voidstrca(char*a,char*b) { for(;*a! ='\0';a++); for(;*b! ='\0';a++,b++) *a=*b; *a='\0'; } voidmain() { chara[]="Hello"; charb[]="world! "; strca(a,b); puts(a); } 4.解: #include voidmain() { intstrcmp(char*p1,char*p2); charstr1[30],str2[30]; printf("\npleaseinputstring1: "); gets(str1); printf("\npleaseinputstring2: "); gets(str2); printf("\t%d\n",strcmp(str1,str2)); } intstrcmp(char*p1,char*p2) { inti=0; while(*(p1+i)==*(p2+i)) { if(*(p1+i++)=='\0')//全部字符相同时返回结果0 { return0; } } return(*(p1+i)-(*(p2+i)));//不同时返回结果为第一对不同字符的ASCII码的差值 } 5.解: #include #defineN10 voidsort(int*p,intn) { inti,j,k,t; for(i=0;i { k=i; for(j=i+1;j { if(*(p+j)<*(p+k)) k=j;} if(k! =i) { t=*(p+i); *(p+i)=*(p+k); *(p+k)=t; } } } intmain() { inti,a[N]; printf("PleaseenterNintegernumbers: "); for(i=0;i scanf("%d",&a[i]); sort(a,N); printf("Fromsmalltolargetosort: "); for(i=0;i printf("%d",a[i]); } 解: 6.解 #include #defineN4 structStduent { intnum; charname[20]; floatscore[3]; floataver; }; structStduentstu[N],*p=stu,t; voidinput(structStduentstu[]) { inti; printf("请输入N名学生的信息: 学号、姓名、3名成绩: \n"); for(i=0;i { scanf("%d%s%f%f%f",&stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]); stu[i].aver=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/(3.0); } } structStduentaverage(structStduentstu[]) { inti,j,k; for(i=0;i { k=i; for(j=i+1;j if(stu[k].aver k=j; if(k! =i) { t=stu[i]; stu[i]=stu[k]; stu[k]=t; } } } voidprint(structStduentstu[]) { inti; printf("\n按平均成绩从高到低依次为: \n"); for(i=0;i printf("%d%s%f%f%f%f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].aver); } intmain() { input(p); average(p); print(p); } 7.解: #include structStudent { intnumber; structStudent*next; }; intmain() { structStudenta,b,c,*head,*p; a.number=10; b.number=20; c.number=30; head=&a; a.next=&b; b.next=&c; c.next=NULL; p=head; do { printf("%d\n",p->number); p=p->next; }while(p! =NULL); } 8.解: #include #defineN1000000 unionFF { floatf; }a; intmain() { intx[100]; printf("请输入任意一个含有六位小数的float型的浮点数(如3.333333): \n"); scanf("%f",&a.f); intn=a.f; intnn=a.f; inti=0,j; while(n! =0) { x[i]=n%2; n/=2; i++; } for(j=i-1;j>=0;j--) printf("%d",x[j]); printf("."); intm=(int)(a.f*N)%N; intl=0,y[100]; while (1) { m*=2; intmm=m/N; y[l]=mm; if(mm>0) { m=m%N; if(m==0) break; if(l>10) break; } l++; } intll; if(l>10) { for(ll=0;ll<10;ll++) printf("%d",y[ll]); printf("此数小数部分转换过长,自动保存10位小数\n"); } else { for(ll=0;ll printf("%d",y[ll]); printf("\n"); } return0; } 9.解: #include voidfirstUpper(char*M) { inti,word=0; for(i=0;M[i]! ='\0';i++) if(M[i]=='') word=0; elseif(word==0) { word=1; if(M[i]>='a'&&M[i]<='z') M[i]=M[i]-32; } } voidallUpper(char*M) { inti; for(i=0;M[i]! ='\0';i++) if(M[i]>='a'&&M[i]<='z') M[i]=M[i]-32; } voidstringHandler(char*M,void(*p)(char*M)) { (*p)(M); printf("Thefinalstring: "); puts(M); } intmain() { chara[50]; intn; printf("Pleaseenterthestring: "); gets(a); printf("Pleasechoose1or2: "); scanf("%d",&n); if(n==1) stringHandler(a,firstUpper); else stringHandler(a,allUpper); } 10.解: #include #include #definesize7 structconsumer { intnum;//住户地址 intwaterc;//水耗 floatwaterm;//水费 intelec;//电耗 floatelem;//电费 floattotal;//合计 }co[size]; intmain() { FILE*fp1,*fp2; inti,counter; floata,b; counter=size-1; if((fp1=fopen("E: \\input.dat","rb"))==NULL) { printf("cannotopenfile.\n"); exit (1); } fscanf(fp1,"%f%f\n",&a,&b);//读电费、水费标准 printf("%f,%f",a,b); for(i=0;i { fscanf(fp1,"%d%d%d",&co[i].num,&co[i].waterc,&co[i].elec); printf("%d%d%d",co[i].num,co[i].waterc,co[i].elec); co[i].waterm=co[i].waterc*a; co[i].elem=co[i].elec*b; co[i].total=co[i].waterm+co[i].elem; } fclose(fp1); if((fp2=fopen("E: \\charge.dat","wb"))==NULL) { printf("cannotopenfile\n"); exit (1); } printf("********************\n"); fprintf(fp2,"********************\n"); printf("地址水耗(吨)水费(元)电耗(度)电费(元)合计(元)\n"); fprintf(fp2,"地址水耗(吨)水费(元)电耗(度)电费(元)合计(元)\n"); for(i=0;i { printf("%d%d%f%d%f%f\n",co[i].num,co[i].waterc,co[i].waterm,co[i].elec,co[i].elem,co[i].total); fprintf(fp2,"%d%d%f%d%f%f\n",co[i].num,co[i].waterc,co[i].waterm,co[i].elec,co[i].elem,co[i].total); } co[counter].waterc=0; co[counter].waterm=0; co[counter].elec=0; co[counter].elem=0; co[counter].total=0; for(i=0;i { co[counter].waterc+=co[i].waterc; co[counter].waterm+=co[i].waterm; co[counter].elec+=co[i].elec; co[counter].elem+=co[i].elem; co[counter].total+=co[i].total; } printf("total%d%f%d%f%f\n",co[counter].waterc,co[counter].waterm,co[counter].elec,co[counter].elem,co[counter].total); fprintf(fp2,"total%d%f%d%f%f\n",co[counter].waterc,co[counter].waterm,co[counter].elec,co[counter].elem,co[counter].total); fclose(fp2); } 记录成绩(涂改无效) 合格□ 不合格□ 【实验结果分析及心得】 1、认真分析程序结果,思考是否完成题目要求,是否还有其他的实现方案。 2、总结编程过程中遇到的问题及解决办法,记录各种编程技巧。 课程设计: 图书管理信息系统 解: #include #include structbook { charno[10];//书号 charname[10];//书名 charpublishday[10];//出版日期 charchapt[3];//类别 charwriter[10];//作者 charindex[20];//借阅标记 intrepeat;//借阅次数 charadd[20];//备份 }a[50]; intmenu()//杨国林 { inti; printf("*******************************************************\n"); printf("*欢迎来到图书管理系统*\n"); printf("**\n"); printf("*主菜单*\n"); printf("*●[1]图书信息输入*\n"); printf("*●[2]图书信息显示*\n"); printf("*●[3]图书信息查询*\n"); printf("*●[4]图书信息插入*\n"); printf("*●[5]图书信息删除*\n"); printf("*●[6]图书信息保存*\n"); printf("*●[7]图书信息读入*\n"); printf("*●[8]图书信息排序*\n"); printf("*●[9]图书信息修改*\n"); printf("*●[10]图书信息退出*\n"); printf("*******************************************************\n"); printf("请输入您想选择的序号O(∩_∩)O: "); scanf("%d",&i); returni; } intmenu2() { inti; printf("*******************************************************\n"); printf("*欢迎来到图书管理系统*\n"); printf("**\n"); printf("*主菜单*\n"); printf("*●[1]图书信息显示*\n"); printf("*●[2]图书信息查询*\n"); printf("*●[3]图书信息退出*\n"); printf("*******************************************************\n"); printf("请输入您想选择的序号O(∩_∩)O: "); scanf("%d",&i); returni; } intenter()//张明娟 { intn,j; printf("要输入的图书数量: "); scanf("%d",&n); printf("书号/书名/出版日期/类别/作者/借阅标记/借阅次数/备份(请用空格分开)\n"); for(j=0;j scanf("%s%s%s%s%s%s%d%s",a[j].no,a[j].name,a[j].publishday,a[j].chapt,a[j].writer,a[j].index,&a[j].repeat,a[j].a
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第五 实验 报告 张明娟