高级程序语言程序设计实验报告材料.docx
《高级程序语言程序设计实验报告材料.docx》由会员分享,可在线阅读,更多相关《高级程序语言程序设计实验报告材料.docx(35页珍藏版)》请在冰豆网上搜索。
![高级程序语言程序设计实验报告材料.docx](https://file1.bdocx.com/fileroot1/2022-12/31/8852013e-d2f5-438e-882d-d091cd9233de/8852013e-d2f5-438e-882d-d091cd9233de1.gif)
高级程序语言程序设计实验报告材料
高级语言程序设计课程设计
题目:
多重模块管理
专业计算机
班级1306班
学生林道松
学号3131903609
指导教师鲍春波/肖琳
起止时间2014-2-17—2014-2-21
2014年2月
A组题目
题目1:
写一个函数计算下列函数的值f(0),f(3),f(-3),测试之。
函数如下:
解:
#include
intmain()
{intf(intn);
intnum,result;
printf("inputthex:
");
scanf("%d",&num);
result=f(num);
printf("theresultis%d\n",result);
}
intf(intn)
{ints;
if(n>0)s=3*n*n-4;
if(n==0)s=2;
if(n<0)s=0;
returns;
}
评析:
这是一个简单的选择判断结构,只需将条件编写清楚即可。
题目2:
写一个函数voidmaxMinAver(int*data,int*max,int*min,float*ave,intsize),求一组数据的最大值、最小值和平均值,测试之。
其中data指向给定数据的数组的指针,max、min、ave分别指向最大值、最小值和平均值,size是数组的大小。
要求第一个实参是数组,第2、3、4个实参都是对普通的简单变量的某种操作,最后一个实参是数组的大小。
测试之
解:
#include
#include
voidmaxMinAver(int*data,int*max,int*min,float*ave,intsize);
intmain()
{
intn,i;
intmax,min;
floatave;
int*data;
printf("pleaseenterthenumbers:
\n");
scanf("%d",&n);
data=(int*)malloc(n*sizeof(int));
for(i=0;iscanf("%d",&data[i]);
maxMinAver(data,&max,&min,&ave,n);
printf("max:
%d\nmin:
%d\nave:
%.1f\n",max,min,ave);
return0;
}
voidmaxMinAver(int*data,int*max,int*min,float*ave,intsize)
{
inti,sum=0;
*max=data[0];
*min=data[0];
for(i=0;i{
if(*max<=data[i])
*max=data[i];
if(*min>=data[i])
*min=data[i];
sum+=data[i];
}
*ave=(float)sum/size;
}
评析:
这是一个以指针为参数的函数,用冒泡法对数组中的每一个数进行比较,这道题目的需要注意的地方就是在函数的调用需注意函数实参,以及对数组内存空间的申请。
题目3:
写一个函数用指针型字符串实现两个字符串比较,intmystrcmp(constchar*str1,constchar*str2),如果大于返回1,等于返回0,小于返回-1,测试之
解:
#include
intmystrcmp(constchar*str1,constchar*str2);
intmain()
{
charstr1[100],str2[100];
scanf("%s%s",str1,str2);
printf("%d\n",mystrcmp(str1,str2));
return0;
}
intmystrcmp(constchar*str1,constchar*str2)
{
inti;
for(i=0;*(str1+i)!
='\0'&&*(str2+i)!
='\0';i++)
{
if(*(str1+i)>*(str2+i))
return1;
if(*(str1+i)<*(str2+i))
return-1;
if(*(str1+i)==*(str2+i))
return0;
}
}
评析:
这道题的比较方法是将字母一一进行对比,利用指针将字母一个个进行比较,需要注意的地方就是取*运算。
题目4:
定义一个学生结构体,取别名STU,包含学号、姓名、数学、语文、计算机、英语等课程成绩,还有总分和平均分,写一个函数实现求一组学生每个学生各门课程的平均值,函数原型为floatave(STUstu[],intsize)。
测试之。
解:
#include
#include
#defineSIZE2
typedefstructstudent
{
intnum;
charname[10];
floatmath;
floatenglish;
floatcomputer;
floatchinese;
floattotal;
floataverage;
}STU;
STUstu[SIZE];
floatave(STUstu[],intsize);
intmain()
{
inti;
printf("pleaseinputthestudet'sinformation:
\n");
for(i=0;i{scanf("%d%s%f%f%f%f",&stu[i].num,stu[i].name,
&stu[i].math,&stu[i].english,&stu[i].computer,&stu[i].chinese);
}
ave(stu,SIZE);
for(i=0;i{
printf("num:
%d\nname:
%s\naverage:
%.2f\n\n",
stu[i].num,stu[i].name,stu[i].average);
}
return0;
}
floatave(STUstu[],intsize)
{
inti;
for(i=0;i{
stu[i].total=stu[i].math+stu[i].english+stu[i].computer+stu[i].chinese;
stu[i].average=stu[i].total/4;
}
}
评析:
这是一个用结构体数组进行信息保存管理的函数,需要注意到的地方是在输入信息与打印信息时要将注意结构体数组的名称
题目5:
写一个函数能够从文件读入一组学生STU的信息,保存到一个结构体数组中。
解:
#include
#include
#defineSIZE10
structstudent_type
{charname[10];
intnum;
intage;
charaddr[15];
}stud[SIZE];
voidload();
intmain()
{load();
return0;
}
voidload()
{inti;
FILE*fp;
if((fp=fopen("stu.txt","r"))==NULL)
{printf("cannotopenfile\n");
exit(0);
}
for(i=0;i{fscanf(fp,"%s%d%d%s",&stud[i].name,
&stud[i].num,&stud[i].age,&stud[i].addr);
printf("%-10s%4d%4d%-15s\n",stud[i].name,
stud[i].num,stud[i].age,stud[i].addr);
}
fclose(fp);
}
评析:
这是一个典型的从文件中输入信息保存在数组中在屏幕上打印出。
需要注意的打开文件所需要的头文件以及数据输入输出的格式。
题目6:
写一个函数能够输出某一学生结构体数组STUstu[10]的信息和每个人的总分、平均分到某一文本文件中,测试之。
输出格式是:
“%s%s%d%d%d%d%d%5.2f”
解:
#include
#include
#defineSIZE10
structstudent_type
{
charname[10];
charaddr[15];
intgrade;
intnum;
intheight;
intage;
intscore;
floatave;
}stu[SIZE];
voidoutput();
intmain()
{
output();
return0;
}
voidoutput()
{
inti;
FILE*fp;
fp=fopen("printf.txt","w");
for(i=0;i{scanf("%s%s%d%d%d%d%d%f",
stu[i].name,stu[i].addr,&stu[i].grade,&stu[i].num,
&stu[i].height,&stu[i].age,&stu[i].score,&stu[i].ave);
fprintf(fp,"%s%s%d%d%d%d%d%5.2f\n",
stu[i].name,stu[i].addr,stu[i].grade,stu[i].num,
stu[i].height,stu[i].age,stu[i].score,stu[i].ave);
}
}
评析:
注意文件的输入及输出格式即可。
题目7:
写一个函数能够打印输出学生结构体数组STUstu[10]的信息到屏幕上,测试之
解:
#include
#defineSIZE10
structstudent
{
intnum;
charname[10];
floatscore;
}stu[SIZE];
voidprint(structstudentstu[],intsize);
intmain()
{intn;
for(n=0;nscanf("%d%s%f",&stu[n].num,stu[n].name,&stu[n].score);
print(stu,SIZE);
return0;
}
voidprint(structstudentstu[],intsize)
{
inti;
for(i=0;iprintf("num:
%d\nname:
%s\nscore:
%.2f\n\n",stu[i].num,stu[i].name,stu[i].score);
}
评析:
注意函数的调用和输入和输出的格式。
题目8:
写一个函数能够把一组学生成绩信息按总分进行排序,测试之。
解:
#include
#defineSIZE2
structstudent
{
intnum;
charname[10];
floatscore;
}STU[SIZE];
voidcomp(structstudentstu[]);
intmain()
{
intn;
for(n=0;nscanf("%d%s%f",&STU[n].num,STU[n].name,&STU[n].score);
printf("TheOrderIs:
\n");
comp(STU);
for(n=0;nprintf("%6d%10s%8.1f\n",STU[n].num,STU[n].name,STU[n].score);
return0;
}
voidcomp(structstudentstu[])
{
inti,j,k,m;
for(i=0;i{k=i;
for(j=i+1;jif(STU[j].score>STU[k].score)
k=j;
m=STU[k].score;
STU[k].score=STU[i].score;
STU[i].score=m;
}
}
评析:
应用选择法对学生信息进行比较,注意结构体数组信息的格式。
题目9:
写一个函数能够查找给定学号的学生成绩信息,如果找到打印成绩信息,如果没有,显示“notfound!
”.测试之。
解:
#include
structstudent
{
intnum;
charname[15];
intchinese;
intmath;
intenglish;
};
voidsearchscore(structstudentstu[]);
intmain()
{
structstudentstu[5]={{10110,"zhang",70,80,90},{10111,"lin",90,80,90},
{10086,"zhao",70,80,90},{10010,"zhang",70,70,70},{10120,"chen",80,80,90}};
searchscore(stu);
return0;
}
voidsearchscore(structstudentstu[])
{
intn,m,number=0;
printf("enterthenumberyouwant:
\n");
scanf("%d",&m);
printf("TheResultIs:
\n");
for(n=0;n<5;n++)
{
if(m==stu[n].num)
{
printf("num:
%d\nname:
%s\nchinese:
%d\nmath:
%d\nenglish:
%d\n",stu[n].num,stu[n].name,
stu[n].chinese,stu[n].math,stu[n].english);
number=1;
}
}if(number==0)
printf("notfound!
\n");
}
评析;这是一个信息搜索程序,学生的信息可以是事先定义,也可以采用用户输入形式。
题目10:
设计一个界面函数,包含上述11个题目的调用,即
请选择
1调用第一个函数(具体的函数名)
2调用第二个函数(具体的函数名)
3...
...
9调用第9个函数(具体的函数名)
继续吗?
输入y继续下一次选择,输入n结束
解:
#include
#include
#include
#defineSIZE10
intf();
voidmaxMinAver();
intmystrcmp();
floatave();
typedefstructstudent
{
intnum;
charname[10];
floatmath;
floatenglish;
floatcomputer;
floatchinese;
floattotal;
floataverage;
}STU;
STUstu[SIZE];
voidload();
structstudent_type
{charname[10];
intnum;
intage;
charaddr[15];
}stud[SIZE];
voidoutput();
structStudent_type
{
charname[10];
charaddr[15];
intgrade;
intnum;
intheight;
intage;
intscore;
floatave;
}Stu[SIZE];
voidprint();
structsTudent
{
intnum;
charname[10];
floatscore;
}sTu[SIZE];
voidcomp();
structstudenT
{
intnum;
charname[10];
floatscore;
}StU[SIZE];
voidsearchscore();
structstuDent
{
intnum;
charname[15];
intchinese;
intmath;
intenglish;
};
intsw(intm);
voidmenu();
intmain()
{
intnum1,num2;
charstr;
menu();
scanf("%d",&num1);
sw(num1);
getchar();
scanf("%c",&str);
while(str=='N'||str=='n'&&str=='Y'||str=='y')
{if(str=='y')
{scanf("%d",&num2);
sw(num2);}
if(str=='n')
break;
getchar();
scanf("%c",&str);
}
return0;
}
intsw(intm)
{intx,n,i,max,min;
charstr1[100],str2[100];
floatkave;
int*data;
structstuDentstuD[5]={{10110,"zhang",70,80,90},{10111,"lin",90,80,90},
{10086,"zhao",70,80,90},{10010,"zhang",70,70,70},{10120,"chen",80,80,90}};
switch(m)
{
case1:
scanf("%d",&x);
printf("%d\n",f(x));break;
case2:
scanf("%d",&n);
data=(int*)malloc(n*sizeof(int));
for(i=0;iscanf("%d",&data[i]);
maxMinAver(data,&max,&min,&kave,n);
printf("max:
%d\nmin:
%d\nave:
%.1f\n",max,min,kave);break;
case3:
scanf("%s%s",str1,str2);
printf("%d\n",mystrcmp(str1,str2));break;
case4:
for(i=0;iscanf("%d%s%f%f%f%f",&stu[i].num,stu[i].name,
&stu[i].math,&stu[i].english,&stu[i].computer,&stu[i].chinese);
ave(stu,SIZE);
for(i=0;iprintf("num:
%d\nname:
%s\naverage:
%.2f\n\n",
stu[i].num,stu[i].name,stu[i].average);break;
case5:
load();break;
case6:
output();break;
case7:
for(n=0;nscanf("%d%s%f",&sTu[n].num,sTu[n].name,&sTu[n].score);
print(sTu,SIZE);break;
case8:
for(n=0;nscanf("%d%s%f",&StU[n].num,StU[n].name,&StU[n].score);
printf("TheOrderIs:
\n");
comp(StU);
for(n=0;nprintf("%6d%10s%8.1f\n",StU[n].num,StU[n].name,StU[n].score);break;
case9:
searchscore(stuD);break;
}printf("\n");
printf("继续吗?
\n");
}
voidmenu()
{
printf("||**********************************************||\n");
printf("||请选择你所需要的函数||\n");
printf("||**********************************************||\n");
printf("||1.求分段函数的值f(x)||\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("||**********************************************||\n");
printf("||**********************************************||\n\n");
printf("请输入所调用函数序号:
\n");
}
intf(intn)
{ints;
if(n>0