C语言实验报告模板.doc_第1页
C语言实验报告模板.doc_第2页
C语言实验报告模板.doc_第3页
C语言实验报告模板.doc_第4页
C语言实验报告模板.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C程序设计实验报告班级 一班 姓名 赵东珠 日期 2014年10月7日星期二 同组人 薛莲 指导教师 刘宝超 评分 1、 实验名称:数组应用程序设计实验2、 实验内容(问题描述)1) 改正下列程序的错误,使之具有如下功能:输入10个整数,按每行3个数输出这些整数,最后输出10个整数的平均值,保留1位小数。#includevoid mian( ) int a10, av;/* av表示平均值*/for(i=1; i=10; i+)scanf(%d, ai);for(i=1; i=10; i+) av = av + ai;printf(%d, ai);if(i%3=0) printf(n);printf(av=%fn, av);2) 已有一个已排好序的数组(如5,12,22,34,45,55,67,78,89,98),要求输入一个数后,按原来排序的规律将它插入到该数组中,并用二分法查找新插入的数所在位置(下标)。假设:所有的数都互不相同。3) 按数组初始化方法设置5名学生6门课程成绩(0100),输出:(1) 每个学生的平均成绩(2) 【选作】每门课程的平均成绩(3) 平均成绩最高的学生序号(有多个最高成绩时,只需输出一个,下同)(4) 【选作】平均成绩最高的课程序号(5) 【选作】每门课的不及格率(不及格学生数比例)(6) 每个学生各门课成绩升序排序的结果(7) 【选作】每个学生各课成绩中去掉一个最高分和最低分后的平均成绩需解决的主要问题:1)【实验内容1:计算平均值】1.1) 数组元素的初始化1.2) 确定数组下标的下限和上限,避免下标溢出1.3) 平均值如何转换为实型数2)【实验内容2:插入】4.1) 插入点的确定4.2) 插入点之后的数组元素的移动4.3) 二分查找(一定会成功) 3)【实验内容3:二维数组数据处理】3.1) 定义数组并初始化3.2) 求二维数组行平均和列平均3.3) 最大(最小)值及其序号的调整3.4) 求二维数组中小于60的元素个数统计3.5) 数据类型(成绩、平均成绩)3.6) 问题(6)-(7)的程序框架:/* N行M列int型二维数组s存放成绩,N:学生人数,M:课程门数 */* 长度为N的一位数组avgs存放每个学生各课成绩中去掉一个最高分和最低分后的平均成绩*/for (i=0; iN; i+) /* i:学生序号 */* 对数组s的第i行:si0, si1,siM-1升序排序 */* 求si1siM-2的平均值,存放到avgsi中 */* 输出 */for (i=0; iN; i+) /* i:学生序号 */putchar(n) ; /* 换行 */for (j=0; jM; j+) /* j:课程序号 */printf(%5d, sij) ; /* 输出排序后的成绩 */printf(*Avg:%d*, avgsi) ; /* 输出去最高最低分后的平均成绩 */3、 主要思路(分析过程、算法) 1)实验一: Step1 :改为 ; Step2 :mian( )改为main( ) ; Step3 :int a10, av;应改为 int a10; float av=0; ; Step4 :for(i=1; i=10; i+)应改为for(i=0; i=0;i-) ai+1=ai; a0=num; Step6 :针对输入一个数的第二种情况,将该数插入最后面,其他数不变。即直接 执行 aN=num; Step7 :针对第三种情况,利用for(j=0;jN-1;j+) if(ajnum&num=aj+1) break; 找到插入该数字的位置。 Step8 :将插入该数字后后面的数字向后挪一位。 Step9 :插入该数字aj+1=num Step10:利用循环输出该数组for(i=0;iN+1;i+) printf(%d ,ai); printf(n); Step11:用二分法查找下标位置先定义变量并初始化 left=0; right=N; Step12:二分法:while(left=right) m=(left+right)/2; if(amnum) right=m; else printf(%d的位置是%dn,num,m); break; Step13:考虑到不合法的问题if(leftright) m=-1; printf(%d,m); 2)实验三: Step1:首先定义变量i,j,sum,max_i,max_jave,max;定义数组stu_ave_array5 C_ave_array6;数组初始化inta56=50,60,70,80,90,95,68,70,80,90,85,90,70,80,60,80,90,95,50, 80,70,48,98,67,80,80,90,70,68,78; Step2:利用循环for(i=0;i5;i+) printf(stu%d| ,i+1); for(j=0;j6;j+) printf(%d ,aij); printf(n); 输出如图所示数组。 Step3:求每名学生的平均成绩for(i=0;i5;i+) sum=0; for(j=0;j6;j+) sum=sum+aij; ave=(float)sum/6; stu_ave_arrayi=ave; Step4:求每门课程的平均成绩for(j=0;j6;j+) sum=0; for(i=0;i5;i+) sum=sum+aij; ave=(float)sum/5; C_ave_arrayj=ave; Step5:求平均成绩最高的学生序号 max=stu_ave_array0; max_i=0; for(i=0;imax) max=stu_ave_arrayi; max_i=i; Step6:求平均成绩最高的课程序号 max=C_ave_array0; max_j=0; for(j=0;jmax) max=C_ave_arrayj; max_j=j; Step7:求每门课程的不及格率 for(j=0;j6;j+)count=0;for(i=0;i5;i+) if(aij60) count+;unpassj=(float)count/5*100; Step8:求每名学生各门成绩升序的结果 for(i=0;i5;i+) for(j=0;j6;j+) for(k=j+1,mi=j;k6;k+) if(aikaimi)temp=aimi;aimi=aik;aik=temp; Step9:输出升序结果 for(i=0;i5;i+) printf(stu%d|,i); for(j=0;j6;j+) printf(%d ,aij);printf(n); Step10:求每名学生去掉最低和最高成绩的平均成绩 for(i=0;i5;i+) printf(stu%d|去掉最低成绩%d,去掉最高成绩%dn,i,ai0,ai5); sum=0; for(j=1;j5;j+) sum=aij+sum;ave=(float)sum/4;printf(stu%d|ave=%.1fn,i,ave); 四、核心代码(关键程序段) 2)实验二: int aN+1=5,12,22,34,45,55,67,78,89,98;int i,num,j,k,m;int right,left;for(i=0;iN;i+)printf(%d ,ai);printf(n);printf(please insert a number:n);scanf(%d,&num);/printf(%dn,num)if(num=0;i-)ai+1=ai;a0=num;else if(numa9)aN=num;elsefor(j=0;jN-1;j+)if(ajnum&num=j+1;k-)ak+1=ak;aj+1=num;for(i=0;iN+1;i+)printf(%d ,ai);printf(n);left=0;right=N;while(left=right)m=(left+right)/2;if(amnum)right=m;else printf(%d的位置是%dn,num,m);break;if(leftright)m=-1;printf(%d,m); 3)实验三: int i,j,sum,max_i,max_j;float ave,max;float stu_ave_array5;float C_ave_array6;inta56=50,60,70,80,90,95,68,70,80,90,85,90,70,80,60,80,90,95,50,80,70,48,98,67,80,80,90,70,68,78;printf( C1 C2 C3 C4 C5 C6n);printf(-n);for(i=0;i5;i+)printf(stu%d| ,i+1);for(j=0;j6;j+)printf(%d ,aij);printf(n);printf(-n);printf(1)每名学生的平均成绩:n); printf(-n);for(i=0;i5;i+) sum=0; for(j=0;j6;j+) sum=sum+aij;ave=(float)sum/6;stu_ave_arrayi=ave;printf(stu%d|ave:%.1f n,i+1,ave);printf(-n);printf(2)每门课程的平均成绩:n); printf(-n);for(j=0;j6;j+)sum=0;for(i=0;i5;i+) sum=sum+aij;ave=(float)sum/5;C_ave_arrayj=ave;printf(C%d|ave:%.1f n,j+1,ave);printf(-n);printf(3)平均成绩最高的学生序号:n); printf(-n); max=stu_ave_array0;max_i=0;for(i=0;imax)max=stu_ave_arrayi;max_i=i;printf(平均成绩最高为%.1f,学生序号为%dn,max,max_i+1);printf(-n);printf(4)平均成绩最高的课程序号:n); printf(-n); max=C_ave_array0;max_j=0;for(j=0;jmax)max=C_ave_arrayj;max_j=j;/printf(%.1fn,stu_ave_arrayi);printf(课程平均成绩最高为%.1f,课程序号为C%dn,max,max_j+1);*/*(5)printf(-n);printf(5)每门课程的不及格率:n); printf(-n);printf(C1 C2 C3 C4 C5 C6n);for(j=0;j6;j+)count=0;for(i=0;i5;i+) if(aij60) count+;unpassj=(float)count/5*100;for(j=0;j6;j+)printf(%d% ,(int)unpassj);printf(n);/*(6)printf(-n);printf(6)每名学生各门成绩升序的结果:n); printf(-n);for(i=0;i5;i+) for(j=0;j6;j+) for(k=j+1,mi=j;k6;k+) if(aikaimi)temp=aimi;aimi=aik;aik=temp; for(i=0;i5;i+) printf(stu%d|,i); for(j=0;j6;j+) printf(%d ,aij);printf(n);/*(7)printf(-n);printf(7)每名学生去掉最低和最高成绩的平均成绩:n); printf(-n);for(i=0;i5;i+) printf(stu%d|去掉最低成绩%d,去掉最高成绩%dn,i,ai0,ai5); sum=0; for(j=1;jright退出循环即可; (2)将for(j=0;j=N-1;j+)写成for(j=0;jN-1;j+)。程序性能评价:性能优良,高效的实现了插入数字,并利用二分法很快的找到插入数字的下 标。实验三:运行结果如图:可以说实话吗运行不出来,错误如下,还没解决六、存在的问题及其解决方案(对程序的改进设想及思考题解答)存在问题及解决方案已在五中陈述,在此不做解释。对程序的改进设想:数组初始化过程十分枯燥漫长,可否简化输入数据的过程,或连接相应设备进行自行输入思考题解答(1) av没有初始值av = av + ai无法进行累加(2)/二分查找 left=0, right=N-1 while(left

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论