湖北理工学院C语言实验四

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

实验四数组实验课程名:C语言程序设计专业班级:学号:姓名:实验时间:实验地点:K4-102指导教师:杨慧一、实验目的和要求1.掌握一维数组和二维数组的定义、赋值和输入输出的方法;2.掌握字符数组和字符串函数的使用;3.掌握与数组有关的算法(特别是排序算法)。二、实验内容1.调试下列程序,使之具有如下功能:输入10个整数,按每行3个数输出这些整数,最后输出10个整数的平均值。写出调试过程。#includestdio.h#defineN10voidmain(){inti,a[N],av;for(i=0;iN;i++)scanf(%d,a[i]);for(i=0;iN;i++){printf(%d,a[i]);if(i%3==0)printf(\n);}for(i=0;i!=N;i++)av+=a[i];printf(av=%f\n,av);}解答:(1)源代码:#includestdio.hvoidmain(){inti,n,a[10];floatavg;n=10;for(i=0;in;i++)scanf(%d,&a[i]);for(i=0;in;i++){printf(%d,a[i]);if((i+1)%3==0)printf(\n);}avg=0;for(i=0;in;i++)avg+=a[i];avg/=10;printf(avg=%f\n,avg);}(2)运行结果:(3)运行结果分析:2.下面程序是输入5个数据,然后求它们的和并输出结果。#includestdio.hvoidmain(){inti,a[5],sum=0;scanf(%d,%d,%d,%d,%d,a);for(i=0;i=4;i++)sum+=a[i];printf(sum=%d\n,sum);}该程序中有哪些错误?如何修改?写出正确运行后的结果。解答:(1)源代码:#includestdio.hvoidmain(){inti,a[5],sum=0;scanf(%d%d%d%d%d,&a[0],&a[1],&a[2],&a[3],&a[4]);for(i=0;i=4;i++)sum+=a[i];printf(sum=%d\n,sum);}(2)运行结果:(3)运行结果分析:3.有一个3行4列的距阵,现要求编程求出其中最大的那个元素的值,以及它所在的行号与列号。下面程序的初始说明和输出语句如下所示,请补充完成该程序。#includestdio.hvoidmain(){inti,j,row,colum,max;staticinta[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};……printf(Max=%d,Row=%d,Colum=%d\n,max,row,colum);}解答:(1)源代码:#includestdio.hvoidmain(){inti,j,row=0,colum=0,max;inta[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};max=a[0][0];for(i=0;i=2;i++)for(j=0;j=3;j++)if(a[i][j]max){max=a[i][j];row=i;colum=j;}printf(max=%d,row=%d,colum=%d\n,max,row,colum);}(2)运行结果:(3)运行结果分析:4.数组中已存互不相同的10个整数,从键盘输入一个整数,输出与该值相同的数组元素下标。解答:(1)源代码:#includestdio.hvoidmain(){inti,x,a[10]={1,2,3,4,5,6,7,8,9,10};scanf(%d,&x);for(i=0;i10;i++)if(x==a[i]){printf(%d,i);break;}if(i==10)printf(notfound\n);}(2)运行结果:(3)运行结果分析:5.编写程序,任意输入10个整数的数列,先将整数按照从大到小的顺序进行排序,然后输入一个整数插入到数列中,使数列保持从大到小的顺序。解答:(1)源代码:#includestdio.h#defineSIZE20voidmain(){printf(请输入10个整数:\n);inta[SIZE];intn=10,i,j,k,b;for(i=0;in;i++){scanf(%d,&a[i]);}for(i=0;in;i++){for(j=i+1;jn;j++){if(a[i]a[j]){b=a[i];a[i]=a[j];a[j]=b;}}}printf(排序后的数为:\n);for(i=0;in;i++){printf(%d,a[i]);}printf(\n);printf(请输入要插入的一个数:\n);intc;scanf(%d,&c);n=n+1;for(i=0;in-1;i++){if(c=a[i]){for(j=n-1;ji;j--){a[j]=a[j-1];}a[i]=c;printf(插入后的数组为:\n);for(k=0;kn;k++){printf(%d,a[k]);}printf(\n);return;}}}(2)运行结果:(3)运行结果分析:6.输入十个互不相同的整数并存在数组中,找出最大元素,并删除。解答:#includestdio.hintmain(){inta[10];inti,k;for(i=0;i10;i++)scanf(%d,&a[i]);k=0;for(i=1;i10;i++)if(a[k]a[i])k=i;for(i=k;i9;i++)a[i]=a[i+1];for(i=0;i9;i++)printf(%4d,a[i]);}(1)运行结果:(2)运行结果分析:7.以下程序的功能是:从键盘上输入若干个学生的成绩,统计计算出平均成绩,并输出低于平均分的学生成绩,用输入负数结束输入。请填空:#includestdio.hvoidmain(){floatx[1000],sum=0.0,ave,a;intn=0,i;printf(Entermark:\n);scanf(%f,&a);while(a=0.0&&n1000){sum+=;x[n]=;n++;scanf(%f,&a);}ave=;printf(Output:\n);printf(ave=%f\n,ave);for(i=0;in;i++)if()printf(%f\n,x[i]);}解答:(1)源代码:#includestdio.hvoidmain(){floatx[1000],sum=0.0,ave,a;intn=0,i;printf(Entermark:\n);scanf(%f,&a);while(a=0.0&&n1000){sum+=a;x[n]=a;n++;scanf(%f,&a);}ave=sum/n;printf(Output:\n);printf(ave=%f\n,ave);for(i=0;in;i++)if(x[i]ave)printf(%f\n,x[i]);}(2)运行结果:(3)运行结果分析:8.综合编程题:打印如下杨辉三角形11112113311464115101051解答:(1)源代码:#includestdio.hvoidmain(){inti,j,a[6][6];for(i=0;i6;i++){a[i][0]=1;a[i][i]=1;}for(i=2;i6;i++){for(j=1;j=i-1;j++)a[i][j]=a[i-1][j-1]+a[i-1][j];}for(i=0;i6;i++){for(j=0;j=i;j++)printf(%3d,a[i][j]);printf(\n);}}(2)运行结果:(3)运行结果分析:9.调试下列程序,使之具有如下功能:任意输入两个字符串(如:“abc123”和“china”),并存放在a,b两个数组中。然后把较短的字符串放在a数组,较长的字符串放在b数组。并输出。#includestdio.h#includestring.hvoidmain(){chara[10],b[10];intc,d,k,ch;scanf(%s,&a);scanf(%s,&b);printf(a=%s,b=%s\n,a,b);c=strlen(a);d=strlen(b);if(cd)for(k=0;kd;k++){ch=a[k];a[k]=b[k];b[k]=ch;}printf(a=%s\n,a);printf(b=%s\n,b);}解答:(1)源代码:#includestdio.h#includestring.hvoidmain(){chara[100],b[100];charstr1[100],str2[100];scanf(%s%s,str1,str2);strcpy(a,strlen(str1)strlen(str2)?str1:str2);strcpy(b,strlen(str1)strlen(str2)?str1:str2);printf(a=%s\n,a);printf(b=%s\n,b);}(2)运行结果:(3)运行结果分析:10.阅读下面的程序,然后回答后面的问题:#includestdio.h#includestring.hvoidmain(){chars1[80],s2[40];inti=0,j=0;printf(\nPleaseinputstring1:);scanf(%s,s1);printf(\nPleaseinputstring2:);scanf(%s,s2);while(s1[i]!='\0')i++;while(s2[j]!='\0')s1[i++]=s2[j++];s1[i]='\0';printf(\nNewstring:%s,s1);}编辑、运行该程序,然后分别输入Country和side。请问:①程序执行的结果是什么?②该程序的功能是什么?解答:(1)源代码:(2)运行结果:(3)运行结果分析:11.填空完成下面程序,使其功能是对从键盘上输入的两个字符串进行比较,然后输出两个字符串中第一个不相同字符的ASCII码之差。例如:输入的两个字符串分别为abcdefg和abceef,则输出为-1。程序如下:#includestdio.hvoidmain(){charstr1[100],str2[100];inti,s;printf(\nInputstring1:\n);gets(str1);printf(“\nInputstring2:\n”);gets(str2);i=(1);while((str1[i]==str2[i])&&(str1[i]!=(2)))i++;s=(3);printf(%d\n,s);}解答:(1)源代码:#includestdio.hvoidmain(){charstr1[100],str2[100];inti,s;printf(\nInputstring1:\n);gets(str1);printf(\nInputstring2:\n);gets(str2);for(i=0;;i++){if(str1[i]==str2[i])continue;elsebreak;}s=str1[i]-str2[i];printf(%d\n,s);}(2)运行结果:(3)运行结果分析:12.填空完成下面程序,使其的功能是统计从终端输入字符中每个大写字母的个数。用#号作为输入结束标志。程序如下:#includestdio.h#includectype.hvoidmain(){intnum[26],i;charc;for(i=0;i26;i++)num[i]=0;while((1)!='#')/*统计从终端输入的大写字母个数*/if(isupper(c))

1 / 12
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功