《高级语言程序设计》实习报告.docx
《《高级语言程序设计》实习报告.docx》由会员分享,可在线阅读,更多相关《《高级语言程序设计》实习报告.docx(22页珍藏版)》请在冰点文库上搜索。
《高级语言程序设计》实习报告
《高级语言程序设计》实习报告
一、题目:
编写程序,用函数实现通过指针连接两个字符串。
1.需求说明
本实习题要求输入两个字符串,并将其中一个字符串通过指针连接到另一个字符串。
2.算法设计
(1)编写一个连接函数cat_string
a.先找到from字符串的末尾,以’\0’为标记;
b.将to字符串中的元素一个个的移到from字符串的末尾;
c.最后在to字符串末尾加上’\0’。
(2)编写主函数
a.先定义两个字符型指针变量a,b,和两个字符型数组str1,str2;使a指向数组str1,使b指向str2;
b.动态输入两个字符串,并将其打印出来;
c.调用cat_string函数,将字符串a连接到字符串b的末尾;
d.最后将结果打印出来。
(3)结束
3.程序清单:
#include
voidcat_string(char*from,char*to)
{
while(*to!
='\0')
to++;
for(;*from!
='\0';from++,to++)
*to=*from;
*to='\0';
}
main()
{
char*a,*b,str1[50],str2[100];
a=str1;
b=str2;
scanf("%s%s",a,b);
printf("string1=%s\nstring2=%s\n",a,b);
cat_string(a,b);
printf("\nsrting=%s\n",b);
}
4.运行结果分析
输入:
friend
boy
输出结果:
string1=friend
string2=boy
string=boyfriend
二、题目:
编写程序完成统计学生成绩。
功能包括输入学生的姓名和成绩,按成绩从高到低排列打印输出,对成绩前70%的学生定为合格(PASS),而后30%的学生定为不合格(FAIL)。
1.需求说明
本实习题要求输入学生的姓名和成绩,将成绩从高到低排列,并将其打印输出,对成绩前70%的学生定义为合格,而后30%的学生定义为不合格。
也就是说,若有学生10名,则排名前7位的学生为合格,后3位为不合格。
2.算法设计
(1)先定义结构体student,其中包括学号num、姓名name、成绩score;
(2)输入所有学生信息;
(3)对学生成绩进行排序,用气泡排序法,从高到低排列。
成绩排序时,其它信息的顺序也做相应的调整。
(4)对成绩前70%的学生定为合格PASS;而后30%的学生定为不合格FALL;
(5)将成绩从高到低打印出来;
(6)结束。
3.程序清单:
#include
#defineSIZE10
structstudent
{intnum;
charname[10];
intscore;
}stu[SIZE],st;
main()
{inti,j;
charp[]="PASS",f[]="FALL";
for(i=0;iscanf("%d%s%d",&stu[i].num,stu[i].name,&stu[i].score);
for(j=0;j<=SIZE-2;j++)
for(i=0;i<=SIZE-1-j;i++)
if(stu[i].score{st=stu[i];stu[i]=stu[i+1];stu[i+1]=st;}
printf("numnamescoreresult\n");
for(i=0;iif(iprintf("%2d%10s%5d%8s\n",stu[i].num,stu[i].name,stu[i].score,p);
else
printf("%2d%10s%5d%8s\n",stu[i].num,stu[i].name,stu[i].score,f);
}
4.运行结果分析
输入:
1Li86
2Fun79
3Zhang81
4Wang90
5Min97
6Lin89
7Tan69
8Ling70
9Xi57
10Xu82
输出结果:
numnamescoreresult
5Min97PASS
4Wang90PASS
6Lin89PASS
1Li86PASS
10Xu82PASS
3Zhang81PASS
2Fun79PASS
8Ling70FALL
7Tan69FALL
9Xi57FALL
三、题目:
从键盘上输入3个学生的信息,将它们存入文件student;然后再从文件中读出数据,显示在屏幕上。
1.需求说明
本实习题要求输入3个学生的信息,可以包括学号,姓名,年龄,性别,成绩,家庭住址等信息,将它们存入文件student;然后再从文件中读出数据,并将其显示在屏幕上。
2.算法设计
(1)先定义结构体student,其中包括学号num,姓名name,性别sex,年龄age,成绩score,家庭住址addr;
(2)编写保存函数save
a.先将文件打开;
b.若(fp=fopen(“student”,”wb”))==NULL,则说明文件无法打开;反之文件能打开;
c.在打开的文件中一一将信息写进去;
d.最后,将文件student关闭。
(3)编写显示函数display
a.先将文件打开;
b.若(fp=fopen(“student”,”wb”))==NULL,则说明文件无法打开;反之文件能打开;
c.从打开的文件中一一将信息读出,并将其显示在屏幕上;
d.最后,将文件关闭。
(7)编写主函数
a.输入3个学生的所有信息;
b.调用save()函数;
c.调用display()函数;
(5)结束。
3.程序清单:
#include
#defineSIZE3
structstudent
{intnum;
charname[15];
charsex[2];
intage;
intscore;
charaddr[30];
}stu[SIZE];
voidsave()
{FILE*fp;
inti;
if((fp=fopen("student","wb"))==NULL)
{printf("cannotopenfile\n");
return;
}
for(i=0;iif(fwrite(&stu[i],sizeof(structstudent),1,fp)!
=1)
printf("filewriteerror\n");
fclose(fp);
}
voiddisplay()
{FILE*fp;
inti;
if((fp=fopen("student","rb"))==NULL)
{printf("cannotopenfile\n");
return;
}
printf("numnamesexagescoreaddr\n");
for(i=0;i{fread(&stu[i],sizeof(structstudent),1,fp);
printf("%3d%-15s%-2s%3d%5d%-30s\n",stu[i].num,stu[i].name,stu[i].sex,
stu[i].age,stu[i].score,stu[i].addr);
}
fclose(fp);
}
main()
{inti;
printf("Pleaseinputstudents'message:
\n");
printf("num,name,sex,age,score,addr\n");
for(i=0;iscanf("%d%s%s%d%d%s",&stu[i].num,stu[i].name,stu[i].sex,&stu[i].age,
&stu[i].score,stu[i].addr);
printf("\n");
save();
display();
}
4.运行结果分析
Pleaseinputstudents’message:
num,name,sex,age,score,addr
1ZhangFangF1996room_101
2WangMingM2086room_102
3XiaoDanF1981room_103
numnamesexagescoreaddr
1ZhangFangF1996room_101
2WangMingM2086room_102
3XiaoDanF1981room_103
四、题目:
编程解决百钱百鸡问题:
中国古代数学家张丘建在他的《算经》中提出了著名的“百钱百鸡问题”:
鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,翁、母、雏各几何?
1.需求说明
本实习题要求解决百钱百鸡问题。
一只公鸡值5元,一只母鸡值3元,三只小鸡值1元。
如果用100元买100只鸡,公鸡,母鸡,小鸡各多少只?
2.算法设计
设公鸡、母鸡、小鸡各有x,y,z,题意规定用100元买100只鸡。
假定100元全部买公鸡的话,则最多可以买20只;若100元全部买母鸡,则最多可买母鸡33只,即x的值在0~20之间,y的取值在0~33之间。
根据题意可得到下面的等式:
5x+3y+z/3=100
x+y+z=100
所以此问题可归结为求这个不定方程的整数解。
(1)先定义3个变量x,y,z;
(2)用外层循环控制公鸡的数量,x的范围在0~20之间;
(3)用内层循环控制母鸡的数量,y的范围在0~33之间;
(8)在内外层循环的控制下,小鸡数z的值受x,y的值的制约,z=100-x-y;
(9)验证取z值的合理性及得到一组解的合理性,即同时满足z%3==0和5*x+3*y+z/3==100;
(10)打印出所有合理的结果;
(11)结束。
3.程序清单:
#include
main()
{intx,y,z;
for(x=0;x<=20;x++)
for(y=0;y<=33;y++)
{z=100-x-y;
if(z%3==0&&5*x+3*y+z/3==100)
printf("cock=%2dhen=%2dchicken=%2d\n",x,y,z);
}
}
4.运行结果分析
cock=0hen=25chicken=75
cock=4hen=18chicken=78
cock=8hen=11chicken=81
cock=12hen=4chicken=84
五、题目:
学生成绩管理系统设计
主要功能:
1)能按学期、按班级完成对学生成绩的录入、修改,用文件保存信息。
2)能按班级统计学生的成绩,求学生的总分及平均分,并能根据学生的平均成绩进行排序。
3)能查询学生成绩,不及格科目及学生名单。
按学号查询或按姓名查询。
4)能按班级输出学生的成绩单。
1.需求说明
本实习题要求按学期、班级对学生的各科成绩进行录入、修改、并保存;并能按班级计算学生的总分和平均分,并能根据学生的平均成绩进行排序;能按学号或姓名查询学生成绩;最后,能按班级输出学生的成绩单。
2.算法设计
(1)先声明结构体类型;
(2)编写录入函数input();
(3)编写保存函数save();
(4)编写修改函数modify();
(5)编写计算平均成绩函数average();
(6)编写排序函数order();
(7)编写打印函数print();
(8)编写搜索函数search();
(9)编写主函数;
(10)结束。
3.程序清单:
#include
#include
#defineSIZE10
structsubject
{intchin;
intmath;
intengl;
intphys;
intchem;
intpoli;
};
structstudent
{intterm;
intclass;
intnum;
charname[15];
structsubjectmark;
intall;
intaver;
}stud[SIZE],temp;
voidinput()
{inti;
printf("term,class,num,name,chin,math,engl,phys,chem,poli\n");
for(i=0;iscanf("%d%d%d%s%d%d%d%d%d%d",&stud[i].term,&stud[i].class,&stud[i].num,
stud[i].name,&stud[i].mark.chin,&stud[i].mark.math,&stud[i].mark.engl,
&stud[i].mark.phys,&stud[i].mark.chem,&stud[i].mark.poli);
}
voidsave()
{FILE*fp;
inti;
if((fp=fopen("student_mark","wb"))==NULL)
{printf("cannotopenfile\n");
return;
}
for(i=0;iif(fwrite(&stud[i],sizeof(structstudent),1,fp)!
=1)
printf("filewriteerror\n");
fclose(fp);
}
voidmodify()
{FILE*fp;
inti;
if((fp=fopen("student_mark","rb+"))==NULL)
{printf("cannotopenfile\n");
return;
}
printf("termclassnumnamechimatengphychepol\n");
for(i=0;i{fread(&stud[i],sizeof(structstudent),1,fp);
printf("%2d%8d%10d%15s%4d%4d%4d%4d%4d%4d\n",stud[i].term,stud[i].class,
stud[i].num,stud[i].name,stud[i].mark.chin,stud[i].mark.math,
stud[i].mark.engl,stud[i].mark.phys,stud[i].mark.chem,stud[i].mark.poli);
}
fclose(fp);
}
voidaverage()
{FILE*fp;
inti;
if((fp=fopen("student_mark","rb"))==NULL)
{printf("cannotopenfile\n");
return;
}
for(i=0;i{fread(&stud[i],sizeof(structstudent),1,fp);
stud[i].all=stud[i].mark.chin+stud[i].mark.math+stud[i].mark.engl+
stud[i].mark.phys+stud[i].mark.chem+stud[i].mark.poli;
stud[i].aver=stud[i].all/6.0;
}
save();
fclose(fp);
}
voidorder()
{FILE*fp;
inti,j;
if((fp=fopen("student_mark","rb"))==NULL)
{printf("cannotopenfile\n");
return;
}
for(j=0;j<=SIZE-2;j++)
for(i=0;i<=SIZE-1-j;i++)
if(stud[i].aver{temp=stud[i];stud[i]=stud[i+1];stud[i+1]=temp;}
save();
fclose(fp);
}
voidprint()
{FILE*fp;
inti;
if((fp=fopen("student_mark","rb"))==NULL)
{printf("cannotopenfile\n");
return;
}
printf("termclassnumnamechimatengphychepolallaver\n");
for(i=0;i{fread(&stud[i],sizeof(structstudent),1,fp);
printf("%2d%8d%10d%15s%4d%4d%4d%4d%4d%4d%4d%5.2f\n",stud[i].term,
stud[i].class,stud[i].num,stud[i].name,stud[i].mark.chin,stud[i].mark.math,
stud[i].mark.engl,stud[i].mark.phys,stud[i].mark.chem,stud[i].mark.poli,
stud[i].all,stud[i].aver);
}
fclose(fp);
}
intsearch1(intnum2)
{FILE*fp;
inti;
if((fp=fopen("student_mark","rb"))==NULL)
{printf("cannotopenfile\n");
exit();
}
for(i=0;iif(stud[i].num==num2)return(i);
elsereturn-1;
fclose(fp);
}
intsearch2(char*name2)
{FILE*fp;
inti;
if((fp=fopen("student_mark","rb"))==NULL)
{printf("cannotopenfile\n");
exit();
}
for(i=0;iif(strcmp(name2,stud[i].name)==0)return(i);
elsereturn-1;
fclose(fp);
}
voidsearch()
{FILE*fp;
inti,choice,num1;
charname1[15];
if((fp=fopen("student_mark","rb"))==NULL)
{printf("cannotopenfile\n");
return;
}
printf("search:
\n");
printf("1.accordingnumber\n");
printf("2.accordingname\n");
printf("PLeaseenteryourchoice:
\n");
scanf("%d",&choice);
if(choice==1)
{scanf("%d",&num1);
if((i=search1(num1))>=0)
{printf("numnamechimatengphychepolallaver\n");
printf("%10d%15s%4d%4d%4d%4d%4d%4d%4d%5.2f\n",stud[i].num,stud[i].name,
stud[i].mark.chin,stud[i].mark.math,stud[i].mark.engl,stud[i].mark.phys,
stud[i].mark.chem,stud[i].mark.poli,stud[i].all,stud[i].aver);
}
else
printf("Thenumber%dnotfound!
\n",num1);
}
if(choice==2)
{gets(name1);
if((i=search2(name1))>=0)
{printf("numnamechimatengphychepolallaver\n");
printf("%10d%15s%4d%4d%4d%4d%4d%4d%4d%5.2f\n",stud[i].num,stud[i].name,
stud[i].mark.chin,stud[i].mark.math,stud[i].mark.engl,stud[i].mark.phys,
stud[i].mark.chem,stud[i].mark.poli,stud[i].all,stud[i].aver);
}
else
printf("Thename%snotfound!
\n",name1);
}
fclose(fp);
}
main()
{intc1,c2;
printf("Pleaseinputstudents'messages:
\n");
input();
save();
printf("Doyouwanttomodifythemessage?
\n");
printf("1.Yes\n");
printf("2.No\n");
scanf("%d",&c1);
if(c1==1)
{modify();save();}
average();
order();
print();
printf("Doyouwanttosearchthemessage?
\n");
printf("1.Yes\n");
printf("2.No\n");
scanf("%d",&c2);
if(c2==1)
search();
}
4.运行结果分析
pleaseinputstudents’messages:
term,class,num,name,chi,mat,eng,phy,che,pol
10315031501wang899591798890
10315031502xiao879094808481
10315031503lin908979959077
10315031504tan70908