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

    湖北理工学院14本科C语言实验报告实验四数组.doc

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

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

    湖北理工学院14本科C语言实验报告实验四数组.doc

    实验四 数 组实验课程名:C语言程序设计专业班级: 14电气工程2班 学号: 201440210237 姓名: 熊帆 实验时间: 5.12-5.26 实验地点: K4-208 指导教师: 祁文青 一、实验目的和要求1. 掌握一维数组和二维数组的定义、赋值和输入输出的方法;2. 掌握字符数组和字符串函数的使用;3. 掌握与数组有关的算法(特别是排序算法)。二、实验内容1. 调试下列程序,使之具有如下功能:输入10个整数,按每行3个数输出这些整数,最后输出10个整数的平均值。写出调试过程。#include <stdio.h>#define N 10void main( ) int i,aN,av;for(i=0;i<N;i+)      scanf("%d",ai);     for(i=0;i<N;i+)         printf("%d",ai);           if(i%3=0)             printf("n");               for(i=0;i!=N;i+)         av+=ai;      printf("av=%fn",av);  解答:(1) 源代码: #include<stdio.h>#define N 10void main()int i,aN;float av=0;for(i=0;i<N;i+)scanf("%d",&ai); printf("n");for(i=0;i<N;i+)printf("%3d",ai);if(i+1)%3=0)printf("n");for(i=0;i!=N;i+)av+=ai;printf("n");av=av/N;printf("n");printf("av=%fn",av);(2)运行结果: (3) 运行结果分析:原程序中有若干处错误,分别为av这个变量应该定义为float型,scanf语句中输入数组的时候,在它前面应该加上地址符&。第一个if语句if(i%3=0),应该改成if(i+1)%3=0),因为要实现一行三个地输出,实际i=0对应的才是数组中的第一个元素。再者,在程序的适当位置加上输出换行语句可使得程序1执行页面更美观。 调试的过程大体可分为三大块,第一块为从第7行到第9行,功能为输入10个值。第二 块为从第10到第15行,功能为一行三个地输出那10个值。第三块为最后一个for语句, 功能为将那10个值进行累加。 2. 下面程序是输入5个数据,然后求它们的和并输出结果。#include <stdio.h>void main( )int i, a5, sum = 0; scanf("%d,%d,%d,%d,%d", a ); for (i = 0; i <= 4; i +) sum += ai; printf("sum = %d n", sum);该程序中有哪些错误?如何修改?写出正确运行后的结果。解答:(1) 源代码:#include<stdio.h>void main()int i,a5,sum=0;for(i=0;i<=4;i+)scanf("%d",&ai);for(i=0;i<=4;i+)sum+=ai;printf("sum=%dn",sum);(2) 运行结果: (3) 运行结果分析:原程序中的scanf语句是错的,应该采用for语句循环输入,还要把a换成ai,并在前面加上地址符&。验证程序的时候输入了这样五个值:54 24 33 12 8。然后运行程序,发现输出结果和预期一致。3. 有一个3行4列的距阵,现要求编程求出其中最大的那个元素的值,以及它所在的行号与列号。下面程序的初始说明和输出语句如下所示,请补充完成该程序。#include <stdio.h>void main( )int i, j, row, colum, max;static int a34 = 1,2,3,4, 9,8,7,6, -10,10,-5,2; printf(" Max = %d, Row = %d, Colum = %d n", max, row, colum);解答:(1) 源代码:#include<stdio.h>void main()int i,j,row,colum,max;static int a34 = 1,2,3,4, 9,8,7,6, -10,10,-5,2; max=a00;for(i=0;i<3;i+)for(j=0;j<4;j+)if(max<aij)max=aij;row=i+1; colum=j+1;printf("Max=%d,Row=%d,Colum=%dn",max,row,colum);(2) 运行结果: (3) 运行结果分析:应该对原本不完整的程序作这样的补充,加上两个for循环语句,以实现找出数组中最大的元素。并用row和column分别储存行标和列标,但要注意+1。4. 数组中已存互不相同的10个整数,从键盘输入一个整数,输出与该值相同的数组元素下标。解答:(1) 源代码: #include<stdio.h>void main() int i,x,a10=1,2,3,4,5,6,7,8,9,10; scanf("%d",&x); for(i=0;i<10;i+) printf("%4d",ai); printf("n"); for(i=0;i<10;i+) if(x=ai) break; if(i<10) printf("该元素的下标为%dn",i); else printf("该数组中没有 %dn",x);(2) 运行结果: (3) 运行结果分析:数组中已存互不相同的10个整数:1,2,3,4,5,6,7,8,9,10。验证程序的时候分别输入了7和19,并且正确地输出了下标或输出结果。如上面两张图所示。5. 编写程序,任意输入10个整数的数列,先将整数按照从大到小的顺序进行排序,然后输入一个整数插入到数列中,使数列保持从大到小的顺序。解答:(1) 源代码:#include<stdio.h>void main()int a11,i,j,x,temp;printf("请输入10个整数:n");for(i=0;i<10;i+)scanf("%d",&ai);for(j=0;j<9;j+)for(i=0;i<9-j;i+)if(ai<ai+1)/排序,交换temp=ai+1;ai+1=ai;ai=temp;for(i=0;i<10;i+)printf("%d ",ai);printf("n");printf("请再输入一个整数:");scanf("%d",&x);for(i=0,j=0;i<10;i+)if(ai>=x&&x>=ai+1)j=i;break;elsecontinue;for(i=0;i<j+1;i+)printf("%d ",ai);/输出插入点前的数字temp=aj+1; aj+1=x;printf("%d ",aj+1);/输出插入点的数字aj+1=temp;for(i=0;i<9-j;i+)/移位交换a10-i=a9-i;for(i=0;i<9-j;i+)printf("%d ",ai+j+2);/输出插入点后的数字printf("n");(2)运行结果: (3)运行结果分析:运行程序时输入了这样10个整数:6 11 9 15 68 23 2 32 50 28。经过程序中排序部分的作用,将10个整数按从大到小的顺序排序为:68 50 32 28 23 15 11 9 6 2。和预期是一致的,再输入一个数,以26为例,26位于28和23之间,于是按照程序变插入到28和23之间,最后输出68 50 32 28 26 23 15 11 9 6 26. 输入十个互不相同的整数并存在数组中,找出最大元素,并删除。解答:(1) 源代码:#include<stdio.h>void main()int a10,i,m,t,n;printf("输入十个互不相同的整数:n");for(i=0;i<10;i+)scanf("%d",&ai);n=a0;printf("删除其中最大的数之后:n");for(i=1;i<10;i+)if(n<ai)n=ai;m=i;t=m;for(i=m;i<9;i+)ai=ai+1;a9=t;for(i=0;i<9;i+)printf("%d ",ai);printf("n");(2)运行结果: (3) 运行结果分析:在运行程序的时候,输入了如图所示的十个不同的整数,经过程序的执行,删除其中最大的数97,再将剩下的9个数输出来。7. 以下程序的功能是:从键盘上输入若干个学生的成绩,统计计算出平均成绩,并输出低于平均分的学生成绩,用输入负数结束输入。请填空:#include <stdio.h>void main( ) float x1000, sum=0.0, ave, a; int n=0, i; printf ("Enter mark : n") ; scanf("%f", &a); while (a>=0.0 && n<1000) sum+= ; xn= ; n+; scanf("%f", &a); ave= ; printf ("Output : n"); printf ("ave = %fn", ave); for (i=0; i<n; i+) if ( ) printf("%fn", xi);解答:(1) 源代码:#include<stdio.h>void main()float x1000,sum=0.0,ave,a;int n=0,i;printf("Enter mark : n") ;scanf("%f",&a); while(a>=0.0&&n<1000) sum+=a; xn=a;n+; scanf("%f", &a); ave=sum/n;printf ("Output : n");printf ("ave = %fn", ave); for(i=0;i<n;i+) if (xi<ave) printf("%fn",xi);(2)运行结果: (3) 运行结果分析:运行程序的时候输入了如上图所示的10个分数,根据while语句中的内容,故可以把-1作为输入结束的标志。接下来再作相应的运算,结果均与事实相符。8. 综合编程题:打印如下杨辉三角形1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 解答:(1) 源代码:#include<stdio.h>void main()int a66,i,j;for(i=0;i<6;i+)for(j=0;j<=i;j+)if(i<=1)aij=1;elseif(j=i|j=0)aij=1;if(j>0&&i>j)aij=ai-1j-1+ai-1j;printf("下面的是杨辉三角形n");for(i=0;i<6;i+)for(j=0;j<=i;j+)printf("%4d",aij);printf("n"); (2)运行结果: (3) 运行结果分析:运用二维数组的定义和for循环来实现输出杨辉三角形。9. 调试下列程序,使之具有如下功能:任意输入两个字符串(如:“abc 123”和“china”),并存放在a,b两个数组中。然后把较短的字符串放在a数组,较长的字符串放在b数组。并输出。#include <stdio.h>#include <string.h> void main() char a10,b10; int c,d,k,ch; scanf("%s",&a); scanf("%s",&b); printf("a=%s,b=%sn",a,b); c=strlen(a); d=strlen(b); if(c>d) for(k=0;k<d;k+) ch=ak;ak=bk;bk=ch; printf("a=%sn",a); printf("b=%sn",b); 解答:(1) 源代码: #include <stdio.h>#include <string.h> void main() char a10,b10; int c,d,k,ch; scanf("%s",&a); scanf("%s",&b); printf("a=%s,b=%sn",a,b); c=strlen(a); d=strlen(b); if(c>d) for(k=0;k<c;k+) ch=ak; ak=bk; bk=ch; bk='0' printf("a=%sn",a); printf("b=%sn",b);(2)运行结果: (3) 运行结果分析:原程序中,应该把for语句中的k<d改为k<c,再就是在输出最终结果之前可令bk='0',以避免输出结果中出现乱码的情况。运行程序的时候,输入a为一个较长的字符串,b较短,然后二者会进行交换,输出结果如上图所示。10. 阅读下面的程序,然后回答后面的问题:#include <stdio.h>#include <string.h> void main( ) char s180, s240; int i = 0, j = 0; printf(" n Please input string1:"); scanf("%s", s1); printf(" n Please input string2:"); scanf("%s", s2); while (s1i!= '0' )i+; while (s2j!= '0' )s1i+=s2j +; s1i= '0' printf("n New string: %s", s1);编辑、运行该程序,然后分别输入Country 和side。请问:程序执行的结果是什么?输出:Countryside该程序的功能是什么?将第二个字符串连接到第一个字符串的后面从而组成一个新的字符串解答:(1) 源代码:#include <stdio.h>#include <string.h> void main( ) char s180, s240; int i = 0, j = 0; printf(" n Please input string1:"); scanf("%s", s1); printf(" n Please input string2:"); scanf("%s", s2); while (s1i!= '0' )i+; while (s2j!= '0' )s1i+=s2j +; s1i= '0' printf("n New string: %s", s1); printf("n");(2)运行结果: (3) 运行结果分析:运行程序的时候先输入Country,再输side,经过程序的运行,实现了将side连接到Country的后面形成新的单词Countryside,即实现了将第二个字符串连接到第一个字符串的后面从而组成一个新的字符串的功能。11. 填空完成下面程序,使其功能是对从键盘上输入的两个字符串进行比较,然后输出两个字符串中第一个不相同字符的ASCII码之差。例如:输入的两个字符串分别为abcdefg和abceef,则输出为-1。程序如下: #include <stdio.h> void main ( ) char str1100,str2100; int i,s; printf("n Input string 1:n");gets(str1); printf(“n Input string 2:n”);gets(str2); i= (1) ; while(str1i=str2i)&&(str1i!= (2) ) i+; s= (3) ; printf("%dn",s); 解答:(1) 源代码:#include<stdio.h> void main() char str1100,str2100; int i,s; printf("n Input string 1:n");gets(str1); printf("n Input string 2:n");gets(str2); i=0; while(str1i=str2i)&&(str1i!='0') i+; s=str1i-str2i; printf("%dn",s);(2)运行结果: (3) 运行结果分析:运行程序时先输入hey boys,再输入hey girls,两个字符串中第一个不相同字符分别为b和g,ASCII码值相差-5,与事实相符。12. 填空完成下面程序,使其的功能是统计从终端输入字符中每个大写字母的个数。用#号作为输入结束标志。程序如下: #include <stdio.h> #include <ctype.h> void main ( ) int num26,i; char c; for (i=0;i<26;i+) numi=0; while ( (1) != '#') /* 统计从终端输入的大写字母个数*/ if (isupper(c) numc-65 (2) ; for (i=0;i<26;i+) /* 输出大写字母和该字母的个数*/ if (numi)printf("%c:%dn",i (3) ,numi); 解答:(1) 源代码:#include<stdio.h>#include<ctype.h>void main() int num26,i; char c; for(i=0;i<26;i+) numi=0; while(c=getchar()!='#') if(isupper(c) numc-65+=1; for(i=0;i<26;i+) if(numi)printf("%c:%dn",i+65,numi);(2)运行结果: (3) 运行结果分析:运行程序的时候输入的字符串为CYUYANCNA,经过程序的运行,统计出的个字母的数量与事实是相符的。13. 编写程序,输入若干个字符串,求出每个字符串的长度,并打印最长一个字符串的内容。以“stop”作为输入的最后一个字符串。解答:(1) 源代码: #include<stdio.h> #include<string.h> void main()char a2020;int i=0,t=0,b,c;printf("请输入字符串吧!n");while(1)scanf("%s",ai);b=strlen(ai);printf("%3d",b);if(t<b)t=b;c=i; if(ai0='s')&& (ai1='t')&& (ai2='o')&& (ai3='p')&& (ai4='0')break;i+;printf("n");printf("最长的是%sn",ac); (2)运行结果: (3) 运行结果分析:我输入了一个英语句子,程序统计出来了各个单词的字母数,并且指出了最长的单词tomorrow,与事实是一致的。14.编写程序,输入字符串s1和s2以及插入位置f,在字符串s1中的指定位置f处插入字符串s2。如:输入"BEIJING"、"123"和位置3,则输出:"BEI123JING123"。解答:(1) 源代码:#include<stdio.h>#include<string.h>void main()char s120,s220,t120,t220;int i,j,n,f;printf("请输入:n");scanf("%s%s%d",s1,s2,&f);n=strlen(s1);for(i=0;i<f;i+)t1i=s1i;t1i='0'strcat(t1,s2);for(j=0;j<=n-f;j+)t2j=s1i;i+;t2j='0'strcat(t1,t2);strcat(t1,s2);printf("%sn",t1);(2)运行结果: 三、结论(写本次实验的收获)本次实验主要涉及数组与for循环语句的使用,从中可以体会到对for语句的灵活运用非常高。而且要注意数组的输入输出问题,以及字符串数组及相关的函数的使用。

    注意事项

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

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开