实验6-数组——参考答案_第1页
实验6-数组——参考答案_第2页
实验6-数组——参考答案_第3页
实验6-数组——参考答案_第4页
实验6-数组——参考答案_第5页
免费预览已结束,剩余11页可下载查看

下载本文档

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

文档简介

1、、一维数组实验实验6数组2.编程:输入长度为10的整型数组并输出;然后将其逆序存放后再输出。例如:#include<stdio.h>void main()int i, j, a10, t;printf("Input 10 number:");for(i=0; i<10; i+)/*scanf("%d”, &ai);printf("origin data:");for(i=0; i<10; i+)/*printf("%d ", ai);printf("n");for(i=0,

2、j=9; i<j ; i+,j-)/*t=ai;ai=aj; aj= t;printf("After reversed: ");/*for(i=0; i<10; i+)printf("%d ", ai);printf("n");读入数据*/输出原始数据*/逆序存放*/输出逆序存放后的数据*/3.编程:输入n个(1<n<=10)正整数并保存到数组中,求出最大值、最小值、平均值,以及最大值、最小 值在数组中的下标分别是多少。例如:#include <stdio.h>void main()int i, n

3、 , max, min, a10, sum;float average;printf("Input n (1<n<=10):"); scanf("%d", &n);if(1<n && n<=10) 输入数据并求累加和*/求出平均值*/求最大、最小值的下标 */printf("Input %d integer:", n); /* for(i=0, sum=0; i<n; i+) scanf("%d”, &ai);sum+=ai;average=(float)sum/

4、n; /*for(i=0, max=0, min=0; i<n; i+) /* if(ai > 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个评委对她(他)进行打

5、分,试编程求这位选手的平均得分并输 出(去掉一个最高分和一个最低分)。#include <stdio.h>void main()int i, max, min;float a10, ave;printf(" 请输入10个评委的打分:");for(i=0, ave=0; i<10; i+)/*输入分数并求累加和 */scanf("%f", &ai);ave+=ai;for(i=0, max=0 , min=0; i<10; i+)/*求最大、最小值的下标 */if(ai>amax)max=i;if(ai<amin

6、) min=i;ave=ave-amax-amin;ave=ave/8;printf("该选手的评委打分是:");for(i=0; i<10; i+)printf("%.2f ", ai);printf("n");amin,printf("去掉最高分%.2f ,去掉最低分 %.2f ,该选手的平均得分是%.2fn", amax,ave);5 .编程:用两种方法输出斐波那切数列的前40项(参考例6-4)。要求:(1)方法1:不使用数组;#include <stdio.h>void main()int

7、 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 <stdio.h>void main()int i;int fib40;fib0=fib1=1;for(i=2; i<40; i+)/*计算其余的 38 个数 */fibi= fibi-1 + fibi-2;fo

8、r(i=0; i<40; i+)printf("%12d",fibi);if(i+1)%5=0) printf("n");6 .编程:输入n个(1<n<=10) float型的数据并保存到数组中,用冒泡法或选择法将它们从大到小排序后 输出。例如:#include <stdio.h> void main() int i, j, n;float a10, t;printf("Input n:");scanf("%d",&n);if(n>1 && n<=1

9、0)printf("Input %d number:", n);for(i=0;i<n;i+)scanf("%f",&ai);printf("Before sorted:"); /*输出排序前的数据 */for(i=0; i<n; i+)printf("%.2f ", ai);printf("n");for(i=0; i<n-1; i+)/*冒泡排序 */for(j=0; j<n-i-1; j+)if( aj < aj+1)t=aj;aj=aj+1;aj+1

10、=t; printf("After sorted:"); /*输出排序结果 */for(i=0; i<n; i+)printf("%.2f ", ai);printf("n");else printf("数据超出范围");7 .在上题基础上(输入n个float型的数据并保存到数组中,用冒泡法或选择法将它们从大到小排序后输出)完成:在已经排好序的数组(长度不足10)中插入一个数m (键盘输入)后输出,保持数组的降序排列。程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数

11、, 依次后移一个位置。#include <stdio.h>void main()int i, j, n, p;float a10, t, m;printf("Input n:");scanf("%d", &n);if(n>1 && n<=10)printf("Input %d number:", n);for(i=0; i<n; i+)scanf("%f", &ai);printf("Before sorted: ");/*输出排序前

12、的数据 */for(i=0; i<n; i+)printf("%.2f ", ai);printf("n");for(i=0; i<n-1; i+)/*冒泡排序 */for(j=0; j<n-i-1; j+) if( aj < aj+1) t=aj;aj=aj+1;aj+1=t;输出排序结果*/printf("After sorted:"); /* for(i=0; i<n; i+)printf("%.2f ", ai);printf("n");printf(&qu

13、ot;请输入要插入的数据m:");scanf("%f", &m);/*找到插入位置*/if(m < an-1)/*p = n;elsefor(i=0; i<n; i+)/*if( m > ai) p=i; break;for(i=n; i>=p+1; i-) /*ai=ai-1;/*插入*/ap=m;printf(" 插入 .2f 后:",m);/*for(i=0; i<n+1; i+)printf("%.2f ", ai); printf("n");elseprin

14、tf(" 数据超出范围");如果m比最后一个元素小,则直接插入到最后的位置否则,插入到中间的某个位置 */将插入位置之后的元素后移*/输出插入后结果*/*/、二维数组实验1.以下程序功能为:将下列矩阵中的元素向右移动一列,最后一列移至第一列。找出并改正以下源程序中 错误,通过调试得出正确的运行结果。14681012源程序(有错误的程序)#include <stdio.h>#define ROW 2#define COL 3int main()int aROWCOL=1,4,6,8,10,12;int i,j,temp;for(i=0;i<ROW;i+)te

15、mp=aiCOL-1;for(j=COL-2;j>=0;j-)aij=aij+1;/*调试时设置断点*/ 改为aij+1=aij;ai0=temp;/*调试时设置断点*/for(int i=0;i<ROW;i+)去掉intfor(j=0;j<COL;j+) printf("%6d",aij);printf("n");return 0;运行结果(改正后程序的运行结果)2 .编程:利用二维数组计算并打印一个 n行的杨辉三角。例如:提示:第一列及对角线上的元素都是1,其他元素通过计算得出:如果用i表示行,j表示列,则第i行j列的元素pi/ p

16、i 1,j 1pi 1,j#include <stdio.h>void main()int a1010=0;/设最多 10 层int i, j, n;printf("请输入杨辉三角形的层数:");scanf("%d", &n);if(n>10)printf("层数超出范围");return;给第0列和主对角线上的元素赋值1for(i=0;i<n;i+)/ ai0=1; aii=1; for(i=2;i<n;i+)/计算其他位置元素的值for(j=1;j<i;j+)aij=ai-1j-1+ai

17、-1j;for(i=0;i<n;i+)/输出for(j=0;j<=i;j+) printf("%4d",aij);printf("n");3 .编程:通过键盘输入3行4列的二维数组,分别按行和按列输出数组。例如:#include <stdio.h> void main()int a34,i,j;printf(" 请输入3 X 4整数矩阵:n");for(i=0; i<3; i+)for(j=0; j<4; j+) scanf("%d”, &aij);printf("按行输

18、出:");for(i=0; i<3; i+)for(j=0; j<4; j+) printf("%d ",aij);printf("n");printf(" 按列输出:");for(i=0; i<4; i+)for(j=0; j<3; j+)printf("%d ",aji);printf("n");4 .编程:输入一个m*n矩阵,求他们的各行元素之和。例如:提示:设计一个一维数组int s10,分别保存各行元素之和。#include <stdio.h&g

19、t; void main()int a1010, s10=0; / int m, n, i, j;设定矩阵最大为10 x 10printf("请输入矩阵的行数和列数:");scanf("%d%d", &m, &n);if(m<0 | m>10 11n<0 11n>10)printf(" 行或列(110)值超出范围");return;printf(" 请输入 %d*%d 矩阵:n",m,n);for(i=0; i<m; i+)for(j=0; j<n; j+) sc

20、anf("%d”,&aij);/求各行之和并输出for(i=0; i<m; i+)for(j=0; j<n; j+) si+=aij;printf("sun%d= %d n", i, si);5.编程:判断一个二维数组是否存在鞍点,若存在,则输出鞍点及其行号和列号;否则输出没有鞍点信息。 “鞍点”是指这样的元素:它在本行是最大元素,而在本列是最小的元素。提示:找鞍点需要处理三件事情:(1)找每行中最大值所在的列下标;(2)判断该元素在本列上是否为最小;(3)判断是否找到了鞍点,若找到,输出。#include <stdio.h>voi

21、d main()int a1010; /设定矩阵最大为10 x 10int m, n, i, j, col, flag=0;printf(" 请输入矩阵的行数和列数:");scanf("%d%d", &m, &n);if(m<0 | m>10 11n<0 11n>10)printf(" 行或列(110)值超出范围");return;/退出程序 printf(" 请输入 %d*%d 矩阵:n",m,n);for(i=0; i<m; i+)for(j=0; j<n;

22、j+)scanf("%d",&aij);for(i=0; i<m; i+)找出第i行中的最大值所在列下标colcol=0;/for(j=1; j<n; j+) if(aicol<aij)col=j;for(j=0; j<m; j+)/if(aicol>a皿col)break;if(j=m)判断该元素在本列上是否为最小flag=1;/有鞍点printf("i=%d, j=%d, saddle point:%dn",i,col,aicol); if(flag=0)printf("No saddle point!

23、n");三、字符串实验1 .以下程序功能为:输入一个字符串,将其逆序输出。找出并改正以下源程序中错误,通过调试得出正确 的运行结果。源代码(有错误的程序)#include <stdio.h>#include <string.h> 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(

24、"This is reverse string:n"); puts(result);运行结果(改正后的程序)2 .编程:任意输一个字符串保存在一维字符数组中,求其长度(不用 strlen函数)。例如:提示:字符串的有效长度就是有效字符的个数,即数组中第一个0'前面的字符个数。#include <stdio.h>void main()int i, len=0;char s80;printf("请输入字符串,以回车键结束:");gets(s);for(i=0; si!='0' i+)len+;printf(" 字

25、符串 s 的长度为:dn",s, len);3 .编程:任意输入两个字符串分别保存在一维字符数组中,把第二个字符串连接到第一个字符串末尾(不 用strcat函数)。例如:#include <stdio.h> void main()int i,j;char s180, s280;printf("请输入字符串1以回车键结束:n");gets(sl);printf("请输入字符串2以回车键结束:n");gets(s2);for(i=0; s1i!='0' i+) ;/*定位第一个字符串的结束标志*/for(j=0; s2j

26、 && i<80; i+, j+ )/*将 s2 接到 s1 后*/s1i=s2j;s1i尸0'printf("两个串连接后:sn",s1);4 .编程:从键盘读入两个字符串分别保存在一维字符数中,比较两个字符串大小(不用strcmp函数),输出较大的字符串。#include <stdio.h>void main()int i;char a80, b80;printf("请输入字符串1以回车键结束:n");gets(a);printf("请输入字符串2以回车键结束:n");gets(b);/逐

27、个比较直到两个字符不同或其中一个字符串结束 for(i=0; ai && bi ; i+) if(ai!=bi) break;if (ai>bi) printf("第一个字符串 s 大! n", a);else if (ai=bi)printf("两字符串相同! n");elseprintf("第二个字符串 s 大! n", b);5 .编程:任意输入一个字符串保存在一维字符数组中,判断里面数字字符的个数。例如:#include <stdio.h> void main() int i, n=0;cha

28、r s80;printf("请输入一个字符串以回车键结束:n");gets(s);for(i=0 ; si; i+)if(si>='0' && si<='9') n+;printf("字符串中包含的数字个数为:dn",n);6 .编程:从一个字符串中删除从某个特定字符开始的所有字符。例如原字符串为"abcdefg",特定字符为d',删除后的字符串为"abc" o#include <stdio.h> void main() int i,

29、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 <s

30、tdio.h>#include <string.h> void main() unsigned int i, j, m, n; char s180, s280;printf("请输入一个字符串以回车键结束:n");gets(s1);printf("请输入子串的起始位置和长度:");scanf("%d%d", &n, &m);if( n>0 && n<=strlen(s1) if (m>0 && n+m <= strlen(s1)+1 ) for(

31、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完成下述操作:读入三个字符串str1,str2,str3输出这三个字符串分别求出这三个字符串的长度;比较str1和str2的大小;将str2连接到str1之后,并输出连接后的 str1;

32、复制str3到str1 ,并输出复制操作后的str1 ;#include <stdio.h>#include <string.h>void main()char str180, str280, str380;printf("请输入字符串strl以回车键结束:n");gets(strl);printf("请输入字符串str2以回车键结束:n");gets(str2);printf("请输入字符串str3以回车键结束:n");gets(str3);printf("三个字符串分别是:n");pri

33、ntf("str1: %sn", strl);printf("str2: %sn", str2);printf("str3: %sn", str3);printf("三个字符串的长度分别是:n");printf("str1: %dn", strlen(strl);printf("str2: %dn", strlen(str2);printf("str3: %dn", strlen(str3);if(strcmp(str1, str2)>0)printf(" 字符串 strl 大于 str2'n"); else if(strcmp(str1, str2)=0)printf("字符串 strl

温馨提示

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

评论

0/150

提交评论