C语言程序设计实验报告-数组.doc_第1页
C语言程序设计实验报告-数组.doc_第2页
C语言程序设计实验报告-数组.doc_第3页
C语言程序设计实验报告-数组.doc_第4页
C语言程序设计实验报告-数组.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

一、 实验项目名称数组二、 实验目的1掌握数组的基本概念,包括:数组的定义、数组的类型、数组的初始化、数组的赋值、数组元素下标的范围、数组元素的正确以及引用数组元素的输入/输出。 2掌握字符数组与字符串的使用方法。理解字符数组与其它数组的区别、理解字符串及其特点。掌握常用的字符串处理库函数的用法并清楚对字符串的简单处理。 3掌握与数组相关的算法,包括排序算法和查找算法等。 三、 实验内容进行有关数组的程序设计。具体内容:1编程实现:对任意一个一维数组,从中找出数组元素的最大值和最小值。 要求:(1)数组为整型数组(10个元素)。(2)使用scanf函数实现数组元素的输入。在输入前给出必要的提示。(3)输出时给出必要的说明,首先输出原始的10个元素,换行后输出最大值以及最大值在数组中的位置、最小值以及最小值在数组中的位置。 (4)如果现改为20个元素的数组,怎样修改程序?修改程序后,运行程序进行检查。如果需要数组元素不断改变,应怎样修改程序? 2编程实现:在给定的字符串中查找满足条件的第一个字符。要求:(1)字符串采用初始化的方式处理。(2)通过scanf函数读入一个任意字符。(3)在字符串中查找该字符,如果存在该字符,输出该字符在字符串中的位置以及相应的说明。如果不存在该字符,则要给出相应的信息。3编程实现:首先任意输入一个大于2且小于10的整数n,再输入一个由n决定的二维整型数组(n n),形成n n阶矩阵,将矩阵中最大元素所在的行和最小元素所在的行对调后,再输出该矩阵(注意:数组不允许动态定义)。 例如:原始数据: n=4 结果数据:1 2 3 4 8 11 14 163 5 9 10 3 5 9 10 8 11 14 16 1 2 3 4 15 2 7 6 15 2 7 6 要求: (1)本题中所涉及到的循环都采用for语句。 (2)在输入/输出时进行必要的说明。(3)对输入的210之间的整数(例如4)以n=4的格式输出。(4)输入一个n n矩阵(假定最大值与最小值不在同一行上),输出原始矩阵数据(按上述矩阵形式)。(5)查找最大值与最小值,将矩阵中最大元素所在的行和最小元素所在的行对调,输出对调后的矩阵数据。 (6)修改程序,对最大值与最小值可能出现在一行上的情况做出说明。 (7)对n为3,4,5时,输入数组元素是要注意哪些问题?执行程序,检查程序的正确性。4编程实现“折半查找”的过程。折半查找的处理过程是:在一个数据已排好序的数组中,首先比较关键字与数组中间的元素,如果两者相等,则查找结束;如果前者比后者小,则要查找的数据必然在数组的前半部,此后只需在数组的前半部中继续折半查找;如果前者的数值比后者大,则要查找的数据必然在数组的后半部,此后只需在数组的后半部继续进行折半查找。 要求: (1)设定一个数组存放20个数据,用赋初值的方法在程序中给出(假设这些数据已排序)。 (2)用scanf函数输入一个要找的数。 (3)对查找的结果给出相应的说明,如果找到该数,则给出该数是数组中第几个元素。如果该数不在数组中,则输出“无此数”信息。 (4)任意输入一些数据,检查程序的正确性。 (5)修改程序,设定输入的数据是无序的,采用scanf函数的形式输入,首先要对这些无序的数据进行排序,然后再采用“折半查找”。最后通过测试几组差别较大的数据检查程序的正确性。 (6)修改程序,改为函数调用的形式。编写一个选择法排序函数,对无序数据进行排序;编写一个查找函数对已排好序的数据进行查找。在主函数中输入数据(无序),调用上述函数,输出结果。5编程实现:三个学生、五门课程的成绩分别存放在46矩阵的前35列,计算出每个学生的平均成绩存放在该数组的最后一列的对应行上。计算单科的成绩总和存放在最后一行的对应列上,并输出单科成绩的平均分。输入/输出格式举例如下: Input(输入成绩): 65 87 68 56 78 83 94 67 85 91 71 75 69 84 89 Output(输出结果) : 65 87 68 56 78 705 83 94 67 85 91 840 71 75 69 84 89 775 2190 2560 2040 2580 2320 0 average: 730 853 680 860 773 要求: (1)数组类型为实型,输入成绩由scanf函数实现。(2)输出已输入的原始成绩数据(35)。 (3)计算每个学生的平均成绩以及单科的成绩总和并按要求填入到数组中,输出填入结果后的数组(46)。(4)j计算单科平均成绩后输出。 6编写函数catStr(char str1,char str2)用于进行两个字符串的连接,编写函数lenStr()用于统计一个字符串的长度。编写函数cmpStr()用于判断两个字符串的大小。 要求: (1)不允许使用字符处理库函数。(2)在主函数以初始化的方式输入两个字符串str1、str2。调用函数lenStr()计算字符串的长度。 (3)调用函数cmpStr()判断两个字符串的大小,如果str1大于等于str2,调用函数catStr()进行两个字符串的连接,将str1连接在str2后,否则,将str2连接在str1后,调用函数lenStr()统计连接后的字符串长度。 (4)在主函数中输出两个原始字符串和各自的长度以及处理后字符串及其长度。四、 实验步骤在编程软件中写如以下代码:一、#include void main()int a10,i,j,k,max,min;printf(请输入10个数:n);for (i=0;i10;+i)scanf(%d,&ai);printf(原始数据:);for (i=0;i10;+i)printf(%d ,ai);printf(n);max=a0;/*初始化max和min*/min=a0;for (i=0;i=max)max=ai;if (ai=min)min=ai;/*找最大值和最小值*/printf(最大值为);for (i=0;i10;+i)/*应对有多个最值的情况*/if (ai=max)printf(第%d个,i+1);printf(数,%dn,max);printf(最小值为);for (i=0;i10;+i)if (ai=min)printf(第%d个,i+1);printf(数,%d,min);修改为20个元素的方案:将程序中所有的10改为20即可。如果数组元素不断改变,只需将代码中的10改成元素个数即可。二、#include #include void main()int j,n;char i;char c=I am a student;/*初始化字符串*/printf(给定字符串为:%sn请输入要查找的字符:,c);scanf(%c,&i);n=strlen(c);/*得到函数给定字符串的长度*/for (j=0;j=n)printf(字符串中不存在满足条件的字符!);三、#include void main()int n,j,k,z,x,max,min,a1010;printf(请输入一个2到10之间的数:);scanf(%d,&n);printf(请输入一个n*n数组:n);for (j=0;jn;+j)for (k=0;kn;+k)scanf(%d,&ajk);printf(原始数组为:n=%dn,n);for (j=0;jn;+j)for (k=0;kn;+k)printf(%5d,ajk);/*输出原始数组*/printf(n);/*输出n个数后换行,使数组为n*n的格式*/max=a00;/*初始化最大值和最小值*/min=a00;z=0;x=0;for (j=0;jn;+j)for (k=0;kmax)max=ajk;z=j;/*得到最大值的行数*/for (j=0;jn;+j)for (k=0;kn;+k)if (ajkmin)min=ajk;x=j;/*得到最小值的行数*/for (j=0;jn;+j)k=azj;azj=axj;axj=k;/*交换最大值所在行和最小值所在行*/printf(结果数据:n);for (j=0;jn;+j)/*输出结果*/for (k=0;kn;+k)printf(%5d,ajk);printf(n);修改程序得到最大值和最小值所在行,只需在程序末尾加上语句:printf(“最大值在第%d行,最小值在第%d行”,z,x);在输入数组元素时要注意尽量不要重复出现最大值和最小值,程序会以最值中第一个出现的值作为最值。四、#include void main()int a20;int n,j,i,k;printf(给定的数组为:n);for(n=0;n20;+n)an=2*n+3;/*给定数组的初始化*/printf(%d ,an);printf(n);printf(请输入要查找的数:);scanf(%d,&j);int m=20;for (n=0;n=m;)/*折半查找*/i=(n+m)/2;if(aij) m=i-1;else if(ai=j)printf(该数在数组的第%d位上,i+1);break;/*输出找到的数,结束循环*/if (nm)printf(无此数);按要求修改后的程序为:#include void arr();/*声明排序函数*/int sea(int j);/*声明折半查找函数*/int a20;/*定义全局变量*/void main()int n,j,i,h;printf(请输入20个数据:n);for(n=0;n20;+n)scanf(%d,&an);/*输入无序的20个数据*/arr();/*调用排序函数*/printf(n请输入要查找的数:);scanf(%d,&j);h=sea(j);/*调用折半查找函数*/if(h=0)printf(无此数);elseprintf(该数在已排序数组的第%d位,h);void arr()/*排序函数*/int z,n;for (int n=0;n20;+n)for (int k=0;kak+1)z=ak;ak=ak+1;ak+1=z;printf(将数组排序,得:n);for (n=0;n20;+n)printf(%d ,an);/*输出已排序的数组*/int sea(int j)int n,i,h,m=20;for (n=0;n=m;)i=(n+m)/2;if(aij) m=i-1;else if(ai=j)h=i+1;break;/*找到该数后停止循环*/if (nm)h=0;return h;/*返回h值*/五、#include void main()int j,k;float a35,d3=0,b6=0,c5=0;printf(Input(输入成绩):n);for (j=0;j3;+j)for (k=0;k5;+k)scanf(%f,&ajk);for (j=0;j3;+j)for (k=0;k5;+k)dj=dj+ajk/5;for (k=0;k5;+k)for (j=0;j3;+j)bk=bk+ajk;for (j=0;j3;+j)b5=b5+dj;for (k=0;k5;+k)ck=bk/3;printf(nOutput(输出结果):);for (j=0;j3;+j)printf(n );for (k=0;k5;+k)printf(%-7.0f,ajk);printf(%-7.1f,dj);printf(n );for (k=0;k6;+k)printf(%-7.1f,bk);printf(nAverage:n );for (k=0;k5;+k)printf(%-7.1f,ck);六、#include void catStr(char str1,char str2);/*声明连接两个字符串的函数*/int lenStr(char str);/*声明统计长度的函数*/int cmpStr(char str1,char str2);/*声明比较字符串大小的函数*/char str3=;void main()int n,j,k,len1,len2,len3;char c,str1=,str2=;printf(请输入str1:);gets(str1);printf(请输入str2:);gets(str2);printf(str1原长为:%dnstr2原长为:%dn,lenStr(str1),lenStr(str2);/*调用统计长度的函数并输出原始长度*/j=cmpStr(str1,str2);/*调用比较大小函数*/if (j=1)/*将小字符串连接在大字符串后面*/printf(%s大于%sn,str1,str2);catStr(str1,str2);/*调用连接两个字符串的函数*/printf(合成的字符串为:%sn,str3);elseprintf(%s小于%sn,str1,str2);catStr(str2,str1);printf(合成的字符串为:%sn,str3);printf(合成的字符串长度为:%d,lenStr(str3);/*输出合成字符串的长度*

温馨提示

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

评论

0/150

提交评论