c语言编程有关数组的几道例题.docx
- 文档编号:24050796
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:13
- 大小:25.21KB
c语言编程有关数组的几道例题.docx
《c语言编程有关数组的几道例题.docx》由会员分享,可在线阅读,更多相关《c语言编程有关数组的几道例题.docx(13页珍藏版)》请在冰豆网上搜索。
c语言编程有关数组的几道例题
实验四一维数组、二维数组
一、实验目的与要求
1、熟练掌握一维数组、二维数组的定义、赋值和输入输出的方法。
2、掌握与数组有关的算法。
二、实验内容
1、
(1)输入N个整数,使用冒泡排序,将数据由大到小输出。
include"stdafx.h"
#include
voidswap2(int*,int*);
voidbubble(intaQ,intn);
intmain(void)
{
intn,a[8];
inti;
printf("Entern(n<=8):
");
scanf("%d",&n);
printf("Entera[%d]:
",n);
for(i=0;i scanf("%d",&a[i]); bubble(a,n); printf(HAftersorted,a[%d]=",n); for(i=0;i pnntf(H%3dn,a[i]); return0; } voidbubble(inta[],intn)/*n是数组a中待排序元素的数量*7 inti,j; for(i=1;i ? */ for0=O;j ? */ if(aU]>a[j+1]) swap2(&aD],&aD+1]);广交换*/ } voidswap2(int*px,int*py) { intt; t=*px; *px=*py; *py=t; } 单向冒泡排序法: 〃输入10个整数,按从大到小输出〃 #iiiclude voidmain() intij,t,a[10]; pimtf(n请输入10个整数\n“);for(i=0;i<10;i++) scanf(H%d,\&a[i]); for(j=l;j<10;j++) 〃10个数要來回做(10・l)趟次// fbr(i=l;i<11-j;i++) 〃第j趟要做(10・j)次比较// if(a[i]>a[i-l]) 〃每做完一趟,就会将数组中较小的一个数沉淀 下來,较大的数不断往上冒〃 {t=a[i];a[i]=a[i-1];a[i-1]=t;} pHntfC按从大到小排序输出结果是: \n“); for(i=0;i<10;i++) prmtf("%-3dn,a[i]); } 双向冒泡排序法: 〃输入10个整数,按从大到小输出〃 #include voidmain() { iiitij,t,k,a[10]; priiitfC*请输入10个整数\n“); for(i=0;i<10;i++) scanf("%d”,&a[ij); for(j=l;j<10;j++)//10个数要來回做(10-1)趟次〃 {for(i=l;i 法,是先从上至下两两比较一次〃 if(a[i]>a[i-l])〃每做完一趟,就会将数组中较小的一个数沉淀 下來,较大的数不断往上冒〃 {t=a[i];a[i]=a[i-1];a[i-1]=t;} for(k=i-l;k>0;k-)//与单向冒泡不同的是,这是双向冒泡的关键, 每一次从顶至下比较完一次后,同时再从下// if(a[k]>a[k-l])〃至上比较一次,也就是说每一趟数组中的元 素两两比较了两次,这就是双向冒泡排序了〃 {t=a[k];a[k]=a[k-1];a[k-1]=t;} } priiitfC*按从大到小排序输出结果是: \n“); fbr(i=O;i pHntf(”%・3d”卫[i]); } $ (2)输入N个整数,使用改进的冒泡排序,将数据由大到小输出。 include"stdafx.h" #include voidswap2(int*,int*); voidbubble(inta[],intn); intmain(void) intn,a[8]; inti; printf("Entern(n<=8): H); scanf("%d",&n); printf("Entera[%d]: ">n); for(i=0;i scanf(”%cT,&a[i]); bubble(a,n); printf(HAftersorted,a[%d]=H,n);for(i=0;i printf(“%3d”,a[i]); return0; } voidbubble(intaQ,intn) /*n是数组a中待排序元素的数量审 inti,j; for(i=1;i 广外部循环…请问这个嵌套循环怎么理解? ? */ for(j=0;j 广内部循环…请问这个嵌套循环怎么理解? ? */ if(aU]>aO+1])swap2(&aD],&aO+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(”请输入40个整数: "); for(i=0;i<10;i++) scanf("%dH,&n[i]); Rank(10,n);//调用函数对输入的数组排序pnntf(H\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-) n0+1]=n0];〃腾出位置,用以插入所输入的数n[i]=k; } printfC^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(”%・4cTm[i]);pnntf("\n"); } scaufC%d: &m);/*fdr(i=2;i<=m;i-H-)foi(n=2;n 3、输入行数n,打印出杨辉三角。 #include 输入要打印的行数,,,不能太大。 。 我水平不高。 。 */ {yh[i][i]=yh[i][i]=i; {vh[i][n]=yh[i-1][n-1]+yh[i-1][n];}} {fdr(n=l;n<=i;n++){prmtf(H%d pnntf(n\Qn);}return0;} #include #include main() {inta[8][8]J,j; for(i=0;i<8;i++) {for(j=0;j<8;j++) ifO==0) a[i]Q]=1; elseif(i==j) a[i]U]=1; elseif(i>j&&j>=1) a[i]U]=a[i-1]0]+a[i-1]0-1]; else a[i]Dl=0; } for(i=0;i<8;i++) {for(j=0;j<=i;j++) printf(H%3dH,a[i][j]); printfCAn"); } } 4、青年歌手参加歌曲大奖赛计分系统 (1)有N个评委进行打分,求这位选手的平均得分(去掉一个最高分和一个最低分)。 #inelude #inelude #inelude voidbubble_sort(inta[],intn) { inti,j,itmp; for(i=0;ivn;i++) { for(j=i+1;jvn;j++) { if(a[i]>=aO]) { 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;I++) { isum+=iguide[l]; } printf(HTheavgscorethe%dsingergetis%d\n",i+1,isum/8); } return0; } $ (2)有N个评委进行打分,求M个选手每个人的平均得分(去掉一个最高分和一个最低分),并按平均得分由高到低排序输出。 #5、输入N个整数,使用选择排序,将数据由大到小输出。 #include main() { inta[10]; int“temp; jnt*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何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何i]>n) {for0=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]; printfr%・5f: sum); 3.求出大于m并且紧随m的n个素数,并存入数组中,输出,m和n从键盘输入。 4•将一个数组中的值按逆序重新存放。 #include main() printf(Hpleaseinputarraya: \rf); for(i=0;i<5;i++)广逐个输入数组元素"/ scanf("%d",&a[i]); printf(Harraya: \rT); for(i=0;i<5;i++)/*将数组中的元素逐个输出*7 printf(H\nH); for(i=0;i<2;i++) r 广将数组中元素的前后位置互换*/ { temp=a[i]; /*元素位置互换的过程借助中间变量temp*/ a[i]=a[4-i]; a[4-i]=temp; } printffNowarraya: \rT); for(i=0;i<5;i++) /*将转换后的数组再次输出*7 printf(H%dH,a[i]); } 三、源程序 四、程序结果 五、总结
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 编程 有关 数组 例题
![提示](https://static.bdocx.com/images/bang_tan.gif)