第五次实验报告张明娟Word格式.docx
《第五次实验报告张明娟Word格式.docx》由会员分享,可在线阅读,更多相关《第五次实验报告张明娟Word格式.docx(35页珍藏版)》请在冰点文库上搜索。
![第五次实验报告张明娟Word格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/5/7268a66b-c809-498d-a0e6-8f92a216e0c2/7268a66b-c809-498d-a0e6-8f92a216e0c21.gif)
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
90
301
120
401
3
78
501
60
601
105
将表中信息按下面格式组织在文件input.dat中:
1.50.5
1015150
201490
3014120
401378
501560
6016105
要求程序从文件input.dat中读取上述数据。
(2)分别计算每户应交纳的电费、水费以及电费水费的总和。
●汇总全部住户水费、电费的总和;
●将计算结果按下面格式写入文件charge.dat中。
表格线不必输出,第一行内容可使用英文或拼音码表示。
水费(元)
电费(元)
合计(元)
7.5
75
82.5
45
51
66
4.5
39
43.5
30
37.5
9
52.5
61.5
total
27
40.5
603
301.5
342
●
实验条件:
1、装有Windows操作系统的微型计算机;
2、CodeBlocks软件。
实验设计方案:
1、分析问题。
2、画出程序的流程图。
3、实现程序。
实验数据和实验结果记录
1.解:
#include<
stdio.h>
intprintArray(int*m,intn)
{
inti;
for(i=0;
i<
n;
i++)
{
printf("
%d"
*(m+i));
if(((i+1)%5)==0)
\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;
inta,b;
int*pointer1,*pointer2;
scanf("
%d,%d"
&
a,&
b);
pointer1=&
a;
pointer2=&
b;
swap(pointer1,pointer2);
a,b);
3.解:
voidstrca(char*a,char*b)
for(;
*a!
='
\0'
;
a++);
*b!
a++,b++)
*a=*b;
*a='
voidmain()
chara[]="
Hello"
charb[]="
world!
"
strca(a,b);
puts(a);
4.解:
intstrcmp(char*p1,char*p2);
charstr1[30],str2[30];
printf("
\npleaseinputstring1:
gets(str1);
\npleaseinputstring2:
gets(str2);
\t%d\n"
strcmp(str1,str2));
inti=0;
while(*(p1+i)==*(p2+i))
if(*(p1+i++)=='
)//全部字符相同时返回结果0
return0;
return(*(p1+i)-(*(p2+i)));
//不同时返回结果为第一对不同字符的ASCII码的差值
5.解:
#defineN10
voidsort(int*p,intn)
inti,j,k,t;
n-1;
k=i;
for(j=i+1;
j<
j++)
if(*(p+j)<
*(p+k))
k=j;
if(k!
=i)
t=*(p+i);
*(p+i)=*(p+k);
*(p+k)=t;
inti,a[N];
PleaseenterNintegernumbers:
N;
a[i]);
sort(a,N);
Fromsmalltolargetosort:
a[i]);
解:
6.解
#defineN4
structStduent
intnum;
charname[20];
floatscore[3];
floataver;
};
structStduentstu[N],*p=stu,t;
voidinput(structStduentstu[])
请输入N名学生的信息:
学号、姓名、3名成绩:
%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;
N-1;
if(stu[k].aver<
stu[j].aver)
t=stu[i];
stu[i]=stu[k];
stu[k]=t;
voidprint(structStduentstu[])
\n按平均成绩从高到低依次为:
%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);
input(p);
average(p);
print(p);
7.解:
#include<
structStudent
intnumber;
structStudent*next;
structStudenta,b,c,*head,*p;
a.number=10;
b.number=20;
c.number=30;
head=&
a.next=&
b.next=&
c;
c.next=NULL;
p=head;
do
%d\n"
p->
number);
p=p->
next;
}while(p!
=NULL);
8.解:
#defineN1000000
unionFF
floatf;
}a;
intx[100];
请输入任意一个含有六位小数的float型的浮点数(如3.333333):
%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--)
%d"
x[j]);
."
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)
l++;
intll;
for(ll=0;
ll<
10;
ll++)
y[ll]);
此数小数部分转换过长,自动保存10位小数\n"
else
l+1;
9.解:
voidfirstUpper(char*M)
inti,word=0;
M[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)
voidstringHandler(char*M,void(*p)(char*M))
(*p)(M);
Thefinalstring:
puts(M);
chara[50];
intn;
Pleaseenterthestring:
gets(a);
Pleasechoose1or2:
n);
if(n==1)
stringHandler(a,firstUpper);
stringHandler(a,allUpper);
10.解:
stdlib.h>
#definesize7
structconsumer
//住户地址
intwaterc;
//水耗
floatwaterm;
//水费
intelec;
//电耗
floatelem;
//电费
floattotal;
//合计
}co[size];
FILE*fp1,*fp2;
inti,counter;
floata,b;
counter=size-1;
if((fp1=fopen("
E:
\\input.dat"
"
rb"
))==NULL)
cannotopenfile.\n"
exit
(1);
fscanf(fp1,"
%f%f\n"
//读电费、水费标准
%f,%f"
counter;
%d%d%d"
co[i].num,&
co[i].waterc,&
co[i].elec);
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("
\\charge.dat"
wb"
cannotopenfile\n"
********************\n"
fprintf(fp2,"
地址水耗(吨)水费(元)电耗(度)电费(元)合计(元)\n"
%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;
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;
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<
string.h>
structbook
charno[10];
//书号
charname[10];
//书名
charpublishday[10];
//出版日期
charchapt[3];
//类别
charwriter[10];
//作者
charindex[20];
//借阅标记
intrepeat;
//借阅次数
charadd[20];
//备份
}a[50];
intmenu()//杨国林
*******************************************************\n"
*欢迎来到图书管理系统*\n"
**\n"
*主菜单*\n"
*●[1]图书信息输入*\n"
*●[2]图书信息显示*\n"
*●[3]图书信息查询*\n"
*●[4]图书信息插入*\n"
*●[5]图书信息删除*\n"
*●[6]图书信息保存*\n"
*●[7]图书信息读入*\n"
*●[8]图书信息排序*\n"
*●[9]图书信息修改*\n"
*●[10]图书信息退出*\n"
请输入您想选择的序号O(∩_∩)O:
i);
returni;
intmenu2()
*●[1]图书信息显示*\n"
*●[2]图书信息查询*\n"
*●[3]图书信息退出*\n"
intenter()//张明娟
intn,j;
要输入的图书数量:
书号/书名/出版日期/类别/作者/借阅标记/借阅次数/备份(请用空格分开)\n"
for(j=0;
%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