c语言编程有关数组的几道例题.docx
《c语言编程有关数组的几道例题.docx》由会员分享,可在线阅读,更多相关《c语言编程有关数组的几道例题.docx(13页珍藏版)》请在冰豆网上搜索。
c语言编程有关数组的几道例题
实验四一维数组、二维数组
一、实验目的与要求
1、熟练掌握一维数组、二维数组的定义、赋值和输入输出的方法。
2、掌握与数组有关的算法。
二、实验内容
1、
(1)输入N个整数,使用冒泡排序,将数据由大到小输出。
#include"stdafx.h"
#include
voidswap2(int*,int*);
voidbubble(inta[],intn);
intmain(void)
{
intn,a[8];
inti;
printf("Entern(n<=8):
");
scanf("%d",&n);
printf("Entera[%d]:
",n);
for(i=0;iscanf("%d",&a[i]);
bubble(a,n);
printf("Aftersorted,a[%d]=",n);
for(i=0;iprintf("%3d",a[i]);
return0;
}
voidbubble(inta[],intn)/*n是数组a中待排序元素的数量*/
{
inti,j;
for(i=1;i?
*/
for(j=0;j?
*/
if(a[j]>a[j+1])
swap2(&a[j],&a[j+1]);/*交换*/
}
voidswap2(int*px,int*py)
{
intt;
t=*px;
*px=*py;
*py=t;
}
单向冒泡排序法:
//输入10个整数,按从大到小输出//
#include
voidmain()
{
inti,j,t,a[10];
printf("请输入10个整数\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(j=1;j<10;j++)//10个数要来回做(10-1)趟次//
for(i=1;i<11-j;i++)//第j趟要做(10-j)次比较//
if(a[i]>a[i-1])//每做完一趟,就会将数组中较小的一个数沉淀下来,较大的数不断往上冒//
{t=a[i];a[i]=a[i-1];a[i-1]=t;}
printf("按从大到小排序输出结果是:
\n");
for(i=0;i<10;i++)
printf("%-3d",a[i]);
printf("\n");
}
双向冒泡排序法:
//输入10个整数,按从大到小输出//
#include
voidmain()
{
inti,j,t,k,a[10];
printf("请输入10个整数\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(j=1;j<10;j++)//10个数要来回做(10-1)趟次//
{for(i=1;i<11-j;i++)//第j趟要做(10-j)次比较,双向冒泡法,是先从上至下两两比较一次//
if(a[i]>a[i-1])//每做完一趟,就会将数组中较小的一个数沉淀下来,较大的数不断往上冒//
{t=a[i];a[i]=a[i-1];a[i-1]=t;}
for(k=i-1;k>0;k--)//与单向冒泡不同的是,这是双向冒泡的关键,每一次从顶至下比较完一次后,同时再从下//
if(a[k]>a[k-1])//至上比较一次,也就是说每一趟数组中的元素两两比较了两次,这就是双向冒泡排序了//
{t=a[k];a[k]=a[k-1];a[k-1]=t;}
}
printf("按从大到小排序输出结果是:
\n");
for(i=0;i<10;i++)
printf("%-3d",a[i]);
printf("\n");
}
$
(2)输入N个整数,使用改进的冒泡排序,将数据由大到小输出。
#include"stdafx.h"
#include
voidswap2(int*,int*);
voidbubble(inta[],intn);
intmain(void)
{
intn,a[8];
inti;
printf("Entern(n<=8):
");
scanf("%d",&n);
printf("Entera[%d]:
",n);
for(i=0;iscanf("%d",&a[i]);
bubble(a,n);
printf("Aftersorted,a[%d]=",n);
for(i=0;iprintf("%3d",a[i]);
return0;
}
voidbubble(inta[],intn)/*n是数组a中待排序元素的数量*/
{
inti,j;
for(i=1;i?
*/
for(j=0;j?
*/
if(a[j]>a[j+1])
swap2(&a[j],&a[j+1]);/*交换*/
}
voidswap2(int*px,int*py)
{
intt;
t=*px;
*px=*py;
*py=t;
}
2、*******输入N-1个整数组成一数列,再输入某数x,先将数列排序,根据x的值插入到有序数列中。
#include
main()
{
voidRank(intN,intn[]);
inti,j,k;
intn[11];
printf("请输入10个整数:
");
for(i=0;i<10;i++)
scanf("%d",&n[i]);
Rank(10,n);//调用函数对输入的数组排序
printf("\n请输入需要插入的整数:
");
scanf("%d",&k);
if(k>n[9])
n[10]=k;
else
{
for(i=0;n[i]<=k;i++);
for(j=9;j>=i;j--)
n[j+1]=n[j];//腾出位置,用以插入所输入的数
n[i]=k;
}
printf("\n排序后此数列按升序排列为:
");
for(i=0;i<=10;i++)
printf("%-4d",n[i]);
}
voidRank(intN,intn[])
{
inti,k,iTemp;
for(k=1;k<=N-1;k++)
for(i=N-1;i>=k;i--)
if(n[i-1]>n[i])
{
iTemp=n[i];
n[i]=n[i-1];
n[i-1]=iTemp;
}
printf("排序后此数列按升序排列为:
");
for(i=0;i<=N-1;i++)
printf("%-4d",n[i]);
printf("\n");
}
3、输入行数n,打印出杨辉三角。
#includeintmain(){intyh[101][101]={{},{0,1}},i,n,m;scanf("%d",&m);/*输入要打印的行数,,,不能太大。
。
我水平不高。
。
*/for(i=2;i<=m;i++){yh[i][1]=yh[i][i]=1;for(n=2;n
#include
#include
main()
{inta[8][8],i,j;
for(i=0;i<8;i++)
{for(j=0;j<8;j++)
if(j==0)
a[i][j]=1;
elseif(i==j)
a[i][j]=1;
elseif(i>j&&j>=1)
a[i][j]=a[i-1][j]+a[i-1][j-1];
else
a[i][j]=0;
}
for(i=0;i<8;i++)
{for(j=0;j<=i;j++)
printf("%3d",a[i][j]);
printf("\n");
}
}
4、青年歌手参加歌曲大奖赛计分系统
(1)有N个评委进行打分,求这位选手的平均得分(去掉一个最高分和一个最低分)。
#include
#include
#include
voidbubble_sort(inta[],intn)
{
inti,j,itmp;
for(i=0;i{
for(j=i+1;j{
if(a[i]>=a[j])
{
itmp=a[j];
a[j]=a[i];
a[i]=itmp;
}
}
}
}
intmain(intargc,char**argv)
{
intiguide[10]={0};
srand((unsigned)time(NULL));
for(inti=0;i<8;i++)
{
intisum=0;
for(intj=0;j<10;j++)
{
iguide[j]=rand()%10+1;
}
bubble_sort(iguide,10);
for(intl=1;l<=8;l++)
{
isum+=iguide[l];
}
printf("Theavgscorethe%dsingergetis%d\n",i+1,isum/8);
}
return0;
}
$
(2)有N个评委进行打分,求M个选手每个人的平均得分(去掉一个最高分和一个最低分),并按平均得分由高到低排序输出。
#5、输入N个整数,使用选择排序,将数据由大到小输出。
#include//冒泡法(指针)
main()
{
inta[10];
inti,j,temp;
int*p=a;
printf("input:
");
for(i=0;i<10;i++)
scanf("%d",p+i);
for(i=1;i<10;i++)
for(j=0;j<10-i;j++)
if(*(p+j)>*(p+j+1))
{temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;}
for(i=0;i<10;i++)
printf("%4d",*(p+i));
printf("\n");
}
补充作业实验题:
1.输入10个数,按小到大排序。
#include
main(){
inti,j,temp,a[10],n;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<=8;i++){
for(j=i+1;j<10;j++)
if(a[i]>a[j]){
temp=a[i];
a[i]=a[j];
a[j]=temp;}
}
for(i=0;i<10;i++)
printf("%5d",a[i]);
printf("\n");
scanf("%d",&n);
if(n>a[9])
a[10]=n;
else
{
for(i=0;i<9;i++)
if(a[i]>n)
{for(j=9;j>=i;j--)
a[j+1]=a[j];
a[i]=n;
break;
}
}
printf("11shu\n");
for(i=0;i<=10;i++)
printf("%4d",a[i]);
}
2.求10个数中大于平均值的数的个数
#include
voidmain()
{floata[10],sum,average;
inti;
sum=0.0;
printf("请输入十位数:
\n");
for(i=0;i<10;i++)
scanf("%f",&a[i]);
for(i=0;i<10;i++)
sum=sum+a[i];
average=sum/10;
sum=0.0;
for(i=0;i<10;i++)
if(a[i]>=average)
sum=sum+a[i];
printf("%.5f",sum);
}
3.求出大于m并且紧随m的n个素数,并存入数组中,输出,m和n从键盘输入。
4.将一个数组中的值按逆序重新存放。
#include
main()
{
inta[5],i,temp;/*定义数组及变量为基本整型*/
printf("pleaseinputarraya:
\n");
for(i=0;i<5;i++)/*逐个输入数组元素*/
scanf("%d",&a[i]);
printf("arraya:
\n");
for(i=0;i<5;i++)/*将数组中的元素逐个输出*/
printf("%d",a[i]);
printf("\n");
for(i=0;i<2;i++)/*将数组中元素的前后位置互换*/
{
temp=a[i];/*元素位置互换的过程借助中间变量temp*/
a[i]=a[4-i];
a[4-i]=temp;
}
printf("Nowarraya:
\n");
for(i=0;i<5;i++)/*将转换后的数组再次输出*/
printf("%d",a[i]);
}
三、源程序
四、程序结果
五、总结