实验6 数组参考答案.docx

上传人:b****8 文档编号:11007596 上传时间:2023-02-24 格式:DOCX 页数:26 大小:23.19KB
下载 相关 举报
实验6 数组参考答案.docx_第1页
第1页 / 共26页
实验6 数组参考答案.docx_第2页
第2页 / 共26页
实验6 数组参考答案.docx_第3页
第3页 / 共26页
实验6 数组参考答案.docx_第4页
第4页 / 共26页
实验6 数组参考答案.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

实验6 数组参考答案.docx

《实验6 数组参考答案.docx》由会员分享,可在线阅读,更多相关《实验6 数组参考答案.docx(26页珍藏版)》请在冰豆网上搜索。

实验6 数组参考答案.docx

实验6数组参考答案

实验6数组

一、一维数组实验

2.编程:

输入长度为10的整型数组并输出;然后将其逆序存放后再输出。

例如:

Input10number:

0123456789

Afterreversed:

9876543210

#include

voidmain()

{

inti,j,a[10],t;

printf("Input10number:

");

for(i=0;i<10;i++)/*读入数据*/

scanf("%d",&a[i]);

printf("origindata:

");

for(i=0;i<10;i++)/*输出原始数据*/

printf("%d",a[i]);

printf("\n");

for(i=0,j=9;i

{

t=a[i];

a[i]=a[j];

a[j]=t;

}

printf("Afterreversed:

");/*输出逆序存放后的数据*/

for(i=0;i<10;i++)

printf("%d",a[i]);

printf("\n");

}

3.编程:

输入n个(1

例如:

Inputn:

5

Input5integer:

82514

max=8index=0

min=1index=3

average=4

#include

voidmain()

{

inti,n,max,min,a[10],sum;

floataverage;

printf("Inputn(1

");

scanf("%d",&n);

if(1

{

printf("Input%dinteger:

",n);/*输入数据并求累加和*/

for(i=0,sum=0;i

{

scanf("%d",&a[i]);

sum+=a[i];

}

average=(float)sum/n;/*求出平均值*/

for(i=0,max=0,min=0;i

{

if(a[i]>a[max])

max=i;

if(a[i]

min=i;

}

printf("max=%-5dindex=%d\n",a[max],max);

printf("min=%-5dindex=%d\n",a[min],min);

printf("average=%.2f\n",average);

}

else

printf("数据超出范围");

}

4.编程:

青年歌手参加歌曲大奖赛,有10个评委对她(他)进行打分,试编程求这位选手的平均得分并输出(去掉一个最高分和一个最低分)。

#include

voidmain()

{

inti,max,min;

floata[10],ave;

printf("请输入10个评委的打分:

");

for(i=0,ave=0;i<10;i++)/*输入分数并求累加和*/

{

scanf("%f",&a[i]);

ave+=a[i];

}

for(i=0,max=0,min=0;i<10;i++)/*求最大、最小值的下标*/

{

if(a[i]>a[max])

max=i;

if(a[i]

min=i;

}

ave=ave-a[max]-a[min];

ave=ave/8;

printf("该选手的评委打分是:

");

for(i=0;i<10;i++)

printf("%.2f",a[i]);

printf("\n");

printf("去掉最高分%.2f,去掉最低分%.2f,该选手的平均得分是%.2f\n",a[max],a[min],ave);

}

 

5.编程:

用两种方法输出斐波那切数列的前40项(参考例6-4)。

要求:

(1)方法1:

不使用数组;

#include

voidmain()

{

intf1=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

voidmain()

{

inti;

intfib[40];

fib[0]=fib[1]=1;

for(i=2;i<40;i++)/*计算其余的38个数*/

fib[i]=fib[i-1]+fib[i-2];

for(i=0;i<40;i++)

{

printf("%12d",fib[i]);

if((i+1)%5==0)

printf("\n");

}

}

6.编程:

输入n个(1

例如:

Inputn:

5

Input5number:

8.52.35.11.44.9

Aftersorted:

8.505.104.902.301.40

#include

voidmain()

{

inti,j,n;

floata[10],t;

printf("Inputn:

");

scanf("%d",&n);

if(n>1&&n<=10)

{

printf("Input%dnumber:

",n);

for(i=0;i

scanf("%f",&a[i]);

printf("Beforesorted:

");/*输出排序前的数据*/

for(i=0;i

printf("%.2f",a[i]);

printf("\n");

for(i=0;i

for(j=0;j

if(a[j]

{

t=a[j];

a[j]=a[j+1];

a[j+1]=t;

}

printf("Aftersorted:

");/*输出排序结果*/

for(i=0;i

printf("%.2f",a[i]);

printf("\n");

}

else

printf("数据超出范围");

}

7.在上题基础上(输入n个float型的数据并保存到数组中,用冒泡法或选择法将它们从大到小排序后输出)完成:

在已经排好序的数组(长度不足10)中插入一个数m(键盘输入)后输出,保持数组的降序排列。

程序分析:

首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。

#include

voidmain()

{

inti,j,n,p;

floata[10],t,m;

printf("Inputn:

");

scanf("%d",&n);

if(n>1&&n<=10)

{

printf("Input%dnumber:

",n);

for(i=0;i

scanf("%f",&a[i]);

printf("Beforesorted:

");/*输出排序前的数据*/

for(i=0;i

printf("%.2f",a[i]);

printf("\n");

for(i=0;i

for(j=0;j

if(a[j]

{

t=a[j];

a[j]=a[j+1];

a[j+1]=t;

}

printf("Aftersorted:

");/*输出排序结果*/

for(i=0;i

printf("%.2f",a[i]);

printf("\n");

printf("请输入要插入的数据m:

");

scanf("%f",&m);

/*找到插入位置*/

if(m

p=n;

else

{

for(i=0;i

if(m>a[i])

{

p=i;

break;

}

for(i=n;i>=p+1;i--)/*将插入位置之后的元素后移*/

a[i]=a[i-1];

}

/*插入*/

a[p]=m;

printf("插入%.2f后:

",m);/*输出插入后结果*/

for(i=0;i

printf("%.2f",a[i]);

printf("\n");

}

else

printf("数据超出范围");

}

二、二维数组实验

1.以下程序功能为:

将下列矩阵中的元素向右移动一列,最后一列移至第一列。

找出并改正以下源程序中错误,通过调试得出正确的运行结果。

146

81012

源程序(有错误的程序)

#include

#defineROW2

#defineCOL3

intmain()

{

inta[ROW][COL]={1,4,6,8,10,12};

inti,j,temp;

for(i=0;i

{

temp=a[i][COL-1];

for(j=COL-2;j>=0;j--)

{

a[i][j]=a[i][j+1];/*调试时设置断点*///改为a[i][j+1]=a[i][j];

}

a[i][0]=temp;/*调试时设置断点*/

}

for(inti=0;i

{

for(j=0;j

printf("%6d",a[i][j]);

printf("\n");

}

return0;

}

运行结果(改正后程序的运行结果)

614

12810

2.编程:

利用二维数组计算并打印一个n行的杨辉三角。

例如:

Inputn:

6

1

11

121

1331

14641

14101051

提示:

第一列及对角线上的元素都是1,其他元素通过计算得出:

如果用i表示行,j表示列,则第i行j列的元素

#include

voidmain()

{

inta[10][10]={0};//设最多10层

inti,j,n;

printf("请输入杨辉三角形的层数:

");

scanf("%d",&n);

if(n>10)

{

printf("层数超出范围");

return;

}

for(i=0;i

{

a[i][0]=1;

a[i][i]=1;

}

for(i=2;i

for(j=1;j

a[i][j]=a[i-1][j-1]+a[i-1][j];

for(i=0;i

{

for(j=0;j<=i;j++)

printf("%4d",a[i][j]);

printf("\n");

}

}

3.编程:

通过键盘输入3行4列的二维数组,分别按行和按列输出数组。

例如:

Inputnumner:

1234

5678

910110

outputbyrow:

12345678910110

outputbycol:

15926103711480

#include

voidmain()

{

inta[3][4],i,j;

printf("请输入3X4整数矩阵:

\n");

for(i=0;i<3;i++)

for(j=0;j<4;j++)

scanf("%d",&a[i][j]);

printf("按行输出:

");

for(i=0;i<3;i++)

for(j=0;j<4;j++)

printf("%d",a[i][j]);

printf("\n");

printf("按列输出:

");

for(i=0;i<4;i++)

for(j=0;j<3;j++)

printf("%d",a[j][i]);

printf("\n");

}

4.编程:

输入一个m*n矩阵,求他们的各行元素之和。

例如:

Inputm,n:

22

Input2*2matrix:

45

56

sum[0]=9

sum[1]=11

提示:

设计一个一维数组ints[10],分别保存各行元素之和。

#include

voidmain()

{

inta[10][10],s[10]={0};//设定矩阵最大为10x10

intm,n,i,j;

printf("请输入矩阵的行数和列数:

");

scanf("%d%d",&m,&n);

if(m<0||m>10||n<0||n>10)

{

printf("行或列(1~10)值超出范围");

return;

}

printf("请输入%d*%d矩阵:

\n",m,n);

for(i=0;i

for(j=0;j

scanf("%d",&a[i][j]);

//求各行之和并输出

for(i=0;i

{

for(j=0;j

s[i]+=a[i][j];

printf("sun[%d]=%d\n",i,s[i]);

}

}

5.编程:

判断一个二维数组是否存在鞍点,若存在,则输出鞍点及其行号和列号;否则输出没有鞍点信息。

“鞍点”是指这样的元素:

它在本行是最大元素,而在本列是最小的元素。

Inputm,n:

22

Input2*2matrix:

45

56

i=0,j=1,saddlepoint:

5

提示:

找鞍点需要处理三件事情:

(1)找每行中最大值所在的列下标;

(2)判断该元素在本列上是否为最小;(3)判断是否找到了鞍点,若找到,输出。

#include

voidmain()

{

inta[10][10];//设定矩阵最大为10x10

intm,n,i,j,col,flag=0;

printf("请输入矩阵的行数和列数:

");

scanf("%d%d",&m,&n);

if(m<0||m>10||n<0||n>10)

{

printf("行或列(1~10)值超出范围");

return;//退出程序

}

printf("请输入%d*%d矩阵:

\n",m,n);

for(i=0;i

for(j=0;j

scanf("%d",&a[i][j]);

for(i=0;i

{

col=0;//找出第i行中的最大值所在列下标col

for(j=1;j

if(a[i][col]

col=j;

for(j=0;j

if(a[i][col]>a[j][col])

break;

if(j==m)

{

flag=1;//有鞍点

printf("i=%d,j=%d,saddlepoint:

%d\n",i,col,a[i][col]);

}

}

if(flag==0)

printf("Nosaddlepoint!

\n");

}

三、字符串实验

1.以下程序功能为:

输入一个字符串,将其逆序输出。

找出并改正以下源程序中错误,通过调试得出正确的运行结果。

源代码(有错误的程序)

#include

#include

voidmain()

{

inti,j;

chars[80],result[80];

printf("Enterastring:

\n");

gets(s);

for(i=strlen(s)-1,j=0;i>=0;i--,j++)

{

result[j]=s[i];

}

result[j]='\0';//必须给字符串加上串结束标志

printf("Thisisreversestring:

\n");

puts(result);

}

运行结果(改正后的程序)

Enterastring:

asdfg

Thisisthereversestring:

gfdsa

2.编程:

任意输一个字符串保存在一维字符数组中,求其长度(不用strlen函数)。

例如:

Inputastring:

aadfdg

length=6

提示:

字符串的有效长度就是有效字符的个数,即数组中第一个‘\0’前面的字符个数。

#include

voidmain()

{

inti,len=0;

chars[80];

printf("请输入字符串,以回车键结束:

");

gets(s);

for(i=0;s[i]!

='\0';i++)

len++;

printf("字符串%s的长度为:

%d\n",s,len);

}

3.编程:

任意输入两个字符串分别保存在一维字符数组中,把第二个字符串连接到第一个字符串末尾(不用strcat函数)。

例如:

Inputtwostring:

asdfg

erty

afterstrcat:

asdfgerty

#include

voidmain()

{

inti,j;

chars1[80],s2[80];

printf("请输入字符串1以回车键结束:

\n");

gets(s1);

printf("请输入字符串2以回车键结束:

\n");

gets(s2);

for(i=0;s1[i]!

='\0';i++);/*定位第一个字符串的结束标志*/

for(j=0;s2[j]&&i<80;i++,j++)/*将s2接到s1后*/

s1[i]=s2[j];

s1[i]='\0';

printf("两个串连接后:

%s\n",s1);

}

4.编程:

从键盘读入两个字符串分别保存在一维字符数中,比较两个字符串大小(不用strcmp函数),输出较大的字符串。

#include

voidmain()

{

inti;

chara[80],b[80];

printf("请输入字符串1以回车键结束:

\n");

gets(a);

printf("请输入字符串2以回车键结束:

\n");

gets(b);

//逐个比较直到两个字符不同或其中一个字符串结束

for(i=0;a[i]&&b[i];i++)

{

if(a[i]!

=b[i])

break;

}

if(a[i]>b[i])

printf("第一个字符串%s大!

\n",a);

elseif(a[i]==b[i])

printf("两字符串相同!

\n");

else

printf("第二个字符串%s大!

\n",b);

}

 

5.编程:

任意输入一个字符串保存在一维字符数组中,判断里面数字字符的个数。

例如:

Inputastring:

adg4521gadg4adg

number:

5

#include

voidmain()

{

inti,n=0;

chars[80];

printf("请输入一个字符串以回车键结束:

\n");

gets(s);

for(i=0;s[i];i++)

if(s[i]>='0'&&s[i]<='9')

n++;

printf("字符串中包含的数字个数为:

%d\n",n);

}

6.编程:

从一个字符串中删除从某个特定字符开始的所有字符。

例如原字符串为"abcdefg",特定字符为'd',删除后的字符串为"ab

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1