《高级语言程序设计》实习报告.docx
- 文档编号:15321050
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:24
- 大小:29.92KB
《高级语言程序设计》实习报告.docx
《《高级语言程序设计》实习报告.docx》由会员分享,可在线阅读,更多相关《《高级语言程序设计》实习报告.docx(24页珍藏版)》请在冰点文库上搜索。
《高级语言程序设计》实习报告
《高级语言程序设计》实习报告
一、题目:
编写程序,用函数实现通过指针连接两个字符串。
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<stdio.h>
void cat_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;i<SIZE;i++)
scanf("%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<stu[i+1].score)
{st=stu[i];stu[i]=stu[i+1];stu[i+1]=st;}
printf("num name score result\n");
for(i=0;i if(i printf("%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 2Fun 79 3Zhang 81 4Wang 90 5Min 97 6Lin89 7Tan69 8 Ling70 9Xi57 10Xu82 输出结果: num namescoreresult 5 Min97 PASS 4 Wang 90 PASS 6 Lin89 PASS 1 Li86PASS 10 Xu 82 PASS 3 Zhang 81 PASS 2 Fun 79 PASS 8 Ling70 FALL 7 Tan 69 FALL 9 Xi57 FALL 三、题目: 从键盘上输入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 #defineSIZE 3 structstudent {intnum; charname[15]; charsex[2]; intage; int score; charaddr[30]; }stu[SIZE]; voidsave() {FILE*fp; inti; if((fp=fopen("student","wb"))==NULL) {printf("cannotopenfile\n"); return; } for(i=0;i if(fwrite(&stu[i],sizeof(structstudent),1,fp)! =1) printf("filewriteerror\n"); fclose(fp); } void display() {FILE*fp; inti; if((fp=fopen("student","rb"))==NULL) {printf("cannot openfile\n"); return; } printf("numname sex age scoreaddr\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() {int i; printf("Pleaseinputstudents' message: \n"); printf("num,name,sex,age,score,addr\n"); for(i=0;i scanf("%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 1ZhangFangF19 96room_101 2WangMingM 20 86room_102 3XiaoDan F19 81room_103 numname sex age score addr 1ZhangFang F19 96room_101 2 WangMing M 2086 room_102 3XiaoDan F 19 81 room_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<stdio.h> 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=25 chicken=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<stdio.h> #include<string.h> #defineSIZE10 structsubject {intchin; intmath; intengl; intphys; intchem; intpoli; }; struct student {int term; intclass; int num; charname[15]; struct subject mark; intall; intaver; }stud[SIZE],temp; voidinput() {inti; printf("term,class,num,name,chin,math,engl,phys,chem,poli\n"); for(i=0;i scanf("%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); } void save() {FILE *fp; inti; if((fp=fopen("student_mark","wb"))==NULL) {printf("cannot openfile\n"); return; } for(i=0;i if(fwrite(&stud[i],sizeof(structstudent),1,fp)! =1) printf("filewriteerror\n"); fclose(fp); } void modify() {FILE*fp; int i; if((fp=fopen("student_mark","rb+"))==NULL) {printf("cannotopenfile\n"); return; } printf("termclass num namechimateng phy che pol\n"); for(i=0;i<SIZE;i++) {fread(&stud[i],sizeof(struct student),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("cannotopen file\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); } void order() {FILE*fp; inti,j; if((fp=fopen("student_mark","rb"))==NULL) {printf("cannot openfile\n"); return; } for(j=0;j<=SIZE-2;j++) for(i=0;i<=SIZE-1-j;i++) if(stud[i].aver<stud[i+1].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("cannotopen file\n"); return; } printf("term class num name chimatengphychepolall aver\n"); for(i=0;i<SIZE;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("cannot open file\n"); exit(); } for(i=0;i<SIZE;i++) if(stud[i].num==num2)return(i); elsereturn-1; fclose(fp); } intsearch2(char*name2) {FILE*fp; int i; if((fp=fopen("student_mark","rb"))==NULL) {printf("cannotopen file\n"); exit(); } for(i=0;i if(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.according number\n"); printf("2.accordingname\n"); printf("PLease enteryourchoice: \n"); scanf("%d",&choice); if(choice==1) {scanf("%d",&num1); if((i=search1(num1))>=0) {printf(" num namechimatengphy chepolallaver\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("The number%dnotfound! \n",num1); } if(choice==2) {gets(name1); if((i=search2(name1))>=0) {printf(" num name chimatengphyche pol all aver\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%snot found! \n",name1); } fclose(fp); } main() {int c1,c2; printf("Please inputstudents' 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("Doyou wanttosearchthemessage? \n"); printf("1.Yes\n"); printf("2.No\n"); scanf("%d",&c2); if(c2==1) search(); } 4.运行结果分析 please input students’messages:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 高级语言程序设计 高级 语言程序设计 实习 报告