实验6-数组——参考答案_第1页
实验6-数组——参考答案_第2页
实验6-数组——参考答案_第3页
实验6-数组——参考答案_第4页
实验6-数组——参考答案_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

实验6 数组一、一维数组实验2. 编程:输入长度为10的整型数组并输出;然后将其逆序存放后再输出。例如:Input 10 number: 0 1 2 3 4 5 6 7 8 9 After reversed: 9 8 7 6 5 4 3 2 1 0#includevoid main() int i, j, a10, t; printf(Input 10 number: ); for(i=0; i10; i+) /*读入数据*/scanf(%d, &ai); printf(origin data: ); for(i=0; i10; i+) /*输出原始数据*/printf(%d , ai); printf(n); for(i=0,j=9; ij ; i+,j-) /*逆序存放*/ t=ai; ai=aj; aj= t;printf(After reversed: ); /*输出逆序存放后的数据*/ for(i=0; i10; i+)printf(%d , ai); printf(n);3. 编程:输入n个(1n=10)正整数并保存到数组中,求出最大值、最小值、平均值,以及最大值、最小值在数组中的下标分别是多少。例如:Input n: 5Input 5 integer: 8 2 5 1 4max=8 index=0min=1 index=3average=4#include void main()int i, n , max, min, a10, sum;float average;printf(Input n (1n=10): );scanf(%d, &n);if(1n & n=10)printf(Input %d integer:, n); /*输入数据并求累加和*/for(i=0, sum=0; in; i+)scanf(%d, &ai);sum+=ai;average=(float)sum/n; /*求出平均值*/for(i=0, max=0, min=0; i amax)max= i;if(ai amin)min= i;printf(max=%-5d index=%dn, amax, max);printf(min=%-5d index=%dn, amin, min);printf(average=%.2fn, average);elseprintf(数据超出范围);4. 编程:青年歌手参加歌曲大奖赛,有10个评委对她(他)进行打分,试编程求这位选手的平均得分并输出(去掉一个最高分和一个最低分)。#include void main()int i, max, min;float a10, ave;printf(请输入10个评委的打分:);for(i=0, ave=0; i10; i+) /*输入分数并求累加和*/scanf(%f, &ai);ave+=ai;for(i=0, max=0 , min=0; iamax)max=i;if(aiamin)min=i;ave=ave-amax-amin;ave=ave/8;printf(该选手的评委打分是:);for(i=0; i10; i+) printf(%.2f , ai);printf(n);printf(去掉最高分%.2f,去掉最低分%.2f,该选手的平均得分是%.2fn, amax, amin, ave);5. 编程:用两种方法输出斐波那切数列的前40项(参考例6-4)。要求: (1)方法1:不使用数组; #include void main()int f1=1, f2=1, f3, i;printf(%12d%12d, f1, f2);for(i=3; i=40; i+)f3=f1+f2;printf(%12d, f3);if(i%5=0) printf(n);f1= f2;f2= f3; (2)方法2:使用一维数组。#include void main()int i;int fib40;fib0=fib1=1;for(i=2; i40; i+) /*计算其余的38个数*/ fibi= fibi-1 + fibi-2;for(i=0; i40; i+)printf(%12d,fibi);if(i+1)%5=0) printf(n);6. 编程:输入n个(1n=10)float型的数据并保存到数组中,用冒泡法或选择法将它们从大到小排序后输出。例如:Input n: 5Input 5 number: 8.5 2.3 5.1 1.4 4.9After sorted: 8.50 5.10 4.90 2.30 1.40#include void main()int i, j, n;float a10, t;printf(Input n: );scanf(%d,&n);if(n1 & n=10)printf(Input %d number:, n);for(i=0;in;i+)scanf(%f,&ai); printf(Before sorted:); /*输出排序前的数据*/for(i=0; in; i+)printf(%.2f , ai);printf(n);for(i=0; in-1; i+) /*冒泡排序*/for(j=0; jn-i-1; j+)if( aj aj+1 )t=aj;aj=aj+1;aj+1=t;printf(After sorted:); /*输出排序结果*/for(i=0; in; i+)printf(%.2f , ai);printf(n);elseprintf(数据超出范围);7. 在上题基础上(输入n个float型的数据并保存到数组中,用冒泡法或选择法将它们从大到小排序后输出)完成:在已经排好序的数组(长度不足10)中插入一个数m(键盘输入)后输出,保持数组的降序排列。程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。#include void main()int i, j, n, p;float a10, t, m;printf(Input n: );scanf(%d, &n);if(n1 & n=10)printf(Input %d number:, n);for(i=0; in; i+)scanf(%f, &ai); printf(Before sorted: ); /*输出排序前的数据*/for(i=0; in; i+)printf(%.2f , ai);printf(n);for(i=0; in-1; i+) /*冒泡排序*/for(j=0; jn-i-1; j+)if( aj aj+1 )t=aj;aj=aj+1;aj+1=t;printf(After sorted:); /*输出排序结果*/for(i=0; in; i+)printf(%.2f , ai);printf(n); printf(请输入要插入的数据m: ); scanf(%f, &m); /*找到插入位置*/if(m an-1) /*如果m比最后一个元素小,则直接插入到最后的位置*/ p = n; elsefor(i=0; i ai) p=i; break; for(i=n; i=p+1; i-) /*将插入位置之后的元素后移*/ai=ai-1; /*插入*/ap=m; printf(插入%.2f 后:, m); /*输出插入后结果*/for(i=0; in+1; i+)printf(%.2f , ai);printf(n);elseprintf(数据超出范围);二、二维数组实验1. 以下程序功能为:将下列矩阵中的元素向右移动一列,最后一列移至第一列。找出并改正以下源程序中错误,通过调试得出正确的运行结果。 1 4 6 8 10 12源程序(有错误的程序)#include #define ROW 2#define COL 3int main()int aROWCOL=1,4,6,8,10,12;int i,j,temp;for(i=0;i=0;j-)aij=aij+1; /*调试时设置断点*/ /改为aij+1=aij;ai0=temp; /*调试时设置断点*/for(int i=0;iROW;i+) /去掉intfor(j=0;jCOL;j+)printf(%6d,aij);printf(n);return 0;运行结果(改正后程序的运行结果)6 1 412 8 102. 编程:利用二维数组计算并打印一个n行的杨辉三角。例如:Input n: 61 1 11 2 11 3 3 11 4 6 4 11 4 10 10 5 1提示:第一列及对角线上的元素都是1,其他元素通过计算得出:如果用i表示行,j表示列,则第i行j列的元素#include void main()int a1010=0; /设最多10层int i, j, n;printf(请输入杨辉三角形的层数:);scanf(%d, &n);if(n10)printf(层数超出范围);return;for(i=0;in;i+) /给第0列和主对角线上的元素赋值1ai0=1; aii=1;for(i=2;in;i+) /计算其他位置元素的值for(j=1;ji;j+)aij=ai-1j-1+ai-1j;for(i=0;in;i+) /输出for(j=0;j=i;j+)printf(%4d,aij);printf(n);3. 编程:通过键盘输入3行4列的二维数组,分别按行和按列输出数组。例如:Input numner:1 2 3 4 5 6 7 8 9 10 11 0output by row: 1 2 3 4 5 6 7 8 9 10 11 0output by col: 1 5 9 2 6 10 3 7 11 4 8 0#include void main()int a34,i,j;printf(请输入 3 X 4 整数矩阵:n);for(i=0; i3; i+)for(j=0; j4; j+)scanf(%d, &aij);printf(按行输出:); for(i=0; i3; i+)for(j=0; j4; j+)printf(%d ,aij);printf(n);printf(按列输出:);for(i=0; i4; i+)for(j=0; j3; j+)printf(%d ,aji);printf(n);4. 编程:输入一个m*n矩阵,求他们的各行元素之和。例如:Input m , n: 2 2Input 2*2 matrix:4 5 5 6 sum0=9sum1=11提示:设计一个一维数组 int s10,分别保存各行元素之和。#include void main()int a1010, s10=0; /设定矩阵最大为10 x 10int m, n, i, j;printf(请输入矩阵的行数和列数:);scanf(%d%d, &m, &n);if(m10 | n10)printf(行或列(110)值超出范围);return;printf(请输入 %d*%d 矩阵:n,m,n);for(i=0; im; i+)for(j=0; jn; j+)scanf(%d,&aij);/求各行之和并输出for(i=0; im; i+)for(j=0; jn; j+)si+=aij;printf(sun%d= %d n, i, si);5. 编程:判断一个二维数组是否存在鞍点,若存在,则输出鞍点及其行号和列号;否则输出没有鞍点信息。“鞍点”是指这样的元素:它在本行是最大元素,而在本列是最小的元素。Input m , n: 2 2Input 2*2 matrix:4 5 5 6 i=0, j=1, saddle point: 5提示:找鞍点需要处理三件事情:(1)找每行中最大值所在的列下标;(2)判断该元素在本列上是否为最小;(3)判断是否找到了鞍点,若找到,输出。#include void main()int a1010; /设定矩阵最大为10 x 10int m, n, i, j, col, flag=0;printf(请输入矩阵的行数和列数:);scanf(%d%d, &m, &n);if(m10 | n10)printf(行或列(110)值超出范围);return; /退出程序printf(请输入 %d*%d 矩阵:n,m,n);for(i=0; im; i+)for(j=0; jn; j+)scanf(%d,&aij);for(i=0; im; i+)col=0; /找出第i行中的最大值所在列下标colfor(j=1; jn; j+)if(aicolaij)col=j;for(j=0; jajcol) break;if(j=m) flag=1; /有鞍点printf(i=%d, j=%d, saddle point:%dn,i,col,aicol);if(flag=0)printf(No saddle point!n);三、字符串实验1. 以下程序功能为:输入一个字符串,将其逆序输出。找出并改正以下源程序中错误,通过调试得出正确的运行结果。源代码(有错误的程序)#include #include void main()int i,j;char s80,result80;printf(Enter a string:n);gets(s);for(i=strlen(s)-1,j=0;i=0;i-,j+)resultj=si;resultj=0; /必须给字符串加上串结束标志printf(This is reverse string:n);puts(result);运行结果(改正后的程序)Enter a string :asdfgThis is the reverse string:gfdsa2. 编程:任意输一个字符串保存在一维字符数组中,求其长度(不用strlen函数)。例如:Input a string: aadfdglength=6提示:字符串的有效长度就是有效字符的个数,即数组中第一个0前面的字符个数。#include void main()int i, len=0;char s80;printf(请输入字符串,以回车键结束:);gets(s);for(i=0; si!=0; i+)len+;printf(字符串%s的长度为:%dn,s, len);3. 编程:任意输入两个字符串分别保存在一维字符数组中,把第二个字符串连接到第一个字符串末尾(不用strcat函数)。例如:Input two string:asdfgertyafter strcat: asdfgerty#include void main()int i,j;char s180, s280;printf(请输入字符串1以回车键结束:n);gets(s1);printf(请输入字符串2以回车键结束:n);gets(s2);for(i=0; s1i!=0; i+) ; /* 定位第一个字符串的结束标志*/for(j=0; s2j & i80; i+, j+ ) /*将s2接到s1后*/s1i=s2j;s1i=0; printf(两个串连接后:%sn,s1);4. 编程:从键盘读入两个字符串分别保存在一维字符数中,比较两个字符串大小(不用strcmp函数),输出较大的字符串。#include void main()int i;char a80, b80;printf(请输入字符串1以回车键结束:n);gets(a);printf(请输入字符串2以回车键结束:n);gets(b);/逐个比较直到两个字符不同或其中一个字符串结束for(i=0; ai & bi ; i+) if(ai!=bi) break;if (aibi)printf(第一个字符串%s大!n, a);else if (ai=bi)printf(两字符串相同!n);elseprintf(第二个字符串%s大!n, b);5. 编程:任意输入一个字符串保存在一维字符数组中,判断里面数字字符的个数。例如:Input a string:adg4521gadg4adgnumber: 5#include void main()int i, n=0;char s80;printf(请输入一个字符串以回车键结束:n);gets(s);for(i=0 ; si; i+)if(si=0 & si=9)n+;printf(字符串中包含的数字个数为:%dn,n);6. 编程:从一个字符串中删除从某个特定字符开始的所有字符。例如原字符串为abcdefg,特定字符为d,删除后的字符串为abc。#include void main()int i, flag=0; char c, s80;printf(请输入一个字符串以回车键结束:n);gets(s);printf(请输入特定字符:);c=getchar();for(i=0 ; si; i+)if(si=c)si=0;flag=1;break;if(flag=0)printf(输入字符中没有特定字符!n);elseputs(s);7. 编程:编写程序,从一个输入的字符串中抽取一部分(从第n个字符开始,抽取m个字符)构成一个新的字符串,并输出。要求:n和m都由用户输入。#include #include void main()unsigned int i, j, m, n;char s180, s280;printf(请输入一个字符串以回车键结束:n);gets(s1);printf(请输入子串的起始位置和长度:);scanf(%d%d, &n, &m);if( n0 & n0 & n+m = strlen(s1)+1 )for(i=n-1,j=0; s1i & i n+m-1 ; i+, j+) s2j=s1i;s2j=0;puts(s2);elseprintf(长度超出范围!n);elseprintf(起始位置超出范围!n);8. 编程:利用字符串库函数puts, gets, strcat, strcmp, strcpy, strlen完成下述操作:l 读入三个字符串str1,str2,str3l 输出这三个字符串l 分别求出这三个字符串的长度;l 比较str1和str2的大小;l 将str2连接到str1之后,并输出连接后的str1;l 复制str3到str1,并输出复制操作后的str1; #include #include void main()char str180, str280, str380;printf(请输入字符串str1以回车键结束:n);gets(str1);printf(请输入字符串str2以回车键结束:n);gets(str2);printf(请输入字符串str3以回车键结束:n);gets(str3);printf(三个字符串分别是:n);printf(str1: %sn, str1);printf(str2: %sn, str2);printf(str3: %sn, str3);pr

温馨提示

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

评论

0/150

提交评论