第五次实验报告张明娟.docx
《第五次实验报告张明娟.docx》由会员分享,可在线阅读,更多相关《第五次实验报告张明娟.docx(35页珍藏版)》请在冰点文库上搜索。
![第五次实验报告张明娟.docx](https://file1.bingdoc.com/fileroot1/2023-5/5/7268a66b-c809-498d-a0e6-8f92a216e0c2/7268a66b-c809-498d-a0e6-8f92a216e0c21.gif)
第五次实验报告张明娟
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;iscanf("%d",&a[i]);
sort(a,N);
printf("Fromsmalltolargetosort:
");
for(i=0;iprintf("%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;jif(stu[k].averk=j;
if(k!
=i)
{
t=stu[i];
stu[i]=stu[k];
stu[k]=t;
}
}
}
voidprint(structStduentstu[])
{
inti;
printf("\n按平均成绩从高到低依次为:
\n");
for(i=0;iprintf("%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;llprintf("%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;jscanf("%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