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

下载本文档

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

文档简介

试验6数组

一、一维数组试验

2.编程:输入长度为10的整型数组并输出;然后将其逆序寄存后再输出。例如:

Input10number:0123456789

Afterreversed:9876543210

#include<stdio.h>

voidmain()

(

inti,j,a[10],t;

printf("Input10number:*');

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

scanf(n%dn,&a[i]);

printf(''origindata:n);

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

printf(n%d”,a[i]);

printf(H\nn);

for(i=0,j=9;i<j;i++,j—)/*逆序寄存*/

(

t=a[i];

a[i]=a[j];

a[j]=t;

)

printf("Afterreversed:/*输出逆序寄存后的数据*/

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

printf(H%d”,a[i]);

printf('An'1);

}

3.编程:输入n个(lvnv=10)正整数并保留到数组中,求出最大值、最小值、平均值,以及最大值、最小

值在数组中的下标分别是多少。例如:

Inputn:5

Input5integer:82514

max=8index=0

min=lindex=3

average=4

#include<stdio.h>

voidmain()

(

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

floataverage;

printf("Inputn(l<n<=10):n);

scanf("%d",&n);

if(l<n&&n<=10)

(

printf("Input%dinteger:'*,n);/★输入数据并求累加和*/

for(i=0,sum=0;i<n;i++)

(

scanf(n%dn,&a[i]);

svim+=a[i];

)

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

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

(

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

max=i;

if(a[i]<a[min])

min=i;

}

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

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

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

}

else

printf(”数据超过范围”);

)

4.编程:青年歌手参与歌曲大奖赛,有10个评委对她(他)进行打分,试编程求这位选手的平均得分并输

出(去掉一种最高分和一种最低分),

#include<stdio.h>

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]<a[min])

min=i;

)

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

ave=ave/8;

printf(”该选手的评委打分是:”);

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

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

printf;

printf("去掉最高分%.2£,去掉最低分%.2£,该选手的平均得分是会.2£\n”,a[max]za[min],

ave);

)

5.编程:用两种措施输出斐波那切数列的前40项(参照例6-4)。

规定:(1)措施1:不使用数组;

#include<stdio.h>

voidmain()

(

intfl=l,£2=1,f3,i;

printf(H%12d%12d",fl,f2);

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

(

f3=fl+f2;

printf("%12d"zf3);

if(i%5==0)

printf("\nH);

fl=f2;

f2=f3;

(2)措施2:使用一维数组。

#include<stdio.h>

voidmain()

(

inti;

intfib[40];

fib[O]=fib[l]=l;

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

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

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

n

printf("%12dzfib[i]);

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

printf(n\n");

}

}

6.编程:输入n个(1vnV=10)float型的数据并保留到数组中,用冒泡法或选择法将它们从大到小排序后

输出。例如:

Inputn:5

Input5number:8.52.35.11.44.9

Aftersorted:8.505.104.902.301.40

#include<stdio.h>

voidmain()

(

inti,j,n;

floata[10],t;

printf('*Inputn:

scanf(,&n);

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

(

printf("Input%dnumber:",

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

n

scanf(%f**z&a[i]);

printf("Beforesorted:u);/*输出排序前的数据*/

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

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

printf("\nH);

for(i=0;i<n-l;i++)/*冒泡排序*/

for(j=0;;j++)

if(a[j]<a[j+l])

(

t=a[j];

a[j]=a[j+l];

a[j+l]=t;

}

printf("Aftersorted:");/*输出排序成果*/

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

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

printf(u\nn);

)

else

printf("数据超过范围”);

}

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

完毕:在已经排好序的数组(长度局限性10)中插入一种数m(键盘输入)后输出,保持数组的降序排列。

程序分析:首先判断此数与否不小于最终一种数,然后再考虑插入中间的数的状况,插入后此元素之后的

数,依次后移一种位置。

#include<stdio.h>

voidmain()

(

inti,j,n,p;

floata[10],t,m;

printf("Inputn:");

scanf(n%d",&n);

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

printf("Input%dnumber:,

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

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

printf("Beforesorted:/*输出排序前的数据*/

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

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

printf("\nH);

for(i=0;i<n-l;i++)/*冒泡排序*/

for(j=0;;j++)

if(a[j]<a[j+l])

(

t=a[j];

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

a[j+l]=t;

printf(nAftersorted:");/*输出排序成果*/

for(1=0;i<n;士++)

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

printf("\nn);

printf(”请输入要插入的数据m:n);

scanf("%f**,&m);

/*找到插入位置*/

if(m<a[n-l])/*假如m比最终一种元素小,则直接插入到最终的位置*/

P=n;

else

(

for(i=0;i<n;i++)/*否则,插入到中间的某个位置*/

if(m>a[i])

(

P=i;

break;

)

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

a[i]=a[i-l];

/*插入*/

a[p]=m;

printf(”插入%.2f后:”,m);/*输出插入后成果*/

for(i=0;i<n+l;i++)

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

printf(•,\nn);

)

else

printf("数据超过范围”);

}

二、二维数组试验

1.如下程序功能为:将下列矩阵中的元素向右移动一列,最终一列移至第一列。找出并改正如下源程序中

偌误,通过调试得出对的的运行成果。

146

81012

源程序(有错误的程序)

#includc<stdio.h>

#defineROW2

#defineCOL3

intmain()

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

intij,temp;

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

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

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

afi]Ul=a[i]|j+l];/*调试时设置断点*/〃改为训i皿;

}

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

for(in(i=0;i<ROW;i++)〃去掉int

for(j=0:j<COL;j++)

printf("%6d",ali]Ljj);

printf("\n");

return0;

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

614

14101051

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

假如用i表达行,j表达列,则第i行j列的元素Pi,j=PTJT+Pi-lJ

#include<stdio.h>

voidmain()

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

inti,j,n;

printf(”请输入杨辉三角形的层数:”);

scan£(“%d",&n);

if(n>10)

printf(”层数超过范围”);

return;

}

for(i=O;i<n;i++)//给第0列和主对角线上的元素赋值1

(

a[i][0]=l;

a[i][i]=l;

}

for(i=2;i<n;i++)〃计算其他位置元素的值

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

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

for(i=0;i<n;i++)//输出

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

printfC«%4d",a[i][j]);

printf("\nH);

3.编程:通过键盘输入3行4列的二维数组,分别按行和按列输出数组。例如:

Inputnumner:

1234

5678

910110

outputbyrow:12345678910110

outputbycol:15926103711480

#include<stdio.h>

voidmain()

(

inta[3][4],izj;

prin七£("请输入3X4整数矩阵:\n”);

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

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

scanf(n%d",fia[i][j]);

printf("按行输出:“);

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

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

printfC'%d-«,a[1][j]);

printf("\nH);

printf("按列输出:”);

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

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

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

printfCXn*');

)

4.编程:输入一种m*n矩阵,求他们的各行元素之和。例如:

Inputm,n:22

Input2*2matrix:

45

56

sum[0]=9

sum[I)=11

提醒:设计一种一维数组ints[10],分别保留各行元素之和。

#include<stdio.h>

voidmain()

(

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

intm,n,i,j;

p工请输入矩阵的行数和列数:“);

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

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

(

printf(”行或列(1〜10)值超过范围”);

return;

}

print-(”请输入%d*%d矩阵:;

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

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

n

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

〃求各行之和并输出

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

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

printf(*'sun[%d]=%d\nn,i,s[i]);

}

5.编程:判断一种二维数组与否存在鞍点,若存在,则输出鞍点及其行号和列号;否则输出没有鞍点信息。

“鞍点”是指这样的元素:它在本行是最大元素,而在本列是最小的元素。

Inputm,n:22

Input2*2matrix:

提醒:找鞍点需要处理三件事情:(1)找每行中最大值所在的列下标;(2)判断该元素在本列上与否为最小;

(3)判断与否找到了鞍点,若找到,输出。

#include<stdio.h>

voidmain()

(

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

intmzn,i,j,col,flag=0;

printf(”请输入矩阵的行数和列数:“);

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

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

(

printf(”行或列(1〜10)值超过范围”);

return;〃退出程序

)

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

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

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

H

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

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

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

for(j=l;j<n;j++)

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

col=j;

for(j=0;j<m;j++)//判断该元素在本列上与否为最小

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

break;

if(j==m)

(

flag=l;〃有鞍点

,,

printf(i=%d/j=%dzsaddlepoint:%d\n',,i,col,a[i][col]);

)

)

if(flag==0)

printf("Nosaddlepoint!\n");

三、字符串试验

1.如下程序功能为:输入一种字符串,将其逆序输出。找出井改正如下源程序中错误,通过调试得出对的

的运行成果。

源代码(有错误的程序)

^include<stdio.h>

^include<string.h>

voidmain()

{

inti,j;

chars[8O],rcsult[8O];

printf("Enterastring:\nH);

gcts(s);

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

{

result[jl=s[i];

}

resullUb'XO';〃必须给字符串加上串结束标志

printf("Thisisreversestring:\n");

puts(rcsult);

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

Enterastring:

asdfg

Thisisthereversestring:

gfdsa

2.编程:任意输•种字符串保留在•维字符数组中,求其长度(不用strlen函数)。例如:

Inputastring:aadfklg

length=6

提醒:字符串的有效长度就是有效字符的个数,即数组中第一种'\0'前面的字符个数。

#include<stdio.h>

voidmain()

(

inti,len=0;

chars[80];

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

gets(s);

for(i=0;s[i]!=*\0';i++)

len++;

print£("字符串Ss的长度为;%d\nH,s,len);

3.编程:任意输入两个字符串分别保留在一维字符数组中,把第二个字符串连接到第一种字符串末尾(不

用strcat函数)。例如:

Inputtwostring:

asdfg

crty

afterstrcat:asdfgerty

#include<stdio.h>

voidmain()

(

inti,j;

charsi[80]rs2[80];

printf(”请输入字符串1以回车键结束:\n”);

gets(si);

prints(”请输入字符串2以回车键结束:\n”);

gets(s2);

for(i=0;sl[i]!='\0*;i++);/*定位第一种字符串的结束标志*/

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

sl[i]=s2[j];

sl[i]=>\O';

prin七£("两个串连接后:名s\n",sl);

)

4.编程:从键盘读入两个字符串分别保留在一维字符数中,比较两个字符串大小(不用strcmp函数),输出

较大的字符串。

#include<stdio.h>

voidmain()

(

inti;

chara[80],b[80];

prints("请输入字符串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

prints("第二个字符串%s大!\n",b);

)

5.编程:任意输入一种字符串保留在一维字符数组中,判断里面数字字符的个数。例如:

Inputastring:

adg4521gadg4adg

number:5

#include<stdio.h>

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,

删除后的字符串为“abc”。

#include<stdio.h>

voidmain()

(

inti,flag=0;

charc,s[80];

printf(”请输入一种字符串以回车键结束:\n“);

gets(s);

prints("请输入特定字符:“);

c=getchar();

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

if(s[i]==c)

(

s[i]='\0';

flag=l;

break;

}

if(flag==0)

printf("输入字符中没有特定字符!\n“);

else

puts(s);

}

7.编程:编写程序,从一种输入的字符串中抽取一部分(从笫n个字符开始,抽取m个字符)构成一种新

的字符串,并输出。规定:n和in都由顾客输入。

#include<stdio.h>

#include<string.h>

voidmain()

unsignedinti,j,m,n;

charsl[80],s2[80];

printf(”请输入一种字符串以回车键结束:\n”);

gets(si);

printf(”请输入子串的起始位置和长度:”);

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

if(n>0&&n<=strlen(si))

(

if(m>0&&n+m<=strlen(si)+1)

(

for(i=n-l,j=0;si[i]&&i<n+m-1■i++,j++)

s2[j]=sl[i];

s2[j]='\0';

puts(s2);

}

else

printf("长度超过范围!\nn);

)

else

printf(”起始位置超过范围!\n”);

}

8.编程:运用字符串库函数puts,gets,strcat,strcnip,strcpy,strlen完毕下述操作:

•读入三个字符串

strl,str2zstr3

•输出这三个字符串

•分别求出这三个字符串的长度;

•比较strl和str2的大小;

•将str2连接到strl之后,并输出连接后的strl;

•复制str3至ijstrl,并输出复制操作后的strl;

#include<stdio.h>

#include<string.h>

voidmain()

(

charstrl[80],str2[80]zstr3[80];

printf(”请输入字符串strl以回车键结束:\n“);

gets(strl);

printf("请输入字符串str2以回车键结束:\n“);

gets(str2);

printf("请输入字符串str3以回车键结束:\n”);

gets(str3);

printf("三个字符串分别是:\nH);

printf("strl:%s\nM,strl);

printf(Hstr2:%s\n",str2);

printf("str3:%s\nM,str3);

prin七f("三个字符串的长度分别是:\n”);

printf(Hstrl:%d\nn,str

温馨提示

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

评论

0/150

提交评论