欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    《C语言》课内实验报告.doc

    • 资源ID:2385114       资源大小:91.50KB        全文页数:14页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《C语言》课内实验报告.doc

    C语言课内实验报告学生姓名:及 学 号:学 院:理学院班 级:数学111课程名称:C语言实验题目:结构体的应用指导教师姓名及职称: 2012年06月05日一、实验题目:结构体的应用二、实验目的:1进一步掌握结构体变量、数组的定义和使用方法,掌握结构体与指针的应用。2学习共用体的概念和使用。3学习链表的概念和使用。三、实验内容:1有6个学生,每个学生的数据包括学号、姓名、性别、4门课的成绩、总成绩、平均成绩。从键盘输入每个学生信息及4门课成绩,总成绩及平均成绩要通过4门课算出。然后用选择排序法按照总成绩由高到低对6个学生数据进行排序并输出排序结果。要求输入、排序、输出用3个自定义函数实现。编写源程序,给出注释及运行结果。(提示,请参阅教材上292页例11.5及例11.6的程序)。2建立一个含有10个结点的单链表,每个节点包括:学号、姓名、性别、年龄和一门课程的成绩。输入一个学号,删去等于此学号的结点;按学号排序向原单链表中插入两个新结点。编写源程序,给出注释及运行结果。(提示,请参阅教材上297页至308页例11.8-例11.11的程序)。四、实验结果:1.程序如下:#include<stdio.h> /*连接库函数stdio.h*/struct student /*声明结构体类型struct student,并定义此结构体类型的数组stu6*/int s_no; /*定义整形变量s_no于结构体类型struct student中*/char s_name10; /*定义字符数组s_name于结构体类型struct student中*/char s_sex; /*定义字符形变量s_sex于结构体类型struct student中*/float s_score4; /*定义浮点形数组s_score于结构体类型struct student中*/float sum; /*定义浮点形变量sum于结构体类型struct student中*/float average; /*定义浮点形变量average于结构体类型struct student中*/stu6;struct student *input(struct student *stu,int n) /*定义函数input(struct student *stu,int n),此函数返回指向struct student类型数据的指针*/struct student *p; /*定义指向struct student类型数据的指针p*/int i; /*定义整型变量i*/p=stu; /* p=stu*/printf("please input the infomation of student:nn"); /*输出” please input the infomation of student”*/printf(" no name sex score1 score2 score3 score4n"); /*输出”no name sex score1 score2 score3 score4”*/for(i=0;i<n;i+,p+) /*i=0;当i<n时,执行循环,i自加,p自加*/printf("student%d:",i+1); /*输出”student(i+1)”*/scanf("%d%s%c%f%f%f%f",&p->s_no,p->s_name,&p->s_sex,&p->s_score0,&p->s_score1,&p->s_score2,&p->s_score3); /*输入struct student所需的数据,储存在p指向的变量的地址*/return(&stu0); /*函数返回&stu0的值*/void output(struct student *p,int n) /*定义空型函数output(struct student *p,int n)*/int i; /*定义整型变量i*/printf("nnthe information of the students is:nn"); /*输出”the information of the students is:”*/printf("no name sex score1 score2 score3 score4 sum averagen"); /*输出"no name sex score1 score2 score3 score4 sum average”*/ for(i=0;i<n;i+) /*i=0;当i<n时,执行循环,i自加*/printf("student%d:",i+1); /*输出”student(i+1)”*/printf("%-2d%-5s%-2c%-6.2f%-6.2f%-6.2f%-6.2f%-7.2f%-6.2fn",pi->s_no,pi->s_name,pi->s_sex,pi->s_score0,pi->s_score1,pi->s_score2,pi->s_score3,pi->sum,pi->average); /*输出pi所指向变量的各个数据*/void count(struct student *stu,int n) /*定义空型函数count(struct student *stu,int n)*/struct student *p; /*定义指向struct student类型变量的指针p*/int i; /*定义整型变量i*/p=stu; /* p=stu*/for(i=0;i<n;i+,p+) /*i=0;当i<n时,执行循环,i自加,p自加*/p->sum=p->s_score0+p->s_score1+p->s_score2+p->s_score3; /*计算p->sum的值*/p->average=p->sum/4; /* p->average=p->sum/4*/ void sorted(struct student *stu,struct student *p,int n) /*定义空型函数sorted(struct student *stu,struct student *p,int n)*/int i,j,k; /*定义整型变量i,j,k*/struct student *temp; /*定义指向struct student类型变量的指针temp*/ for(i=0;i<n-1;i+) /*i=0;当i<n-1时,执行循环,i自加*/k=i; /* k=i*/for(j=i+1;j<n;j+) /*j=i+1;当i<n时,执行循环,j自加*/if(pk->sum<pj->sum) /*如果pk->sum<pj->sum*/k=j; /* k=j*/if(k!=i) /*如果k!=i*/temp=pi; /* temp=pi; pi=pk; pk=temp;*/ pi=pk;pk=temp;void main() /*空型定义主函数*/int i; /*定义整型变量i*/struct student *p6; /*定义指向struct student类型变量的指针数组p*/for(i=0;i<6;i+) /*i=0;当i<6时,执行循环,i自加*/pi=stu+i; /* pi=stu+i*/input(stu,6); /*执行函数input(stu,6)*/count(stu,6); /*执行函数count(stu,6)*/sorted(stu,p,6); /*执行函数sorted(stu,p,6)*/output(p,6); /*执行函数output(p,6)*/程序运行结果如下:2.程序如下:#include<stdio.h> /*连接库函数stdio.h*/ #include<malloc.h>/*连接库函数malloc.h*/#define LEN sizeof(struct student) /*定义符号常量LEN,为sizeof(struct student)*/struct student /*声明结构体类型struct student*/int no; /*定义整形变量no于结构体类型struct student中*/char name20; /*定义字符数组name20 于结构体类型struct student中*/char sex5; /*定义字符数组sex5 于结构体类型struct student中*/int age; /*定义整形变量age于结构体类型struct student中*/float score; /*定义浮点型变量score于结构体类型struct student中*/struct student *next; /*定义指向结构体变量struct student的指针变量next于结构体类型struct student中*/;int n=0; /*定义全局整型变量n=0*/struct student *creat(void) /*定义函数student *creat(void),此函数返回指向struct student类型数据的指针*/struct student *p1,*p2,*head; /*定义指向struct student类型变量的指针p1,p1,head*/int k=1; /*定义整型变量k=1*/head=NULL; /* head=NULL ;n=0*/n=0;p1=p2=(struct student *)malloc(LEN); /*开辟LEN大小的空间令p1,p2指向空间的首地址*/if(p1!=NULL) /*如果p1!=NULL*/printf("%sn","请输入学生信息"); /*输出“请输入学生信息”*/printf("%sn","学号 姓名 性别 年龄 成绩"); /*输出“学号 姓名 性别 年龄 成绩”*/ scanf("%d%s%s%d%f",&p1->no,p1->name,p1->sex,&p1->age,&p1->score);/*输入struct student所需的数据,储存在p1指向的变量的地址*/while(k!=2) /*当k!=2时,执行循环*/n=n+1; /* n=n+1*/if(n=1) head=p1; /*如果n=1,head=p1*/else p2->next=p1; /*否则p2->next=p1*/p2=p1; /* p2=p1*/printf("%s","是否继续 1 是;2 否 "); /*输出“是否继续 1 是;2 否”*/scanf("%d",&k); /*输入k的值*/if(k=2) break; /*如果k=2,跳出循环*/p1=(struct student *)malloc(LEN); /*开辟LEN大小的空间令p1指向空间的首地址*/if(p1!=NULL) /*如果p1!=NULL*/ scanf("%d%s%s%d%f",&p1->no,p1->name,p1->sex,&p1->age,&p1->score);/*输入struct student所需的数据,储存在p1指向的变量的地址*/ else goto loop; /*否则跳到loop标记的程序*/ p2->next=NULL; /* p2->next=NULL*/return(head); /*返回head作为函数的返回值*/elseloop: printf("%s","内存不够,无法建立链表"); /*否则输出“内存不够,无法建立链表”并用loop标记*/return(head); /*返回head作为函数的返回值*/struct student *insert(struct student *head)/*定义函数insert(struct student *head),此函数返回指向struct student类型数据的指针*/struct student *p1,*p2,*p0; /*定义指向struct student类型变量的指针p1,p1,p0*/p2=p1=head; /* p2=p1=head */if(head=NULL)printf("n%sn","请先建立学生信息"); return(head); /*如果head=NULL,输出“请先建立学生信息”,返回dead*/p0=(struct student *)malloc(LEN); /*开辟LEN大小的空间令p0指向空间的首地址*/printf("%sn","请输入学生信息"); /*输出“请输入学生信息”*/ printf("%sn","学号 姓名 性别 年龄 成绩"); /*输出“学号 姓名 性别 年龄 成绩”*/ scanf("%d%s%s%d%f",&p0->no,p0->name,p0->sex,&p0->age,&p0->score); /*输入struct student所需的数据,储存在p0指向的变量的地址*/if(head=NULL) /*如果(head=NULL*/head=p1;p1->next=NULL;n+; /* head=p1;p1->next=NULL;n+*/printf("n%sn","学生信息添加成功"); /*输出“学生信息添加成功”*/else /*否则*/while(p0->no>p1->no&&p1->next!=NULL) /*当p0->no>p1->no且p1->next!=NULL执行循环*/p2=p1; /* p2=p1; p1=p1->next;*/ p1=p1->next; if(p1->next=NULL) /*如果p1->next=NULL*/p1->next=p0; /* p1->next=p0;p0->next=NULL;n+;*/p0->next=NULL;n+;printf("n%sn","学生信息添加成功"); /*输出“学生信息添加成功”*/else /*否则*/p2->next=p0; /* p2->next=p0;p0->next=p1;n+;*/p0->next=p1;n+;printf("n%sn","学生信息添加成功"); /*输出“学生信息添加成功”*/return(head); /*函数返回head*/struct student *del(struct student *head) /*定义函数insert(struct student *head),此函数返回指向struct student类型数据的指针*/struct student *p1,*p2; /*定义指向struct student类型变量的指针p1,p1*/int num; /*定义整型变量num*/printf("%s","请输入要删除学生的学号:"); /*输出“请输入要删除学生的学号”*/scanf("%d",&num); /*输入num的值*/p2=p1=head; /* p2=p1=head*/if(p1=NULL) /*如果p1=NULL*/ printf("n%sn","此链表为空,无法删除"); /*输出此链表为空,无法删除*/else /*否则*/while(p1->no!=num && p1->next!=NULL) /*当(p1->no!=num且p1->next!=NULL时执行循环*/p2=p1; /* p2=p1; p1=p1->next;*/p1=p1->next;if(p1->next=NULL&&p1->no!=num) /*如果p1->next=NULL且p1->no!=num*/printf("n%sn","无此学生的信息"); /*输出“无此学生的信息”*/else /*否则*/if(p1=p2) /*如果p1=p2*/head=p1->next;n-; /* head=p1->next;n-*/printf("n%sn","学生信息删除成功"); /*输出“学生信息删除成功”*/else /*否则*/p2->next=p1->next;n-; /* p2->next=p1->next;n-*/printf("n%sn","学生信息删除成功"); /*输出“学生信息删除成功”*/return(head); /*函数返回head*/void output(struct student *head) /*定义空型函数output(struct student *head)*/struct student *p; /*定义指向struct student类型变量的指针p*/p=head; /* p=head*/printf("%s%d%snn","此链表有",n,"条信息"); /*输出“此链表有",n,"条信息”*/if(head!=NULL) /*如果head!=NULL*/printf("%sn","学号 姓名 性别 年龄 成绩"); /*输出“学号 姓名 性别 年龄 成绩”*/while(p!=NULL) /*当p!=NULL时,执行循环*/printf("%-4d%5s%-4s%-5d%-7.2fn",p->no,p->name,p->sex,p->age,p->score); /*输出p1所指向变量的各个数据*/p=p->next; /* p=p->next*/int index() /*定义返回整形数据的函数index()*/int flag; /*定义整型变量flag*/printf("n*%s*nn","学生信息管理系统"); /*输出“*学生信息管理系统*”*/printf(" 1%sn","建立学生信息"); /*输出“1建立学生信息”*/ printf(" 2%sn","添加学生信息"); /*输出“2添加学生信息”*/printf(" 3%sn","删除学生信息"); /*输出“3删除学生信息”*/printf(" 4%sn","显示学生信息"); /*输出“4显示学生信息”*/printf(" 0%snn","退出"); /*输出“0退出”*/printf(" %s","请选择: "); /*输出“请选择”*/scanf("%d",&flag); /*输入flag的值*/ return(flag); /*函数返回flag*/void main() /*定义空型主函数*/ struct student *head=NULL; /*定义指向struct student类型变量的指针head=NULL*/ int flag; /*定义整型变量flag*/ flag=index(); /* flag=index()*/ while(flag!=0) /*当flag!=0时,执行循环*/switch(flag) /*如果*/case 1:head=creat();flag=index();break; /*flag=1,head=creat();flag=index();结束switch语句*/;case 2:head=insert(head);flag=index();break; /*flag=2,head=insert();flag=index();结束switch语句*/case 3:head=del(head);flag=index();break; /*flag=3,head=del();flag=index();结束switch语句*/case 4:output(head);flag=index();break; /*flag=4,head=output();flag=index();结束switch语句*/default:printf("%s","选择错误"),flag=index(); /*否则,输出“选择错误”, flag=index()*/程序运行结果如下:1建立链表:2删除链表结点:3添加链表结点:五、实验体会或遇到问题:这次课内试验虽然题数少了,但每一题的复杂程度都比较大,逻辑也比较复杂。在编出程序之后,出现了各种各样的逻辑错误,但由于经过比较多的训练,对于各种逻辑错误,有了比较成熟和有效的调试方法,所以本次试验程序的调试还是比较顺利的。但有一些错误是听取了别人的建议之后才调试出来的,所以,与人交流也是很重要的。另外,我觉得到目前为止,在实验报告中,对程序单句注释不仅耗费比较多的时间,而且意义已经不大,所以我希望在以后的程序中,采取功能注释的方法,希望老师能够考虑。

    注意事项

    本文(《C语言》课内实验报告.doc)为本站会员(文库蛋蛋多)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开